利用OpenCL对OpenCV并行化心得(1)

本文分享了作者在OpenCV并行化过程中,针对8UC1灰度图类型进行优化的经验。通过OpenCL实现矩阵加法,从最初的简单kernel到改进版,充分利用GPU内存带宽,提高计算效率。
摘要由CSDN通过智能技术生成

    做了一年多的opencv并行化,总算小有成就了大笑,马上软件就要发布,也该是一个总结的时候了,只可惜文笔不行,人也懒,只好随便写写,算是给自己做点交代吧。


    opencv里面最重要的一种类型恐怕非8UC1莫属,灰度图一般都用这种类型表示,而且大多数算法只提供这种数据类型的支持,所以8UC1的优化就成了整个工作的重中之重。以matrix add为例,最简单的kernel的写法是这样的

__kernel void matrix_add(__global uchar* src1,__global uchar* src2, __global uchar* dst, int rows, int cols,int src1_step,int src2_step,int dst_step)

{

int x=get_global_id(0);

int y=get_global_id(1);

if(x<cols&&y<rows)

dst[mad24(y,dst_step,x)]=src1[mad24(y,src1t_step,x)]+src2[mad24(y,src2_step,x)];

}

    这种写法非常简洁,但是不够高效,没有充分利用GPU的内存带宽,存在很大的浪费,为了充分利用GPU的内存带宽,至少每次要写出4byte,所以kernel就变成这样

__kernel void matrix_add(__global uchar* src1

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值