面向串行程序代码量大的领域的半自动并行化方法

文档序号:6561174阅读:252来源:国知局
专利名称:面向串行程序代码量大的领域的半自动并行化方法
技术领域
本发明涉及的是一种计算机技术领域的方法,具体而言,是一种面向串行程序代码量大的领域的半自动并行化方法。
背景技术
计算机技术和通信技术的快速发展,出现了集群技术,集群是由一组通过高速网络互联的计算结点,这些计算结点协同工作以提供单一系统映像的计算资源。与硬件技术迅速发展相比,并行编程技术的发展却是停止不前。首先,并行编程比串行编程复杂度高;其次,并行编程较之于串行编程缺乏软件支持;最后,并行编程的发展时间短,目前还没有足够的技术积累。尽管如此,并行编程技术也有许多发展,其中在并行编程模型领域逐步形成两个研究方向程序自动并行化模型、程序显式并行化模型。自动并行化方法即是对顺序程序实行自动并行化,由编译器对顺序程序的源代码进行相关性分析,然后使用一组程序变换技术将串行代码转换成并行代码。并行化串行代码的关键之一是相关性分析,由它识别代码中的数据相关和控制相关。自动并行化方法目前尚未达到通用与高效的程度,使用这种方法获得的并行程序效率通常比较低,并且有相当比例的程序尚无法进行并行化处理。理论研究表明不论在编译期间还是在运行期间,都不存在能开发串行程序中所有潜在并行性的自动化技术。显式并行化方法是由程序员使用特定的语言结构、编译器命令、或库函数在程序中对并行性加以显式说明。其中主要的显式并行编程模型有数据并行、消息传递、和共享变量等。显式并行化方法的缺点是显式并行程序的开发,要求用户必须掌握大量的并行算法范例、并行编程语言等。缺乏统一的编程接口,使得并行程序难以在不同平台间进行移植。
经对现有技术的文献检索发现,S.Mitra等在《Proceedings of the 7thInternational Conference on High Performance Computing》(第七届国际高性能计算大会会议集)(2000年第1970卷141页至148页)上发表的“ParAgentAdomain-specific semi-automatic parallelization tool”(ParAgent一种特定领域的半自动并行化工具),该文中提出针对有限差分法、有限元法和边界元法等领域的应用进行半自动并行化的方法,具体方法为将串行的Fortran-77源代码转换为嵌入有通信库原语的并行程序,针对循环操作提高其并行性)其不足在于该方法的程序结构性较差,人工参与过多,自动并行化率较低,并且只针对Fortran-77这种较老的程序语言。
检索中还发现,中国专利名称“用户指导的程序半自动并行化方法”,专利号200510026587.4。虽然该方法可以适用较多简单领域、将基于面向对象串行Java代码转换成并行程序,然而,对于实际情况下比较复杂的领域(这些领域里串行程序代码量比较大,同时代码以面向过程的C/Fortran代码占大多数的,比如CFD,也就是计算流体力学),此方法显得无能为力。

发明内容
本发明的目的在于针对现有技术的不足,提供一种面向串行程序代码量大的领域的半自动并行化方法。本发明结合了自动并行化方法与显式并行化方法的优点,避免了它们的缺陷,通过用户交互引导并行化,使得产生的并行程序效率可以得到必要的保证。本发明根据CFD领域并行计算程序的特征,提取出相应的五种类型的并行程序模板,在模板中采用tag标识并行程序的特征部分,通过用户交互界面,实现串行程序向并行程序的源到源转换。
本发明是通过以下技术方案实现的,本发明具体步骤如下1.创建标准CFD串行程序所谓标准,是指用户必须在串行程序流程上严格按照五种并行模版所对应的串行程序框架编写串行程序。
2.分析并行化并非所有的串行程序都可以并行化。在可并行化的串行程序中也并非所有计算部分都可以并行化。所以,首先要分析串行程序,以及其所包含的各个计算任务,归纳出串行程序流程,以及各个计算任务的主要特征。串行程序的标准流程是由该程序所针对问题的领域决定的。其次,针对各个计算任务,抽象出计算框架。最后,用户挑选最耗时的计算任务所对应的框架,看这个框架适合于哪种并行范例,由用户指导将该串行程序映射到该并行范例所对应的模版上去。所谓并行范例,是对经典的并行算法的抽象,能够涵盖高性能计算领域的并行应用。经典并行算法范例包括阶段并行、分而治之、流水线、主-从结构、工作池式等。所谓模版,是对CFD领域的并行程序进行总结归纳出的,对应五种范例的并行程序架构。
3.创建元计算任务元计算任务,简称元任务,是指与并行通信无关,且其自身内部不能并行执行的计算任务,是构成并行程序的基本元素,元任务之间的数据相关性是数据输入和输出等,无相关性的多个元任务可以并行执行。元任务可单独进行调试和测试。
4.导入串行程序指定需要并行的串行工程项目。
5.导入并行模版指定串行程序所定应的模版。
6.交互指导并行化通过交互向导过程来完成的,交互向导是一个交互图形界面,通过该界面引导用户完成相关的并行化工作。具体还包括如下步骤(1)创建转换工程。该工程将包括串行程序,将要生成的并行程序,并行程序的目标可执行程序,以及模版代码等。
(2)选择并行范例。根据步骤2中分析抽象出的问题框架,确定合适的并行范例以及并行模版。
(3)并行代码的生成。根据串行程序流程,把相应功能的代码插入到模版所对应的标签tag处。
(4)编辑并行代码。可以在转换后得到并行代码上继续直接修改,最终生成合时的并行程序代码。
(5)生成可执行并行程序。如果上述过程没有问题,可以最终生成可执行并行程序。
本发明通过以上的步骤,可以创建一个以阶段并行、分而治之、流水线、主-从结构、工作池等五种范例的并行代码,同时屏蔽底层并行编程的复杂性。与现有技术相比,主要优点在于针对CFD领域的并行模版,基本覆盖该领域所有串行程序所对应的并行程序,便于串行程序开发人员直接使用;其次,采用元任务对实际可并行计算的计算模块进行封装;然后,不需要用户对并行知识有太多了解。
本发明比大多数全自动方法所得最终并行程序效果好,效率高。同时,由于模版的帮助,又克服了大多数显示并行的缺点,不需要用户太多的专业并行知识,或者编写大量的令人头痛的并行代码。此外,本发明的模版是开放性的,用户可以根据自己的需求,增加标签,改变标签的位置,减少标签,改变标签名,从而使用自己订制的符合特定应用的模版。与现有技术相比,本发明解决了CFD领域的串行程序并行化的问题。同时,在模版方面,本发明由于采用了开放性的原则,使得用户可以更加自由地根据应用场景改变模版,这一点也是现有技术中所不具备的。


