用于优化全局归约处理的方法和系统的制作方法

文档序号:6458257阅读:324来源:国知局
专利名称:用于优化全局归约处理的方法和系统的制作方法
技术领域
本发明涉及并行计算,并且更特别地,涉及用于优化在非2的 幂个进程之间的大向量全局归约操作以增强并行计算性能的方法和系统。
背景技术
在并行计算中,全局归约(reduce)操作被广泛用于并行应用。 数据在一组进程之间被选择性地共享,以最小化进程之间所交换的 通信。消息传递接口 (MPI)标准定义了用于归约操作的若干汇集接 口 ,其中最著名的归约操作是MPI—REDUCE和MPI—ALLREDUCE。 全局归约操作可能是高开销的;因此,高效MPI—REDUCE和 MPI—ALLREDUCE是重要的。 一项长期分析研究证明,并行应用执 行MPI一REDUCE和MPI—ALLREDUCE操作花费的时间占该应用在 所有MPI功能上花费的时间的40%以上。全局归约操作在MPI通信子(communicator)所定义的进程群 组的所有成员(即,所有进程)上共同执行。为了本发明的目的, 将详细描述使用最为广泛的交换性归约操作。在通信子群组中,每 个进程具有相等长度的数据输入向量。全局归约操作使用指定操作 来组合所有输入向量。进程交换数据并执行局部归约操作以得到部 分归约结果。对部分归约结果进行交换和组合,直到产生完成归约 结果。在MPI一REDUCE中,具有归约操作的完成归约结果的全向量 在已知为根的一个进程处返回。在MPI_ALLREDUCE中,完成归约 结果在通信子群组的每个进程处返回。对于小消息MPI一REDUCE而言,最著名的算法是最小生成树 (MST)算法,其中MPI REDUCE的根是进程MST的根。树上的进程首先接收包含来自其所有子进程的向量的消息,继而将所接收 的数据和其自己的输入向量组合。该进程继而将结果向量发送至其父进程。在MPI—ALLREDUCE中, 一个进程被选作根。 一旦根接收 并组合了向量并且得到了最终结果,则它就将结果广播至通信子的 群组的其它成员。如果MST是二叉树,则MST MPI—REDUCE算法 的代价可建摸如下<formula>formula see original document page 9</formula>其中a是每个消息的延迟卩是每个字节的通信代价Y是每个字节的局部归约代价N是通信子的进程数目;以及L是进程对归约操作的输入向量的长度。很明显,MST算法对于大消息而言不是高效的,因为每个处理 器将不得不始终在全向量上执行归约操作,而没有利用并行性。已 经针对大消息MPI—REDUCE和MPI—ALLREDUCE操作开发了更好 的算法。 一个这样的算法是递归二分递归倍增(RHRD)算法。在用 于MPI—REDUCE的RHRD算法中,每个进程执行log(N)个步骤的计 算和通信。在步骤的计算阶段之前是分配阶段,在分配阶段中进程 与其它进程交换数据(即,向量信息)。在也称为预备阶段的分配 阶段的第一步骤中,进程i与进程j交换它们输入向量的一半,其中 j=(iAmask)。符号A表示按位异或操作,"mask"等于1的二进制表 示。如果KJ,则进程j将其向量的第一半发送给进程i并接收进程i 的向量的第二半。进程i组合两个向量的第一半,并且进程j組合两 个向量的第二半。在第二步骤中,进程i和进程j交换它们从第一步骤得到的中间 归约结果的 一 半,并且将接收的数据与没有发送的 一 半进行组合, 其中j=iAmask并且mask是将1的二进制表示左移1位的结果。在步 骤k,进程i和进程j交换它们从步骤(k-1)得到的中间归约结果的一半,并将接收的部分与没有发送的一半进行组合,其中j=iAmask 并且mask是将1的二进制表示左移(k-l)位的结果。如果i<j,则 进程i发送中间结果的第二半并接收第 一 半。该过程递归地继续,在总共log(N)个步骤的每个步骤,都对所交 换和组合的数据的大小进行二分。最终,每个进程都拥有结果向量 的1/N:进程0拥有第一个1/N,进程1拥有第二个1/N,进程i拥 有第(i-l )个1/N,等等。在MPI—REDUCE中,根继而执行收集(gather) 操作,用以将完成归约结果的其余部分从其它进程处收集回来。向 量是通过传递消息在进程之间交换的。很明显,向量越大,消息就 越大,并且开销就越高,消息交换的潜在延迟就越大。在MPI_ALLREDUCE中,执行的是全部收集(allgather)步骤 而不是收集步骤,在全部收集步骤中,每个进程都从其它进程收集 完成归约结果。RHRD算法的代价可建摸为T = 2*log (N) *a + 2*(N-1)/N * L *|3 + (N-l)/N * L*y 。当消息大小基于较大的向量长度而较大时,RHRD算法比MST 算法执行地更好,因为与该算法中其它两项的大小相比,延迟项"a" 很小并且基本上可以忽略。RHRD算法仅适用于"2的幂,,个进程。研究已经表明,归约操 作在非2的幂个进程上同样广泛应用。对于非2的幂的N,个进程, 现有技术解决方案与RHRD算法相比而言在操作开始时执行一个额 外的准备步骤。另外,对于MPI—ALLREDUCE的情况,还要在才喿作 结束时执行其它额外步骤。开始步骤是将r个进程从算法中排除,其 中r^N,-N, N是小于N,的最大的2的幂。前2"个进程交换输入向 量。在前2"个进程中,具有偶数顺序的进程将其向量的第二半发送 给其右邻居,并且具有奇数顺序的进程将其向量的第一半分发送给其左邻居。 一旦向量信息的交换完成,这前24个进程就执行局部归 约操作。那些具有奇数顺序的进程继而将其局部归约结果发送给其 左邻居,并且不参与算法的其余部分。N个其它进程遵循先前针对2 的幂个进程描述的算法。在MPI—ALLREDUCE中,那些被第一步骤排除的进程在最后步骤中从其左邻居处接收最终结果。图1示出了 7 (也就是说,非2的幂)个进程上的 MPI—ALLREDUCE纟喿作的现有技术处理流程,假设大小为4的大向 量包含元素ABCD。部分归约操作结果由元素和顺序号(以下标) 表示,例如A-B。—3表示进程0、 1、 2和3的元素A-B的归约结果。现有技术方法在非2的幂个进程上的代价可建模为 对于MPI—REDUCE:T=(2+2*log(N))*a + (1+2*(N-1)/N)*L*(3 + (l/2+(N-l)/N)*L*y。 (1) 且对于MPI—ALLREDUCE:T=(3+2*log(N))* a + (2+2*(N-l)/N)*L*p + (l/2+(N-l)/N)*L *y (2)针对非2的幂个进程的一个或多个额外步骤,将MPI—REDUCE 的带宽需求提高了大于50%,并将MPI—ALLREDUCE的带宽需求提 高了大于100%。很明显,因此期望提供一种针对非2的幂个进程执 行大消息MPI—REDUCE/MPI—ALLREDUCE才乘作的改进方法,这是 本发明的一个目的。本发明的另 一个目的是通过消除现有技术算法的准备步骤中的 不必要的数据转发来改进大消息 MPI—REDUCE 和 MPI—ALLREDUCE操作的性能。本发明的又一个目的是通过重新配置部分归约结果的流程,在 用于MPI一ALLREDUCE的最终步骤中完全使用互连带宽。发明内容上述及其它目的由优化归约操作的创造性系统和方法通过以下 实现将操作合并到有限数目的参与进程中,继而将结果分配回所 有进程,从而优化对于非2的幂个进程的大消息归约操作。该方法包括以下步骤将进程群组划分为两个子群组SO和SI, 在SO中的进程执行配对交换和局部归约操作,使得SO中的每个进 程得到部分归约结果的半向量;将部分归约结果合并到剩余进程的集合中,所述集合排除进程的一个子集,使得仅具有部分结果的半向量的2的幂个进程包括剩余进程的集合;在该剩余进程的集合执 行连续的递归二分和递归倍增算法,直到该剩余进程集合中的每个 进程都具有完成结果的半向量;以及在每个进程提供完整的完成结果。


