Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
6a03be26
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
6a03be26
编写于
5月 11, 2011
作者:
V
Vladislav Vinogradov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added lightweight class DeviceBuffer to matrix_reductions.cpp
上级
3c2d7b95
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
47 addition
and
20 deletion
+47
-20
modules/gpu/src/matrix_reductions.cpp
modules/gpu/src/matrix_reductions.cpp
+47
-20
未找到文件。
modules/gpu/src/matrix_reductions.cpp
浏览文件 @
6a03be26
...
...
@@ -66,6 +66,42 @@ int cv::gpu::countNonZero(const GpuMat&, GpuMat&) { throw_nogpu(); return 0; }
#else
namespace
{
class
DeviceBuffer
{
public:
explicit
DeviceBuffer
(
int
count_
=
1
)
:
count
(
count_
)
{
cudaSafeCall
(
cudaMalloc
(
&
pdev
,
count
*
sizeof
(
double
))
);
}
~
DeviceBuffer
()
{
cudaSafeCall
(
cudaFree
(
pdev
)
);
}
operator
double
*
()
{
return
pdev
;}
void
download
(
double
*
hptr
)
{
double
hbuf
;
cudaSafeCall
(
cudaMemcpy
(
&
hbuf
,
pdev
,
sizeof
(
double
),
cudaMemcpyDeviceToHost
)
);
*
hptr
=
hbuf
;
}
void
download
(
double
**
hptrs
)
{
AutoBuffer
<
double
,
2
*
sizeof
(
double
)
>
hbuf
(
count
);
cudaSafeCall
(
cudaMemcpy
((
void
*
)
hbuf
,
pdev
,
count
*
sizeof
(
double
),
cudaMemcpyDeviceToHost
)
);
for
(
int
i
=
0
;
i
<
count
;
++
i
)
*
hptrs
[
i
]
=
hbuf
[
i
];
}
private:
double
*
pdev
;
int
count
;
};
}
////////////////////////////////////////////////////////////////////////
// meanStdDev
...
...
@@ -80,18 +116,14 @@ void cv::gpu::meanStdDev(const GpuMat& src, Scalar& mean, Scalar& stddev)
#if NPP_VERSION_MAJOR >= 4
GpuMat
d_buf
(
1
,
2
,
CV_64F
);
DeviceBuffer
dbuf
(
2
);
nppSafeCall
(
nppiMean_StdDev_8u_C1R
(
src
.
ptr
<
Npp8u
>
(),
src
.
step
,
sz
,
d
_buf
.
ptr
<
double
>
(),
d_buf
.
ptr
<
double
>
()
+
1
)
);
nppSafeCall
(
nppiMean_StdDev_8u_C1R
(
src
.
ptr
<
Npp8u
>
(),
src
.
step
,
sz
,
d
buf
,
(
double
*
)
dbuf
+
1
)
);
cudaSafeCall
(
cudaThreadSynchronize
()
);
double
buf
[
2
];
Mat
_buf
(
1
,
2
,
CV_64F
,
buf
);
d_buf
.
download
(
_buf
);
mean
[
0
]
=
buf
[
0
];
stddev
[
0
]
=
buf
[
1
];
double
*
ptrs
[
2
]
=
{
mean
.
val
,
stddev
.
val
};
dbuf
.
download
(
ptrs
);
#else
...
...
@@ -150,27 +182,22 @@ double cv::gpu::norm(const GpuMat& src1, const GpuMat& src2, int normType)
sz
.
height
=
src1
.
rows
;
int
funcIdx
=
normType
>>
1
;
double
retVal
;
#if NPP_VERSION_MAJOR >= 4
GpuMat
d_buf
(
1
,
1
,
CV_64F
)
;
DeviceBuffer
dbuf
;
nppSafeCall
(
npp_norm_diff_func
[
funcIdx
](
src1
.
ptr
<
Npp8u
>
(),
src1
.
step
,
src2
.
ptr
<
Npp8u
>
(),
src2
.
step
,
sz
,
d_buf
.
ptr
<
double
>
())
);
nppSafeCall
(
npp_norm_diff_func
[
funcIdx
](
src1
.
ptr
<
Npp8u
>
(),
src1
.
step
,
src2
.
ptr
<
Npp8u
>
(),
src2
.
step
,
sz
,
dbuf
)
);
cudaSafeCall
(
cudaThreadSynchronize
()
);
double
retVal
;
Mat
_buf
(
1
,
1
,
CV_64F
,
&
retVal
);
d_buf
.
download
(
_buf
);
dbuf
.
download
(
&
retVal
);
#else
double
retVal
;
nppSafeCall
(
npp_norm_diff_func
[
funcIdx
](
src1
.
ptr
<
Npp8u
>
(),
src1
.
step
,
src2
.
ptr
<
Npp8u
>
(),
src2
.
step
,
sz
,
&
retVal
)
);
nppSafeCall
(
npp_norm_diff_func
[
funcIdx
](
src1
.
ptr
<
Npp8u
>
(),
src1
.
step
,
src2
.
ptr
<
Npp8u
>
(),
src2
.
step
,
sz
,
&
retVal
)
);
cudaSafeCall
(
cudaThreadSynchronize
()
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录