并行程序通信模式的提取方法及系统的制作方法

文档序号:6575590阅读:146来源:国知局
专利名称:并行程序通信模式的提取方法及系统的制作方法
技术领域
本发明涉及并行程序通信模式分析领域,尤其涉及一种基于程序 切割技术的并行程序通信模式的提取方法及系统。
背景技术
通信性能是影响基于消息传递的并行程序性能的关键因素。并行
程序的通信模式可以通过三个方面衡量通信暈、通信的空间属性和 通信的时间属性。准确的理解并行程序的通信模式,不但可以帮助优 化并行程序的性能,而且可以辅助设计更好的通信子系统模块,改进 基于重放技术的并行程序调试工具的开销。
例如,英特尔公司的工具集MPIPP利用并行程序的通信模式, 优化了程序在异构网络通信平台上的性能,参见H. Chen, W. G. Chen, et al. MPIPP: An automatic profile-guided parallel process placement toolset for SMP clusters and multi-dusters (2006 ICS)。 MPIWIZ利用并 行程序通信局部性特征优化了基于重放技术的并行程序调试工具的 开销,参见R. Xue, X. Liu, et al. MPIWIZ: Subgroup reproducible replay of MPI applications (2009 PPoPP)。
并行程序的通信模式可以通过分析程序的通信记录(Traces)获 取。传统的方法获得程序的通信记录主要是依赖基于插装的方法,例 如ITC/ITA, KOJAK, TAU等。这些工具都需要插装原始程序,然 后在一个全规模的并行系统上运行插装后的程序,在执行过程中收集 通信记录。传统收集通信记录的方法具有以下缺点
(1)资源需求大大规模并行程序一般都需要很大的并行系统 才能运行起来,例如,NPB ( NAS parallel Benchmark,并行测试程序 程序)FT程序,测试程序的数据集包括七组,规模由小到大分别是S、W、 A、 B、 C、 D、 E, FT程序在数据集是E规模下,需要600GB 内存才能运行起来;ASCI中SAGE程序需要2000-4000个处理器才 可以运行起来。由于传统的方法需要执行整个插装程序,受限于资源 需求,无法在一个小规模的系统获得所需的通信记录。
(2)通信记录收集时间长尽管传统的方法在收集通信记录过 程中并没有引入显著的开销,但是它们需要执行整个并行程序。例如, ASCI中SAGE在2000-4000个处理器上运行一次需要大约几个月的 时间。因此,对于一个执行时间非常长的程序,传统的方法在获取通 信记录上是不可接受的,尤其是对一个程序需要反复收集不同模式下 的通信记录。
总之,传统的基于插装的方法获取并行程序的通信模式资源需求 大,需要的时间长,无法在一个小规模的系统上收集大规模的并行程 序的通信模式。

