专利名称:用户指导的程序半自动并行化方法
技术领域:
本发明涉及的是一种计算机技术领域的方法,具体而言是一种基于元任务的用户指导的串行应用问题半自动并行化方法。
背景技术:
计算机技术和通信技术的快速发展,出现了集群技术,集群是由一组通过高速网络互联的计算结点,这些计算结点协同工作以提供单一系统映像的计算资源。与硬件技术迅速发展相比,并行编程技术的发展却是停止不前。首先,并行编程比串行编程复杂度高;其次,并行编程较之于串行编程缺乏软件支持;最后,并行编程的发展时间短,目前还没有足够的技术积累。尽管如此,并行编程技术也有许多发展,其中在并行编程模型领域逐步形成两个研究方向程序自动并行化模型、程序显式并行化模型。自动并行化方法即是对顺序程序实行自动并行化,由编译器对顺序程序的源代码进行相关性分析,然后使用一组程序变换技术将串行代码转换成并行代码。并行化串行代码的关键之一是相关性分析,由它识别代码中的数据相关和控制相关。自动并行化方法目前尚未达到通用与高效的程度,使用这种方法获得的并行程序效率通常比较低,并且有相当比例的程序尚无法进行并行化处理。理论研究表明不论在编译期间还是在运行期间,都不存在能开发串行程序中所有潜在并行性的自动化技术。显式并行化方法是由程序员使用特定的语言结构、编译器命令、或库函数在程序中对并行性加以显式说明。其中主要的显式并行编程模型有数据并行、消息传递、和共享变量等。显式并行化方法的缺点是显式并行程序的开发,要求用户必须掌握大量的并行算法范例、并行编程语言等。缺乏统一的编程接口,使得并行程序难以在不同平台间进行移植。
经对现有技术文献的检索发现,以S.Mitra为主提出了针对领域的“半自动并行化方法”(S.Mitra,Suresh C.Kothari,J.Cho,and A.Krishnaswarmy.ParAgentA domain-specific semi-automatic parallelization tool(ParAgent一种特定领域的半自动并行化工具).In Proceedings of the 7th InternationalConference on High Performance Computing,volume 1970 of Lecture Notesin Computer Science,pp.141-148,2000)。该方法主要是针对有限差分法、有限元法和边界元法等领域的应用进行半自动并行化,将串行的Fortran-77源代码转换为嵌入有通信库原语的并行程序,针对循环操作提高其并行性。但是该方法主要是针对特定领域的应用进行并行化,有一定的局限性。同时,该方法的程序结构性较差,人工参与过多,自动并行化率较低。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种基于元任务的用户指导的程序半自动并行化方法。使其结合了自动并行化方法与显式并行化方法的优点,避免了它们的缺陷,通过用户交互引导并行化,使得产生的并行程序效率可以得到必要的保证。
本发明是通过以下技术方案实现的,本发明具体步骤如下1.分析并行化并非所有的应用问题都可以并行化,只有符合一定规则的问题才能被并行化。所以,首先要分析应用问题,归纳出问题的主要特征。其次,抽象出问题框架,即确定应用的解决框架。最后,看这些框架适合于哪种并行范例。范例是对经典的并行算法的抽象,能够涵盖高性能计算领域的并行应用。经典并行算法范例包括阶段并行、分而治之、流水线、主-从结构、工作池式等。
2.创建元计算任务元计算任务是指与并行通信无关,且其自身内部不能并行执行的计算任务,是构成并行程序的基本元素,元任务之间的数据相关性是数据输入和输出等,无相关性的多个元任务可以并行执行。元任务可单独进行调试和测试。
3.指定并行参数并行参数是指在并行化过程中所用到的指导并行化的数据,包括并行策略、并行步骤等,并行策略包括并行初始条件和结束条件,以及选定范例的相关属性,元任务在计算结点间的分配等。
4.确定计算数据指定计算所需的数据数据源(来自文件、数据库,或者标准输入)、数据类型(数据、图片等)、数据输出。
5.交互指导并行化通过交互向导过程来完成的,交互向导是一个交互图形界面,通过该界面引导用户完成相关的并行化工作。通过连接构件之间的输入、输出以描述整个系统的数据流图,再将数据流图影射为最终并行代码。具体还包括如下步骤(1)初始信息输入。在交互过程中首先将步骤1中确定的初始信息输入到系统中。
(2)选择并行范例。根据步骤1中分析抽象出的问题框架,确定合适的并行范例。
(3)确定高性能计算环境中各计算节点之间的拓扑关系。
(4)元任务分配。根据调度策略,确定元任务在集群等高性能计算环境中的各个计算节点上的分配。
(5)并行代码的生成。根据上述信息,即元任务所代表的计算模块和并行范例所表示的整个并行程序的框架,将元任务的具体源代码插入到代码框架中,将形式参数实体化,删除框架中无用代码,最终生成并行化的源代码。
6.测试结果生成的并行代码不一定能一次编译通过,可能需要修改,通过重复上述过程,最终生成可执行的并行程序代码。
本发明通过以上的步骤,可以创建一个以阶段并行、分而治之、流水线、主-从结构、工作池等五种范例的并行代码,同时屏蔽底层并行编程的复杂性。与现有技术相比,主要优点在于不是针对特定领域应用的特征开发并行性,而是基于并行程序的共性,即五种并行范例,形成并行程序的初始框架;其次,采用元任务对实际可并行计算的计算模块进行封装;然后,针对实际的计算结点拓扑结构,自动生成并行程序。与特定领域的半自动并行化方法相比,该方法可以解决更普遍的应用问题,同时采用元任务封装的方法使得程序结构化程度高,便于开发与维护。
图1本发明流程示意2本发明原理框架示意3实施例中相关并行程序模板代码示意4实施例中相关并行代码生成示意图具体实施方式
以下结合附图对本发明实施例作出描述如图1、图2所示,1串行元任务的实现串行元任务在逻辑上是仅与业务逻辑相关的,元任务只能由用户生成,并且不涉及并行语义。串行元任务采用面向对象的封装机制加以实现,针对元任务定义一个对象接口,通过调用该接口中的方法实现与该元任务的交互。用户在串行编程环境下编写元任务,只需要实现给定接口中的方法即可,生成的并行代码是通过该接口调用元任务。这种并行化过程可以不用关心用户串行代码的内容,只需要检测到相应的接口。
为此,要求用户在编写元计算任务时必须实现包含“execute()”接口的类,在实现该接口的代码中加入计算代码,例如Interface Metatask{Public ArrayList execute(ArrayList arrayObj);……}Public Singletask implements Metatask{Public ArrayList execute(ArrayList arrayObj){ArrayList returnList=new ArrayList();ArrayList elementList=null;……Return returnList;}}在并行代码中实例化Singletask后,直接调用execute函数即可执行用户的串行算法。在有些情况下用户需要多个串行计算任务才能解决问题,这时就需要定义多个串行任务,这些任务之间的通信不是由串行任务本身实现,而是通过并行代码在组合时实现的。
2范例框架实现2.1范例框架通过模板代码加以实现在编写代码过程中应用程序代码符合一定的结构、规则,将这些规则抽象出来以形成一种能够覆盖用户应用的程序代码框架,称此程序代码框架为模板代码。模板代码的主要特点有1)抽象的架构,它是用来描述一个程序的架构,其自身要符合一定的预定义规范。2)不可编译性,它是不能在实际机器上直接编译、运行的程序代码,必须经过转换后才能成为可编译、运行的具体代码。3)广涵性,即它是具有一定的代表性,能够涵盖某类具体应用,为解决这类应用提供了框架。
2.2模板代码实现首先必须编写好模板代码,然后将这些模板代码加入到系统中。这样,这些模板才能被利用。
实现一个完整而良好的且符合要求的模板代码,需要尽可能多的去获取应用需求,分析这些需求的实现,可将程序分解为不变部分、可变部分。不变部分是指,在某类应用程序群中,这些程序具有相同程序结构、或者代码,即在不同的应用程序中这些部分是相同的。为增强模板的通用性,需要尽可能地抽象出这些通用的不变部分。可变部分是指,在某类应用程序群中,程序根据具体情况而有不同的程序结构与代码,根据特定情况需要改变的部分,常见的可变部分包括数据类型、输入/输出路径等。并行程序模板示例如图3所示,从该模板代码示例中可以看到不同颜色标识的代码,深灰色代码是整个并行程序的框架,可以看出这部分是基于消息传递(MPI)的代码,给出了采用MPI API函数的程序框架,是不变部分。而其它部分的代码是在并行化过程中根据实际情况生成的部分,它们是在系统并行化过程中由用户来确定的。
3并行代码的生成根据元任务、模板代码、以及保存并行化信息的配置文件即可产生包含对元任务调用的并行代码。最终的并行代码是基于模板代码而产生的,利用模板的框架代码产生并行化代码,根据需要对模板代码存在以下三种操作
1)插入新代码,即在模板代码的某些位置插入新的代码,常见的插入包括对元任务代码的调用以及其它需要增加的功能。
2)修改代码,模板代码中有若干定制的抽象代码,在选择了模板后,根据实际环境加以修改。常见的修改包括数据类型、条件语句、文件路径等。
3)删除代码,删除模板代码中不必要的代码,由于模板是一个通用框架代码,某些功能对于特定的应用而言是多余的,因此需要删除。
如图4所示,上半部分代码是基于工作池的并行代码的部分模板代码,下半部分是经过并行化后产生的实际并行代码,其中斜体部分的代码已被插入、修改或删除。首先可以看到dataType=UDP_DATATYPE经过修改已被并行实例为dataType=1,标记UPD_TERMINATION_CONDITION被修改为具体的条件代码poolQuene.size()>0所替代。同时产生的并行代码中加入了arrayBuf=new ByteArrayOutputStream();arrayObj=new ObjectOutputStream(arrayBuf);……通过这三种操作,模板代码转化为可以编译、运行的并行代码。
权利要求
1.一种用户指导的程序半自动并行化方法,其特征在于,具体步骤如下(1)分析并行化;(2)创建元计算任务;(3)指定并行参数;(4)确定计算数据;(5)交互指导并行化通过交互向导过程来完成的;(6)测试结果,生成可执行的并行程序代码。
2.根据权利要求1所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(1)中的分析并行化,是指首先要分析应用问题,归纳出问题的特征,其次,抽象出问题框架,即确定应用的解决框架,最后,看这些框架适合于哪种并行范例。
3.根据权利要求2所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(1)中的范例是对经典的并行算法的抽象,能够涵盖高性能计算领域的并行应用,经典并行算法范例包括阶段并行、分而治之、流水线、主-从结构、工作池式。
4.根据权利要求1所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(2)中的元计算任务,是指与并行通信无关,且其自身内部不能并行执行的计算任务,是构成并行程序的基本元素,元任务之间的数据相关性是数据输入和输出。
5.根据权利要求4所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(2)中的元任务,元任务可单独进行调试和测试;无相关性的多个元任务可以并行执行。
6.根据权利要求1所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(3)中的并行参数,是指在并行化过程中所用到的指导并行化的数据,包括并行策略、并行步骤。
7.根据权利要求1所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(3)中的并行策略,包括并行初始条件和结束条件,以及选定范例的相关属性,元任务在计算结点间的分配。
8.根据权利要求1所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(4)中的计算数据,是指指定计算所需的数据其包括来自文件、数据库或者标准输入的数据源,数据、图片的数据类型,数据输出。
9.根据权利要求1所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(5)中的交互向导,其是一个交互图形界面,通过该界面引导用户完成相关的并行化工作,通过交互向导过程,是指通过连接构件之间的输入、输出以描述整个系统的数据流图,再将数据流图影射为最终并行代码,具体还包括如下步骤①初始信息输入,在交互过程中首先将第一步中确定的初始信息输入到系统中;②选择并行范例,根据步骤1中分析抽象出的问题框架,确定合适的并行范例;③确定高性能计算环境中各计算节点之间的拓扑关系;④元任务分配,根据调度策略,确定元任务在集群等高性能计算环境中的各个计算节点上的分配;⑤并行代码的生成,根据上述信息,即元任务所代表的计算模块和并行范例所表示的整个并行程序的框架,将元任务的具体源代码插入到代码框架中,将形式参数实体化,删除框架中无用代码,最终生成并行化的源代码。
10.根据权利要求1所述的用户指导的程序半自动并行化方法,其特征是,所述的步骤(6)中的测试结果,当生成的并行代码一次编译未通过,需要修改,通过重复上述过程,最终生成可执行的并行程序代码。
全文摘要
一种用户指导的程序半自动并行化方法,具体步骤如下(1)分析并行化;(2)创建元计算任务;(3)指定并行参数;(4)确定计算数据;(5)交互指导并行化通过交互向导过程来完成的;(6)测试结果,生成可执行的并行程序代码。本发明与现有技术相比,主要优点在于不是针对特定领域应用的特征开发并行性,而是基于并行程序的共性,即五种并行范例,形成并行程序的初始框架;其次,采用元任务对实际可并行计算的计算模块进行封装;然后,针对实际的计算结点拓扑结构,自动生成并行程序。与特定领域的半自动并行化方法相比,该方法可以解决更普遍的应用问题,同时采用元任务封装的方法使得程序结构化程度高,便于开发与维护。
文档编号G06F9/44GK1687897SQ20051002658
公开日2005年10月26日 申请日期2005年6月9日 优先权日2005年6月9日
发明者陆鑫达, 陈忠国 申请人:上海交通大学