论文部分内容阅读
多核、众核组成的并行和异构系统已经深入应用到社会的各个方面,然而,应用于这些系统上的并行程序缺乏可移植性,一方面由于当前的多核及众核架构在体系结构方面存在着巨大的区别,程序编写时必须考虑到不同的体系结构带来的影响;另一方面并行应用的行为特征更加复杂,导致了许多并行编程模型的产生,但是这些编程模型各有特点,缺乏统一的标准。因此,研究人员致力于寻求一种通用的编程模型及方法,使相同的程序能够不需改变就能够运行在不同的并行架构上。这个目标将有助于改善编译器及相应工具的更新速度远远滞后于多核和众核处理器发展的现状,缓解多核和众核架构上软件开发的困难。SPMD是并行领域中最重要的编程模型之一,扩展SPMD程序的移植性可使相同的程序适用于不同并行粒度的体系结构。本文从移植框架的建立、任务及存储抽象以及移植算法的设计实现等方面,对SPMD程序移植的各项关键技术进行了研究。主要研究内容和创新点如下:1.提出了层次化的线程映射模型及处理机制,使SPMD程序能够在不同并行粒度的体系结构之间移植。层次化的线程组织是SPMD程序的特征之一,细粒度的线程往往通过同步进行通信,粗粒度的线程块可相互独立。针对细粒度的SPMD程序不适合传统多核架构粗粒度并行的问题,通过串行化细粒度的线程并模拟同步通信的方法,实现了SPMD程序到不同并行粒度的多核或众核架构的移植。2.提出了基于依赖分析的同步检测及处理方法,能够正确地处理线程之间的显式同步和隐式同步。SPMD程序中线程之间的通信主要靠同步来解决,然而SPMD程序中不仅有同步语句显式表达的同步,同时还存在由硬件并行执行所保持的隐式同步。在移植到不同的体系结构中,隐式同步的语义也必须被保持。通过依赖分析,SPMD隐式同步被检测出来并与显式同步统一处理,正确高效地解决了这一问题。3.提出了基于加权优先级的寄存器分配方法,使SPMD存储模型能高效地映射到目标架构。存储模型映射是影响到移植后SPMD程序运行速度的关键因素之一,目标多核或众核架构的存储层次是固定的,因此,必须将程序中的变量进行合理的分配。通过基于加权优先级的寄存器分配算法,能够将程序中的变量合理地分配给寄存器或内存,较好地解决了寄存器分配问题。4.实现了基于SSA的函数级向量化的方法,在低级表示层次实现向量化,加速移植后SPMD程序的运行。优化一直是软件移植中最重要的阶段之一。目前的多核和众核架构大都具备了向量化部件,合理的向量化能够加速移植后SPMD程序的运行。通过低层次的SSA中间表示上函数级向量化的实现,有效地减少了复杂控制流带来的影响,使SPMD程序获得更快的运行速度。5.提出了汇聚和标量识别的方法,进一步提高了向量化程度,加快了程序运行速度。SPMD程序各线程间存在冗余的指令和数据,通过在控制流图和数据流图上进行分析,汇聚的控制流路径和标量被识别出来,汇聚的路径不必再考虑加入向量谓词,标量的变量可以不转换为向量数据,向量化效果得到了增强。本文提出的模型、方法及其相关算法已在课题组研制的系统中得到了实现和应用,实验数据验证了模型和算法的合理性、正确性和有效性。