最近一直在做CUDA程序,优化了CT重建中的FDK算法,又开始结合FDK和volume rendering做点工作。CUDA程序的优化至关重要,常见的优化策略,可以总结为:
1. 将串行代码并行化。这里说简单也简单,说难也难,比如,对比for循环,就可以很简单的直接拆开,并行。但是,如果是迭代算法,比如Gauss-Seidel迭代求解,那么,就需要整理Gauss-Seidel算法,提起共同项,然后并行。
2. 尽量减少Host和Device之间的数据拷贝。拷贝一次,尽量多用。
3. 在配置kernel的时候,分配合理的thread个数和block个数,使得device的使用达到最大化,充分利用硬件资源。切记:thread不是越多越好。
4. 保证global memory在访问的时候,memory coalesced。
5. 尽可能的用share memory取代用global memory对数据进行访问。这个道理,你懂的。
6. 同一个wrap中,注意尽量减少分支。同一wrap内的thread尽量做同样的事情。
好啦,先总结到这里。谢谢。