下面将参考附图对发明进行更为详细的描述,其中 图1示出了使用现有技术的RHRD算法的针对7个进程上的 MPI一ALLREDUCE操作来交换进程之间的信息; 图2是示出了本发明的流程图;图3A到3F示出了根据本发明的针对在2的幂的偶数个进程(特 别是6个进程)上的大消息全局归约操作来交换进程之间的信息; 以及图4A到4F示出了根据本发明的针对非2的幂的奇数个进程(特 别是7个进程)上的大消息全局归约操作来交换进程之间的信息。
具体实施方式
根据本发明,在图2的第一步骤201中,进程群组被划分为两 个子群组,其中每个进程都具有包含多个数据元素的输入向量。子群组S0包含进程0、 1..... 2*r-l,其中r=N,-N, N是小于N,的最大的2的幂。剩余的进程属于子群组Sl。从子群组划分的方式中可 以知道如果r是偶数,则Sl具有偶数个进程。证明r=N,-N。如果r是偶数,由于N是2的幂,因此N,一定 是偶数。Sl中的进程数目是N,-2t,其一定是偶数,因为N,和2町 都是偶数。如果r是奇数,则S1具有奇数个进程。证明r=N,-N。如果r是奇数,由于N是2的幂,因此N,也是奇数。因此,N,-2"—定是奇数,因为N,是奇数而2^是偶数。一旦建立了子群组,则在步骤202的准备阶段期间,如果i是偶 数,则子群组S0的每个进程i与进程i+l交换其向量的一半,如果 i是奇数,则进程i与进程i-l交换其向量的一半,其中进程i的向量 的一半包括输入向量的一半数据元素。在步骤204,在所有S0子群 组进程处对半向量执行局部归约操作。然而,局部归约操作的结果 没有像现有技术的处理中那样由奇数顺序的进程发送给偶数顺序的 进程。相反,此时在归约操作中,进程的子群组化指示每个进程的计 算和通信行为。相应地,部分归约结果的半向量被合并到剩余进程 的集合中,其中该集合包含X个进程,X是2的整数幂,并且其中 该集合包括来自SO的多个进程以及来自SO的至少一个进程。如果r是偶数,则S0的进程可被进一步组织到r/2个4进程子 群组((4承i, 4*i+l, 4*i+2, 4*i+3) I i=0、 1、…、〃2-1}中。在4进程子 群组的每一个中,进程4*i+2将其局部归约结果发送至4*i。进程 4*i+3将其局部归约结果发送至4H+1。进程4*i和进程4*i+l在步骤 205中对所接收的中间结果和其自己的局部结果执行局部归约操作, 并继续到下一步骤。进程4*i+2和进程4*i+3(此后称为非参与进程) 被排除在全局归约的接下来的步骤之外。在步骤206,如果i是偶数, 则子群组SI的每个进程i与进程i+l交换其输入向量的一半,如果 i是奇数,则进程i与进程i-1交换其输入向量的一半,并执行局部 归约操作。在该步骤之后,进程的剩余子集(其中每个进程具有部 分归约结果的半向量)参与步骤208,执行递归二分,直到每个进程 得到第1/N个完成结果向量。接着在步骤209,剩余进程集合执行递 归倍增,使得对于MPI一ALLREDUCE而言,每个进程得到完成归约 结果的半向量,或者对于MPI一REDUCE来说,包括根在内的两个剩 余进程中的每一个都得到完成结果的半向量。对于MPI—REDUCE, 可以在一个最终步骤中将完整的完成结果提供给一个进程,在该步 骤中,其它剩余进程将其半向量发送至才艮。对于MPI—ALLREDUCE,可以在后续步骤210和212中执行半向量结果交换,以确保完成结 果在每个进程处可用。在步骤210,属于SO的剩余进程将其半结果 发送至SO的非参与进程进程4H发送至进程4*i+2,并且进程4*i+l发送至进程4"+3, i=0、 1.....2r/2岡l。 Sl的进程i和i+1交换它们的结果,i=2*r、 2*(r+l)、…、N,-2。在步骤210之后,S0中的每个 进程都具有完成结果的半向量,并且S1中的每个进程都得到了完整 的完成结果。最后,在步骤212, S0中的进程执行类似于Sl中的进 程在步骤210中所执行的交换,以得到完整的完成结果。图3A至图3F示出了执行上文详细描述的归约操作的被称为进 程0到5的6个进程。进程0具有向量A-D。,进程1具有向量A-Dn 进程2具有向量A-D2,进程3具有向量A-D3,进程4具有向量A-D4, 进程5具有向量A-Ds。进程被划分为子群组SO和Sl,其中S0具有进程0、 1..... 2*r-l并且SI具有其余进程。在这个示例中,SO包括进程0、 1、 2和3,并且S1包括进程4和5。在图3A中,子群组SO的前4个进程与其邻居交换向量的一半, 并执行局部归约操作。子群组S1的进程4和5在该步骤中空闲。在 图3B中,进程2将其局部归约结果发送至进程0,并且进程3将其 局部归约结果发送至进程1。此时,进程4和5交换半向量并执行局 部归约操作。在接下来的几个步骤中,进程2和3将空闲,称之为 "非参与进程",并且进程0、 1、 4和5是活动的,称之为"剩余 进程"的子集。在图3C,子群组S0的进程0和1与子群组Sl的进程4和5交 换向量的四分之一。特别地,进程0与进程4交换,因为每个进程 都包含针对A-B的部分结果,而进程1与进程5交换,因为每个进 程都包含针对C-D的部分结果。此后,进程0、 1、 4和5一丸行局部 归约操作,使得每个剩余进程具有针对四分之一 向量的完成结果, 如图3D所示。每个剩余进程继而与 一个其它剩余进程交换完成的四 分之一向量结果,由此,如图3E所示,进程0和4将具有针对半向 量A-B的完成结果,并且进程1和5将具有针对半向量C-D的完成结果。要指出的是,无需对进程配对来交换四分之一向量结果;然而,邻近緩冲之间的交换将带来最小的开销。半向量结果从进程0 发送至进程2,从进程1发送至进程3,并且在进程4和进程5之间 交换,如图3E中的箭头所示。最后,在进程0和1之间以及进程2 和3之间交换半向量,使得所有进程具有完成向量结果,如图3F所示。如果r是奇数,S0的前2*(>1)个进程可被组织到(>-1)/2个4进 程子群组中,而S0的最后两个进程2*r-2、 2*r-l可重新分组到具有 进程2*r ( Sl的第一个进程)的子集中。子群组SO中除了进程2*r-2 和2*r-l之外的进程的行为与r是偶数的情况相同。子群组SI中除 了进程2*r之外的进程的行为也与r是偶数的情况相同。子群组SI 的进程2*r-l将其局部归约结果发送至进程2*r。在从进程2*r-l处 接收的同时,进程2*r也将其输入向量的第一半发送至进程2*r-2。 进程2*r-2和进程2*r继而执行局部归约操作,并且进行到下一步骤。 进程2*r-l像其它非参与进程一样被排除在其余全局归约之外。再一次地,在该步骤之后,子集中的每个剩余进程都具有半向 量部分归约结果,并且参与步骤208的递归二分以及步骤209的递 归倍增,使得对于MPI_ALLREDUCE而言,每个进程得到完成归约 结果的半向量,或者对于MPI_REDUCE而言,包含根在内的两个剩 余进程中的每一个都得到完成结果的半向量。对于MPI_REDUCE, 可以在一个最终步骤中将完整的完成结果提供给一个进程,在该步 骤中,其它进程将其半向量发送至根。对于MPI_ALLREDUCE,继 而可以在后续步骤210和212中完成半向量结果的交换,以确保完 整的完成结果向量在每个进程处可用。在步骤210,除了进程24-2 之外,属于SO的剩余进程将其半结果发送至SO的非参与进程进程4"发送至进程4*i+2,并且进程4*i+l发送至4*i+3,i=0、 1、2.....r/2-2。 SI的进程i和i+1交换其结果,i=2*r+l、 2*(r+l)+l.....N,-2。此外,进程2*r-2将其结果发送至进程2*r,而进程2*r将其结果发 送至进程2 -l。因此,在步骤210之后,S0中的每个进程都具有完成结果的半向量;Sl中的每个进程都得到完整的完成结果。S0中的 进程继而在步骤212执行类似于Sl中的进程在步骤210中所执行的 交换,以得到完成的最终结果。图4A至4F示出了 r是奇数时的归约操作。如图4A所示,进程 0到6中的每一个都具有其各自的A-D值。初始地,前6个进程与 其各自的邻居交换半向量,并执行局部归约操作。进程6,即进程2*r,在这个阶段是空闲的。在图4B中,执行合并,并且重新对齐子群组以便进一步处理, 由此,进程0到3在子群组SO中,而进程4-6(也即进程2*r-2、 2*r-l 以及2*r )在其它子群组中。进程2将其局部归约结果发送至进程0, 而进程3将其局部归约结果发送至进程1。同时,进程5将其局部归 约结果发送至进程6,并且进程6将其半向量(A-B6)发送至进程4。 进程0、 1、 4和6执行局部归约操作。此后,进程2、 3和5是非参 与进程,直到归约纟喿作结束。包括如图所示的进程O、 1、 4和6在 内的子集中的剩余进程在图4C交换四分之一向量并执行局部归约 操作,由此,如图4D所示,每个剩余进程都具有针对四分之一向量 (即,针对数据元素的四分之一)的完成结果。进程0、 1、 4和6 继而交换结果,使得每个进程都将具有针对半向量的完成结果,如 图4E所示。进程0和1继而将其结果分别发送至进程2和3,同时 进程4将其结果发送至进程6,并且进程6将其结果发送至进程5。 如上文描述中所指出的,尽管可以通过最小化非邻近进程之间的交 换来优化性能,但是无需为结果交换而进行特定的进程配对。此时,进程6具有针对全向量的完成结果,但是所有其它进程 仍然只具有针对半向量的完成结果。对于MPI一ALLREDUCE,如图 4F所示,进程0和1、进程2和3、以及进程4和5交换半向量结果, 使得所有原始进程都具有完成向量结果。本创造性方法的益处是双重的。在现有技术的方法中,准备步 骤的局部归约结果由S0的奇数顺序进程发送至SO的偶数顺序进程, 该结果仅在接下来的步骤中被再次转发。新的方法避免了那些不必要的数据转发。此外,在准备步骤之后的步骤中,so子群组的进程 仅仅发送或接收半向量,而不是发送或接收全向量。当前方法将降
低适配器的负担,并减轻CPU和存储器处的串行化。此外,如上文 详细描述的,N,个进程上的针对MPI—ALLREDUCE的最后两个步骤 降低了带宽需求。
现有技术的方法4丸行编号为从0到2*log(N)+l的2+2氺log(N)个 步骤。在步骤2flog(N)之前,N/2个进程中的每一个都具有最终完成 归约结果的第一半,而其它N/2个进程的每个具有最终完成归约结 果的第二半。那些进程可被称为子群组S2和S3。其它r个进程(子 群组S4)在前两个步骤之后被排除,并且不具有任何部分结果。可 以在S2和S3的进程之间形成1对1的对应。通过现有才支术的方法, S2的进程和其在S3中的对应者在步骤2Hog(N)期间交换最终结果的 一半。在该步骤之后,S2和S3的N个进程中的每一个都具有完整 的最终归约结果。那!^个进程中的前1"个继而在步骤2*10§(>0+1中 将完整的最终结果发送至S4的进程。
在图3A至图3F所示的给出的方法下,当r是偶数时,S3的前 r个进程将其部分结果发送至S2的前r个进程,而不是在步骤2*10§(^ 期间在S2和S3的进程之间交换结果的一半。S2的r个接收者中的 每一个将数据发送至S4的一个不同的进程,而不是发送至其在S3 中的对应者。其它进程与现有技术的方法中一样工作。S4的每个进 程和S3的前r个进程中的每一个都只具有最终结果的一半,而所有 其它进程具有完整的最终归约结果。在最终步骤中,S4的进程和S3 的前r个进程交换该一半结果,以得到完整的最终结果。当r是奇数 时,如图4A至图4F所示,S2和S3的并集的前r-l个进程将其结果 发送至S4的前r-l个进程。S2和S3的第r个进程将其结果发送至 S2和S3的第(r+l)个进程,而该第(r+l)个进程将其结果发送至S4的 最后进程。在该步骤结束时,S2和S3的第(r+l)个进程具有最终结 果。在最后的步骤中,具有一半结果的进程交换其结果,以得到完 整结果。这个修改将在整个MPI ALLREDUCE时间中引起另外的1/2*L*P归约。
通过所给出的方法,N,个进程上的MPI—REDUCE的代价是 T = (2+2*log(N))* a+(l/2+2*(N-l)/N)*L*p+(l/2+(N-l)/N)*L*y (3) 并且MPI_ALLREDUCE时间是
T = (3+2*log(N))* a+(l+2*(N-l)/N)*L*P+(l/2+(N-l)/N)*L*y (4)
与通过上文的公式(1 )和(2)建模的现有技术相比,对于 MPI—REDUCE和MPI—ALLREDUCE操作而言,带宽需求分别下降 了超过16%和25%。
出于示意和解释的目的,本发明是参考特定的实施方式和进程 描述的,这并非是旨在作为穷尽性描述。对于本领域普通技术人员 而言,修改将是显然的,并且应被理解为处于所附权利要求书的精 斗申和范围之内。
权利要求
1.一种用于在多于一个的N’个进程执行大消息全局归约操作的方法,其中每个进程具有至少一个输入数据向量,所述方法包括以下步骤将所述N’个进程划分为两个子群组S0和S1,其中S0包括2*r个进程并且S1包括N’-2*r个进程,其中r=N’-N,N是小于N’的最大的2的幂;在S0中的进程执行配对数据交换和局部归约操作,由此,S0中的r个进程获得第一半向量的部分归约结果,并且S0中的其它r个进程获得第二半向量的部分归约结果;将所述部分归约结果的所述半向量合并到剩余进程集合中,所述集合包括N个进程;在所述剩余进程集合执行连续的递归二分和递归倍增,直到所述剩余进程集合中的每个进程具有完成归约结果的半向量;以及将所述完成归约结果的全向量提供给每个进程。
2. 根据权利要求1所述的方法,其中r是偶整数。
3. 根据权利要求2所述的方法,其中所述合并包括以下步骤 将所述第一半向量的部分归约结果从SO的r个发送进程发送至SO的r个接收进程,其中所述发送和接收进程具有相同半向量的部 分归约结果;在所述接收进程执行本地归约操作,由此每个接收进程具有部分归约结果的半向量;以及在SI的进程执行配对交换和局部归约操作,由此SI中的一半 进程具有所述第一半向量的部分归约结果,并且其余进程具有所述第二半向量的部分归约结果。
4. 根据权利要求3所述的方法,其中所述提供完成归约结果的 全向量包括以下步骤将所述完成归约结果的半向量从所述r个接收进程发送至所述r个发送进程;在SO的进程执行配对交换,由此SO中的每个进程获得所述完 成归约结果的全向量;以及在SI的进程执行配对交换,由此SI中的每个进程获得所述完 成归约结果的全向量。
5. 根据权利要求1所述的方法,其中r是奇整数。
6. 根据权利要求5所述的方法,其中所述合并包括以下步骤 将SO进程划分为r-1个发送进程、r-1个接收进程、以及2个其它进程;将部分归约结果的半向量从SO的r-1个发送进程发送至SO的r-1 个接收进程,所述发送和接收进程具有相同半向量的部分归约结果;在所述r-l个接收进程执行局部归约操作,由此每个接收进程具 有部分归约结果的半向量;以及将所述部分归约结果的半向量从SO的第一所述其它进程发送至SI的进程;将输入数据的其它半向量从SI的所述进程发送至SO的第二所 述其它进程;在SI的所述进程和SO的所述第二其它进程执行局部归约操作, 由此,每个进程具有半向量的部分归约结果;以及在SI的其余进程执行配对交换和局部归约操作,由此,Sl中的 其余进程的一半具有第一半向量的部分归约结果,并且S1中的另一 半进程具有第二半向量的部分归约结果。
7. 根据权利要求5所述的方法,其中,所述提供完成归约结果 的全向量包括以下步骤将所述完成归约结果的半向量从SO的所述r-1个接收进程发送 至SO的所述r-1个发送进程;将所述完成归约结果的半向量从合并的SO的第二所述其它进程 发送至合并的SI的所述进程,由此所述S1的进程具有完成归约结 果的全向量;将完成归约结果的其它半向量从Sl的所述进程发送至SO的第 一所述其它进程;在SO的进程执行配对交换,由此SO中的每个进程获得所述完 成归约结果的全向量;以及在S1的其余进程执行配对交换,由此每个进程获得所述完成归 约结果的全向量。
8. —种有形地包含机器可执行指令程序的机器可读的程序存储 设备,用以执行一种在多于一个的N,个进程执行大消息全局归约操 作的方法,其中每个进程都具有至少一个输入数据向量,其中所述 方法包括以下步骤将所述N,个进程划分为两个子群组SO和Sl,其中SO包括2*r 个进程并且SI包括N,-2^个进程,其中fN,-N, N是小于N,的最 大的2的幂;在SO中的进程执行配对数据交换和局部归约操作,由此SO中 的r个进程获得第一半向量的部分归约结果,并且SO中的其它r个 进程获得第二半向量的部分归约结果;将所述部分归约结果的所述半向量合并到剩余进程集合中,所述 集合包括N个进程;在所述剩余进程集合执行连续的递归二分和递归倍增,直到所述 剩余进程集合中的每个进程具有完成归约结果的半向量;以及将所述完成归约结果的全向量提供给每个进程。
9. 根据权利要求8所述的程序存储设备,其中r是偶整数。
10. 根据权利要求9所述的程序存储设备,其中所述合并包括以 下步骤将所述第一半向量的部分归约结果从SO的r个发送进程发送至 SO的r个接收进程,其中所述发送和接收进程具有相同半向量的部 分归约结果;在所述接收进程执行本地归约操作,由此每个接收进程具有部分 归约结果的半向量;以及在Sl的进程执行配对交换和局部归约操作,由此Sl中的一半进程具有所述第 一半向量的部分归约结果,并且其余进程具有所述 第二半向量的部分归约结果。
11. 根据权利要求10所述的程序存储设备,其中所述提供完成 归约结果的全向量包括以下步骤将所述完成归约结果的半向量从所述r个接收进程发送至所述r 个发送进程;在SO的进程执行配对交换,由此SO中的每个进程获得所述完 成归约结果的全向量;以及在Sl的进程执行配对交换,由此Sl中的每个进程获得所述完 成归约结果的全向量。
12. 根据权利要求8所述的程序存储设备,其中r是奇整数。
13. 根据权利要求12所述的程序存储设备,其中所述合并包括 以下步骤将SO进程划分为r-1个发送进程、r-1个接收进程、以及2个其 它进程;将部分归约结果的半向量从SO的r-1个发送进程发送至SO的r-1 个接收进程,所述发送和接收进程具有相同半向量的部分归约结果;在所述r-l个接收进程执行局部归约操作,由此每个接收进程具 有部分归约结果的半向量;以及将所述部分归约结果的半向量从SO的第一所述其它进程发送至Sl的进程;将输入数据的其它半向量从Sl的所述进程发送至SO的第二所 述其它进程;在Sl的所述进程和SO的所述第二其它进程执行局部归约操作, 由此每个进程具有半向量的部分归约结果;以及在Sl的其余进程执行配对交换和局部归约操作,由此Sl中的 其余进程的一半具有第一半向量的部分归约结果,并且S1中的另一 半进程具有第二半向量的部分归约结果。
14. 根据权利要求13所述的程序存储设备,其中所述提供完成 归约结果的全向量包括以下步骤将所述完成归约结果的半向量从SO的所述r-l个接收进程发送 至SO的所述r-l个发送进程;将所述完成归约结果的半向量从合并的SO的第二所述其它进程 发送至合并的SI的所述进程,由此所述S1的进程具有完成归约结 果的全向量;将完成归约结果的其它半向量从SI的所述进程发送至SO的第 一所述其它进程;在SO的进程执行配对交换,由此SO中的每个进程获得所述完 成归约结果的全向量;以及在S1的其余进程执行配对交换,由此每个进程获得所述完成归 约结果的全向量。
15. —种用于在多于一个的N,个原始进程的并行计算中对数据 执行归约操作的方法,其中每个进程都具有包含多个数据元素的输 入向量,所述多个数据元素包括所述数据的1/N,,所述方法包括以 下步骤将原始进程划分为子群组SO和Sl,其中SO包括进程O到2*r-l, 并且子群组SI包括进程2*r到N,-l,其中r=N,-N并且N是小于或 等于N,的最大的2的幂;在子群组SO中的邻居进程配对之间交换包括针对每个处理器的 输入向量的数据元素的一半的半向量,并对所有SO子群组进程执行 局部归约操作,以产生第一中间结果;为SI中的每个进程提供半向量,并对所有SI子群组进程执行 局部归约操作,以产生第二中间结果;将所述第 一和第二中间结果合并到进程子集中,其中所述子集等 于数据元素的数目;在所述进程子集执行局部归约操作,以产生针对所述数据元素的 每个四分之一的完成结果;在所述进程子集中的剩余进程的配对之间交换针对所述数据元 素的每个四分之一 的完成结果,并在每个剩余进程执行局部归约操作,以产生针对所述数据元素的每一半的完成结杲;以及所述子集中的每个所述进程将针对所述数据元素的每一 半的完 成结果发送至至少一个其它进程,以将针对所有数据元素的完成结 果提供给至少 一 个原始进程。
16. —种有形地包含机器可执行指令程序的机器可读的程序存 储设备,用以执行一种用于在多于一个的N,个原始进程的并行计算 中对数据执行归约操作的方法,其中每个进程都具有包含多个数据 元素的输入向量,所述多个数据元素包括所述数据的1/N,,所述方 法包括以下步骤将原始进程划分为子群组S0和Sl,其中SO包括进程0到2*r-l, 并且子群组S1包括进程2*r到N,-l,其中^N,-N并且N是小于或 等于N,的最大的2的幂;在子群组SO中的邻居进程配对之间交换包括针对每个处理器的 输入向量的数据元素的一半的半向量,并对所有SO子群组进程执行 局部归约操作,以产生第一中间结果;为SI中的每个进程提供半向量,并对所有SI子群组进程执行 局部归约操作,以产生第二中间结果;将所述第一和第二中间结果合并到进程子集中,其中所述子集等 于数据元素的数目;在所述进程子集执行局部归约操作,以产生针对所述数据元素的 每个四分之一的完成结果;在所述进程子集中的剩余进程的配对之间交换针对所述数据元 素的每个四分之一的完成结果,并在每个剩余进程执行局部归约操 作,以产生针对所述数据元素的每一半的完成结果;以及所述子集中的每个所述进程将针对所述数据元素的每 一 半的完 成结果发送至至少 一 个其它进程,以将针对所有数据元素的完成结 果提供给至少 一 个原始进程。
全文摘要
一种优化归约操作的系统和方法,所述系统和方法通过以下来优化归约操作将操作合并到有限数目的参与进程中,继而将结果分配回所有进程,从而优化非2的幂个进程上的大消息全局归约操作。该方法将进程群组划分为子群组,在一些进程执行配对交换和局部归约操作以获得部分归约结果的半向量,将部分归约结果合并到剩余进程集合中,在剩余进程集合执行连续的递归二分和递归倍增,直到剩余进程集合中的每个进程都具有完成结果的半向量,并在每个进程提供完整的完成结果。
文档编号G06F9/46GK101236511SQ20081000902
公开日2008年8月6日 申请日期2008年1月30日 优先权日2007年1月31日
发明者彬 贾 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1