软件学报
JOURNAL OF SOFTWARE 
1999年 第10卷 第5期 Vol.10 No.5 1999



基于超平面的块数据分布策略 
杜建成　黄　浩　郁卫江　陈道蓄　谢　立
摘要　文章提出了基于超平面的块数组分布策略.这是一种单向的数组分布方法,它以简单的方式有效解决了不一致计算环境和不规则数组扫描情况下的数组分布问题.它可以作为对传统方法的一个补充.更重要的是,此项工作为自动数据分布提供了一种思路.
关键词　数据分布,计算分布,不一致计算环境,超平面.
中图法分类号　TP311
Hyperplane-based Block Data Distribution Strategy
DU Jian-cheng　HUANG Hao　YU Wei-jiang　CHEN Dao-xu 　XIE Li
(State Key Laboratory for Novel Software Technology　Nanjing Uni versity　Nanjing　210093)
(Department of Computer Science and Technology　Nanjing University　Nanjing　210 093)
Abstract　 In this paper, a hyperplane-based block data distribution strategy is presented which is characterized by the unidirected data distribution. This strategy can solve the data distribution problems under the ununiform computational environme nts and the irregular data reference mode simply and effectively. It can be take n as a supplement for the traditional scheme. Furthermore, this research present s a new thought for the automatic data distribution.
Key words　 Data distribution, computation distribution, ununiform computational environment , hyperplane.
　　数据并行语言,如Fortran D,HPF,Linda等等,都是数据驱动语言.在分布存储系统中,由 数据的分布来决定计算的分布.一般来说,数据(通常指数组)分布（distribution)包括3个步 骤：数组的切割(partitioning)、对齐(alignment)和分配(allocation).数组的分布是由数 组的引用模式决定的.数组分布要满足两个目标：负载平衡和驻地通讯开销(residual commu nication)最小.驻地通讯是指某个处理结点由于引用了非本地结点的数据而导致数据在这两 个结点之间的移动.
　　很多数据并行编程系统将数据分布的任务交由用户去完成,如Fortran D.Fortran D ［1］中所提供的数组和计算分布过程为：首先由用户将数组对齐到某个模板(template) 上,模板是一个虚拟的数组空间,然后将该模板按某种方式映射到各个处理结点上.模板的映 射方式有BLOCK映射和CYCLIC(m)映射.
　　当确定了数组的分布之后就可以进行计算的分布了.如果数组分布是规则的,则计算分布 算法比较简单,不规则的数组分布也导致复杂的计算分布函数.传统的数据分布策略基于按维 分布,不能很好地处理不规则数组访问模式下的数据分布.本文提出基于超平面的块数据分布 策略,能够以一种简单的方式有效解决不一致计算环境和不规则数组访问情况下的数据分布 问题. 
1　基于超平面的块数组分布策略
1.1　平行超平面
1.1.1
循环模型
　　我们考察如下的循环模型.
　　DO/DOALL　I0=L0;U0:S0
　　　DO/DOALL　I1=L1;U1:S1
　　　......
　　　　DO/DOALL Ik-1=Lk-1;Uk-1:Sk-1
　　　　A0(f0,0 (I0,I1,...,Ik-1),f0,1(I0,I1,..., Ik-1),...,f0,k-1(I0,I1,...,Ik-1))=
　　　　F(A1(f1,0(I0,I1,...,Ik-1),f1,1(I0,I1,...,I k-1),...,f1,k-1(I0,I1,...,Ik-1)),...,
　　　　Am(fm,0(I0,I1,...,Ik-1),fm,1(I0,I1,...,Ik- 1),...,fm,k-1(I0,I1,...,Ik-1)))
其中fi,n(0≤i≤m,0≤n≤k-1)是形如a0i,nI0+ a1i,nI1+ ...+ak-1i,nIk-1+aki,n的线性函数,F是关于Ai(1≤i≤m)的 函数,由fi,n(0≤n≤k-1)所构成的函数空间为

