作者中有大名鼎鼎的胡文美教授,这篇文章算是GPU程序自动调优的一篇很经典的文章。不得不赞叹写文章的人的功夫,文章写得非常明了,看得人很舒服,好评:)
文章的motivation是觉得GPU的global memory如果coalescing之后程序性能会得到很大的提升(和N卡自带的属性有关)。然后作者就做了一个源到源编译器CUDA-lite专门针对global memory的coalescing优化(专注于一个点,值得学习)。具体流程是如果用户要对一个数组a[]进行操作,CUDA-lite会自动转换成以下步骤:建立两个shared memory数组b[]和c[],先把a[]拷进b[]中(coalescing),然后对b[]进行处理之后的结果放进c[],最后由c[]拷进global memory中(coalescing)。这样要比直接对在global memory中的a[]进行读写操作性能要好得多。
实验也是做得非常好,选了两个现实的程序(这点没得黑,详见上一篇的评论)和一个简单的基本程序。CUDA-lite的优化结果也是非常的6,能和手动调优的版本55开。
看完这篇文章的感想是,源到源编译器还是挺有用的(实现自动调优),但是优化的点和角度很需要研究研究,不能太泛太多(顾不全也做不好),也不好做前人已经做烂的点,最好是可以解决某一类的程序并且解决的效果不错。哎哎,还是得多看paper,任重而道远呀。。。
参考:
[1] Ueng S Z, Lathara M, Baghsorkhi S S, et al. CUDA-lite: Reducing GPU programming complexity[M]//Languages and Compilers for Parallel Computing. Springer Berlin Heidelberg, 2008: 1-15.