● 摘要
为GPU编写高效且可移植的CUDA程序十分复杂并容易出错。因此许多研究尝试利用编译优化技术对CUDA程序进行自动优化。但是大多数之前的工作对于复杂的真实程序并不适用,且不能有效利用GPU的存储和计算资源。
本文提出了一个面向CUDA程序的编译优化框架。该框架包括两种编译时的自动优化方法,一种是提高数据复用和访存带宽的优化,另一种是减少冗余指令数的线程粗粒度优化。实验结果显示本文提出的优化编译器能够正确应用于许多真实的CUDA程序中,而且9个实验例子中有7个优化效果甚至高于手工优化的程序。本文与Yi Yang的Gcompiler优化编译器做了对比,结果显示本文的编译器在9个例子中有8个取得相近或更优的结果。
本文的主要工作和取得的成果如下:
1. 分析已有GPU优化编译器在正确性和性能优化方面的不足,通过实例验证设计缺陷的共同点,为之后的设计工作提供指导。
2. 针对之前工作的不足提出编译优化器的设计,其中主要包括数据复用和线程粗粒度化两方面的优化。要解决的问题包括三个方面:一是如何保证优化的正确性,二是如何发掘可复用的数据,三是如何确定最佳的线程粒度。
3. 从真实的CUDA程序中选择了一组测试程序,通过对优化前后程序的运行结果和运行时间进行对比,我们对优化编译器的正确性和性能进行了验证,并与已有工作的优化性能进行对比。