发明内容
本发明的目的是提供一种并行程序通信模式的提取方法及系统, 该方法及系统可减少收集大规模并行程序通信模式的资源需求和时 间开销,实现在小规模系统上收集大规模并行程序通信模式的目标, 以克服现有技术存在的不足。
为实现上述目的本发明采用如下技术方案。
本发明一 种实施方式提供了一种并行程序通信模式的提取方法, 该方法包括步骤
51. 解析并行程序源码,识别所述并行程序中的通信函数调用,
确定所述通信函数中的通信变量,并将所述通信变量放入设定集合;
52. 分析所述并行程序的控制流和数据流,收集所述并行程序的
数据依赖、控制依赖以及通信依赖信息;
53. 收集所述并行程序中的调用信息,构建程序调用54. 通过基于LIVE变量传播的切割算法对所述并行程序进行程序切割,获得所述并行程序的程序切片;
55. 执行所述程序切片,收集并输出通信记录;
56. 根据所述通信记录,按照设定目标获取所述并行程序的通信 模式。
其中,步骤S1进一步包括
Sl.l按照预定义的函数名识别所述并行程序中所有的通信函
数;
S1.2按照预定义的格式确定所述通信函数中的每个通信变量, 并将其放入所述设定集合。
其中,步骤S2进一步包括
S2.1通过数据流分析,对所述并行程序中每个变量的使用和定 义之间建立链接关系,即数据依赖,并将所述数据依赖信息保存于使 用-定义UD数据结构;
S2.2分析所述并行程序的控制分支,将所述并行程序中的控制 依赖转化为所述数据依赖,并将转化的数据依赖信息保存于使用-定 义UD数据结构;
S2.3对所述并行程序的所有通信调用进行配对分析,对所有发 送和接收的通信操作建立链接关系,即通信依赖,并将所述通信依赖 信息保存于消息依赖MD数据结构。
其中,步骤S3进一步包括
S3.1记录所述并行程序中每个函数调用点的被调用函数名称以 及需要传递的参数变量;
S3.2根据所述记录的信息,构建程序调用图。
其中,步骤S4进一步包括
S4.1将所述通信变量放入LIVE变量集合;
S4.2自顶向下遍历所述程序调用图的每个节点函数,对所述每 个节点函数,若存在所述设定集合中的通信变量通过所述数据依赖、控制依赖以及通信依赖关联的变量,则将相应关联的变量放入所述
LIVE变量集合;
S4.3自底向上遍历所述程序调用图的每个节点函数,对所述每 个节点函数,若存在所述设定集合中的通信变量通过所述数据依赖、 控制依赖以及通信依赖关联的变量,则将相应关联的变量放入所述 LIVE变量集合;
S4.4若所述LIVE变量集合保持不变,则执行步骤S4.5,否则返 回步骤S4,2;
S4.5标记所述并行程序中所有所述LIVE变量集合中变量定义 的语句;
S4.6对所述并行程序中的所有接收语句,标记接收变量在所述 LIVE变量集合中的通信语句,并根据所述通信依赖信息标记对应的 发送函数;
S4.7删除所述并行程序中未标记的非通信语句,及未在所述 LIVE变量集合中的变量,得到所述并行程序的程序切片。 其中,步骤S5进一步包括
S5.1记录所述标记的通信语句在实际传输通信语句中的消息内 容,并记录消息类型、消息大小、消息的源和目的地址;
S5.2记录所述未标记的通信语句的消息类型、消息大小、消息 的源和目的地址。
本发明另一实施方式还提供了一种并行程序通信模式的提取系 统,该系统包括变量确定单元,用于解析并行程序源码,识别所述 并行程序中的通信函数调用,确定所述通信函数中的通信变量,并将 所述通信变量放入设定集合;分析单元,用于分析所述并行程序的控 制流和数据流,收集程序的数据依赖、控制依赖以及通信依赖信息; 调用图构建单元,用于收集所述并行程序中的调用信息,构建程序调 用图;程序切割单元,用于通过基于LIVE变量传播的切割算法对所述并行程序进行程序切割,获得所述并行程序的程序切片;执行单元,
用于执行所述程序切片,收集并输出通信记录;提取单元,用于根据所述通信记录,按照设定目标获取所述并行程序的通信模式。有益效果
使用本发明方法及系统提取并行程序的通信模式,由于通过静态分析技术一一程序切割,删除了程序中不相关的计算语句和内存分配语句,获得的程序切片在执行过程中需要很少的计算资源和内存资源,园此资源霜求小;由于不需要执行^NHi"算代码和通信操作,因此,相比传统的基于插装的通信记录收集方法整个收集通信记录的时间可以大大减少。


