用于大容量消息广播的方法和系统的制作方法

文档序号:6562229阅读:90来源:国知局
专利名称:用于大容量消息广播的方法和系统的制作方法
技术领域
本发明涉及在大型计算系统中的消息广播,并且特别地涉及在大型计算系统中的消息广播方面实现最优结果的算法。
背景技术
大型计算环境通常包括彼此间进行着正在处理的通信的计算机的网络。可以对联网的计算机进行松散的耦合从而形成计算机集群。在这样的布置中,松散耦合的计算机紧密地一起工作,使得在很多方面可以将其看作一个计算机。另外,许多这种大型环境提供并行处理能力。术语“并行处理器”有时用于具有多个处理器、可用于并行处理的计算机。具有成千上万个这种处理器的系统被称为大规模并行系统。
存在多个不同种类的并行计算机或并行处理器。通过在称为处理单元(PE)的处理器之间以及在处理器与存储器之间的互连种类来区分不同种类的并行计算机或并行处理器。并行处理器机还分为对称多处理器和不对称多处理器,这取决于是否所有的处理器都能够运行所有的操作系统代码,以及比方说访问I/O(输入/输出)设备,或者某些处理器是否多少具有某些特权。
计算机集群和并行处理既用于获得更快的速度又用于获得更好的性能。然而,系统的速度和性能极大地依赖于在计算操作期间是如何处理和传输数据的。就这一方面而言,在大型计算系统的设计中,消息广播变得最为重要。计算机网络中的广播是指对分组进行传输,网络上的每个设备将接收(概念上地)该分组。这些分组通常较小并且具有固定的大小。在并行应用级,广播是指从运行在并行计算机上的一个处理器向另一个处理器传输消息。消息可以是大容量的并且包括多个分组。
在大型计算环境(特别是并行计算)的设计中的一个特别的挑战是以协作的方式来使用从本质上说通常基本上是顺序的算法,以获得期望的并行结果。必须将大多数算法完全重新设计为在并行环境中有效。这种情况在同一程序的多个副本有可能互相影响的环境中尤其成立。
如前所述,在这种环境中并行应用广泛地使用广播,并且因此现有技术一直努力争取提供能够在一组进程之间有效地广播大容量消息的算法。遗憾的是,当前使用的现有技术算法不能够提供最优的通信调度,或者这种调度法对于在不同种类的进程(诸如二的幂次方个和非二的幂次方个进程)上实现大容量消息广播是不实际的。例如,散播-集合(Scatter-Allgather)算法的实现是直接的,但是其没有完全地和最优地使用可用的带宽。相反,边不相交的扩展二项式树(Edge-disjoint SpanningBinomial Tree)算法的性能更佳,但却具有非常复杂的结构并且只工作于二的幂次方个进程上。既工作于2的幂次方个进程上又工作于非2的幂次方个进程上的另一种算法是分区交换(Partition exchange)算法,但是尽管该调度法的通信内容部分比较简单,但通信合作方的确定非常复杂。因此,需要一种用于对大容量消息进行广播的能够克服现有技术的上述缺点的新颖算法。

发明内容
通过所公开的用于在并行计算环境中进行消息广播的方法以及相关联的具体实现该方法的机器可读的程序存储设备,克服了现有技术的缺点,并且提供了其他优点。该方法包括步骤通过首先确定如何划分待广播的消息来首先执行创建处理阶段,以及接着建立进程间的父-子关系,使得父进程负责将接收到的任意消息传递给所述子进程。此后,保证所有的非根进程获得该消息的一个片段,并且将其一并传递给该非根进程的指定子进程;并且执行包括多个子步骤的流水线处理阶段,在此期间,通过在进程之间建立合作方关系并使得每个进程基于预先选定的标准与其合作方交换消息片段来进一步对已广播的消息片段进行流水线处理。
通过本发明的技术,可以实现其他的特征和优点。在此详细描述了本发明的其他的实施例和方面,并且这些实施例和方面被认为是所要求保护的本发明的一部分。为了更好地理解本发明的优点和特征,请参考描述和附图。


