CUDA代码的优化

本文整理自网络视频。 ##Analysis 分析代码,找到hotspot函数,使用profiler测试,计算预期。

##Parallelize 选择并行化方法,并实现。cuda并行库,自己实现,或Directives(OpenMP,OpenACC)

##Optimize profile驱动的优化,使用的工具有:

Deploy

实际运行中去挖掘。

这四个过程即Nvidia推荐的APOD过程。

GPU优化原则

优化级别

举个例子

这里是一个矩阵转置的优化代码,由于一个thread block内不能超过1024个thread,所以需要分到几个block上进行。

WechatIMG299

内存访问模式

Coalesce,访问连续的数据块,

WechatIMG304

有效利用内存带宽

每个内存事务的平均延迟与带宽的乘积就是传送的字节数。类似于排队。 因此,增加传送的字节数,或者减少事务间的延迟,可以改善代码内存带宽。

减少平均延迟

Occupancy占有率

根据具体的SM硬件资源来决定具体参数。

bank conflicts

总结

WechatIMG305