OpenCL性能优化要点参考
可以参考的官方文件:
实际的例子可以参阅下列论文。不过这几篇论文都是10年前的文章,属于OpenCL刚刚问世时候的新论文。文章里面没有附代码,不过包含一些他们做实验时的一些经验总结:
- 2014年:Performance Portability Study of Linear Algebra Kernels in OpenCL (arxiv.org)
- 2012年:butterflyfull.eps (airccse.org)
- 2011年:https://jos.org.cn/jos/article/pdf/11037
我总结的一般优化方向如下。供读者参考:
- 优化内存读取顺序。尽量让代码按内存顺序读写数据,不要跳着读写。和CPU一样,GPU也有缓存命中的问题;
- 优化读写内存次数。减少全局内存读写次数,可以先把数据读到局部内存里再集中处理;
- 如果操作能用OpenCL内建函数实现就用内建函数。OpenCL保证内建函数的效率大于等于其它写法。比如混合运算fma(a, b, c)大概率比a * b + c要快。
- 高端GPU有较多SIMD指令运算器,可以使用矢量运算提速。比如将100次单个的数字加法int a, b, c; c = a + b;替换为25次vec4 a, b, c; c = a + b;,一般可以提高速度。不过在低端显卡上效果不明显。