论文部分内容阅读
现代GPU由于其超强的计算能力、高速访存带宽、高数据级并行体系结构等特点,作为高性能运算部件在集群计算环境中得到广泛应用,并且GPU异构集群正在逐渐成为高性能计算应用领域的主流分布式计算平台,并使现代计算技术正在逐渐进入数据级并行计算的时代。数据级并行计算能否在实际应用领域得到越来越广泛的采用,不仅仅取决于所设计和实现的数据级并行算法是否能够在当前的硬件计算环境中获取较高的计算能力,更为基础和重要的是所设计和实现的数据级并行算法是否能够同时在系统层面(节点与节点之间)和节点层面(单个节点内部)具有良好的和可持续的可扩展性,即它的性能能够随着计算环境中硬件资源的计算能力和内存带宽的提升而带来几乎线性的性能提升。本文在得到多个研究课题基金资助的研究背景下,对GPU异构集群的系统层面(节点与节点之间)的可扩展性,以及节点层面(单个节点内部)的可扩展性同时展开了较为全面和深入的研究。针对系统层面算法和应用程序的可扩展性问题,本文的主要研究工作如下:(1)基于底层混合编程框架(如CUDA/MPI、OpenACC/MPI)设计并实现了一个具有应用层抽象描述能力、与体系结构具有无关性、支持持续可扩展性等特点的顶层编程框架DISPAR,为GPU异构集群在应用中所面临的核心问题提供一种系统层面有效的解决方案。(2)通过预处理器ATDCM实现DISPAR源代码到底层混合编程框架(如CUDA/MPI、 OpenACC/MPI)的源代码转换,并针对底层混合编程框架提出一种能够考虑系统层面异构性的任务调度策略及相应的辅助算法以最优化系统层面的任务和GPU异构集群计算资源之间的匹配。由于更为直接的性能提升本质上来源于节点层面的应用程序,而电子设计自动化、科学计算等通用计算领域中绝大部分应用程序的性能都受限于其核心操作,如稀疏矩阵操作等。因此在节点层面针对这些核心操作,设计和实现具有可扩展性的高效数据级并行算法是能否充分利用GPU超强计算能力的关键因素。因此,本文同样针对节点层面算法和应用程序的可扩展性问题展开了较为深入的研究。主要研究工作如下:(3)GPU为了提供硬件体系结构层面的可扩展性,其所包含的成百上千个处理单元被组织和划分成多个独立的物理层面的SIMD引擎,且不同的SIMD引擎之间各处理单元之间并没有类似于单个SIMD引擎的相应同步原语。虽然可以通过原子操作提供SIMD引擎之间各处理单元之间的同步能力,但由于原子操作本质上都是串行的,从而将使得相应的并行算法不具备良好的可扩展性。本文基于可扩展性的设计理念,提出通用或特定的技术使得所设计的数据级并行算法具有良好的可扩展性。如基于桶划分预处理技术实现的奇偶合并排序和基数排序以及基于反对角线处理方式的带状矩阵向量乘操作的数据级并行算法不存在任何数据依赖,从而完全避免了同步操作和相应的原子操作,使并行算法具有良好的可扩展性。(4)由于现代GPU能够支持多个内核程序同时执行,因此对于那些即使不具有良好可扩展性的算法,也可以利用本文提出的一种有效的内核程序打包策略用于确定将哪些内核程序打包成单个内核程序能够更加充分地利用GPU的硬件资源。(5)通过对电子设计自动化领域中的时序分析这一重要应用进行可扩展性数据级并行算法的重新设计与改进,以加速电子设计自动化领域关键算法的处理速度,探索可扩展性数据级并行化技术及众核处理机技术在该领域的应用前景。本文通过对基于稀疏矩阵框架的统计静态时序分析提出一种新的稀疏格式ELLV。这种格式不仅使得相应的数据级并行算法的设计较为直接,更为重要的是使得并行算法具有良好的可扩展性。不仅如此,基于ELLV格式实现的Jacobi前条件操作与基于ELLH格式相比能够减少一半的内存访问,并最终带来15%左右的性能提升。