一种串行与并行模拟相结合的并行计算机系统性能模拟方法

文档序号:6482241阅读:131来源:国知局
专利名称:一种串行与并行模拟相结合的并行计算机系统性能模拟方法
技术领域
本发明涉及并行计算机系统的性能模拟方法,特别是以模拟技术为手段,对并行 计算机系统上单程序多数据(Single Program Multiple Data, SPMD)模式消息传递程序的 性能(即运行时间)进行模拟评估的方法。
背景技术
计算机体系结构模拟软件(简称模拟器)是一类可对计算机系统行为进行模拟的 软件,它们一般是可配置的,可以对目标计算机系统的体系结构参数或技术方案进行配置, 在现有计算机(称为宿主机)上模拟运行Benchmark程序(包括来自于真实应用领域的程 序或人工合成的程序等),获得目标计算机系统在给定配置下的性能数据。在新计算机系统 研制过程中,基于模拟器软件,在目标系统可用前就对其性能进行评估,分析系统性能瓶颈 或者找到最优配置,从而对系统进行针对性的改进。此外,由于新的计算机(特别是大规模 并行计算机)系统资源稀缺,运行成本高,很多情况下并不能直接在新计算机上直接进行 程序开发,而是在其它计算机上开发好程序之后再将其部署到新计算机上。为了在新计算 机上获得高的运行效率,开发过程中需要对程序进行深入的性能调优,通过模拟技术对程 序在目标计算机系统上的性能进行评估,可有效指导其性能优化。 模拟器采用软件来模拟硬件的行为,时间开销很大,通常比在真实目标机上运行 相同Benchmark程序的时间大几个数量级,并行计算机系统的模拟工作量更为巨大。美国 伦斯勒理工学院的Christopher D. Carothers举了一个例子(Christopher D. Carothers, ROSS :Parallel Discrete—Event Simulations on Near Petascale Supercomputers, charmworkshop,2009):假设要对一个万万亿次超级计算机上的MPI程序进行模拟,假定程 序只发挥机器峰值性能的10%,即每秒1千万亿次浮点运算,每个浮点操作需要2字节数 据,其中1%需要通过通信获得,每秒共2TB数据通信,设MPI消息大小为1K,因此每秒产生 20亿个MPI通信,如果每个消息传输要经过8跳,则每秒产生160亿个事件,运行1000秒产 生16万亿个事件,以目前的串行离散事件模拟器10万个事件每秒的模拟速度,需要5年多 时间才能模拟完。串行不可能满足模拟容量和时效性需求,只有利用并行计算机系统作为 宿主机平台进行并行模拟,才有可能满足计算能力与存储容量的需求。因此,目前已经出现 了一些基于并行宿主机的并行模拟器原型系统,如WWTII (威斯康辛大学)、RSIM(莱斯大学 与伊利诺伊大学等)、LAPSE (NASA) 、MPI-Sim(加州大学洛杉矶分校)、BigSim(伊利诺伊大 学厄贝纳香槟分校)、BGLsim(IBM公司与伊利诺伊大学厄贝纳香槟分校)、SILAS (德国尤利 西超级计算中心)等的并行模拟器原型系统。 即使这样,目前对并行计算机系统上并行应用程序的性能模拟预测仍然面临很大 的困难,具体表现在 (1)并行模拟器中缺乏准确的计算性能模拟模块。并行计算机系统上并行程序性 能受处理器(含片上Cache存储层次)、互连网络等众多因素交互影响,准确的性能模拟非
4常困难。除BGLSim宣称可实现近似周期精确的模拟外,现有并行模拟器基本上都没有使用 周期精确的处理器模拟模块。例如MPI-Sim和BigSim中,没有对处理器性能进行指令级级 别的详细模拟模型,而只采用简单的宿主机处理器和目标机处理器性能的縮放因子的方式 进行性能估计。据我们在一个集群系统上对BigSim的测试发现,其计算性能预测误差可达 到80%以上。 (2)可配置性差,适应性差。已有的模拟器通常针对具体目标系统进行设计,如果 系统体系结构部件发生改变,例如采用了新型处理器或网络互连设备,则无法适应。
(3)模拟开销仍然很大。模拟性能仍然是制约模拟器应用的主要障碍之一,由于模 拟开销大,使得并行模拟的运行环境条件难以满足。 由于上述原因,如何从模拟器结构设计和模拟过程设计方面来提高模拟器的体 系结构适应性、模拟效率成为研究界面临的重要问题。目前的并行模拟器主要侧重于网 络通信性能的模拟,例如BigSim、 MPI-Sim都有可配置的网络模拟模块,具有详细的网络 模拟模型,精度较高,且适应多种网络类型的模拟,而在处理器模拟方面,它们都仅提供 非常粗略的性能模型。另一方面,目前针对处理器模拟已有很多较好的串行模拟器,例 如SimpleScalar(威斯康辛大学)、SimOS(斯坦福大学)、SimNow(AMD公司)、GEMS(威 斯康辛大学)、SimOS-Goodson(中科院计算所)等的串行模拟器都可以做到周期精确的 模拟。此外,目前并行计算领域采用消息传递方式编程的科学计算程序多数是SPMD模式 的禾呈序(Daniel Chavarr' iaMiranda等,Topology-aware Tile Mapping forClusters of SMPs, ACM International Conference on Computing Frontiers, 2006),在运行过
程中,不同进程处理一个大数据集中不同部分的数据,它们执行的计算基本相同,因此 只要对一个进程的计算性能(主要与处理器相关)进行模拟就可获得所有进程的计算
性會g数据。而文献(Yoon_Ju Lee and Mary Hall, A Code Isolator -Isolating Code Fragmentsfrom Large Programs,International Workshop on Languages and Compilers for ParallelComputing,2004)报告了他们从大的科学与工程计算程序中分离出代码片 段,将各个代码片段封装为可独立执行的代码,其性能可反映该代码片段在完整程序中的 性能,最后将针对分离后的代码片断进行经验性能优化(empirical optimization)的最佳 方案用于完整程序中对应代码片断的性能优化。这说明并行程序中的计算代码段可以被分 离出来,从而可采用串行模拟器对其进行性能模拟。因此,可以结合利用并行模拟和串行模 拟两者的优势来进行SPMD模式消息传递并行程序的性能模拟。 根据专利文献检索,以往的专利与文献中尚未见到在并行计算机系统上并行应用 程序性能模拟中将并行模拟和串行模拟结合进行两阶段性能模拟的报道。只有一些关于并 行模拟器构造方面的方法申请了专利,如专利号分别为5956261、5442772的美国专利、专 利号200710304653. 9的中国专利。

发明内容
本发明要解决的技术问题是在对并行计算机系统上SPMD模式消息传递并行程 序的性能进行模拟时,提出一种串行模拟和并行模拟相结合的两阶段性能模拟方法,通过 代码分离从消息传递程序分离出计算代码段,利用串行模拟器模拟处理器上计算代码段的 执行时间,通过代码标记方法将计算代码段执行时间标记到消息传递程序中,利用并行模拟器模拟网络通信的执行时间,并结合计算代码段执行时间,预测总的执行时间,既提高性
能模拟准确性,又可灵活适应含不同处理器和网络结构的并行机系统的模拟。 本发明技术方案如下 第一步,从并行程序源代码(由一系列通信语句与计算代码段构成)中分离出各 个计算代码段,计算代码段是一段连续的程序代码,其中包含一系列计算语句或者函数调 用,但不包括通信语句,除了位于程序开始或结束位置的计算代码段之外,每个计算代码段 的前后均与通信语句相邻,将各计算机代码段生成独立的串行源程序文件,并将串行源程 序文件封装为可独立执行的串行源程序。具体过程如下 1. 1对并行程序源代码进行规范化处理。从并行程序的主函数代码开始处一直 向后扫描到结束处,对遇到的每一个过程或函数(这里的过程或函数不包括系统过程或函 数,为描述方便,以下统称函数),如果其中包含通信语句,则将该函数内联到主函数中,即 将主函数中对该函数的调用表达式用该函数的函数体来替换;如果该函数中还调用其它函 数,则还要检查这些被调用的函数是否包含通信语句,如果被调用的函数包含通信语句就 先将它们内联到被调用处。这一规范化处理步骤是递归的,直到检查到原子函数(即不调 用其它函数的函数)。例如,如果并行程序的主函数A调用函数B,函数B又调用函数C,函 数C中包含通信语句,则先要在函数B中将函数C内联,然后在主函数A中将函数B内联。
经过规范化处理,保证并行程序的主函数中调用的函数或其子函数均不包含通信 语句。 1. 2将文件指针定位在并行程序的主函数代码的开始处,初始化变量k为1。
1. 3从当前文件指针位置开始,定位一个新的计算代码段。 1. 4生成一个编号为k的串行源程序文件,将当前找到的计算代码段放到其中,并
将该串行源程序文件封装为一个可独立执行的串行源程序。具体方法是 a)创建一个新的源程序,将计算代码段放在一个空的主函数中。 b)如果计算代码段中包括对过程或函数的调用,则将该函数在调用处进行内联。 c)如果当前串行源程序中存在未初始化(即尚未被赋值)的变量,则在代码开始
处增加对这些变量进行初始化的代码,例如对单个的浮点变量和整数变量可采用随机数来
初始化,对数组可以使用嵌套循环来初始化。 1.5判断如果已到达主程序的末尾,表示并行源程序代码中的全部计算代码段 均已分离出来,此时的k值就是得到的串行源程序的个数,计共得到N个串行源程序,执行 第二步;否则,k增加l,转1.3。 第二步,对第一步代码分离得到的N个串行源程序逐个进行编译和串行模拟,并 记录得到的模拟性能数据(即执行时间预测值)。具体过程如下
2. l初始化变量k为l。 2. 2编译编号为k的串行源程序,得到编译后的串行程序。 2. 3在单台计算机上,使用串行模拟器软件,对编译得到的串行程序进行面向处理 器性能的模拟,得到其中相应的计算代码段的执行时间预测值,并将该执行时间预测值加 入计算代码性能数据集。计算代码性能数据集是文本形式的,按顺序存储计算代码段的编 号及其执行时间。 2.4判断,如果k小于N,则k值增加1,转2.2 ;否则,执行第三步。
第三步,将模拟得到的各计算代码段的执行时间预测值标记到并行程序源代码中。
具体过程如下 3. l初始化变量k为l。 3. 2在并行程序源代码中定位第k个计算代码段。 3. 3从计算代码性能数据集中检索第k个计算代码段的执行时间预测值。 3. 4在并行程序中第k个计算代码段的末尾处,采用编译指导命令标记第k个计算
代码段的执行时间预测值。例如,如果是Fortran程序,采用如下方式 cDEC$EXCECUTI0N_TME_0F_REGI0N(时间),其中"cDEC$"是编译指导命令前导
符,"EXCECUTI0N_TME_0F_REGI0N"说明是代码段执行时间,而"时间"是执行时间预测值。 如果是C程序,采用如下方式 #pragma execution_time_of_region (时间),其中"Spragma,,是编译指导命令前导符,"exeCuti0n_time_0f_regi0n"说明是代码段执行时间,而"时间"是执行时间的预测值。 3.5判断,如果k小于N,则K值增加1,转3. 2 ;否则,执行第四步。
第四步,对标记有计算代码段执行时间预测值的并行程序源代码进行编译,在并行宿主机上,采用并行模拟器对其进行通信性能模拟,结合计算代码段执行时间预测值,预测并行程序整体执行时间。具体过程如下 4. 1编译标记有计算代码段执行时间预测值的并行程序源代码对通信语句和计算代码进行编译,并将说明计算代码段执行时间预测值的编译指导命令编译为并行模拟器可识别的时间提示信息。 4.2在并行宿主机上,采用并行模拟器对编译得到的代码进行模拟。并行模拟器对通信代码进行性能模拟,预测各个通信操作的时间,得到通信时间的预测值。对各个计算代码段不执行性能模拟,而只进行功能模拟(比性能模拟快得多),通过时间提示信息获得计算代码段执行时间的预测值。并行模拟器结合计算代码段执行时间预测值与通信时间的预测值,预测并行程序整体执行时间。 综上所述,本发明采取串行模拟与并行模拟的方式,实现并行计算机系统上消息传递程序的性能模拟。采用本发明可以达到以下技术效果 (1)利用了串行模拟器对处理器计算性能的精确模拟能力,提高对消息传递程序计算代码部分性能模拟的精度,进而提高整个并行模拟数据的精确性。 (2)利用并行模拟器的容量与性能优势,可对大规模科学计算程序在大规模互连网络上的性能进行高效模拟。 (3)基于消息传递程序SPMD模式的特性,仅使用单处理器对一个目标处理器上的计算代码段进行模拟,而不是采用并行宿主机的全部处理器对所有目标处理器上的计算代码段进行模拟,大大降低了模拟开销。如果并行模拟器中的计算代码性能模拟模块采用与本发明中串行模拟器相同精度的模拟模型,设目标并行计算机系统的处理器数为M,则本发
明对计算代码的模拟运行机时仅为采用并行模拟器进行计算代码模拟运行机时的1/M。
(4)由于可分别选择面向处理器的串行模拟器和面向互连网络的并行模拟器,因
此提高了模拟技术的灵活性,可适应更多并行计算机体系结构的性能模拟,特别是可以采
7用针对新型处理器的串行模拟器和针对新型互连网络的并行模拟器。


