论文部分内容阅读
图形处理单元(GPU)具有价格低廉和计算能力强大等特点,这使其近年来在高性能计算领域日益风靡。新的编程语言CUDA和OpenCL的出现使得GPU编程变得广为接受,但是GPU编程仍然是很复杂的任务,其原因有两点:一方面,为指定的GPU设计算法是非常耗时的,要求编程人员对算法本身和GPU底层架构都十分熟知;另一方面,GPU代码缺乏可移植性,同一份代码在不同GPU上获得的性能可能会有巨大的差别。要想将已有的某一GPU上的代码移植到另一GPU上且保持较高的性能几乎是不可能的,往往需要对其进行大量的修改才能达到目标。 针对GPU编程的复杂性和可移植性问题,设计并实现了一种可以有效地将数据流程序映射到GPU上的编译框架,该框架的输入为COStream程序,输出为针对GPU平台并行优化后的OpenCL目标代码。系统针对GPU平台进行两个层次的优化:软件流水调度和GPU平台的数据流程序优化。软件流水调度的任务划分阶段利用METIS对任务进行划分,尽量考虑到负载均衡和通信开销。在针对GPU平台的优化过程中引入了扩大因子,合理设置扩大因子既可以让应用程序充分利用GPU计算资源,又能有效减少线程间同步次数,降低同步开销。CPU和GPU之间的数据传输可以利用固定内存技术来加速。有效的将计算任务和通信任务重叠对提升程序性能有很大的帮助。此外,局部内存的合理使用不仅能实现对全局内存的合并访问,也能减少对全局内存的访问次数,从而降低访存开销。其他的OpenCL优化方法比如内建本地函数的使用也能在一定程度上提升程序性能。 实验以NVIDIA Tesla C2050为GPU平台,选取数字媒体领域典型的算法作为测试程序。实验结果表明,目标代码有很大的性能提升,但仍有不少改进的空间。