图1为本发明原理框架示意2为实施例中相关串行代码示意3为实施例中相关并行代码生成示意4为实施例中相关标签示意图具体实施方式
以下结合附图对本发明实施例作出描述如图1所示,本发明原理框架示意图。
1串行元任务的实现串行元任务在逻辑上是仅与业务逻辑相关的,元任务只能由用户生成,并且不涉及并行语义。扩展后的元任务可以涉及并行语义。串行程序中可能存在多个元任务或扩展元任务,本发明要求用户对计算量最大的元任务进行并行化。而元任务的扩展程度决定了并行化的粒度。元任务由用户在串行程序中选出,插入到模版中的<metatask>...</metatask>处。各个计算结点的元任务代码相同,只不过输入输出不同。
2范例框架实现2.1范例框架通过模板代码加以实现在编写代码过程中应用程序代码符合一定的结构、规则,将这些规则抽象出来以形成一种能够覆盖用户应用的程序代码框架,称此程序代码框架为模板代码。
而针对并行程序所抽象出来的模版就是所谓的并行模版。
模板代码的主要特点有1)抽象的架构,它是用来描述一个程序的架构,其自身要符合一定的预定义规范。2)不可编译性,它是不能在实际机器上直接编译、运行的程序代码,必须经过转换后才能成为可编译、运行的具体代码。3)广涵性,即它是具有一定的代表性,能够涵盖某类具体应用,为解决这类应用提供了框架。
并行模版有附加的特性,即通信语义。它虽然不体现任何业务逻辑,但是不同的并行模版体现出不同的并行语义,或者说通信语义。
2.2模板代码实现首先必须编写好模板代码,然后将这些模板代码加入到系统中,如图1。这样,这些模板才能被利用。
实现一个完整而良好的且符合要求的模板代码,需要尽可能多的去获取应用需求,分析这些需求的实现,可将程序分解为业务逻辑相关、业务逻辑无关。业务逻辑无关是指,在某类应用程序群中,这些程序具有相同程序结构、或者代码,即在不同的应用程序中这些部分是相同的。为增强模板的通用性,需要尽可能地抽象出这些通用的不变部分。业务逻辑相关是指,在某类应用程序群中,程序根据具体情况而有不同的程序结构与代码,根据特定情况需要改变的部分。业务逻辑无关的代码,可以在模版中直接给出,这样便省去了并行程序开发的大量重复劳动,可以让程序员着重在问题的业务逻辑上。而业务逻辑相关的代码,必须配合用户的指导,转换向导,以及模版中的标签共同完成并行化工作。
2.3标签实现所谓标签,就是在模版里事先标记出位置,用户通过标签名把所对应的功能代码插入到该位置的一种手段,如图4中的<标签名>与</标签名>。标签的名字体现了相应代码的功能。标签的位置决定了程序的框架,包括开始、工作、结束等语义。标签的数目决定模版的通用性。标签数越多,模版通用性越差。所以我们要在保证模版的正确性下,尽量减少标签的数目。
标签的数目,位置,名称的改动,伴随着新的模版的出现。所以本发明是模版开放性的。即在一定的标准下,模版可以根据用户的需求自行改动,增删以出现新的,符合特定用户需求的模版。
3并行代码的生成根据用户的指导,转换向导,把串行程序的相应功能的代码插入到并行模版的相应的标记处。而针对模版的操作,有以下几种手段。
1)插入新代码,即在模板代码的某些位置插入新的代码,常见的插入包括对元任务代码的调用以及其它需要增加的功能。
2)修改代码,可以针对用户需求,对现有模版代码加以改动。
3)删除代码,删除模板代码中不必要的代码,由于模板是一个通用框架代码,某些功能对于特定的应用而言是多余的,因此需要删除。
从图2的串行代码中可以看到,“call METAEVALUATE(AEROPA,X)”部分的计算被用户指定为原子任务,其代码便被复制到各从结点上。具体过程为,“METAEVALUATE(AEROPA,X)”的串行代码实现被插入到模版文件的<METATASK></METATASK>之间。而原串行程序的主结点任务变为图3所示的并行程序。可以看出,除了一系列MPI_SEND()和MPI_RECV()通行原语,图2的中主结点的计算任务与图3中的主结点计算任务一致。而图3中的通行原语,是由模版提供,刻画了主从结构的通行语义,也正因为这部分的特点,淡化了用户对并行程序通行细节的关注,从而帮助用户专注于逻辑业务本身。
通过这三种操作,模板代码转化为可以编译、运行的并行代码,如图2和图3。
权利要求
1.一种面向串行程序代码量大的领域的半自动并行化方法,其特征在于,具体步骤如下(1)创建标准CFD串行程序;(2)分析并行化;(3)创建元计算任务;(4)导入串行程序;(5)导入并行模版;(6)交互指导并行化。
2.根据权利要求1所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(1)中的创建标准CFD串行程序,是指是指用户必须在串行程序流程上严格按照五种并行模版所对应的串行程序框架编写串行程序。
3.根据权利要求2所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(1)中的模版,是指对CFD领域的并行程序进行总结归纳出的,对应五种范例的并行程序架构。
4.根据权利要求3所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(1)中的范例,是指对经典的并行算法的抽象,能够涵盖高性能计算领域的并行应用,经典并行算法范例包括阶段并行、分而治之、流水线、主-从结构、工作池式。
5.根据权利要求1所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(2)中的分析并行化,是指首先要分析串行程序,以及其所包含的各个计算任务,归纳出串行程序流程,以及各个计算任务的主要特征,串行程序的标准流程是由该程序所针对问题的领域决定的;其次,针对各个计算任务,抽象出计算框架;最后,用户挑选最耗时的计算任务所对应的框架,看这个框架适合于哪种并行范例,由用户指导将该串行程序映射到该并行范例所对应的模版上去。
6.根据权利要求1所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(3)中的元计算任务,简称元任务,是指与并行通信无关,且其自身内部不能并行执行的计算任务,是构成并行程序的基本元素,元任务之间的数据相关性是数据输入和输出等,无相关性的多个元任务可并行执行,元任务可单独进行调试和测试。
7.根据权利要求1所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(4)中的导入串行程序,指定需要并行的串行工程项目。
8.根据权利要求1所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(5)中的导入并行模版,是指指定串行程序所定应的模版。
9.根据权利要求1所述的面向串行程序代码量大的领域的半自动并行化方法,其特征是,所述的步骤(6)中的交互向导,其是一个交互图形界面,通过该界面引导用户完成相关的并行化工作,通过交互向导过程,具体还包括如下步骤①创建转换工程该工程将包括串行程序,将要生成的并行程序,并行程序的目标可执行程序,以及模版代码;②选择并行范例根据步骤(2)中分析抽象出的问题框架,确定并行范例以及并行模版;③并行代码的生成根据串行程序流程,把相应功能的代码插入到模版所对应的标签tag处;④编辑并行代码在转换后得到并行代码上继续直接修改,最终生成合时的并行程序代码;⑤生成可执行并行程序如果上述过程没有问题,最终生成可执行并行程序。
全文摘要
一种面向串行程序代码量大的领域的半自动并行化方法,具体步骤如下(1)创建标准CFD串行程序;(2)分析并行化;(3)创建元计算任务;(4)导入串行程序;(5)导入并行模版;(6)交互指导并行化。本发明针对CFD领域的并行模版,基本覆盖该领域所有串行程序所对应的并行程序,便于串行程序开发人员直接使用;其次,采用元任务对实际可并行计算的计算模块进行封装;然后,不需要用户对并行知识有太多了解。由于是对CFD领域特殊处理,本发明比大多数全自动方法所得最终并行程序效果好,效率高。同时,由于模版的帮助,又克服了大多数显示并行的缺点,不需要用户太多的专业并行知识,或者编写大量的令人头痛的并行代码,且本发明的模版是开放性的。
文档编号G06F9/45GK1932766SQ20061011705
公开日2007年3月21日 申请日期2006年10月12日 优先权日2006年10月12日
发明者翁楚良, 邵一峰, 李明禄, 陆鑫达 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1