论文部分内容阅读
当前支持GPU和GPU集群的编程技术十分落后和低层,程序员广泛使用的并行编程模型MPI、Pthread和CUDA等,被认为是并行编程中的汇编语言。在当前的技术条件下,无论进行单机GPU程序设计还是GPU集群程序设计,都要求程序员对于硬件的体系结构具有非常清晰的了解,熟悉存储结构中不同的存储部件并控制其间的数据传输,控制不同层次异构计算单元之间的流转。 当前GPU和GPU异构集群程序设计方法存在的最大问题是:缺乏有效的软件工具和编程接口,帮助程序员简化程序设计。本文介绍了Parray编程接口:该编程接口使用数组类型对数据的物理存储和逻辑结构进行分离:提供统一的方式表示各种进程(线程)的创建以及它们之间的控制流转。 基于MPI+Pthread+CUDA的程序设计技术,本文介绍了对单GPU矩阵乘法、单GPU批量1维FFT和GPU集群FFT算法的优化实现。这些代码取得了良好的性能,同时也暴露出已有程序设计方法存在的问题:GPU代码只能工作于数组的特定数据排列方式、对多维数组维度操作缺乏程序语言层面的支持。使用Parray书写的单GPU矩阵乘法和GPU集群FFT代码不再存在上述问题。 论文的主要贡献体现在如下几个方面: 第一,以维度嵌套和命名的方式表示多维数组的维度处理和转置。数据可以被按照某一维度分布到不同处理器上。不论是单一处理器节点上的数据维度划分,或是节点间带有通信的复杂的数据传输和转置,均可以维度方式统一进行表示。 第二,提出一种GPU上优化的矩阵乘法算法,并使用Parray实现。使用Parray书写的代码针对数据的逻辑结构进行直接编程,同一代码可工作于不同的物理存储结构。 第三,提出一种使用GPU加速的集群FFT算法。该算法使用Parray实现,多维数据的转置和处理代码书写简洁而易于维护。该算法是目前第2快的集群FFT代码,并在天河1A上应用于湍流模拟。这是目前进行过的最大数据规模的湍流模拟。