简记为F＝AI＋Ak,很多科学和工程问题中的计算都具有这种标准的循环形式.
　　一些常见的循环变换和优化方法,如循环剥离（loop peeling)、循环分布(loop dist ribution)以及循环交换(loop interchange)都有助于得到这种循环的标准形.我们也把这种 形式的多重循环称为一个相(phase).
1.1.2　平行超平面
　　设A为k维数组,其各维为x0,x1,...,xk-1,A的平行超平面是指一组平行的k-1 维的被A所限制的有限数组空间,如二维数组的超平面是该数组上的一组平行“线段”,三维 数组的超平面是该数组上的一组平行“平面”.在我们的循环模型中,若第l个嵌套循环为可 并行的DOALL循环(0≤l≤k-1),则由l所确定的数组Ai(0≤i≤m)的超平面为
.
其中il为常数,Ll≤l≤Ul,简记为X＝F(il,I),定义il为该超平面的索引.超平面 的方向指其法线方向,定义为v→=a→i,0×... ×a→i,l-1×a→i,l+1×...×a→i,k-1,其中a→i,j(0≤j≤k-1,i≠l)形如(a 0 i,ja1i,j...ak-1i,j)T.若v→与x i维平行,称其方向为标准的,为方便起见,也称其方向为xi；若v→不与 任何维平行,称其方向为非标准的.若某个非标准的超平面t在A的xp0,xp1,..., xpk-2侧面上的投影面积等于该侧面的面积,则称xp0,xp1,...,xp k-2侧面的法向为t的可替代方向.对于二维数组的超平面,可以将其方向归为3类： 与垂直轴（y轴)平行的,称为y向,可表示为y=c；与水平轴（x轴)平行的,称为x向,可表示为x =c;不与任何轴垂直,称为z向,可表示为y=ax+b,a≠0.超平面的面积定义为该超平面所包含的 数组元素个数.在我们的模型中,循环i所决定的超平面的面积为t0t1...ti-1t i+1...tk-1,tl=Ul-Ll/Sl+1(0≤l≤k-1,l≠i).
　　 显然,二维数组的超平面是一组平行的线段.三维数组的超平面是一组平行的平面.
　　在多重循环里,有若干个循环是可并行的,我们总是取最外层的并行循环来定义数组超平面. 
1.2　通 讯
　　在讨论数组的切割和分配之前,先说明一下通讯模式.通讯可以分为3类：(1) 数组分配 和再分配时的通讯,前者称为全局数组分配通讯,后者称为局部数组分配通讯,统称为分配通 讯(allocation communication);(2) 驻地通讯(residual communication)是指,由于两个 节点之间存在假依赖关系而产生的通讯;(3) 依赖通讯(dependence communication)是指,由于两个节点之间存在真依赖关系而导致的一个节点向另一个节点发送所需数据.分配 通讯的过程为：将全局或局部数组中待分配的部分提取(G),发送(S),接收(R),如图1所示.G( R)操作的开销和要提取(接收)的数组是否连续以及数据量的大小有关.S操作的开销是指将数 组从A结点传给B结点的时间,为简单起见,不考虑A,B两点的路径长短,认为它只与要传送的数 组量有关.全局数组A的分配通讯开销为
DA=n*G(d,|LA|)+n*S(|LA|)+R(d,|LA|),　　(1）
其中n表示A被切割的块数,|LA|表示切割所得局部数组的体积.在很多情况下,|LA|=|A|/n,d 表示切割方向,也即超平面方向.G(d,|LA|)表示从A中按方向d提取出大小为|LA|的数组块的 开销,S(|LA|)表示发送大小为|LA|的数组块的开销,R(d,|LA|)表示按方向d接受大小为|LA| 的数据块的开销.即全局数组A的分配开销为系统中所有节点从开始准备接受局部数组到收到 数组的等待时间中的最长者,也即等于分配者节点将A按方向d分成n块大小为|LA|的数组块并 发送完这n块数组之后,加上接受最后一个数组块的节点完成接受的时间.我们假定分配者节 点本身不参加局部数组的处理.局部数组LA的再分配开销为
NDA=(n-1)*G(d,|LLA|)+(n-1)*S(|LLA|)+(n-1)*R(d,|LLA|) ,　　（2）
其中|LLA|是指将局部数组LA切割之后所得到的每块的体积,一般|LLA|=|LA|/n.数组A的重分 配开销等于局部数组LA的分配开销,而每个局部数组的分配开销是相同的,均是将本地数组分 成n-1个包并发送这n-1个数据包和接受来自其他节点的n-1个数据包的时间之和.以上在考虑 通讯代价模型时,认为各个处理节点的计算能力相同,数组被均匀地切割和分配.

1.3　数据分布策略
1.3.1　数组的切割
　　数组A的切割方向是指切割A所形成的截面的法方向.如果已经确定了数组A的超平面方向 ,就以此方向作为数组的切割方向.若此方向为标准方向xi,则数组和计算的分布较简单,只 需沿着xi方向即对数组的xi维进行切割和分配.若为非标准方向,尤其是涉及到数组的重 分布时,工作要复杂些.
　　下面,我们以二维数组为例来说明数组的切割.如果超平面方向为x向,则对x轴进行切割. 如果超平面方向为y向,则对y轴进行切割.如果超平面方向为z向,此时有两种方案可供选择： (1) 按z方向进行数组的切割和分配,分配出去的数组块所形成的局部数组可以改变结构,使 之更有利于快速存取,但需要改变相应的数组引用模式,若该数组在其他位置以不同的引用模 式被引用,则需要进行数组结构的恢复,这会带来一定的开销.因此,是否改变局部数组结构, 需要综合考虑这两种因素;(2) 若存在可替代方向,则以z方向的可替代方向进行数组的切割 和分配.设x,y维的长度分别为n,m,超平面为y=ax+b(a≠0),若a≤m/n,则可替代方向为y,故可 对y轴切割,若a>m/n,则可替代方向为x,故可对x轴切割,分别如图2(a),(b)所示,其中虚 线表示切割线.例如,要将图2(a)中从i到i+k-1的k个超平面分配到某个处理结点上,则将A(i:i+k+a*n,0:n-1)从A中提取出来,发送给该结点,其中n表示x维的长度.第1种切割方 法不会造成无用数据的传递,但G操作的开销较大,若数组结构不重构,则R操作的开销也较大. 第2种方法要向每个处理节点传送a*n2个无用数据,如图2(a)中阴影部分,其中n表示x 维的长度.这样,若数组A被分成m块,会有a*n2m个无用数据被传递.这种方法的优点是,G,R 的操作开销较小,尤其是数组的存储方向(按行或按列)与切割方向一致时,可以通过计算两种 方法的分配通讯开销,采用开销最小者.

　　不管采取第1种还是第2种方法,都会面临这样一个问题,即当数组已被修改并且需要重分 配时,首先需要在各个处理节点之间进行数组的一致性维护和数组的重定界.为讨论方便起见 ,假定局部数组未重构.在图3中,Ai-1,Ai,Ai+1是分配在处理节点pi-1 pipi+1上的局部数组,它们是将数组A对y轴切割所得到的相邻的3块数组,局部计算 按图中斜线方向进行.Rku,Rkd(k=i-1,i,i+1)是局部数组的未用区,为了保证各个节 点之间数组的完整性和一致性,需要将WkuRk-1d(k=i,i+1);WkdRk +1u(k=i-1,i),“”表示传送操作,如图3所示.然后就可以在此基础上对局部数组进行再分配.在对局部数组再分配时,由于局部数组块之间 存在着部分重叠,应注意对重叠部分的处理.在图4中,一组平行的水平线表示对数组的切割线 ,其中实线表示局部数组块的起始位置,虚线表示局部数组块的结束位置,相邻的实线和虚线 之间的区域是重叠区.重分配时,首先要确定局部数组的边界,使得各个局部数组不重叠.例如 ,可以统一用实线或虚线作为数组的边界.这项工作被称为数组的重定界.数组的重定界应在 数组的一致化之后进行.在此基础上,就可以进行数组的重分配了.


1.3.2　数组的分配
　　当同一相中各个数组的超平面确定之后,应将具有相同索引的超平面分配到相同的处理 节点.我们采用按块进行分配的方法.按块分配的原因是：(1) 便于进行数组重分配；(2) 便 于在不一致计算环境下进行数组分配；(3) 产生较少的驻地通讯.
1.3.3　同一相中相同数组的多次引用 
　　在前面的循环模型中,若存在Ai=Aj(1≤i,j≤m),Ai,Aj均处在赋值号的右侧, 引用模式不一样,对此可以有两种处理方法：(1) 数组的复制.例如,可以将其中的一个更名 为B,并按其原有的超平面进行数组的分布.这种方法会导致额外的存储空间和数组分配开销, 但可以消除驻地通讯.(2) 若它们的超平面方向或可替代方向有相同的,并且相同索引超平面 与该数组某维的交点距离保持不变,则可以按这种相同方向进行数组的切割,而不用进行数组 的复制.这种方法有一定的驻地通讯,但消除了额外的存储和数组分配开销.具体采用哪一种 方案,要对数组复制开销和驻地通讯开销进行综合考虑.
1.3.4　不同相中相同数组的多次引用
　　设A在相Pi中可选的超平面方向集为SPi={dil|l=1,2,...,ni},若A在 相P1,P2,...,Pk中出现,为了寻找A在各相中最佳的切割方向,我们建立超平面方向转 换图G=(V,E).该图包含k层,每层包含ni个节点,每个节点代表一个超平面方向,第j层代表 SPi,相邻层的任两节点vmi,vni+1之间有边相联,该边的权代表了A 由方向vmi转换为vni+1的再分配开销,其代价由式(2)计算可得.若两点的超平 面方向相同,则权值为0.我们的问题就是,在1到k层之间寻找一条权值之和最小的路径.这是 一个路径搜索问题,其时间开销为O(Πki=1ni),实际问题中的ni比 较小,因此,该方法还是实际可行的.
1.3.5　不一致计算环境中的数组分配
　　在一致计算环境下,各个处理节点具有相同的计算能力,数组的分布较为简单,可以对数 组按某个方向进行均匀的切割和分配.在NOW环境中,包含了不同类型的节点,如微机、工 作站、小型机等等,这些机器的计算能力是不同的；即使对同一类型的设备,在某段时间内, 其负载也常常不一样,故此时所能提供的计算能力也是不同的.设a1,a2,...,an为NO W环境中处理节点的相对计算能力,a1+a2+...+an=1且a1≥a2≥...≥an.把数 组A0切割成A1,A2,...,An这n个模块,为了达到负载平衡,应满足以下条件：|A1|= a1|A0|,|A2|=a2|A0|,...,|An|=an|A0|.其中|Ai|(0≤i≤n)表示数 组Ai的体积.
2　性能测试和评估
2.1　实例研究
　　例1: for (i=0;i<=N;i++)
　　　　　　　for (j=1;j<=N;j++)
　　　　　　　　A［i+j,j］:=A［i+j-1,j-1］+B［j,i］
通过依赖关系分析发现,第1个循环可并行化,我们以此循环来确定A,B的超平面.由第1.1 .2节可知,A在“:=”两端的超平面为

它们均可表示为y=x+b(b为常数),其可替代方向为x向,B的超平面为

即y=c(c为常数).如图5所示,对A,B数组进行切割,其切割方向即为超平面方向(注意方向的定 义,参见第1.1.2节).如果按传统的方式对A数组按块分布,无论是按A(:,block),还是按A(blo ck,:)分布,都使得子任务之间不可并行执行.A也可以按照可替代方向进行切割.表1给出了N= 100,处理节点为2和4时的A,B分布方案,其中A按照可替代方向进行切割.

表1

处理节点数A的分布方案B的分布方案
2A［50p:50p+150,*］,p=0,1B［*,50p:50(p+1)］,p=0,1
4A［25p:25p+125,*］,p=0,1,2,3B［*,25p:25(p+1)］,p=0,1,2,3

2.2　实验结果
　　我们在6台RS6000工作站通过ATM联结而成的NOW环境下,借助PVM,对基于超平面的块数 组分布下的并行计算进行了研究,主要将该数组分布方法与传统的块分布方法作了一些比较. 下面考察的问题均是可并行计算问题,而并行性的识别与获取不是本文的研究重点,因此不作 讨论.无论是采用SPMD模式还是Master/Slave模式,程序的执行过程主要包括数据的分布、局 部计算、驻地通讯以及数据的回收.由于执行模式对测试项没有影响,因此,我们统一采用Mas ter/Slave模式来执行程序.
　　实验1. 对以下循环并行计算.
　　for (i=0;i<N;i++)
　　　　for(j=0;j<N-2;j++)
　　　　　A［i+j,j］:=A［i+j,j］+A［i+j+2,j+2］
　　这个例子中的计算量较少,因此,通讯量的多少决定了程序的执行时间.而通讯量的多少 由数组的分布方法所决定.表2、3是针对不同大小的数组A的测试结果.其中hd,bd分别表示 基于超平面的数据分布和传统块分布,这里,bd为(:,Block),执行时间和加速比均取10次执 行结果的平均值.
表2

并行任务数执行时间(ms)加速比
hdbdhdbd
22 7245 3030.0780.038
41 9973 9090.1020.052
51 8523 6450.1100.055

A为2000*1000的实数矩阵
表3

并行任务数执行时间(ms)加速比
hdbdhdbd
210 85721 2760.0750.038
47 94515 6580.1030.052
57 33414 4720.1110.056

A为4000*2000的实数矩阵　　
从表2、3可以看出,不同的数据分布模式对程序的执行时间影响很大.附带说明一下,以 上测试结果的加速比甚至远小于1,即在这个例子中,通讯开销(数据的分布、驻地通讯、数据 的回收)太大,使得并行执行毫无意义.
　　实验2. 对复数数组A中所有倾斜角为45°线上的数据进行傅里叶变换.这是二维 傅里叶变换问题,在这个例子中,傅里叶矩阵已经计算出来了.下面给出的是串行计算的循环 实例.
　　for (i=0;i<N;i++)
　　　　for (j=0;j<N;j++)
　　　　　for (k=0;k<N;k++) 
　　　　　　　DA［i,j］:=cpladd(cplmul(FFT［j,k］,SA［i+k,k］),DA［i,j］)
　　这个例子中的计算量较大,我们通过它来研究一下数组的分布方法对最终的执行加速比的影 响.按hd分布时,DA,SA,FFT的超平面分别为

即FFT不进行切割,作为一个整体分配给各个子任务.SA也可按可替代方向分布,如rd栏所示 .按bd分布时,FFT,SA分别按(Block,:),(:,Block)切割分布,并且align FFT(i,j) w ith SA(j,i),DA不进行切割,作为一个整体分配给各个子任务,最后所有的DA汇集到 Master上进行累加,得到最终结果.表4、表5是针对不同大小的数组SA的测试结果,表 中执行时间和加速比均取10次执行结果的平均值.
表4

并行任务数执行时间(ms)加速比
hdbdhdbdhdbd
2472 830506 681515 9151 .8561.7321.701
4230 455234 519240 0363.8083.7423.656
5185 337190 569192 9584.7354.6054.548

SA为1200*600的复数矩阵
表5

并行任务数执行时间(ms)加速比
hdbdhdbdhdbd
23 417 5523 585 6283 725 13 81.8771.7891.722
41 668 3191 733 2311 761 7933.8453.7013.641
51 339 7421 378 6141 424 5364.7884.6534.503

SA为2000*1000的复数矩阵
　　初步实验表明：当数组引用模式不规则时,基于超平面的块数据分布方案要比传统的数据分 布方法有效.当超平面的方向是标准方向时,就是一种块分布,而按超平面的可替代方向进行 数据分布,可以看成是二者的折衷.
3　与相关工作的比较
　　Fortran D,HPF等提供了基于维对齐的按BLOCK或CYCLIC(m)方式的多向(维)的数组 分配策略［1］.这种方法不能很好地处理不按维扫描的不规则数组引用模式,而多维 分割增加了计算分布的复杂度.文献［2］讨论了不一致计算环境下的数组分布.它将驻地通 讯开销归结为内边(internal edges)和外边(external edges)的长度,由于没有考虑数组的 具体引用模式,故这种抽象不能很好地反映实际情况.同时,为了寻求最短的内边和外边长度, 数组的切割不够规则,增加了计算分布的复杂性.文献［3］给出了在循环当中同一数组被读 多次情况下寻求一致化超平面的方法,但它没有考虑同一数组既读又写的情况,而且循环变换 开销较大.本文给出了基于超平面的块数组分布模型.这是一种单向的数组切割和分配方案, 因此,数组和计算的分布较为简单,能够处理不按维扫描的不规则数组引用模式,在不一致计 算环境下可以方便地进行数组的分布.由于超平面由可并行循环决定,故这种数组分布不会产 生依赖通讯.同时,由于采用按块分布方案,所以能够最大限度地削减驻地通讯开销.我们希望 以此作为对传统方法的一个补充. 
4　小结
　　本文提出了基于超平面的块数组分布策略,给出了确定超平面以及如何按超平面对数组 进行切割和分配的方法,讨论了同相和不同相中同一数组被多次读写的情况和不一致计算环 境下数组的分布问题.初步实验表明,这是一种简单、方便和有效的数组分布方案.我们希望 以此作为对传统方法的一个补充.更重要的是,我们的工作为自动数据分布提供了一个思路. 关于两种方案的结合和自动数据分布工作,还需要进一步的研究.
　
本文研究得到国家863高科技项目基金资助.
作者杜建成,1971年生,博士生,主要研究领域为并行计算.
　　黄浩,1957年生,副教授,主要研究领域为计算机网络,并行编译.
　　郁卫江,1973年生,硕士生,主要研究领域为自动并行编译.
　　陈道蓄,1948年生,副教授,主要研究领域为分布式处理,并行计算.
　　谢立,1942年生,教授,博士生导师,主要研究领域为分布式处理,并行计 算.
本文通讯联系人:杜建成,南京 210093,南京大学计算机科学与技术系
作者单位:(南京大学计算机软件新技术国家重点实验室　南京　210093) 
         (南京大学计算机科学与技术系　南京　210093)
参考文献
　[1]　Tseng C W. An optimizing Fortran D compiler for MIMD distributed-m emory machines［Ph.D. Thesis］. Rice University, 1993
　[2]　Kaddoura M, Ranka S, Wang A. Array decomposition for nonuniform comput ational environments. Journal of Parallel and Distributed Computing, 1996,36(5): 91～105
　[3]　Ramannujam J, Sadayappan P. Compile-time techniques for data distribu ted memory machines. IEEE Transactions on Parallel and Distributed Systems, 1991 ,2(4):472～482
本文1998-01-22收到原稿,1998-04-20收到修改稿