在本说明书所附的权利要求中特别地指出并且明确要求保护被视为本发明的主题。根据下述结合附图而进行的详细描述,本发明的前述的和其他的目的、特征和优点将显而易见,在附图中图1是对根据本发明的一个实施例的用于广播的计算环境的示意性说明;图2是对根据本发明的一个实施例的创建处理的流程图说明;图3是对根据本发明的一个实施例的流水线处理的流程图说明;图4是通常用于大容量消息MPI BCAST的散播-集合算法的例子;图5是根据本发明的用于广播大容量消息的算法的例子;以及图6是用于将图5的算法扩展到非二的幂次方个进程的算法的例子。
具体实施例方式
本发明提供了一种用于广播大容量消息的新颖算法。该算法提供最优的通信调度,并且这种调度法对于在通信库中实现大容量消息广播来说是实际的。特别地,该算法既在二的幂次方个进程上也在非二的幂次方个进程上执行对大容量消息的最优广播。
图1提供了对计算环境100的示意性说明,其中计算环境100包括多个节点110,这些节点110经由通信网络120联网在一起。尽管可以选择各种不同的实施例,但为了易于理解,在下述讨论中,假设计算环境100是并行处理器。通信网络120可以包括本领域的普通技术人员已知的各种组件,包括但不限于局域网(LAN)130。如图所示,还提供了由140一般地表示的一个或多个存储设备,其可以包括主存储器和高速缓冲存储器。
图2和图3分别提供了对本发明所建议的处理的流程图说明。然而,在考查这些流程图之前,应该注意,为了易于理解,在下述讨论中结合并行应用来使用广播。这些广播中所使用的标准是消息传递接口(以下称为MPI)标准。MPI标准定义了称为MPI BCAST的集合通信操作,MPI BCAST将用于此处的讨论,应该理解,在替代性的实施例中还可以使用其他类似的标准。
在MPI BCAST中,最初具有消息的进程称为根。根向一组进程发送消息。为了便于讨论,假设进程0是根。在MPI BCAST结束时,每个进程具有该消息的一个副本。在本例中仅讨论单一的大容量消息广播算法以使得对该讨论的理解始终相对简单,应该理解,相同的概念可以应用于从同一个源广播一系列消息。
为了在该组进程和(图1的)节点110之间有效地广播大容量消息,最广泛采用的方法是由根将大容量消息分成较小的片段并且以流水线操作的方式使这些片段进入系统中。不同的片段可以选取不同的路径到达其他进程。流水线操作的目的是完全利用系统中的可用带宽。现有技术中的多种大容量消息广播算法是使用这种方法来开发的。
这些算法之间的不同在于其流水线调度和调度方法,即如何构造调度。根据流水线调度,进程在每个通信步骤可以确定1)其通信合作方,即输入片段的源进程和该输出片段的目标进程;以及2)通信内容,即哪个片段输入而哪个片段输出。最优调度是性能的关键,同时较低的调度复杂性和开销使得算法可以被实际实现并被包含到诸如MPI之类的通信库中。
仔细地考查先前简要讨论的散播-集合算法、边不相交的扩展二项式树算法和分区交换算法的工作原理可能有利于获得对本发明的工作原理的更好的理解。
在通常用于大容量消息MPI BCAST的散播-集合算法中,根将消息分为P个片段,其中P是该组中的进程数,包括根。接着,根通过称为MPI_SCATTER的进程将整个消息散播给所有的P个参与进程。作为散播的结果,每个进程获得该消息的至少一个片段。接着,在称为MPI_ALLGATHER的每个进程处重新对散播的片段进行集合。在MPI_ALLGATHER中,P个进程中的每一个进程表现得仿佛其只具有散播之后的一个独特的片段,并且其将该独特的片段贡献给该组。
该算法易于实现。散播阶段和集合阶段中的调度法简单而直接。然而,该算法的性能并非最优,原因是在散播阶段没有完全利用可用的带宽,并且在集合阶段存在冗余的数据传输。将每个步骤中的通信合作方关系示出在下述表格中,该表格针对于使用该算法在4个进程上进行广播的例子。在下述表格中可以看出通信内容,其示出了每个进程上可用的片段。进程0是根,并且组中有4个进程。图4和表1示出了这样的例子表1

