论文部分内容阅读
随着多核处理器在多媒体计算、嵌入式设备、个人计算机、商用服务器和高性能计算机等众多领域的广泛应用,人类正面临着自计算机诞生以来的第三次软件危机。广大科研人员提出了众多编程模型以适应多核体系结构,但并没有哪种模型表现出明显的优势。OpenMP编程模型是由一系列硬件及软件供应商(如DEC、Intel、IBM、SGI、DOEASCI等)支持的共享内存程序设计的工业标准,具有编程简单、可增量化开发、支持多种语言、支持多种操作系统(UNIX,Linux,Windows等)、可移植性好等优点。大部分商用编译器已经开始支持对OpenMP程序的编译,OpenMP程序的分析及优化技术研究正受到日益广泛关注。本论文围绕着OpenMP程序的正确性分析和性能优化工作,通过深入研究静态单赋值形式,提出了基于栅障同步变量静态单赋值的OpenMP程序的可能并行执行关系分析算法;结合自动并行化中的依赖关系分析、数据和计算划分等技术,重点研究了循环级OpenMP程序的优化技术。论文的主要贡献及创新点包括:1.通过引入支配边界逆转的概念,提出了一种基于支配树的多变量?函数摆放算法。支配边界逆转是从交结点的角度来观察支配边界结点集合,一个结点的支配边界逆转结点在支配树上的高度一定小于该结点。基于支配边界逆转概念自底向上地遍历支配树,同时摆放多个变量的?函数,不需要计算支配边界结点集合,简化了?函数的摆放步骤,降低了栅障同步变量静态单赋值的构建代价。2.扩展了OpenMP控制流图的结点结构,提出了基于虚拟执行线程编号的可能并行执行关系的判断准则。根据OpenMP语言结构的语义,建立OpenMP控制流图时为每个结点分配虚拟执行线程编号,如果两个结点同属一个程序阶段且虚拟执行线程编号不同,则这两个结点中的语句存在可能并行执行关系,避免了以往并行控制流图中采用两份拷贝表示线程间并行执行关系所造成的空间浪费。3.在深入研究静态单赋值形式的基础上,提出了一种基于栅障同步变量静态单赋值的OpenMP程序的可能并行执行关系分析算法。通过把栅障同步语句作为并行结构内定义的局部变量,建立了栅障同步变量的静态单赋值形式,显式化地表示了OpenMP程序的阶段,减少了可能并行执行关系求解过程中对控制流图的遍历次数,并且能够增量化维护可能并行执行关系。4.针对循环级OpenMP程序,设计并实现了融合自动并行化技术的并行结构合并与扩展算法。通过并行结构的合并与扩展得到较大的SPMD区域,运用标量分析、依赖关系分析,以及数据和计算划分等技术提取循环间数组的存取特征,研究了循环级OpenMP程序中栅障同步的消除和替换,提高了程序的性能。5.提出了一种面向计算的OpenMP程序计算和数据划分的栅障同步优化算法。以计算为中心,尽可能寻找一致性数据划分,采用数据和计算划分信息优化OpenMP程序中栅障同步,减少了控制同步的代价,并为编译器后端减少数据同步的代价提供可能的机会和优化支持。