CUDA GPU程序优化要点 - 如何做到又好又快

CUDA GPU程序优化要点 - 如何做到又好又快

         相比使用CPU进行计算,使用GPU加速往往可能得到数倍数十倍的性能提升,而使用CUDA C编程时,编程风格和细节往往会对程序性能造成很大的影响。下面列举了一些本人总结的优化CUDA GPU程序的一些要点,欢迎批评和补充。

 

1,  尽量避免bank conflict,合理使用shared memory。

2,  尽量避免warp divergence

3,  精度满足的情况用单精度浮点数float。浮点数整数部分越大,小数部分精度越低。在看重数据的相对大小而不是绝对大小时,可以在运算中减去常数偏置缩小整数部分,以提高精度

4,  代码中单精度浮点数常数后缀一定要有f。如100.0f,3.1415926f。

5,  除法变乘法,避免重复计算。

6,  精度满足的情况下使用Intrinsic Functions而不是Standard Functions,如__expf,__logf,__sinf等。Intrinsic Functions精度比Standard Functions稍低,但也低不了哪去。最好是在自变量范围内产生一组数据比较两者的精度,看是否满足。我曾比较 __logf和logf精度往往只有10^-6左右的差别,但是速度有几倍的提升。

7,  循环展开或部分展开手写,如果一个很长的循环内部只有一点很简单的运算,则循环导致的控制开销可能比内部的计算还要大。

8,  优化线程块内的线程数量,最好是32的整倍数,并不是越大越好,往往32、64足矣。

9,  使用流,实现CPU与GPU并发、流水线处理,同时减少传输时间消耗

10,  Host端使用page-locked memory,而不是直接new一个。


 

推荐书籍:

1,  入门:cuda by example,有中文版

2,  深入:Professional CUDA C Programming

 

Luchang Li

2015.12.10 in HUST

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luchang-Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值