针对超立方体系统开发了n边不相交的扩展二项式树(nESBT)算法。其思想是通过合并n个扩展二项式树(SBT)来构造nESBT。从n-立方体中提取SBT,接着使该SBT旋转某个次数。根以循环的方式向SBT发送片段,并且沿一个SBT广播一个片段。该算法的性能比散播-集合算法的性能好,但是实现起来可能非常复杂。首先,nESBT图表构造非常复杂。其次,调度法的通信合作方部分虽然简单但是要在每个步骤期间确定通信内容,需要遍历nESBT图表,这带来较高的复杂性和开销。该算法可以移植到其他平台,但是仅作用于二的幂次方个进程。
另一种算法既处理二的幂次方个进程也处理非二的幂次方个进程。在申请中这种算法称为分区交换算法。其思想是在每个通信步骤期间,将P个进程分到若干个子集中。对于二的幂次方个进程,存在logP个子集,并且对于偶数的非二的幂次方个进程,存在logP+3个子集。对于奇数的非二的幂次方个进程,向该组添加一个虚进程(dummyprocess)。
虚进程不参与消息传递,并且该算法表现得仿佛存在P+1个进程。在每个步骤中,将一个进程与来自不同子集的另一个进程进行配对,并且在两者之间交换片段。一个进程先前已经接收哪个片段决定了该进程属于哪个子集,并且在当前步骤期间接着判断该进程应该发送和接收哪个片段。
对于二的幂次方个进程,通信调度与nESBT算法基本相同,只是构造方式不同。和nEBST算法不同,调度法的通信内容部分虽然简单但是尤其是对于非二的幂次方个进程,通信合作方的确定非常复杂。在理论上,nESBT算法和分区交换算法的性能好于散播-集合算法。然而,它们的调度法对于MPI实现来说是不实际的。
回头参考图2,在本发明中,提供了一种用于广播大容量消息的新颖方法,其能够实现最优通信调度,并且这种调度法对于在通信库中实现大容量消息广播来说是实际的。特别地,该方法以及相关联的算法对于在二的幂次方个进程上和在非二的幂次方个进程上的大容量消息广播都表现得最优。
使用新的调度法通过简单地检查进程ID(标识)的二进制表示可容易地确定通信合作方和通信内容二者。对于二的幂次方个进程,由该算法生成的通信调度相对地类似于结合nESBT算法和分区交换算法而讨论的但是具有新颖的、低复杂度的和低开销的调度法的算法。对于非二的幂次方个进程,通信调度和调度法二者都与现有技术的解决方案非常相同。
对于在P(P是二的幂次方)个进程之间的广播,如图2的流程图说明所示,在本申请所建议的方法中存在两个主要步骤。第一阶段是参考标号为200的创建阶段,而第二个主阶段是参考标号为300的流水线阶段。消息被分为q个片段。
在创建阶段200中,该消息的前n=logP个片段沿着二项式树220进行传递,将该二项式树220的父-子关系定义如下定义1对于i=(in-1in-2...ir...iO)并且r满足在i≠O时,ir=1且in-1=in-2=…=ir+1=0;或者在i=0时,r=-1,进程i的父进程(Parent)和子进程(Child)为Child(i,s)={(in-1...ir+s+1‾...ir...io)|s∈{0,1,...,n-r-2}}]]>Parent(i)=(in-1...ir‾...i0)]]>根据该定义,进程0具有n个子进程。根据本发明的工作原理,进程0发出前n个片段,将每个片段发送给它的一个子进程,如225所示。在创建阶段,除进程0之外的每个进程从其父进程获得一个片段。一旦接收到一个片段,进程就将该片段发送给它的每个子进程,一个接一个,如226所示。
因此,对于进程i,进程i=(in-1in-2...ir...i0)期望从其父进程那里获得片段t,其中t满足it=1和it-1=it-2=...=i0=0。该创建采取了n个步骤,并且在最后,每个非根进程获得该消息的一个片段(227)。
流水线阶段300同样包括若干步骤。类似于创建阶段。在该阶段期间,父-子关系被由处理步骤320描述的配对的合作方关系(partner-shipping)替代。可以以多种方式来获得该合作方关系,下文将对其进行详细讨论。注意,可以通过检查进程ID的二进制表示容易地确定通信合作方和通信内容,如在310处所示。
对于每个进程,一旦确定合作方(如在320处所标示),则接着与合作方交换该消息的至少一个片段(如在325处所示),直到该处理完成(如327所述)为止。
也就是说,例如,在步骤k中,进程i与合作方进程交换一个片段。该合作方通过对比特ik%n求反来确定定义2对于i=(in-1in-2...ir...i0),Partner(i,k)=(in-1in-2...ik%n‾...i0).]]>例如,当进程0是合作方时,若k<q-n,则该进程从进程0接收片段k+n,否则,该进程从进程0接收片段q-1。
另一方面,若k≥q-n,则进程0向其合作方发送片段k+n或片段q-1。
当进程i和进程Partner(i,k)都不是进程0时,进程i向进程Partner(i,k)发送片段k+s(i,k),并且从进程Partner(i,k)接收片段k+t(i,k)。若k+s(i,k)≥q或k+t(i,k)≥q,则作为替代,发送或接收片段q-1。s(i,k)和t(i,k)由下面的定义给出定义3对于i=(in-1in-2...ir...i0),s(i,k)满足ik%n=i(k+1)%n=...i(k+s(i,k)-1)%n=0以及i(k+s(i,k))%n=1。t(i,k)满足ik%n‾=i(k+1)%n=...i(k+t(i,k)-1)%n=0]]>以及i(k+t(i,k))%n=1。
将该算法的一个例子示出在图5和表2中
通信合作方二的幂次方个进程上的片段交换调度,P=q=8。
表2

