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

本文分享了作者在使用CUDA进行并行图像处理时的一些经验教训,包括如何合理划分Block以优化内存访问模式,以及如何利用长效Thread提高计算效率等实用技巧。
部署运行你感兴趣的模型镜像

本人学习研究使用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以外,处理图像时的逻辑划分相当重要。
 

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值