图l为依照本发明一种实施方式的并行程序通信模式的提取方法流程图2为依照本发明一种实施方式的并行程序通信模式的提取方法的在编译器中的实现模块;
图3为依照本发明一种实施方式的并行程序通信模式的提取方法对测试程序的内存需求;
图4为BT程序的原始执行时间与依照本发明一种实施方式的并行程序通信模式的提取方法的通信记录收集时间;
图5为CG程序的原始执行时间与依照本发明一种实施方式的并
行程序通信模式的提取方法的通信记录收集时间;
图6为EP程序的原始执行时间与依照本发明一种实施方式的并行
程序通信模式的提取方法的通信记录收集时间;
图7为FT程序的原始执行时间与依照本发明 一种实施方式的并行
程序通信模式的提取方法的通信记录收集时间;
图8为LU程序的原始执行时间与依照本发明 一种实施方式的并
行程序通信模式的提取方法的通信记录收集时间;图9为MG程序的原始执行时间与依照本发明一种实施方式的并行程序通信模式的提取方法的通信记录收集时间;
图10为SP程序的原始执行时间与依照本发明一种实施方式的并行程序通信模式的提取方法的通信记录收集时间;
图11为Sweep3D程序的原始执行时间与依照本发明 一种实施方式的并行程序通信模式的提取方法的通信记录收集时间;
图12为依照本发明一种实施方式的并行程序通信模式的提取系
具体实施例方式
本发明提出的并行程序通信模式的提取方法及系统,结合附图和实施例说明如下。
本发明的方法是基于对并行程序的一个重要观察并行程序中大部分的计算代码和通信内容都与程序的通信量和通信空间两个属性无关,删除这些计算代码和通信操作并不影响程序实际的通信模式。因此,本发明的方法通过静态分析技术收集程序的数据依赖、控制依赖以及通信依赖,在编译时删除程序中与通信模式无关的计算语句和内存分配语句,得到原始程序的一个程序切片(Program Slice);然后在 一个小规模系统上执行这一程序切片获得程序的通信记录,从程序的通信记录中提取并行程序的通信模式。
如图1所示,依照本发明一种实施方式的并行程序通信模式的提取方法包括以下步骤
51. 解析并行程序源码,识别并行程序中的通信函数调用,确定通信函数中的通信变量,并将上述通信变量放入设定集合C;
52. 分析并行程序的控制流和数据流,收集程序的数据依赖、控制依赖以及通信依赖信息;
53. 收集并行程序中的调用信息,构建程序调用54. 通过基于LIVE变量传播的切割算法对并行程序进行程序切割,获得并输出行程序的一个程序切片;
55. 在一个小规模的并行计算机上执行上述程序切片,收集并输
出程序的通信记录;
56. 根据步骤S5得到的通信记录,按照设定目标获取并行程序
的通信模式。
其中,本发明的方法用到的关键定义如下
下表给出了 MPI_Send函数中的通信变量,其中标记COMM的变量都是通信变量,包招count, type, dest, tag和comm。 count和type决定了消息的大小,dest和comm决定了消息的目的地址。
MPI一Send (buf, count, type, dest, tag, comm)buf:发送缓冲区[COMM] count:发送缓冲区的消息个数[COMM] type:发送的数据类型[COMM] dest:发送的目的地址[COMM] tag :发送的标签[COMM] comm :通信域
在一个并行程序中,通信变量(COMM Variable )指通信函数中的某些调用参数,这些调用参数具有如下特征它们的值将直接决定并行程序的通信模式;UD链关联每个变量的使用(Use)到它的所有定义(Define),在使用和定义之间没有其他的定义语句出现,UD链用来保存程序中的数据依赖关系;通信依赖(CommunicationDependence):进程i中的通信语句x依赖于进程j中的通信语句j,当且仅当
(1) 进程j通过显示的通信函数发送一个消息给进程i;
(2) 语句x是一个通信接收操作,语句y是一个通信发送操作,且x和y不是相同的语句。
通信依赖是并行程序中固有的一种依赖关系,通信依赖的确定需要匹配程序中所有的通信调用语句
LIVE变量 一个变量是LIVE变量,当且仅当,它的值改变可以通过程序的数据依赖、控制依赖和通信依赖的传播影响到任何通信变量的值。
步骤S1进一步包括
Sl.l编译并行程序码源,在编译器的前端按照预定义的函数名识别并行程序中所有的通信函数;
S1.2对步骤Sl.l中识别的通信函数,按照预定义的格式,确定每个通信变量,并将其放入设定集合C中。
飾S2^—
S2.1通过编译器的数据流分析,对并行程序中每个变量的使用和定义之间建立一个链接,即通过变量的使用可以跟踪到期对应的定义语句,即数据依赖,上述变量的使用依赖于上述变量的定义,将这些数据依赖信息保存于使用-定义(Use-Defme,UD )数据结构;
S2.2在编译器中分析并行程序的控制分支,控制语句包含的变量依赖控制语句本身,将并行程序中的控制依赖转化为步骤S2.1所述的数据依赖,并将其保存于UD数据结构;
S2.3对并行程序的所有通信调用进行配对分析,对所有发送和接收的通信操作建立链接关系,通信的接收变量依赖通信的发送变量,将这种通信依赖关系信息保存于消息依赖(MessageDependence,
MD)数据结构。
步骤S3进一步包括
S3.1记录并行程序中每个函数调用点的被调用函数名称以及需要传递的参数变量;
S3.2根据步骤S3.1记录的信息,构建一个程序调用图(ProgramCallGmph, PCG),调用图的每个节点是程序的一个函数。
步骤S4进一步包括
S4.1初始化LIVE变量集合为空,将步骤SL2得到的通信变量放入LIVE变量集合;S4.2自顶向下遍历步骤S3.2得到的程序调用图的每个节点函数N,对每个节点函数N,若存在设定集合C中的通信变量通过步骤S2.1、 S2.2、 S2.3的数据依赖、控制依赖以及通信依赖关联的变量,则将相应关联的变量放入步骤S4.1所述的LIVE变量集合;
S4.3自底向上遍历步骤83.2得到的程序调用图的每个节点函数N,对每个节点函数N,若存在设定集合C中的通信变量通过步骤S2.1、 S2.2、 S2.3的数据依赖、控制依赖以及通信依赖关联的变量,,相应关联的变量放入m LIVE
S4.4若LIVE变量集合保持不变,则执行步骤S4.5,否则返回步骤S4.2;
S4.5标记并行程序中所有对步骤S4.1所述LIVE变量集合中变量定义的语句;
S4.6对并行程序中的所有接收语句,若接收变量在步骤S4.1所述LIVE变量集合中,则标记该通信语句,并根据步骤S2.3所述通信
依赖信息标记对应的发送函数;
S4.7删除并行程序中未在步骤S4.5、 S4.6中标记的非通信语句,及未在所述LIVE变量集合中的变量,得到并行程序的程序切片。
本发明方法步骤S4所提供的基于LIVE变量传播的程序切割算法具有如下特点
(1) 基于LIVE变量的程序分析定义了 LIVE变量来描述程序
中能通过数据依赖、控制依赖和通信依赖的传递能够影响程序通信模式的变量。其中通信依赖关系是并行程序特有的依赖关系,传统的串行程序分析并不涉及通信依赖。本发明的切割算法的目标是明确程序中所有的LIVE变量,以及影响通信变量的程序计算语句和通信操作语句。
(2) 支持过程间的程序切割釆用自顶向下和自底向上两个方向的迭代遍历分析,跟踪程序中通过全局变量和参数传递传播的LIVE变量。通过求解一个过程间的数据流方程,计算不同过程间所
有的LIVE变量。
根据本发明的方法,实现了基于LIVE变量的切割算法在 一 个产品级的编译器,Open64。如图2所示,切割算法主要实现在Open64的前优化(PreOPT)及过程间分析和优化两个模块中。切割算法支持过程间的LIVE变量分析,找出所有影响程序通信模式的计算语句和通信操作,并标记相应通信操作。
麟,錄85进一###:
S5.1记录步骤S4.8中标记的通信语句在实际的网络传输通信语句中的消息内容,并记录以下信息消息类型、消息大小、消息的源和目的地址;
S5.2对步骤S4.8中未标记的通信语句,不需要在网络传输通信语句中的消息内容,只需记录消息类型、消息大小、消息的源和目的地址。
用7个NPB: BT, CG, EP, FT, LU, MG, SP和ASCI Sweep3D
验证了本发明的方法,NPB程序的输入数据集是D规模。实验结果显示本发明方法能有效减少程序的计算和内存需求,对大部分程序,程序的资源需求减少了 l-2个数量级。本发明方法可以在一个32个核心的小规模系统上,成功的收集了直到512个进程的D规模NPB程序和Sweep3D ( 150*150*150)的通信记录。由于内存的限制,传
统的基于插装的方法无法在这么小的系统上收集程序的通信记录。
图3给出了 8个测试程序在不同进程下,本发明方法所需的内存大小。其中NULL表示一个没有计算和通信操作的并行程序,它给出一个并行程序所需内存的下限。AVG表示8个测试程序在本发明方法下收集通信记录消耗内存的算术平均值。从图中可以看出,本发明方法在收集通信记录过程中需要的内存资源非常少。例如,在512进程下,对于EP和CG程序,本发明方法只需要1.11GB和1.22GB内存大小,NULL程序需要1.04GB内存。
图4-图11给出8个测试程序原始执行时间和本发明方法收集通 信记录时间的对比,白色框是程序的原始执行时间,滞斜线框是本发 明方法收集通信记录的时间(图5、6中记录时间太短斜线框未显示)。 可以看出本发明方法在收集通信记录过程中,相比原始程序,需要很 小的时间开销。例如,对BT程序,在64进程下,原始程序需要1175.65 秒的执行时间,而本发明方法由于删除大部分和通信模式不相关的计
#ir *ftif%, 1^cw^ (T2s秒t可以完成通me录的收集。
如图12所示,依照本发明一种实施方式的并行程序通信模式的 提取系统主要包括两个关键系统模块编译模块和运行时模块。
编译模块100分成两个阶段,过程内分析单元和过程间分析。在 过程内分析中
首先,变量确认单元101解析并行程序源码,识别并行程序中的 通信函数调用,确定通信函数中的通信变量,并将上述通信变量放入 设定集合C;分析单元102分析并行程序的控制流和数据流,收集程 序的数据依赖、控制依赖以及通信依赖信息。
在过程间分析
调用图构建单元103收集并行程序中的调用信息,构建程序的调 用图;程序切割单元104通过基于LIVE变量传播的切割算法删除程 序中不相关的计算语句和内存分配语句,并标记相应的通信操作语 句,编译模块100获得并输出并行程序的一个程序切片。
运行时模块200:编译模块100得到的程序切片不能直接在并行 系统上运行,需要一个运行时模块200的执行参与。运行时模块200 的执行单元201提供了一个定制的通信插装库,程序切片链接插装 库,得到可执行代码,然后在一个小规模系统上执行;根据编译时标 记的信息,决定在执行过程中是否真正在网络上传输程序中的消息内容;还负责记录通信模式相关的信息,包括消息类型、消息大下、消
息源和目的地址等,保存在本地的日志文件中;最终提取单元202根 据执行单元201的通信记录,按照设定目标获取并行程序的通信模 式。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关 技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下, 还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明 的范畴,本发明的专利保护范茵应由权杯要求限定。
权利要求
1、一种并行程序通信模式的提取方法,该方法包括步骤S1.解析并行程序源码,识别所述并行程序中的通信函数调用,确定所述通信函数中的通信变量,并将所述通信变量放入设定集合;S2.分析所述并行程序的控制流和数据流,收集所述并行程序的数据依赖、控制依赖以及通信依赖信息;S3.收集所述并行程序中的调用信息,构建程序调用图;S4.通过基于LIVE变量传播的切割算法对所述并行程序进行程序切割,获得所述并行程序的程序切片;S5.执行所述程序切片,收集并输出通信记录;S6.根据所述通信记录,按照设定目标获取所述并行程序的通信模式。
2、 如权利要求1所述的并行程序通信模式的提取方法,其特征 在于,步骤Sl进一步包括Sl.l按照预定义的函数名识别所述并行程序中所有的通信函数;S1.2按照预定义的格式确定所述通信函数中的每个通信变量, 并将其放入所述设定集合。
3、 如权利要求1所述的并行程序通信模式的提取方法,其特征 在于,步骤S2进一步包括S2.1通过数据流分析,对所述并行程序中每个变量的使用和定 义之间建立链接关系,即数据依赖,并将所述数据依赖信息保存于使 用-定义UD数据结构;S2.2分析所述并行程序的控制分支,将所述并行程序中的控制 依赖转化为所述数据依赖,并将转化的数据依赖信息保存于使用-定 义UD数据结构;S2.3对所述并行程序的所有通信调用进行配对分析,对所有发送和接收的通信操作建立链接关系,即通信依赖,并将所述通信依赖 信息保存于消息依赖MD数据结构。
4、 如权利要求1所述的并行程序通信模式的提取方法,其特征在于,步骤S3进一步包括S3.1记录所述并行程序中每个函数调用点的被调用函数名称以 及需要传递的参数变量;S3.2根据所述记录的信息,构建程序调用图。
5、 如权利要求1所述的并行程序通信模式的提取方法,其特征 在于,步骤S4进一步包括S4.1将所述通信变量放入LIVE变量集合;S4.2自顶向下遍历所述程序调用图的每个节点函数,对所述每 个节点函数,若存在所述设定集合中的通信变量通过所述数据依赖、 控制依赖以及通信依赖关联的变量,则将相应关联的变量放入所述 LIVE变量集合;S4.3自底向上遍历所述程序调用图的每个节点函数,对所述每 个节点函数,若存在所述设定集合中的通信变量通过所述数据依赖、 控制依赖以及通信依赖关联的变量,则将相应关联的变量放入所述 LIVE变量集合;S4.4若所述LIVE变量集合保持不变,则执行步骤S4.5,否则返 回步骤S4,2;S4.5标记所述并行程序中所有所述LIVE变量集合中变量定义 的语句;S4.6对所述并行程序中的所有接收语句,标记接收变量在所述 LIVE变量集合中的通信语句,并根据所述通信依赖信息标记对应的 发送函数;S4.7删除所述并行程序中未标记的非通信语句,及未在所述 LIVE变量集合中的变量,得到所述并行程序的程序切片。
6、 如权利要求3或5所述的并行程序通信模式的提取方法,其 特征在于,步骤S5进一步包括S5.1记录所述标记的通信语句在实际传输通信语句中的消息内 容,并记录消息类型、消息大小、消息的源和目的地址;S5.2记录所述未标记的通信语句的消息类型、消息大小、消息 的源和目的地址。
7、 一种并行程序通信模式的提取系统,该系统包括 变量确定单元,用于解析并行程序源码,识别所述并行程序中的通信函数调用,确定所述通信函数中的通信变量,并将所述通信变量 放入设定集合;分析单元,用于分析所述并行程序的控制流和数据流,收集程序的数据依赖、控制依赖以及通信依赖信息;调用图构建单元,用于收集所述并行程序中的调用信息,构建程序调用图;程序切割单元,用于通过基于LIVE变量传播的切割算法对所述 并行程序进行程序切割,获得所述并行程序的程序切片;执行单元,用于执行所述程序切片,收集并输出通信记录; 提取单元,用于根据所述通信记录,按照设定目标获取所述并行 程序的通信模式。
全文摘要
本发明涉及一种并行程序通信模式的提取方法及系统,该方法包括步骤解析并行程序源码,识别并行程序中的通信函数调用,确定所述通信函数中的通信变量,并将所述通信变量放入设定集合;分析并行程序的控制流和数据流,收集并行程序的数据依赖、控制依赖以及通信依赖信息;收集并行程序中的调用信息,构建程序调用图;通过基于LIVE变量传播的切割算法对并行程序进行程序切割,获得并行程序的程序切片;执行所述程序切片,收集并输出通信记录;根据所述通信记录,按照设定目标获取所述并行程序的通信模式。本发明的方法及系统可减少收集大规模并行程序通信模式的资源需求和时间开销,实现在小规模系统上收集大规模并行程序通信模式的目标。
文档编号G06F9/46GK101661409SQ20091009306
公开日2010年3月3日 申请日期2009年9月22日 优先权日2009年9月22日
发明者何江舟, 盛田维, 翟季冬, 郑纬民, 陈文光 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1