高性能体系结构的发展对传统编译器提出了挑战。在过去的二十多年里,并行计算机的发展是惊人的。如今,在高性能计算领域,并行计算机的应用非常广泛。当然,基于并行计算机的软件系统的研发也是极其重要的,如并行操作系统、并行编译器等。相对于动态编译技术而言,并行编译的历史稍久远些。并行编译系统是并行计算机系统软件中的一个十分重要的部分,也是现代编译技术领域的一个研究热点。
在20世纪70年代,并行体系结构发展飞快,在不同层次上,硬件以不同方式实现了多种并行处理机制,因此,如何充分利用硬件的并行处理能力是对软件设计提出的新要求。在并行系统软件领域,在过去的20年中,人们对并行编译技术的研究热情超过了并行操作系统。熟悉并行计算的读者应该明白基于并行计算机进行程序设计是一项艰巨的任务,需要考虑与处理的细节是非常复杂的。因此,人们更希望像在串行机上编写高级语言程序一样完成并行程序设计,这就是并行编译器设计的源动力。
1.并行编译系统的基本结构
一个完整的并行编译系统包括并行化工具、并行编译器、并行运行库等。其基本结构如图10-4所示。
并行化工具的主要功能就是将串行程序并行化,它可以独立于并行编译器存在,也可以嵌入在并行编译器中。
并行编译器包括预处理器、前端、主处理器、后端4个部分。预处理器的输入是并行化后的源程序,其功能是根据并行编译命令对源程序进行改写,这与普通编译器的预处理器是比较类似的。前端则是对预处理后的源程序进行词法、语法分析,将其转换为IR形式。主处理器的工作则是完成基于IR的处理与优化。后端是将IR转换为并行程序,同时完成面向并行体系结构的优化。
当然,除了并行编译器外,并行运行库也是必不可少的,其功能与普通的运行库类似。
图10-4 并行编译系统的基本结构
2.并行编译系统的核心技术(www.daowen.com)
并行编译系统的核心技术包括:依赖关系分析、程序并行化、并行编译技术、并行运行库。下面,笔者对此作简单介绍。
(1)依赖关系分析。通常,程序的各个部分之间是存在一定依赖关系的,并行计算就是在不破坏原有依赖关系的基础上并行执行的。因此,依赖关系分析的理论与技术是并行计算的基础,也是并行编译技术讨论的重点之一。没有依赖关系的辅助,讨论并行优化技术或者生成技术都是没有意义的。例如,两个函数都访问一个全局变量,那么,则认为它们之间是存在依赖关系的,如果随意并行化,将无法保存程序的正确性。
(2)程序并行化。在并行处理过程中,尽可能挖掘程序的并行性是编译器的职责。正如先前讨论的,存在依赖关系的部分是不能并行化的。然而,让用户在程序设计过程中尽可能减少依赖关系又是非常困难的。因此,编译器不得不通过一些等价的程序变换,以消除某些依赖关系,以便进行最大限度的并行化,这种等价变换就称为“程序并行化”。在程序并行化中,循环的处理是比较棘手的,因为它的依赖关系比顺序结构复杂得多。然而,由于循环对程序执行的性能影响是比较大的,因此,又是最需要并行处理的部分。在程序并行化技术中,人们重点关注的就是循环的并行化处理。从变换的角度而言,主要可以分为两种形式:语句层次的变换和迭代层次的变换。其中,语句层次的变换主要着眼于改变循环体中的语句,以消除依赖关系。而迭代层次的变换则更关注改变循环体中迭代的执行顺序。当然,任何程序并行化的前提都是安全。与优化类似,语义等价是编译技术永恒的话题。
(3)并行编译技术。这里主要指的是用于实现并行编译器的相关技术,包括向量语言处理、并行语言处理、并行目标程序组织等。从用户角度而言,主要有两个方面的需求:程序可移植性、并行执行的效率。用户通常希望程序的可移植性较好,也就是说,在设计与实现语言时,尽可能减小对目标机器的依赖。不过,从提高程序执行效率的角度来说,要更好地利用目标机器的资源,发挥目标机器的特性,就不得不在设计语言时充分考虑相关的因素。因此,这两方面矛盾的需求对并行编译器的设计提出了巨大的挑战。
(4)并行运行库。在并行操作系统、并行语言及并行编译技术都还不成熟的情况下,运行库提供了一种并行程序设计的手段。从并行程序设计技术角度来说,并行运行库可以分为三类:支持多任务并行程序设计的运行库、支持消息传递并行程序设计的运行库、支持数据并行程序设计的运行库。
3.并行编译技术的发展趋势
实践证明,一门学科、一项技术的发展与成熟与它的应用是分不开的。因此,并行编译技术的发展很大程度上依赖于并行语言的成熟与流行。在并行语言方面,Fortran是占绝对主导地位的。20世纪70年代中后期,推出了多个在串行Fortran语言上扩充而来的向量语言。1991年ANSI和ISO Fortran 90标准的发布标志着向量Fortran语言完成了标准化工作。在并行语言中,由于在科学计算中的优势,Fortran的研究远胜于C或其他语言。
有些读者可能认为:并行计算是实验室的产物,离普通用户的应用需求相距甚远。的确,就目前的研究成果而言,笔者并不否认这一观点。不过,很多研究已经表明,基于局域网或互联网的分布并行计算将在未来的10年中得到迅速发展。最终,这一技术将进入普通用户的视野,而不再停留在实验室中。与一味追求高峰值性能的超级计算机不同,网络分布并行计算更关注一些有实际应用价值的因素,如负载平衡、共享计算资源、网络安全、可靠性等。届时,并行程序设计、并行编译技术将迎来新的纪元。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。