通信内容在每个步骤之后在二的幂次方个进程上接收的片段,P=q=8。
一种简单的方法被用于将该算法扩展到非二的幂次方个进程。该思想是将进程配对成二的幂次方对,允许自配对,并且接着在仿佛每对是一个进程的情况下沿用该算法。当在P’个进程上进行广播时,其中P<P’<2P,首先定义一个简单的方案,该方案将进程i≥P与进程1到P’-P配对定义4对于任意进程i,

并且
当且仅当i=Rep(i),进程i参与创建阶段。创建阶段与在二的幂次方个进程的情况下完全相同。在流水线阶段,在计算合作方时,用Rep(i)代替i。在流水线的每个步骤期间,进程i和进程Pair(i)协作完成与其合作方的片段交换。配对的一方发送输出片段给合作方,并且称为配对的输出。被标记为配对的输入的另一方从合作方接收输入片段。注意,若Partner(i,k)≠Pair(Partner(i,k)),则输入片段的源和输出片段的目标是不同的。输入还将其在先前步骤期间接收的片段传递给输出。
更特别地,在流水线的开始,当i≠Pair(i)时,若i=Rep(i),则将进程i标记为配对的输出,并且Pair(i)为输入。否则,其为反过来的另一方式。若i=Pair(i),则进程i既是输出又是输入。在流水线的步骤k期间,若k<q-s(Rep(i),k),则输出向合作方配对{Partner(Rep(i),k),Pair(Partner(Rep(i),k))}的输入发送片段k+s(Rep(i)。若k≥q-s(Rep(i),k),则作为替代,输出发送片段q-1。若k<q-t(rep(i),k),则该配对的输入从该合作方配对的输出接收片段k+t(Rep(i),k)。否则,其接收片段q-1。当k>0时,该输入还向该输出发送片段k-1。处理器在配对中的角色可以改变。若Rep(i)k=1,则{i,Pair(i)}的输入和输出在步骤k之后发生交换。为了确定{i,Pair(i)}中哪个是输出,定义了u(i,k)和v(i,k)定义5u(i,k)是在i的二进制表示中从比特0到比特k的1的数目。v(i,k)是在步骤k(k>0)之前进行角色转换的次数,并且v(i,k)由下式给出v(i,k)=k/n*u(i,n-1)+u(i,k%n)根据最初的角色分配,若v(i,k)是奇数,则若i=Rep(i),那么进程i是配对的输入,并且Pair(i)是输出。否则,其是反过来的另一方式。最后,在流水线的q-1个步骤之后,若i≠Pair(i),则配对的输入向输出发送片段q-2,并且输出向输入发送片段q-1。图6和表3描述了该算法的一个例子。
通信合作方非二的幂次方个进程上的片段交换调度,P=q=6,进程1与进程4配对,进程2与进程5配对。
表3

通信内容在基于非二的幂次方个进程的调度法的情况下,在每个步骤接收的片段,P=q=6,1与4配对,2与5配对尽管已经对本发明的优选实施例描述了本发明,但是本领域的普通技术人员应该理解,在现在和将来,都可以在所附权利要求的范围内进行各种改进和增强。这些权利要求应该解释为主张首次描述的本发明的正确保护范围。
权利要求
1.一种在并行计算环境中广播数据的方法,包括通过首先确定如何划分待广播的消息来执行创建处理阶段;建立进程间的父-子关系,使得父进程负责将接收到的任意消息传递给所述子进程;保证所有的非根进程获得所述消息的一个片段,并且将其一并传递给所述非根进程的指定子进程;执行包括多个子步骤的流水线处理阶段,在此期间通过基于预先选定的数据建立合作方来进一步对已广播的消息片段进行流水线处理,使得可以在合作方之间交换先前接收到的消息片段。
2.根据权利要求1所述的方法,其中所述消息被分成q个片段。
3.根据权利要求2所述的方法,其中沿着二项式树传递所述消息的前n=logP个片段。P是参与所述消息广播的进程的数目。P是2的幂次方。
4.根据权利要求3所述的方法,其中所述二项式树通过下述公式建立所述父-子关系对于i=(in-1in-2...ir...i0)并且r满足在i≠0时,ir=1且in-1=in-2=...=ir+1=0;或者在i=0时,r=-1,进程i的父进程和子进程为Child(i,s)={(in-1...i‾r+s+1..ir...i0)|s∈{0,1,...,n-r-2}}]]>Parent(i)=(in-1...ir-...i0)]]>
5.根据权利要求1所述的方法,其中基于下述公式建立所述合作方关系对于i=(in-1in-2...ir...i0),在所述流水线处理阶段的子步骤k期间,进程i的父进程为Partner(i,k)=(in-1in-2...i-k%n...i0).]]>
6.根据权利要求1所述的方法,其中所述进程被配对成2的幂次方对进程。
7.根据权利要求6所述的方法,其中还允许自配对。
8.根据权利要求6所述的方法,其中当在P’个进程上进行广播时,其中P<P’<2P,通过将进程i,i≥P,与进程1到进程P’-P配对来定义合作方。
9.根据权利要求8所述的方法,其中通过下述公式确定所述配对对于i大于或等于P,Pair(i)=i-P+1;对于i大于0但小于或等于P’-P,Pair(i)=P-i+1;以及在其他情况下,Pair(i)=i。
10.根据权利要求8所述的方法,其中对于i<P,确定Rep(i)等于i;以及在其他情况下,确定Rep(i)等于Pair(i)。
11.根据权利要求10所述的方法,其中计算合作方时用Rep(i)替代i。
12.根据权利要求11所述的方法,其中在每个所述流水线阶段期间,进程i和进程Pair(i)协作完成与其合作方的片段交换。
13.根据权利要求12所述的方法,其中所述配对中的一方发送输出片段给其合作方并且被称为所述配对的输出;而所述另一方是所述配对的输入并且从其合作方接收输入片段。
14.根据权利要求13所述的方法,其中如果i=Pair(i),则i既是所述输出也是所述输入。
15.根据权利要求13所述的方法,其中若k<q-s(Rep(i),k),则输出向其合作方配对{Partner(Rep(i),k),Pair(Partner(Rep(i),k))}的所述输入发送片段k+s(Rep(i),k);若k≥q-s(Rep(i),k),则作为替代,所述输出发送片段q-1。
16.根据权利要求15所述的方法,其中若k<q-t(rep(i),k),则所述配对的输入从所述合作方配对的所述输出接收片段k+t(Rep(i),k);否则,所述配对的所述输入接收片段q-1。
17.根据权利要求16所述的方法,其中当k>0时,所述输入还向所述输出发送片段k-1。
18.根据权利要求17所述的方法,其中所述配对中的进程的角色是可改变的。
19.根据权利要求18所述的方法,其中若Rep(i)k=1,则发生所述角色改变,{i,Pair(i)}的所述输入输出的所述角色在步骤k之后发生交换。
20.一种用于在并行计算环境中广播数据的系统,所述系统包括适合于执行权利要求1-19中任意一项所述的方法的每个步骤的装置。
全文摘要
本发明公开了一种用于在并行计算环境中进行消息广播的方法以及相关联的具体实现该方法的机器可读的程序存储设备。该方法包括步骤通过首先确定如何划分待广播的消息来首先执行创建处理阶段;以及接着建立进程间的父-子关系,使得父进程负责将接收到的任意消息传递给所述子进程。此后,保证所有的非根进程获得该消息的一个片段,并且将其一并传递给该非根进程的指定子进程;并且执行包括多个子步骤的流水线处理阶段,在此期间广播停止并且使得每个进程基于预先选定的标准与其合作方交换消息片段。
文档编号G06F9/46GK1988463SQ20061013929
公开日2007年6月27日 申请日期2006年9月22日 优先权日2005年12月21日
发明者贾彬 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1