基于共享数据的单程序多数据型程序自动并行化方法

文档序号:6410732阅读:354来源:国知局
专利名称:基于共享数据的单程序多数据型程序自动并行化方法
技术领域
本发明专利涉及一种高效的串行源程序自动并行化技术,可将单程序多数据(Single Program Multiple Data,SPMD)型串行源程序自动地转换为并行程序,其属于并行计算机技术领域。
现有公开的程序自动并行化技术主要基于传统向量化的相关性分析和程序转换的方法。如,美国SGI公司的Challenge 4L系统,有4个CPU,通过总线共享主存,配有自动并行化工具软件PFA(Power FORTRAN Accelerator)。Perfect Benchmark的12种测试程序的加速比测试结果,其不足之处6种小于1(4机并行,理想加速比为4,加速比小于1表示效果不如单机);4种稍大于1;1种为1.81,共有11种效率不到50%。据报导,上海复旦大学的自动并行化工具软件AFT于1996年6月16日通过技术鉴定(国际电子报1996年6月17日)。AFT进一步采用了过程间分析,符号分析,全局分析等技术,使并行化效果超过了国际同类先进商业软件系统,在一些关键技术上达到了国际领先水平。在与PFA同样的条件下,12种测试程序的加速比测试结果,其不足之处2种小于1;6种稍大于1;共有8种效率不超过50%。综上可见,现有的程序自动并行化技术十分复杂,效果不够理想。PFA和AFT都要求有共享主存(或共享存储器)硬件的支持。当节点机(以下简称节点)数增加时,访问共享主存将产生通信瓶颈,降低程序运行的效率。因此,两者都不适用于节点数较多的并行机系统。
本发明专利目的是为了避免以上所述的技术不足之处,提出了一种基于共享数据的单程序多数据型程序自动并行化方法。
本发明专利的目的内容通过以下措施来实现(1)数组的自动均衡划分和分配数组划分的原则是,各节点的计算量要尽可能均衡,而通信量尽可能小。一个二维(或三维)数组,要分配给n个节点去计算,可在X(或者Y)方向上均匀地划分为n份,依次分配给n个节点。
同理,也可以在X和Y两个方向,或X,Y和Z三个方向上划分,分别称为二维划分或三维划分。
(2)生成节点源程序“毛坯”由于串行程序属于SPMD模型,每个节点源程序和串行源程序基本相同,只是计算的数据不同,故可将串行源程序拷贝n份,分别供n个节点生成源程序之用。各个节点要负责计算所分配数组范围中的数据,因此依次修改拷贝中有关循环程序中的上、下限,即生成各节点源程序“毛坯”。
(3)自动寻找节点间的共享数据分析节点源程序“毛坯”流程,扫描有关语句中数组下标,找出不属本节点的数据,即为与邻近节点的共享数据,用表记录其名称,属性,宽度及共享方向等,供生成通信命令之用。
(4)同步点定位一帧计算结束即应通信,称为同步点,位于串行源程序最外层循环的末尾,该末尾语句的标号,即为同步点标号,供自动插入通信和同步命令之用;也可以通过分析源程序控制流程,自动定位最外层循环末尾处的同步点。
(5)扩充高级语言编译程序的通信和同步库函数并行程序比串行程序要增加通信和同步功能,这可通过扩充高级语言编译程序的库函数来实现。扩充的方法与硬件结构有关。调用通信库函数或同步库函数就是通信命令或同步命令。
(6)自动生成和插入通信和同步命令根据共享数据表中的共享数据及其有关参数,再利用所扩充的通信和同步库函数,即可自动生成通信和同步命令,并插入各节点源程序的同步点处。
(7)数组范围重定义每个节点运行过程中要访问的数组范围只需包括本节点负责计算的数据和计算所需的共享数据,节点源程序定义数组范围应包括两者之和。而原串行源程序定义的数组范围包括了全部网格点,这就是数组范围重定义的任务。进行数组范围重定义可以节约节点的存储空间。
利用以上技术手段,就可生成各节点源程序,也即实现了程序的自动并行化。每个节点的源程序由传统的串行编译程序,依次编译生成各节点的目标程序。将各节点的目标程序依次加载到各节点中,即可并行运行了。
本发明专利与现有技术对比,有如下优点(1)构思方案新颖,方法设计合理,具有创造性,可将SPMD型计算程序自动并行化,生成的并行程序运行效率高。
(2)生成的并行程序运行流程与原串行程序完全一致,故可保证并行程序的正确性。
(3)并行程序运行效率决定于每个节点的“计算/通信”比,计算的数据越多,运行的效率就越高。尤其是对于大型计算程序并行化的效率更高。
(4)既适用于共享主存的紧耦合系统,也适用于消息传递的松耦合系统,特别适合于节点数较多的松耦合系统。
(5)本发明利用通信命令访问邻近节点的共享数据,每个节点不会直接访问其它节点的存储器,不要求各节点机的存储器组成统一的存储空间,各节点机相对独立,相互连线少,可以简化并行机的硬件结构。
附面说明如下图自动并行化工具软件流程图人机对话模块1-1(问节点数(n)?人机对话模块1-2(问网格划分方向(X/Y/Z)?)人机对话模块1-3(问同步点标号?)数组自动化划分模块2节点源程序“毛坯”生成模块3寻找共享数据模块4通信和同步命令生成模块5通信和同步库函数6节点正式源程序7实施例结合附图
作详细叙述如下按本发明的方法,为EP-860全互连多机系统,设计了一个自动并行化工具软件APF(Auto-Parallelizing Fortran),可将用户的串行Fortran源程序自动转换为并行源程序(各节点的源程序),再利用经过扩展库函数的传统串行Fortran编译程序,编译生成并行目标程序(各节点的目标程序)。APF成功地将一个51*42网格点的流场计算程序并行化,在EP-860全互连多机系统上运行,8机的加速比为6.7,效率达到83.8%。(本发明主要适用于SPMD型计算程序的并行化,故采用SPMD型实用程序来测试。)APF由以下模块组成(1)人机对话模块1-1、1-2、1-3询问节点机数n?按什么方向划分网格点?同步点标号?(2)数组自动划分模块2数组划分的原则是,各节点的计算量要尽可能均衡,而通信量尽可能小。
例如,一个三维数组,在X,Y,Z三个方向上的最大维长为MX,MY,MZ,要分配给n个节点去计算,可在X方向上均匀划分为n份,依次分配给n个节点。如MX为n的整倍数,则划分如下0#节点1至(MX/n); 1至MY;1至MZ;1#节点(MX/n+1)至(2MX/n); 1至MY;1至MZ;(k-1)#节点((k-1)*MX/n+1)至(k*MX/n);1至MY;1至MZ;(n-1)#节点((n-1)*MX/n+1)至(MX);1至MY;1至MZ;0#节点(1MX/n,1MY,1MZ),若MX非n的整倍数,设v=MX(MODn),则有v个节点在X方向上多分配1。
(3)节点源程序“毛坯”生成模块3将原串行源程序拷贝n份,按上述数组划分方案,依次修改拷贝中有关循环程序相应的上、下限,生成各节点的源程序“毛坯”。
(4)寻找共享数据模块4分析节点源程序“毛坯”流程,扫描有关语句中的数组下标,找出不属本节点的数据,即为与邻近节点的共享数据,用表(共享数据表)记录其名称,属性,宽度及共享方向等,供生成通信命令之用。同时,进行数组范围重定义。
(5)通信命令和同步命令生成模块5各节点依次根据共享数据表,生成通信命令,并连同同步命令一起,插入其源程序“毛坯”同步点标号所在的位置,生成节点正式源程序。
(6)扩充FORTRAN编译程序的通信和同步库函数6根据机器的通信特点进行设计。
要按数据、数组、定点、浮点、单精、双精等不同格式,设计各种不同的通信库函数。
本实施例的操作过程如下<pre listing-type="program-listing"><![CDATA[C>APF ff.f /*将Fortran串行源程序ff.f自动并行化*/  C>Input Number of Nodes8 /*回答节点数为8*/  C>Partition Direction(X/Y/Z)?X/*回答按X方向划分网格点*/  C>Input Synchronization Point(Yes/No)? Y /*回答要输入同步点*/  C>Input86 /*输入同步点标号为86*/  OK!/*自动生成各节点源程序ff80.f,ff81.f,ff82.f,ff83.f,ff84.f,  ff85.f,ff86.f,ff87.f*/  C>mf860n ff80.f-o ff80.out/*依次编译节点源程序生成节点目标程序   */mf860n ff81.f-o ff81.out mf860n ff82.f-o ff82.out mf860n ff83.f-o ff83.out mf860n ff84.f-o ff84.out mf860n ff85.f-o ff85.out mf860n ff86.f-o ff86.out mf860n ff87.f-o ff87.outC>edit ff8.cfg/*编辑配置加载程序*/ P-num8 /*定义节点数为8*/ Place 0 ff80.out/*ff80.out加载到节点机P0,依次类推*/ Place 1 ff81.out Place 2 ff82.out Place 3 ff83.out Place 4 ff84.out Place 5 ff85.out Place 6 ff86.out Place 7 ff87.outC>RUN860 ff8.cfg/*加载并运行并行目标程序,显示计算结果*/]]></pre>
权利要求
1.本发明涉及一种基于共享数据的单程序多数据型程序自动并行化方法,所述的自动并行化方法可用于设计基于共享数据的程序自动并行化软件工具,该软件工具由人机对话模块1-1、1-2、1-3,数组自动划分模块2,节点源程序“毛坯”生成模块3,寻找共享数据模块4,通信和同步命令生成模块5,通信和同步库函数6等组成,其技术特征在于所述的数组自动划分模块2能根据人机对话关于节点数和数组划分方向的指示,找出最好的数组划分方案,使各节点的计算量均衡,而通信量小;缺省时按X方向一维划分。
2.根据权利要求1所述的一种基于共享数据的单程序多数据型程序自动并行化方法,其技术特征在于所述的节点源程序“毛坯”生成模块3,是将原串行源程序拷贝n份,依次修改拷贝中有关循环程序相应的上、下限,即生成各节点的源程序“毛坯”。
3.根据权利要求1所述的一种基于共享数据的单程序多数据型程序自动并行化方法,其技术特征在于所述的寻找共享数据模块4,是通过分析节点源程序“毛坯”流程,扫描有关语句中数组下标,找出不属本节点的数据,即为与邻近节点的共享数据,用表(共享数据表)记录其名称,属性,宽度及共享方向等,供生成通信命令之用。
4.根据权利要求1所述的一种基于共享数据的单程序多数据型程序自动并行化方法,其技术特征在于所述的通信命令和同步命令生成模块5,是各节点依次根据共享数据表,生成通信命令,并连同同步命令一起,插入其源程序“毛坯”同步点标号所在的位置,就形成节点正式源程序7。
全文摘要
本发明涉及一种基于共享数据的单程序多数据(SPMD)型串行程序自动并行化方法,属于并行计算机领域,用于设计SPMD型串行程序的自动并行化软件工具。本发明通过自动划分数据,自动寻找共享数据,自动生成通信和同步命令,来实现程序的自动并行化。不要求节点机有统一的存储空间,节点机相对独立,相互连线少,故可简化硬件结构,对于中、大规模并行机,效果尤为明显。自动化程度和运行效率高,一个实施例的实际并行效率达到83.8%。
文档编号G06F9/00GK1180192SQ96118769
公开日1998年4月29日 申请日期1996年10月10日 优先权日1996年10月10日
发明者康继昌, 朱怡安, 肖骊, 冯百明 申请人:西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1