论文部分内容阅读
在高性能计算领域,计算机体系结构向异构多核的方向发展。针对异构多核平台进行编程面临新的挑战,主要表现在两方面:一方面是针对异构平台编写的程序的可移植性问题;另一方面是能否简单地对异构平台的CPU和GPU同时进行编程并且保持程序的可移植性。目前很多编程模型比如CUDA、StreamIt、StreamC/KernelC、CellSs等都是针对特定的处理平台进行编程的,使用它们编写的程序移植性差。本课题选择了OpenCL和Sequoia两个典型的并行编程模型进行了分析与扩展。OpenCL是一个跨平台标准,目前很多处理器厂商都支持OpenCL,OpenCL程序具有很好的功能移植性。Sequoia模型是一个面向存储层次进行编程的并行编程模型,Sequoia编程模型将与目标平台体系结构相关的信息与描述算法的源程序相分离,使得Sequoia程序同样具有很好的移植性。本文介绍了本人参与课题组研究的虚拟混合计算设备(VHCD)框架,并且对VHCD运行时进行了测试分析,实验结果表明在VHCD运行时的支持下,程序员在对异构平台的多个GPU编程时,可以将多个GPU看做单个OpenCL设备进行编程,最后取得了很好的性能,但是在对异构平台的CPU和GPU同时进行编程时,实际的性能与理想性能相差很大。本文通过对OpenCL性能移植性的测试与分析,发现由于CPU和GPU体系结构的差异,导致针对单个OpenCL设备编写的OpenCL代码在CPU和GPU上不可能同时取得很好的性能。所以OpenCL程序的优化是平台相关的,针对现有大部分OpenCL程序都是针对GPU优化的,本文研究提出了三种将面向GPU优化的OpenCL代码转化为面向CPU优化的技术,并且使用这三种技术对现有几个面向GPU优化的benchmark进行了手动的转化,转化之后的OpenCL代码在CPU上的性能相对于转化前的OpenCL代码在CPU上的性能提高了近2倍。由于OpenCL性能移植性存在的存在,使得在利用异构平台的CPU和GPU同时进行计算时,性能不理想。为此本文研究和扩展了Sequoia编程模型,扩展之后的Sequoia编程模型支持异构平台的CPU和GPU同时进行计算,本文的工作暂时支持均衡的任务划分策略,这对CPU和GPU计算性能相当的异构平台来说,可以取得较好的整体性能。实际中有的异构平台的CPU和GPU性能相差很大,后续将会支持CPU和GPU间动态的负载均衡。