图解用于图像处理的BLOCK划分经验(CUDA)

来源:互联网 发布:mac os 杀毒软件 编辑:程序博客网 时间:2024/04/29 16:12

本人学习研究使用CUDA做并行图像处理,积累了一些关于Block划分的经验,不敢独享,如有错误望高人指正。
 


当处理8位灰度图像时,最普通16*16 T/B,此法读取粒度小于最小数据访问大小,至少损失63/64带宽!

  


考虑访问模式,thread处理4字节,block宽64字节,高16/32/64,第三种情况仅用于SM13,SM13允许1024Thread/Block

 


线性,无需处理临域的时候比较方便,一维245/512/1024 T/B,thread还是处理4字节

 


3*3滤波器常常将Block处理区域重叠起来,此为示意图,实际使用还要考虑访问模式

 


长效Thread,一维245/512/1024 T/B,一个Thread负责4*height图像面积,当每列内需要迭代计算的时候使用。核函数的内部会有一个次数为height的循环,循环体内一次取4字节数据,为了优化访问模式,长效Thread不会影响性能可以放心使用。

 


最后,每组16Thread同时访问连续且对其的64/128字节称为Coalesced访问模式,这是达到带宽的理路峰值的必要条件,下图是来源于《NVIDIA CUDA C Programming Best Practices Guid》,正确划分Block,除了使用CUDA_Occupancy_calculator计算T/B以外,处理图像时的逻辑划分相当重要。
 

原创粉丝点击