论文部分内容阅读
图形处理器GPU善于处理大规模密集型数据和并行数据,通用并行架构CUDA让GPU在通用计算领域越来越普及。由于GPU集群的高性价比,高性能计算领域中GPU集群的使用越来越普遍,但GPU集群并行编程并没有一个标准的通信模型,绝大多数集群应用采取CUDA+MPI的方法实现,而CUDA和MPI编程都非常困难,需要程序员了解GPU硬件架构和MPI消息传递机制,显式控制内存与显存、节点与节点间的数据传输。因此,对编程人员来说,GPU集群并行编程仍是一个复杂的问题。GPU集群通信接口CUDAGA结合分布式内存上的共享内存编程模型GA与通用并行架构CUDA的特征,采用共享显存方式,通过全局共享地址空间实现节点间GPU-to-GPU的数据通信,并通过内部透明的CPU端临时全局数组和GPU端全局数组来维护数据一致性,保证通信数据的正确性。同时,该接口解决了多进程多GPU环境下GPU设备的初始化问题,并提供GPU集群信息查询接口及图形化监控界面两种方式,帮助用户及时了解设备使用情况。此外,CUDAGA从数据传输和计算内核两方面对GA库中的数组运算进行优化,加速后的函数库可供用户直接使用。CUDAGA为用户提供了一个简单方便的GPU集群并行编程通信接口,在保证通信性能的同时简化编程难度,提高程序员编写GPU集群应用程序的效率。选取并行矩阵乘Cannon算法和Jacobi迭代算法在GPU集群上的代码实现和运行为例,对GPU集群通信接口CUDAGA进行测试。从编程复杂度与通信性能两方面的测试结果可以看出,对于以数组为基本数据结构、节点间通信量大且涉及大量数据访问操作的应用,用CUDAGA编写的代码的运行性能要优于用CUDA+MPI实现的版本,而且代码长度缩短一半以上,提高了程序编写的效率。