Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
fd0ab8eb
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fd0ab8eb
编写于
3月 11, 2014
作者:
A
Andrey Pavlenko
提交者:
OpenCV Buildbot
3月 11, 2014
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2461 from ilya-lavrenov:tapi_calc_hist
上级
70e22b68
208831eb
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
38 addition
and
6 deletion
+38
-6
modules/imgproc/src/histogram.cpp
modules/imgproc/src/histogram.cpp
+5
-3
modules/imgproc/src/opencl/histogram.cl
modules/imgproc/src/opencl/histogram.cl
+33
-3
未找到文件。
modules/imgproc/src/histogram.cpp
浏览文件 @
fd0ab8eb
...
...
@@ -1410,9 +1410,12 @@ static bool ocl_calcHist1(InputArray _src, OutputArray _hist, int ddepth = CV_32
{
int
compunits
=
ocl
::
Device
::
getDefault
().
maxComputeUnits
();
size_t
wgs
=
ocl
::
Device
::
getDefault
().
maxWorkGroupSize
();
Size
size
=
_src
.
size
();
bool
use16
=
size
.
width
%
16
==
0
&&
_src
.
offset
()
%
16
==
0
&&
_src
.
step
()
%
16
==
0
;
ocl
::
Kernel
k1
(
"calculate_histogram"
,
ocl
::
imgproc
::
histogram_oclsrc
,
format
(
"-D BINS=%d -D HISTS_COUNT=%d -D WGS=%d"
,
BINS
,
compunits
,
wgs
));
format
(
"-D BINS=%d -D HISTS_COUNT=%d -D WGS=%d -D cn=%d"
,
BINS
,
compunits
,
wgs
,
use16
?
16
:
1
));
if
(
k1
.
empty
())
return
false
;
...
...
@@ -1420,8 +1423,7 @@ static bool ocl_calcHist1(InputArray _src, OutputArray _hist, int ddepth = CV_32
UMat
src
=
_src
.
getUMat
(),
ghist
(
1
,
BINS
*
compunits
,
CV_32SC1
),
hist
=
ddepth
==
CV_32S
?
_hist
.
getUMat
()
:
UMat
(
BINS
,
1
,
CV_32SC1
);
k1
.
args
(
ocl
::
KernelArg
::
ReadOnly
(
src
),
ocl
::
KernelArg
::
PtrWriteOnly
(
ghist
),
(
int
)
src
.
total
());
k1
.
args
(
ocl
::
KernelArg
::
ReadOnly
(
src
),
ocl
::
KernelArg
::
PtrWriteOnly
(
ghist
),
(
int
)
src
.
total
());
size_t
globalsize
=
compunits
*
wgs
;
if
(
!
k1
.
run
(
1
,
&
globalsize
,
&
wgs
,
false
))
...
...
modules/imgproc/src/opencl/histogram.cl
浏览文件 @
fd0ab8eb
...
...
@@ -37,11 +37,21 @@
//
//
#
ifndef
cn
#
define
cn
1
#
endif
#
if
cn
==
16
#
define
T
uchar16
#
else
#
define
T
uchar
#
endif
__kernel
void
calculate_histogram
(
__global
const
uchar
*
src,
int
src_step,
int
src_offset,
int
src_rows,
int
src_cols,
__global
uchar
*
hist,
int
total
)
{
int
lid
=
get_local_id
(
0
)
;
int
id
=
get_global_id
(
0
)
;
int
id
=
get_global_id
(
0
)
*
cn
;
int
gid
=
get_group_id
(
0
)
;
__local
int
localhist[BINS]
;
...
...
@@ -50,10 +60,30 @@ __kernel void calculate_histogram(__global const uchar * src, int src_step, int
localhist[i]
=
0
;
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
for
(
int
grain
=
HISTS_COUNT
*
WGS
; id < total; id += grain)
for
(
int
grain
=
HISTS_COUNT
*
WGS
*
cn
; id < total; id += grain)
{
int
src_index
=
mad24
(
id
/
src_cols,
src_step,
src_offset
+
id
%
src_cols
)
;
atomic_inc
(
localhist
+
(
int
)
src[src_index]
)
;
#
if
cn
==
1
atomic_inc
(
localhist
+
convert_int
(
src[src_index]
))
;
#
else
T
value
=
*
(
__global
const
T
*
)(
src
+
src_index
)
;
atomic_inc
(
localhist
+
convert_int
(
value.s0
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s1
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s2
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s3
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s4
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s5
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s6
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s7
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s8
))
;
atomic_inc
(
localhist
+
convert_int
(
value.s9
))
;
atomic_inc
(
localhist
+
convert_int
(
value.sA
))
;
atomic_inc
(
localhist
+
convert_int
(
value.sB
))
;
atomic_inc
(
localhist
+
convert_int
(
value.sC
))
;
atomic_inc
(
localhist
+
convert_int
(
value.sD
))
;
atomic_inc
(
localhist
+
convert_int
(
value.sE
))
;
atomic_inc
(
localhist
+
convert_int
(
value.sF
))
;
#
endif
}
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录