图1是本发明的总体流程图。 图2是本发明第一步从并行源程序中分离计算代码段的流程图。 图3是本发明第二步对分离得到的各个串行源程序进行串行模拟的流程图。 图4是本发明第三步将各个计算代码段的执行时间预测值标记到并行程序源代
码中的流程图。 图5是采用本发明使并行模拟整体精度提高的示意图。
具体实施例方式图1是本发明的总体流程图。主要流程是 步骤S101,从并行源程序中分离计算代码段从并行程序源代码中分离出各个计 算代码段,并将各计算代码段封装成独立的串行源程序,并增加使其可独立运行的代码。
步骤S102,对分离得到的串行源程序进行串行模拟在单机上对每个计算代码段 进行串行模拟,包括编译、串行模拟并记录模拟预测时间。 步骤S103,将模拟得到的各个计算代码段的执行时间预测值标记到并行程序源代 码中。 步骤S104,采用并行模拟器进行并行模拟对标记有计算代码段执行时间预测值 的并行程序源代码进行编译,在并行宿主机上,采用并行模拟器对其进行通信性能模拟,结 合计算代码段执行时间预测值,预测并行程序整体执行时间。
图2是本发明第一步分离计算代码段的流程图。流程是 步骤S201,对并行程序源代码进行规范化处理,保证并行程序源代码中没有既包 括计算代码又包括通信代码的过程或函数。 步骤S202,打开并行程序源代码,将文件指针定位在开始处。初始化变量k为1。
步骤S203,从当前指针位置开始,定位一个新的计算代码段。 步骤S204,生成一个编号为k的串行源程序文件,将当前找到的计算代码段放到 其中,并将该串行源程序文件封装为一个可独立执行的串行源程序。 步骤S205,判断如果文件指针已到达程序末尾,则代码分离软件执行结束;否 则,k增加1,转步骤S203。 图3是本发明第二步对串行源程序进行串行模拟的流程图。流程是 步骤S301 ,初始化变量k为1 。 步骤S302,编译编号为k的串行源程序。 步骤S303,在单台计算机上,使用串行模拟器软件,对编译得到的串行程序进行面
向处理器的性能模拟,模拟完成后将模拟预测得到的时间加入计算代码性能数据集。 步骤S304,判断如果k小于N,则K值增加1,转步骤S302 ;否则,结束。 图4是本发明第三步将各个计算代码段的执行时间预测值标记到并行程序源代
码中的流程图。流程是 步骤S401 ,初始化变量k为1 。
步骤S402 ,在并行程序中定位第k个计算代码段。 步骤S403,从计算代码性能数据集中检索第k个计算代码段的执行时间预测值。
步骤S404,在并行程序中第k个计算代码段的末尾处,采用编译指导命令方式,标 记第k个计算代码段的执行时间预测值。 步骤S405,判断如果k小于N,则K值增加1,转步骤S402 ;否则,结束。
图5给出了采用本发明使模拟精度提高的示意图。分别采用本发明(并行模拟器 和串行模拟器相结合的方法)和伊利诺伊大学厄贝纳香槟分校的BigSim模拟方法(即背 景技术所述的只采用并行模拟器的方法)(见http:〃charm. cs. uiuc. edu),在一个含4处 理器的PC机群上模拟一套含16个Intel Itanium 2处理器的基于千兆以太网互连的HP 集群系统的性能。所采用的测试程序为一个求解三维Jacobi迭代问题的消息传递并行程 序Jacobi3d。两种方法对程序并行程序在目标机上执行时间的模拟精度如图5所示。从 图5可以看出,本发明相对于BigSim模拟方法的模拟精度有一定程度的提高,提高幅度在 1. 38% -8. 85%之间。
9
权利要求
一种串行与并行模拟相结合的并行计算机系统性能模拟方法,其特征在于包括以下步骤第一步,从并行程序源代码中分离出各个计算代码段,计算代码段是一段连续的程序代码,其中包含一系列计算语句或者函数调用,但不包括通信语句,除了位于程序开始或结束位置的计算代码段之外,每个计算代码段的前后均与通信语句相邻,将各计算机代码段生成独立的串行源程序文件,并将串行源程序文件封装为可独立执行的串行源程序,具体过程如下1.1对并行程序源代码进行规范化处理从并行程序的主函数代码开始处一直向后扫描到结束处,对遇到的每一个过程或函数,如果其中包含通信语句,则将该函数内联到主函数中,即将主函数中对该函数的调用表达式用该函数的函数体来替换;如果该函数中还调用其它函数,则还要检查这些被调用的函数是否包含通信语句,如果被调用的函数包含通信语句就先将它们内联到被调用处;这一规范化处理步骤是递归的,直到检查到原子函数-即不调用其它函数的函数;1.2将文件指针定位在并行程序的主函数代码的开始处,初始化变量k为1;1.3从当前文件指针位置开始,定位一个新的计算代码段;1.4生成一个编号为k的串行源程序文件,将当前找到的计算代码段放到其中,并将该串行源程序文件封装为一个可独立执行的串行源程序,具体方法是a)创建一个新的源程序,将计算代码段放在一个空的主函数中;b)如果计算代码段中包括对过程或函数的调用,则将该函数在调用处进行内联;c)如果当前串行源程序中存在未初始化即尚未被赋值的变量,则在代码开始处增加对这些变量进行初始化的代码;1.5判断如果已到达主程序的末尾,表示并行源程序代码中的全部计算代码段均已分离出来,此时的k值就是得到的串行源程序的个数,计共得到N个串行源程序,执行第二步;否则,k增加1,转1.3;第二步,对第一步代码分离得到的N个串行源程序逐个进行编译和串行模拟,并记录得到的执行时间预测值,具体过程如下2.1初始化变量k为1;2.2编译编号为k的串行源程序,得到编译后的串行程序;2.3在单台计算机上,使用串行模拟器软件,对串行程序进行面向处理器性能的模拟,得到计算代码段的执行时间预测值,并将该执行时间预测值加入计算代码性能数据集,计算代码性能数据集是文本形式的,按顺序存储计算代码段的编号及其执行时间;2.4判断,如果k小于N,则k值增加1,转2.2;否则,执行第三步;第三步,将模拟得到的各计算代码段的执行时间预测值标记到并行程序源代码中,具体过程如下3.1初始化变量k为1;3.2在并行程序源代码中定位第k个计算代码段;3.3从计算代码性能数据集中检索第k个计算代码段的执行时间预测值;3.4在并行程序中第k个计算代码段的末尾处,采用编译指导命令标记第k个计算代码段的执行时间预测值;3.5判断,如果k小于N,则K值增加1,转3.2;否则,执行第四步;第四步,对标记有计算代码段执行时间预测值的并行程序源代码进行编译,在并行宿主机上,采用并行模拟器对其进行通信性能模拟,结合计算代码段执行时间预测值,预测并行程序整体执行时间,具体过程如下4.1编译标记有计算代码段执行时间预测值的并行程序源代码对通信语句和计算代码进行编译,并将说明计算代码段执行时间预测值的编译指导命令编译为并行模拟器可识别的时间提示信息;4.2在并行宿主机上,采用并行模拟器对编译得到的代码进行模拟并行模拟器对通信代码进行性能模拟,预测各个通信操作的时间,得到通信时间的预测值;对各个计算代码段不执行性能模拟,只进行功能模拟,通过时间提示信息获得计算代码段执行时间的预测值;并行模拟器结合计算代码段执行时间预测值与通信时间的预测值,预测并行程序整体执行时间。
3. 5判断,如果k小于N,则K值增加l,转3. 2 ;否则,执行第四步;第四步,对标记有计算代码段执行时间预测值的并行程序源代码进行编译,在并行宿主机上,采用并行模拟器对其进行通信性能模拟,结合计算代码段执行时间预测值,预测并行程序整体执行时间,具体过程如下4. 1编译标记有计算代码段执行时间预测值的并行程序源代码对通信语句和计算代码进行编译,并将说明计算代码段执行时间预测值的编译指导命令编译为并行模拟器可识别的时间提示信息;4. 2在并行宿主机上,采用并行模拟器对编译得到的代码进行模拟并行模拟器对通信代码进行性能模拟,预测各个通信操作的时间,得到通信时间的预测值;对各个计算代码段不执行性能模拟,只进行功能模拟,通过时间提示信息获得计算代码段执行时间的预测值;并行模拟器结合计算代码段执行时间预测值与通信时间的预测值,预测并行程序整体执行时间。
全文摘要
本发明公开了一种串行与并行模拟相结合的并行计算机系统性能模拟方法,要解决的技术问题是提高性能模拟准确性和模拟效率。技术方案是先从并行源程序中分离计算代码段,将各计算机代码段封装为可独立执行的串行源程序;接着对串行源程序进行串行模拟,得到的各计算代码段的执行时间预测值;然后将各计算代码段的执行时间预测值标记到并行程序源代码中;最后采用并行模拟器进行通信性能模拟,结合计算代码段执行时间预测值,预测并行程序整体执行时间。本发明适应含不同处理器和网络结构的并行机系统的模拟,采用本发明既可提高整个并行模拟数据的精确性,又可对大规模科学计算程序在大规模互连网络上的性能进行高效模拟,且大大降低了模拟开销。
文档编号G06F9/46GK101694628SQ20091004457
公开日2010年4月14日 申请日期2009年10月21日 优先权日2009年10月21日
发明者彭宇行, 徐传福, 方建滨, 王勇献, 王正华, 翁玉芬, 车永刚, 陆平静 申请人:中国人民解放军国防科学技术大学;
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1