用于在多个进程之间分配计算操作的方法和装置的制作方法

文档序号:6614337阅读:631来源:国知局
专利名称:用于在多个进程之间分配计算操作的方法和装置的制作方法
技术领域
本发明主要涉及并行计算。更准确地说,本发明涉及用于在多个进程之间分配计算操作并且从该多个进程收集该计算操作的结果的技术。

背景技术
并行计算是在多个处理器和/或多个计算系统之间分配计算操作。并行计算是有利的,这是因为如果使用多个处理器,则计算花费高的处理任务可花费较少的时间完成。例如,科学和科技研究常常包含这样的计算任务,该计算任务由于其复杂性而在单个处理器上需要数年才能完成。但是,这种任务如果在大量处理器之间分配则往往可在可管理的时间量内完成。天气预报和真实世界现象的计算机仿真也经常包含复杂的计算任务,该计算任务也可从并行计算中受益。并行计算对于高性能计算尤其有利,高性能计算是在本领域内用于指示需要非常大量的计算资源的计算任务的术语。
历史上,已经使用具有非常快的处理器的超级计算机、专用系统计算花费高的计算任务。但是,并行计算系统可以比超级计算机成本效率更高的方式执行这种任务。主要原因是与通过增加单个处理器的速度来提高计算能力相比,通过并行计算添加额外的处理器可更有效地和/或以较低成本提高性能。这是因为增加单个处理器的速度和性能存在报酬递减情况。相反,事实上往往不会限制有助于计算任务的处理器的数量。将多个处理器耦合到一起所需的开销是远不如增加单个处理器的速度的报酬递减重要的因素。此外,并行计算可有利地减少完成计算任务所需的功耗。这是因为并行执行得到的性能通常要比增加处理速度得到的性能更加功率高效。
并行计算中的一个操作是全局归约操作。在全局归约操作中,多个进程合作以完成计算操作。进程位于不同的处理器和/或不同的计算系统内。每个进程一开始具有本领域内已知的一些数据作为输入向量。全局归约操作使用专用的计算操作或一组计算操作组合所有输入向量。当向量大时,这可通过每个处理器在向量的子集上执行计算操作或一组计算操作来实现。应强调,本领域内已知的多种计算操作可与全局归约一起应用。全局归约操作的性能对于许多高性能并行应用是重要的。
为了成功地进行并行计算,重要地是共享计算任务的进程有效地交互。计算任务以预定义的方式在参与进程之间分配是非常有利的。为了实现此目标,进程应该理想地根据预定义的通信协议相互通信。消息传递接口或MPI是本领域内已知的有助于合作执行计算任务的多个处理器之间的通信的协议。MPI定义了各种通信的语义。
为了有助于通信,MPI定义了多个原语。一些MPI原语执行点对点通信。在这些原语中存在单向发送操作和单向接收操作。其他MPI原语有助于集群通信。这些原语包括MPI_BARRIER和MPI_BCAST。集群通信原语的子集值得注意,这是因为它们在多个进程之间分配计算操作。特别地,原语将通信和计算组合在相同操作内。此子集包括原语MPI_REDUCE和MPI_ALLREDUCE,这两个原语都执行全局归约操作。
在MPI_REDUCE操作中,每个进程具有输入向量。MPI_REDUCE操作的输出是对所有输入向量应用全局组合或归约操作的结果。MPI定义了一些内核计算操作包括求和以及确定最小值或最大值。另外,可实现MPI没有预见的定制计算操作。当归约完成时,在已知为根的进程可利用归约操作的结果。可指定哪个进程将用作根。
MPI_ALLREDUCE操作的输入和输出与MPI_REDUCE操作相似。但是,在MPI_ALLREDUCE操作结束时,在每个处理器可利用跨越所有处理器的归约操作的组合结果。
MPI_REDUCE和MPI_ALLREDUCE原语的性能对于基于MPI对并行计算应用的性能是重要的。一个长期的概括确定对于使用消息传递接口的并行计算应用,在MPI_REDUCE和MPI_ALLREDUCE内花费的时间量占任何MPI函数内配置的应用花费的总时间的超过40%。见Rolf Rabenseifner,Optimization ofCollective Reduction Operations,International Conference onComputational Science 2004,Lecture Notes in Computer Science(LNCS),Volu me 3036/2004,Springer。
MPI_REDUCE或MPI_ALLREDUCE的计算成本至少为(N-1)Lγ,其中N是进程数,L是用字节表示的向量长度而γ是每个字节的归约操作成本。如果在进程之间平均分配,则在任何具体进程内的计算成本为至少
计算系统的互连方式可包括远程直接存储器存取(RDMA)能力。RDMA是一种这样的方法,即通过该方法,属于一个计算机系统的内存内的数据在两个系统的处理器执行不同操作的同时被传送给属于另一个计算机系统的内存而不会干扰这些操作。现有技术内存在用于使用RDMA提高MPI_REDUCE或MPI_ALLREDUCE的性能的技术。特别地,RDMA提供的处理与数据传送重叠可与MPI_REDUCE或MPI_ALLREDUCE提供的流水线组合。此现有技术的技术将被称为流水线RDMA树(PRT)算法。
对于MPI_REDUCE,PRT算法将每个输入向量分成q个切片并且流水线地处理这些切片。沿连接进程树的节点的边缘组织通信。树的节点代表参与进程,并且树的根部代表MPI_REDUCE操作的根。每个进程需要q步通信和计算。在步骤i,进程首先等待其的所有子进程经由RDMA输送它们的向量的切片i。父进程然后组合接收到的切片与其自己的输入向量的切片i。在该进程处的在切片i上执行的归约操作与从其子进程接收切片(i+1)重叠。这是可能的,因为归约操作由处理器执行而同时数据传送由RDMA适配器处理。最后,父进程将组合结果发送给其父进程。这里,切片i的发送可再次与切片(i+1)上的归约操作重叠。
尽管与MPI_REDUCE和MPI_ALLREDUCE原语的非RDMA实现相比PRT算法提供了提高的性能,但是其仍只是次优的。例如,考虑归约单个字节的计算成本大于或等于传送单个字节的成本,或归约单个字节的计算成本小于传送单个字节的通信成本。这是从对于两个被定义的数,第一个数必须大于、等于或小于第二个数的数学公理直接得出的。
如果归约成本大于或等于通信成本,则大部分通信成本被计算叠盖。在此情况下,PRT算法在使用二叉树实现时的计算成本大约为

这大于MPI_REDUCE和MPI_ALLREDUCE本质上要求的分布式计算成本的下限的两倍。使用其他进程树结构实现PRT算法会导致更高的成本。
如果相反,归纳成本小于通信成本,则通信成本成为应用PRT算法所需的总成本中的主要因素。通信成本大约为

其中β是传送单个字节的通信成本。既不是叶节点也不是根节点的每个进程传递的数据的总量为3L。这是因为每个这种进程从两个子进程中的每一个接收长度为L字节的向量,并将长度为L字节的向量发送给其父进程。尽管RDMA消除了用于传送数据的处理器和存储器上的串行化的瓶颈,但是适配器带宽要求大大增加。此缺点在实现MPI_ALLREDUCE原语时会尤其明显,这是因为既不是叶节点也不是根节点的每个进程必须传送6L字节的数据。


发明内容
本发明通过引入改进的用于在多个进程之间分配计算操作并从所述多个进程收集计算操作的结果的方法解决了现有技术的上述限制。与本领域内已知的并行计算方法相比,这些改进的方法需要较少的处理时间以及较少的带宽。改进的方法可应用于实现消息传递接口的MPI_REDUCE和MPI_ALLREDUCE原语。
本发明的一个示例性实施例是一种用于在多个进程之间分配计算操作的方法。该方法包括将所述多个进程配对以便每个进程具有至少一个交互伙伴。选择操作选择位于进程的数据的子集。该数据的子集可包括所述数据的一半。划分操作将数据的被选择的子集分成多个数据段。从该划分操作得到的第一数据段被从进程传送给该进程的交互伙伴。第二数据段被在该进程从该交互伙伴接收到。在传送和接收操作的同时,对以前从先前的交互伙伴接收到的第三数据段和来自所述多个数据段的第四数据段执行计算操作。传送、接收和计算操作迭代进行,直到所有数据段被交换。
本发明的另一个示例性实施例是一种用于收集在多个进程之间分配的计算操作的结果的方法。该方法包括用于将多个进程配对以便每个进程具有至少一个交互伙伴。传送操作将一个或多个计算操作的结果从进程传送给该进程的交互伙伴。迭代操作在配对和传送操作上执行零次或更多次。在第一次配对操作之后的配对操作使进程与以前没有与该进程配对的交互伙伴相关联。
本发明的还另一个示例性方面是一种用于在多个进程之间分配计算操作的计算机装置。该计算机装置包括用于存储数据的存储单元和处理单元。该处理单元配置成执行这样的操作,即将所述多个进程配对以便每个进程具有至少一个交互伙伴,选择位于进程的数据的子集,并将所述数据的被选择的子集分成多个数据段。该数据的子集可包括所述数据的一半。存储器存取单元被配置成将由该划分操作得到的第一数据段从该进程传送给该进程的交互伙伴,并在该进程从该交互合作对象接收第二数据段。在传送和接收操作的同时,该处理单元配置成对以前从先前的交互伙伴接收到的第三数据段和来自所述多个数据段的第四数据段执行计算操作。
本发明的还另一个示例性方法是一种被包含在计算机可读介质内的用于在多个进程之间分配计算操作的计算机程序产品。该计算机程序产品包括用于将多个进程配对以便每个进程具有至少一个交互伙伴的代码,用于将一个或多个计算操作的结果从进程传送给该进程的交互伙伴的程序代码,以及用于在该配对和传送操作上迭代零次或多次的程序代码。在该第一次配对操作之后的配对操作使进程与以前没有与该进程配对的交互伙伴相关联。
本发明的前述以及其他特征、实用性和优点在下文对如附图内所示的本发明的各种实施例的更具体描述中是显而易见的。



图1示出本发明设想的用于执行并行计算的示例性系统。
图2示出在多个进程之间执行全局组合或归约操作的示例性操作的流程图。
图3示出在多个进程之中分配计算操作的示例性操作的流程图。
图4用图表示出当单个进程参与示例性分布式计算操作时该进程内的数据的改变。
图5用图表示出有助于分布式计算操作的多个进程之中的数据的示例性交换。
图6示出收集在多个进程之中分配的计算操作的结果的示例性操作的流程图,其中该结果在单个进程处被接收。
图7示出收集在多个进程之间分配的计算操作的结果的示例性操作的流程图,其中结果在该多个进程中的每一个处被接收。
图8A和8B示出被单个进程执行以帮助在多个进程之间分配并归约向量的示例性操作的流程图。
图9示出本发明设想的计算机系统的示例性实施例。

具体实施例方式 下面的说明书详细描述了如何使用本发明在多个进程之间分配计算操作并从该多个进程收集计算操作的结果。贯穿本发明的说明书,参照图1-9。当参考附图时,贯穿所有附图示出的类似的结构和元件用类似的标号指示。
图1示出本发明设想的用于执行并行计算的示例性系统102。该系统包括一个或多个计算系统104。可设想,每个计算系统104是通用计算机。但是,计算系统104可包括被配置成执行预定计算操作的专用电子器件。计算系统104可基于多种体系结构。计算系统104可执行本领域内已知的多种操作系统包括但不局限于z/OS、AIX、Linux和Windows中的任何一个。z/OS和AIX是InternationalBusiness Machines Corporation,Armonk,New York,United States的注册商标。Linux是Linus Torvalds在美国和其它国家的注册商标。Windows是Microsoft Corporation,Redmond,Washington,UnitedStates的注册商标。每个计算系统104可连接到多种外部设备,包括但不局限于键盘、鼠标、显示器以及一个或多个磁盘驱动器。应注意,计算系统104可以是异构系统。特别地,它们在体系结构、操作系统或其它重要方面互不相同。根据本领域内使用的并行计算术语,计算系统104可被称为节点。
每个计算系统104包括一个或多个处理器106。处理器可以是本领域内已知的用于执行计算操作的多种技术设备中的任何一个。可设想,每个处理器106是集成电路。在本发明的一个实施例中,每个处理器是被配置成执行任意软件指令的通用微处理器。在本发明的另一个实施例内,每个处理器是被配置成执行预定义的计算操作的专用集成电路。每个处理器106可与随机存取存储器108的一个或多个存储体耦合。
处理器106可执行一个或多个计算进程110。计算进程可用软件、硬件或其组合实现。例如,计算进程110可包括紧密耦合到被专门配置成执行预定义的计算操作的专用集成电路的软件指令。
在本发明的一个实施例中,计算进程110包括被存储在耦合到处理器106的随机存取存储器108内的指令。这些指令被装载到处理器106内并在该处被执行。另外,计算进程110可操作位于随机存储存储器108内的数据112。计算进程可在特定处理器上实现本发明的方法。这种进程可包括预定义的计算操作。计算进程还可实现支持本发明的方法所需的辅助功能。例如,关键的操作系统任务例如进程调动、存储器分配和磁盘存取可经由实现操作系统功能性的计算进程实现。另外,处理器106可执行与本发明无关的计算进程。例如,计算系统104可执行包含一个或多个计算进程110的文字处理系统。由于本领域内已知的文字处理系统花费大部分时间等待用户输入,所以处理器106的大部分计算能力可用于同时实现本发明的计算进程110。
实现本发明的计算进程110可与号码相关联。在具体实施例中,系统102内没有两个计算进程110被分配相同的号码。应注意,本领域内已知的许多操作系统为在给定计算系统104内执行的每个计算进程110分配唯一号码。本发明分配给每个计算进程的号码并不必须得自操作系统分配的号码。
计算系统104可连接到网络114。网络114可允许任何计算系统104与任何其他计算系统通信。网络可以是本领域内已知的多种类型,作为示例包括但不局限于TCP/IP、Wi-Fi、Bluetooth、令牌环和微波中的任何一个。Wi-Fi是Wireless Ethernet Compatibility Alliance,Inc.,Austin,Texas,United States的注册商标。Bluetooth是BluetoothSIG,Inc.,Bellevue,Washington,United States的注册商标。网络114可使计算系统104紧密耦合。网络可包括各种硬件设备例如开关(未示出)。应注意,用于平行计算系统的网络114有时被称为通信架构。
为了有助于连接到网络114,每个计算系统104可耦合到存储器存取单元116。存储器存取单元116可将数据从计算机传送到网络,并从网络接收到用于该计算机的数据。应强调,传送操作和接收操作是非阻塞的。非阻塞在此是指传送数据的行为不会影响发送或接收处理器106的操作。
为了实现此目标,网络适配器可实现远程直接存储器存取或RDMA。经由RDMA,存储区存取单元116可将位于被在特定处理器106上执行的计算进程110使用的随机存取存储器108的数据直接传送到被在与初始进程不同的计算系统104中执行的计算进程110使用的随机存取存储器内。存储器存取单元116然后可通知拥有该远程存取存储器的远程处理器106传送完成。相反,存储器存取单元116可有助于从在远程处理器106处执行的计算进程接收数据,并可将接收到的数据直接写入位于本地计算系统104的计算进程110使用的随机存取存储器108。应强调,RDMA以非堵塞的方式传送和接收数据。但是,应注意,本发明并不必须使用RDMA。相反,允许计算进程110以非堵塞的方式将数据传送给任何其他计算进程的任何方法都可被使用。
当计算系统104包含多个处理器106时,每个处理器106可单独执行实现本发明的方法的计算进程110。在位于相同计算系统104的这种计算进程110之间交换数据可能不需要远程直接存储器存取,这是因为处理器相距并不远。相反,可使用简单的技术在处理器106之间传送信息。一种这样的技术是本领域内已知的用于从与随机存取存储器处于相同计算系统上的部件直接存取随机存取存储器的直接存储器存取。另一种这样的技术是共享存储器,一种其中多个处理器106可存取随机存取存储器的存储体的方法。在所有实现本发明的处理器106位于单个计算系统104的情况下,系统可能不包含网络104。在此情况下,可使用前文所述的方法而不是RDMA在处理器106之间交换数据。
现在转到图2,示出执行全局组合或归约操作的示例性步骤的流程图。全局组合或归约操作可在多个进程之间分配计算操作。计算操作可以是本领域的多种计算操作内的任何一个。计算操作可以比较简单,例如对一连串输入值进行求和。计算操作也可非常复杂。计算操作被执行以促进多种目标。这种目标可包括但不局限于科学和科技研究,预测未来天气状况并模拟可观测事件。计算操作可作为高性能计算任务的一部分被执行。
多个进程并行操作以完成全局组合或归约操作。进程可属于分布式计算系统例如图1内所示的示例性系统。但是,应强调,多种系统都适合于执行本发明的方法。
全局组合或归约操作对在本领域内已知为向量的输入数据起作用。多种数据可被输入作为向量。数据可包括科学或技术数据。例如但是并不限制,数据可包括被配置成预测未来天气状况的计算机操作的输入。数据还可包括被配置成模拟科学现象或可观测现象的计算操作的输入。向量可包括大量数据(千字节或兆字节的数据)。
数据可以是多种数据类型中的任何一种。可能的数据类型包括但不局限于整数、浮点数、字符串以及其他数据类型的阵列。数据类型还可以是包含多种类型的子字段数据结构。向量可具有非常复杂的数据类型。在本发明的一个实施例中,数据可以是消息传递接口定义的任何数据类型,包括基于内核MPI数据类型导出的数据类型。对于具体的全局组合或归约操作,向量需要匹配特定数据类型。
每个进程最初被提供不同的输入数据。这可通过划分输入全局组合或归约操作的单个向量来实现。应注意,如果这种向量代表不连续的数据,则首先必须压缩数据以便向量连续。单个向量可在有助于全局组合或归约操作的进程内之间分配,从而向每个进程提供向量的单个子集,其中子集是分离的。换句话说,向量内的每个数据被正好包含在一个子集内。因此,每个数据正好位于一个进程内。
可设想每个进程以相同数量的输入数据开始。应注意,这并不是必要条件;输入数据不可能总是具有正好相等的长度。具体的,如果数据的总长度不可被进程数量均匀划分,则在理论上不能将向量分成使得每个子集具有正好相等的长度。本领域的技术人员可修改文中所示的示例性算法以允许每个进程中的数据具有不相等的长度。
全局组合或归约操作可被分成两个阶段分配阶段和收集阶段。在分配阶段,向量在从事全局组合或归约操作的多个进程之间被分配。系统内的每个进程在向量的子集上执行计算操作。应强调,计算操作可以是本领域内已知的多种计算任务中的任何一种。计算操作可以是比较简单的操作例如向量内的数据的正则数学求和。计算操作也可以是非常复杂的操作例如预测未来天气状况或模拟可观测事件。应注意,计算操作可包括其他计算操作。在分配向量的一个子集的同时对向量的另一个子集执行计算操作,这两个向量是分离的。此流水线技术有利地减少了完成全局归约操作所需的时间。
在收集阶段,检索在每个进程执行的计算操作的结果。在本发明的一个实施例中,沿一个方向传送数据直到在单个进程中接收到全部结果。如消息传递接口内定义的MPI_REDUCE操作可使用此实施例实现。在本发明的另一个实施例中,沿两个方向传送数据直到在每个进程中接收到全部结果。如消息传递接口内定义的MPI_ALLREDUCE操作可使用此实施例实现。
分配阶段以配对操作202开始。在配对操作202中,将多个进程配对。配对操作202可被执行为使得每个进程具有最多一个交互伙伴。可设想,有助于全局归约操作的进程的数量是2的幂。基于前文的两个假设,每个进程将通常具有正好一个交互伙伴。尽管示例性方法假设进程的数量为2的幂以便进行说明,但是本领域的技术人员可容易地修改该算法以利于不是2的幂的进程数量。
在交换操作204中,在每对进程之间交换数据。每个进程将位于该处的数据的子集传送给其的交互伙伴。该数据的子集可包括一半数据。由于交互伙伴本身是进程,从而每个进程的交互伙伴同样传送其数据的子集。因此,每个进程接收其交互伙伴传送的数据。可使用远程直接存储器存取以非堵塞的方式传送和接收该数据。应注意,如果进程的数量不是2的幂,则特定进程可能不能通过配对操作202配对。在此情况下,未配对的进程可不参与交换操作204。
在被传送之前,数据被分成多个数据段。因此,每个进程将由分段操作得到的数据段传送给其的交互伙伴。同时,每个进程从其对交互伙伴接收到由在该交互伙伴处执行的分段操作得到的数据段。此进程重复进程,直到所有数据段被交换。以此方式对数据分段有利地允许每个进程在接收另一个数据段的同时对以前接收到的数据段执行计算操作。由于传送和接收操作被以非堵塞的方式执行,所以它们通常不会延迟或干扰计算操作。结果,使得等待所耗费的时间最少。因此,此流水线策略有利地减少了完成全局组合或归约操作所需的时间量。
进程可将最近接收到的数据段和不是从与该第一数据段相同的进程接收到的第二数据段输入计算操作。具体的,在交换操作204的第一次迭代中,第二数据段可以是在全局组合或归约操作开始时最初被输入进程的向量的子集。应注意,在进程的第一次配对中,在数据段的第一次传送和接收期间,考虑到以前没有从当前交互伙伴接收到数据段,可省略该计算操作。
作为具体示例,进程i及其交互伙伴j可在给定时间点具有不同的数据(即向量)。进程i可将其数据的一半传送给进程j,并且进程j将其数据的前一半传送给进程i。进程i然后可对两部分数据的前一半执行计算操作,并且进程j可对两部分数据的后一半执行计算操作。在这样做时,如上所述每次对一对数据段执行计算操作。
一旦所有数据段被交换并且被输入计算过程,则对每对数据段的计算操作的输出可被连结以形成中间结果。对每对数据段的计算操作的输出的长度可比两个输入数据段的组合长度短。在此情况下,中间结果的长度短于在交换操作204的一次迭代期间输入计算操作的数据的组合长度。在本发明的一个实施例中,中间结果的长度是组合输入数据的长度的一半。应注意,这使得交换操作204每进行一次连续迭代,中间结果的大小就缩短一半。
在确定操作206中,确定分配阶段是否完成。如果没有,则控制返回配对操作202。可设想,分配阶段被定义为在配对操作202和交换操作204迭代log2N次之后完成,其中N是从事全局归约操作的进程的数量。在前面的公式中,log2指示基数为2的对数操作。因此,确定操作206可包括确定是否已经完成由前面公式确定的迭代次数。例如,如果16个处理器从事全局归约操作,则需要log216=4次迭代。
配对操作202和交换操作204可在第二次及随后的迭代时例如在确定过程206已经发生至少一次之后表现与第一次迭代时不同。具体的,在第一次配对操作之后的配对操作202的实例使每个进程与以前未与该进程配对的交互伙伴相关联。此外,交换操作204可对前一次迭代的中间结果进行操作。因此,输入计算操作的第二个数据段可以是中间结果的子集。应注意,如果在前一次迭代之后的中间结果的长度短于在该前一次迭代开始时存在的数据的长度,则操作204将交换比前一次迭代少的数据。例如,如果每次迭代将数据的大小减半,则交换操作204将交换前一次迭代的数据的一半。
收集阶段以配对操作208开始。在配对操作208中,将多个进程配对。配对操作208可被执行为使得每个进程具有最多一个交互伙伴。不需要也不允许每个进程与在分配阶段期间在配对操作202内选择的相同交互伙伴配对。但是,如果配对操作208已经执行了至少一次,则每个进程可与以前没有通过配对操作208与该进程配对的交互伙伴相关联,或者不与交互伙伴相关联。
在检索操作210中,传送一个或多个计算操作的结果。结果包括在传送结果的进程中执行的一个或多个计算操作的输出。在第一次配对之后进行配对时,该结果还可包括在其他进程执行的计算操作的以及从检索操作210的先前的迭代期间接收到的结果。可使用远程直接存储器存取以非堵塞的方式传送结果。应注意,给定进程可不通过配对操作208进行配对。在此情况下,未被配对的进程可不参与检索操作210。
在本发明的一个实施例中,每对进程之一将一个或多个计算操作的结果传送给其的交互伙伴。如消息传递接口内定义的MPI_REDUCE操作可使用此实施例实现。在本发明的另一个实施例中,每个进程如先前的实施例将一个或多个计算操作的结果传送给其的交互伙伴,并另外从其对交互伙伴接收一个或多个计算操作的结果。如消息传递接口内定义的MPI_ALLREDUCE操作可使用此实施例实现。
在确定操作212中,确定收集阶段是否完成。如果没有,则控制返回配对操作208。应注意,在前两个操作的log2N次之后在组合结果的目的地完全接收到该组合结果,其中N是从事全局归约操作的进程的数量。由于这是收集阶段的目标,所以在log2N次迭代之后可认为收集阶段完成。因此,确定操作212可包括确定是否已经完成log2N次迭代。例如,如果16个处理器从事全局组合或归约操作,则需要log216=4次迭代。
使用本发明的方法,全局归约操作可执行少至

个计算操作,其中N是进程数而L是用字节表示的向量的长度。可认为这代表了理论下限。当例如在MPI_REDUCE操作期间在单个进程接收全局归约操作的结果时,被每个进程发送和接收的最大字节数可低至

当在参与全局归约定全部进程接收全局归约操作的结果时,被每个进程发送和接收的最大字节数仍可低至

在给定时间被一个进程发送和接收到的最大字节数为

其中q是在传送期间数据被划分的数据段的数量。具体的,必须沿每个方向传送

个字节。不管在单个进程还是全部进程接收结果,这都是真的。
应强调,这些数字是对上述现有技术的重大改进。在现有技术中,必须传送

个字节以便执行其中结果被在单个进程接收的全局归约操作。在此总数中,必须发送

个字节而必须接收

个字节。为了执行其中结果被在全部进程接收的全局归约操作,必须传送

个字节。在此总数中,必须沿每个方向传送

个字节。这些改进得到了由于远程直接存储器存取任何进程执行的通信一般可被与计算重叠这一事实以及通信可被双向执行这一事实的帮助。
使用本发明的方法执行其中结果被在单个进程接收到全局归约操作所需的时间量为 如果γ>β′ 2Lβ′,如果γ≤β′ 其中,γ是每个字节的归约操作成本,β′是当存在传送和接收时每个字节的通信成本。此外,应强调,此时间小于前文所述的现有技术解决方案所需的时间。
现在转到图3,示出在多个进程之间分配计算操作的示例性操作的流程图。图3从单个进程角度示出图2内所示的分配阶段另外的细节。应强调,有助于分布式计算操作的每个进程单独地执行下文列出的操作。这并不意味着每个进程隔离地操作。相反,下文详细说明的许多操作影响两个或多个进程之间的交互。
在执行在此示出的示例性操作之前,为有助于分布式计算操作的多个进程中的每一个分配号码。为每个进程分配唯一的号码有利地帮助下文所述的示例性配对算法。没有两个进程被分配相同的号码。该号码可以是从零开始的连续整数。可设想该唯一号码至少在单个全局归约操作期间保持不变。在用于MPI_REDUCE和MPI_ALLREDUCE实现的本发明的一个实施例中,为此目的可使用MPI定义的进程的排序。
在文中所示的示例性操作开始时,每个进程以分离的输入数据开始。数据可以是在有助于分布式计算操作的多个进程之间分配的输入向量的子集。可设想,一个进程的输入数据的量等于任何其他进程的输入数据的量。如果这些假设为真,则在一个进程的输入数据代表输入向量的等于

的比例,其中N是有助于分布式计算操作的进程的数量。
多种数据可被输入进程。特别地,用作可能的输入向量的示例的任何数据类型也可被输入单个进程。长度可能是数千字节、数兆字节或更长的大量数据可被输入进程。数据可以是多种数据类型中的任何一种。可能的数据类型可包括但不局限于整数、浮点数、字符串以及其他数据类型的阵列。数据类型还可以是包含多种类型的子字段数据结构。数据可具有非常复杂的数据类型。在本发明的一个实施例中,数据可以是消息传递接口定义的任何数据类型,包括基于内核MPI数据类型导出的数据类型。对于具体的全局组合或归约操作,输入进程的数据需要匹配特定数据类型。
分布式计算操作可在接收到执行这样的全局归约操作的指示时被调用,该全局归约操作被配置成在多个进程之间分配计算操作并收集计算操作的结果以便在单个进程接收该结果。在此情况下,可设想在执行分布式计算操作之后,收集分布式计算操作的结果从而在单个进程接收该结果。例如,图3内所示的示例性操作之后可执行例如图6内所示的那些操作。在本发明的实施例中,被接收到的指示指定应该执行实现消息传递接口定义的MPI_REDUCE原语的操作。
分布式计算操作还可在接收到执行这样的全局归约操作的指示时被调用,该全局归约操作被配置成在多个进程之间分配计算操作并收集计算操作的结果以便在执行该计算操作的全部进程接收该结果。在此情况下,可设想在执行分布式计算操作之后,收集分布式计算操作的结果从而在多个进程中的每一个接收该结果。例如,图3内所示的示例性操作之后可执行例如图7内所示的那些操作。在本发明的实施例中,被接收到的指示指定应该执行实现消息传递接口定义的MPI_ALLREDUCE原语的操作。
在配对操作302中,每个进程选择零个或多个与其交互的进程。被选择的进程被称为交互合作对象。
在本发明的一个实施例中,进程可以选择最多一个交互伙伴。应强调,由于执行配对操作的多个进程中的每一个,每个进程具有最多一个交互伙伴。可设想每个进程在大多数情况下将正好选择一个交互伙伴。但是,不选择交互伙伴对于使本发明的方法适合于多种系统、体系结构和计算操作是有用的。具体的,有助于分布式计算操作的进程的数量并不必须是2的幂。为了有助于通过数量不是2的幂的进程使用本发明的方法,在给定迭代期间特定进程忽略选择交互伙伴是有利的。实际上,如果进程的数量为奇数,则在逻辑上每个进程不可能正好具有一个交互伙伴。如果进程不选择交互伙伴,则对于该进程控制转到确定操作306。
在本发明的另一个实施例中,一个进程可选择多余一个交互伙伴。此实施例可有利地允许多余两个进程根据本发明的流水线策略交换数据。本领域的技术人员应理解,图3内所示的示例性算法可被容易地修改以允许多余两个进程同时参与数据的流水线交换。
可计算进程的号码与掩码的异或(XOR)。然后可执行配对操作,一边进程与具有等于计算操作的结果的号码的交互伙伴相关联。当第一次执行配对操作302时,掩码可包含号码1的二进制表示。应注意,在此情况下,交互合作对象被选择具有等于最低有效位被倒置的进程的号码的号码。还应注意,此算法将使得被该进程选择的交互伙伴同样选择该进程作为交互伙伴。
在选择操作304中,每个进程选择位于该进程的数据的子集。该数据的子集可包括所述数据的一半。数据可位于耦合到执行该进程的随机存取存储器内。数据还可被存储在其他类型的计算机可读存储介质内。应注意,当第一次执行选择操作304时,数据可以是进程的初始输入。
在本发明的一个实施例中,如果进程的号码小于其交互伙伴的号码,则进程选择其数量的后一半作为子集。如果进程的号码大于其交互伙伴的号码,则进程选择器数据的前一半作为子集。
在划分操作306中,每个进程将数据的被选择的子集分成多个数据段。应注意,划分操作不需要在物理上重新设置数据的被选择的子集。相反,划分可包括每个数据段的识别和边界的内部认知。在本发明的一个实施例中,阵列可被配置成存储每个数据段的在对应于该数据段的总数据内的偏离字节数。使用此方法,长度为4096字节的示例性的被选择的数据子集可保持处于其当前位置。为了划分数据的被选择的子集,可用两个元素初始化阵列。第一个元素指示第一个数据段包括0到2047的偏离字节数,而第二个元素指示第二个数据端包括2048到4095的偏离字节数。在本发明的另一个实施例中,进程可以每个数据段一次的循环迭代,并且可在每个迭代中为当前字段动态地计算合适的偏离字节数。
可确定该数据的被选择的子集划分成的数据段的数量,以便优化分布式计算操作的性能。大量数据段可有利地增加数据传送和计算在时间上的重叠。这是因为在计算操作开始之前,第一对数据段必须被完全交换。因此,计算延迟交换一对数据段所需的时间量。从而,在执行任何计算之前必须传送数据的被选择的子集的

,其中M是数据段的数量。因此,增加数据段的数量会减少在计算开始之前的延时。所有事物都是相等的,增加数据段的数量会减少执行分布式计算操作所需的时间。但是,增加数据段的数量还会增加数据传送所需的网络开销。因此,选择数据段的数量以便对于给定实现最优地平衡这两个因素。在本发明的一个实施例中,数据的被选择的子集被分成两个数据段。
应注意,对于两个不同的全局归约操作数据段的数量无需相同。甚至对于在相同全局归约操作内的划分操作306的两次不同的迭代数据段也无需相同。例如,可选择多个数据段以便每个数据段尽可能地大而不会超过网络协议定义的最大包大小。
在传送操作308中,每个进程将得自划分操作306的数据段传送给该进程的交互合作对象。数据段的传送是非堵塞的。为了实现此目标,可经由远程直接存储器存取传送数据段。可设想,数据段一旦被传送则进程将不再进一步利用该数据段。但是,进程不需要特意重新分配属于该数据段的存储器,用零或其它填充数据重写该数据段或丢弃该数据段。
在接收操作310中,每个进程从其对交互合作对象接收数据段。可设想,接收操作310与传送操作308同时执行。如同传送操作308一样,数据段的接收也是非堵塞的。为了实现此目标,可经由远程直接存储器存取接收数据段。
在确定操作312中,确定是否已经从交互合作对象接收到至少一个数据段。如果是,则处理继续进行计算操作314。如果不是,则控制转到确定操作316。这是必需的,因为计算操作314可被配置成接收从当前交互伙伴接收到的数据段作为输入。但是,在经由传送操作308和接收操作310进行的与交互伙伴的数据段的第一次交换期间,没有以前的数据段被从该交互伙伴完全接收到。因此,在与交互伙伴进行的数据段的第一次交换期间计算操作314可能没有输入数据。
在计算操作314中,每个进程对以前接收到的第一数据段和不是从与第一数据段相同的数据段接收到的数据的第二数据段执行操作。特别地,第一数据段可能已被从当前交互伙伴接收到。第二数据段可得自划分操作306。应注意,在第一次迭代时,由于划分操作306接收初始输入的被选择的子集作为数据,则第二数据段本身是初始输入的子集。针对每对数据段的计算操作314的输出的长度可比两个输入数据段的长度的总和短。在本发明的一个实施例中,计算操作314的输出是输入计算操作314的数据段的组合长度的大小的一半。
应强调,计算操作可以是本领域内已知的多种计算操作中的任何一种。计算操作可以是比较简单的操作。例如,其可以确定向量内的数据的总和。其还可确定数据内发现的最大值和/或最小值。计算操作还可以是非常复杂的操作,例如预测未来天气状况或模拟科学现象。应注意,计算操作可包括其他计算操作。
计算操作314与传送操作308和接收操作310同时执行。但是,这三个操作不需要精确地同时开始和结束。例如,计算操作314可在传送操作308和/或接收操作310完成之前结束。相反,传送操作308和接收操作310可在计算操作314确定结果之前结束。应强调,计算操作314与数据的传送和接收同时执行会有利地减少完成分布式计算操作所需的总时间。由于传送和接收操作以非堵塞的方式执行,所以它们通常不会延迟或干扰计算操作。结果,使等待损失的时间最少。因此,此流水线策略有利地减少完成分布式计算操作所需的时间量。
在确定操作316中,每个进程确定数据的被选择的子集内的所有数据段是否已经被传送,以及交互伙伴期望的所有数据段是否已经被接收到。如果一个或多个数据段还没有被传送或接收到,则控制返回传送操作308。如果所有数据段已经被交换,则处理继续进行计算操作318。
在计算操作318中,将与计算操作314执行的操作相同的操作应用于最后一对数据段。第一个数据段可以是从当前交互伙伴接收到的尾段。第二个数据段可以是得自划分操作306的尾段。计算操作318是必要的,因为计算操作314应用于已经从交互伙伴完全接收到的数据段。因此,一旦所有数据段已经被交换,则至少一个接收到的数据段还没有被输入计算操作314。
在本发明的一个实施例中,在配对操作302的下一次迭代之前没有对最后一对数据段执行计算操作318。结果,在对最后一对数据段执行计算操作318的同时,第一对数据段可与下一个交互伙伴交换。此实施例有利地增加数据传送和计算的时间重叠,从而减少了完成分布式计算操作所需的总时间。在本发明的一个实施例中,对于进程的最后配对,计算操作318没有与任何数据传送同时执行。在本发明的另一个实施例中,对于进程的最后配对,计算操作318与被执行以收集计算操作的结果的数据的初始交换同时执行。例如,最终计算操作318可与图6的传送操作606或图7的传送操作706同时执行。
在确定操作320中,每个进程确定计算操作的分配是否完成。如果是,则目前的一组操作完成。但是,处理可继续进程收集阶段例如图6或7内所示的示例性操作,以便收集结果。如果计算操作的分配没有完成,则控制返回配对操作302。
可设想,分配阶段被定义为在log2N次迭代之后完成,其中N是从事全局归约操作的进程的数量。在前面的公式中,log2指示基数为2的对数操作。因此,确定操作320可包括确定是否已经完成由前面公式确定的迭代次数。例如,如果16个处理器从事全局归约操作,则需要log216=4次迭代。
对每对数据段的计算操作314和318的输出可被连结以形成中间结果。应注意,如果计算操作314和318输出其大小小于计算操作的输入的大小的总和的结果,则中间结果的大小将小于在前一次迭代开始时位于一对进程的数据的大小的总和。应注意,在此情况下,中间结果的大小随着每次迭代而减少。
在本发明的一个实施例中,使用递归减半法执行全局归约操作的分配。在此实施例中,计算操作314和318都可输出其大小是计算操作的输入的大小的总和的一半的结果。因此,中间结果的大小是在前一次迭代开始时位于一对进程的数据的大小的总和的一半。此外,在每次迭代之后的中间结果是在前一次迭代之后的中间结果的大小的一半。
如果控制返回配对操作302,则在第一次迭代和随后的迭代之间存在很大区别。应注意,配对操作302使该进程与随后的以前没有与该进程配对的交互合作对象相关联。在本发明的一个实施例中,如前文所述地使用异或操作计算交互合作对象的号码,但是其中掩码包含先前的配对操作内没有使用的值。特别地,掩码可包含配对操作302的先前迭代内使用的掩码的左移一位的值。应注意,在此情况下,交互伙伴被选择具有与其一位被倒置的进程的号码相等的号码,其中该倒置位的位置是与交互伙伴的先前选择内的倒置位位置相比其次的最高有效位。
在随后的迭代中选择操作304可选择先前迭代的中间结果的一半。结果,随后的迭代可在先前迭代的中间结果上执行操作,而不是在初始输入数据上执行操作。具体地,随后的迭代中计算操作314和318的第二数据段输入可是中间结果的子集而不是初始输入的子集。
可设想,每个进程的数据输入的长度相等。在此情况下,在分配阶段结束时,每个进程将具有总结果的等于

的比例,其中N是有助于分布式计算操作的进程的数量。
图4用图表示出当单个进程参与分布式计算操作时该进程的数据的变化。在图4中,最初位于进程内的数据段404、406、408、410用具有对角线图案的正方形示出。从该进程的交互伙伴接收到的数据用具有水平线图案的正方形示出。由在该进程执行的计算操作得到的数据用具有网点图案的正方形示出。存储介质内的没有包含于分布式计算操作相关的数据的位置用具有白色图案的正方形示出。水平的每组正方形示出了耦合到该进程的计算机可读存储器的内容。更接近页面底部的正方形组示出在连续的随后的时间点的进程的状态。
在第一状态402中,初始数据段404、406、408、410位于该进程中。初始数据可以是该进程的初始输入。初始数据还可以是先前计算操作的中间结果。数据可被存储在耦合到执行该进程的处理器的随机存取存储器内。该数据还可被存储在其他类型的计算机可读存储介质内。
进程可实例化打算保持接收到的数据段以及计算操作的结果的缓冲器412。缓冲器可以是暂时性质的。缓冲器412可与初始数据段404、406、408、410位于相同的随机存取存储器或其它存储介质内。可请求操作系统分配存储器内的特定位置以存储缓冲器412。应注意,本领域内已知的许多操作系统在将存储器位置的先前的内容分配给进程之前不会重写该内容。尽管缓冲器412被用图示出为空白空间,但是进程不需要用零或其他填充数据重写缓冲器,或相反在缓冲器被初始化时清除缓冲器内的先前的内容。可设想,在存储器分配时缓冲器内存在的任何数据将被接收到的数据段重写。
在第二状态414中,进程选择最左侧的两个数据量404、406作为将被传送给交互伙伴的数据的子集。因此,被选择的数据的数据段404被传送308给交互伙伴。数据段404可包含初始数据的四分之一。同时,从相同交互伙伴接收310到数据的第二个数据段。数据的第二个数据段被写入缓冲器412内的一个位置。传送308和接收310操作以非堵塞的方式执行。在本发明的一个实施例中,传送308和接收310操作经由远程直接存储器存取执行。应注意,在还没有从交互伙伴接收到整个数据段之前,不会执行计算操作。
在第三状态416内,数据的被选择的子集的另一个数据段406被传送308给交互伙伴。数据段406可包含初始数据的四分之一。被传送的数据段406与在第二状态414内被传送308的数据段404不同。同时,从相同的交互伙伴接收310到数据的第二个数据段。被接收到的数据段与在第二状态内接收310到的数据段不同。数据的第二数据段被写入缓冲器412内的位置。如在第二状态内,传送308和接收310以非堵塞的方式执行。在本发明的一个实施例中,传送308和接收310经由远程直接存储器存取执行。
在第二状态期间传送308的数据段404理想地已被完全传送。如果情况如此,则示例性的分布式计算操作不再需要418被完全传送的数据段。应注意,尽管不再被需要的数据用空白空间示出,但是进程不需要特意重新分配属于该数据的存储器,用零或其它填充数据重写该数据或相反清除该数据。
理想地,在第二状态414期间被接收的数据段420已经被完全接收到。如果情况如此,则进程在接收到的数据段420和初始数据的数据段408上执行计算操作314。数据段404可包含初始数据的四分之一。应注意,初始数据的数据段408不是被选择的数据的子集的一部分。计算操作314可以是本领域内已知的多种计算任务中的任何一种。计算操作314可组合输入该操作的两个数据段408和420。应强调,计算操作314与传送308和接收310两个其他数据段同时执行。
在第四状态422中,不再传送和接收数据段。在第三状态内执行的计算操作314已生成结果428。结果,不再需要426在第三状态内输入计算操作的输入数据的数据段408。
在第三状态416期间被传送308的数据段406理想地已经给被完全传送。如果情况如此,则示例性分布式计算操作同样不再需要424被完全传送的数据段。
理想地,在第三数据段416期间被接收到的数据段430已经被完全接收到。如果情况如此,则进程在接收到的数据段430和初始数据的数据段410上执行计算操作318。数据段410可包含初始数据的四分之一。应注意,初始数据的数据段410是没有被选择的数据的子集的一部分。计算操作318可以与计算操作314相同。计算操作318可以是本领域内已知的多种计算操作中的任何一种。计算操作314可组合输入该操作的两个数据段410、430。
在第五状态432中,在第四状态422内执行的计算操作318已生成结果436。结果,不再需要434在第三状态内输入计算操作的输入数据的数据段410。
在第三状态416期间执行的计算操作314的结果428与在第四状态422期间执行的计算操作318的结果436一起代表中间结果。这种中间结果可被输入分配阶段的另一个迭代。被组合的结果428、436还可代表最终结果。这里,结果428、436可被传送给显示单元,该单元以文本或图形格式该结果显示给用户。
图5示出有助于分布式计算操作的多个进程之间的示例性数据交换。
水平的每组正方形图示出在特定时间点被多个进程执行的操作。如图4相同,更接近页面底部的正方形组示出在连续的随后的时间点的系统的状态。
示例性并行计算系统502包括多个处理器504,每个处理器均有助于全局归约操作。全局归约操作可经由消息传递接口定义的MPI_REDUCE或MPI_ALLREDUCE原语实现。示例性系统包括八个进程。但是应强调,示例性系统所示的方法可被应用于具有任意数量的进程的系统。一些数据最初被输入每个进程。
每个进程被分配号码506。没有两个进程被分配相同的号码。在示例性系统中,号码是从零开始的连续整数。由于存在八个进程,所以最高的号码为7。在图5所示的操作序列中号码不会改变。
应注意,在示例性系统中,当如上所述将数据的被选择的子集划分成数据段时,每个进程被配置成将数据正好分成两个数据段。
在第一状态508内,每个进程504已经接收一些数据作为输入。每个进程与正好一个交互伙伴配对。在示例性数据交换中,根据前文定义的配对算法将该进程配对。特别地,每个进程计算其号码506和掩码的异或,其中掩码包含号码1的二进制表示。然后每个进程与具有等于该计算操作的结果的号码的进程配对。结果,每个进程选择具有等于最低有效位被倒置的其自身号码的号码的交互伙伴。应注意,此算法将使得进程选择的交互伙伴同样选择该进程作为其交互伙伴。
每个进程504然后与其交互伙伴交换510一对数据段。作为在图5中使用的术语,交换是指每个进程同时将数据段传送给其交互伙伴并从其交互伙伴接收数据段。在图5所示的所有交换中,传送和接收是非堵塞的并且可经由远程直接存储器存取实现。被传送的每个数据段可包含输入传送该数据段的进程的数据的四分之一。
在第二状态512内,每个进程504保持与和第一状态508相同的交互伙伴配对。每个进程与其交互伙伴交换510另一对数据段。同样,被传送的每个数据段可包含输入传送该数据段的进程的数据的四分之一。
在数据交换510的同时每个进程执行计算操作。在第一状态508内接收到的数据段和最初输入进程的数据段被输入计算操作。应强调,图5中执行的计算操作可以是本领域内已知的多种计算任务中的任何一种。特别地,计算操作可以是归约操作。
在第三状态514中,每个进程已经与其最初的交互伙伴交换了其全部数据。这是因为将被每个进程传送的数据被分成两个数据段,并且与当前交互伙伴执行两次交换。因此,每个进程504与先前没有与该进程配对的另一个交互伙伴配对。在示例性数据交换中,第二次配对也根据前文定义的配对算法执行。特别地,每个进程计算其号码506与掩码的异或。掩码是通过将第一状态508内使用的掩码的值左移一位计算的。由于第一状态508内地掩码的值是1的二进制表示,所以第三状态514内的掩码的值是2的二进制表示。结果,每个进程选择具有等于第二最低有效位被倒置的其自身号码的号码的交互伙伴。
每个进程504然后与其的新交互伙伴交换510一对数据段。每个数据段可包含从第三状态514开始时位于传送该数据段的进程的中间数据的四分之一。
在数据交换510的同时,每个进程执行另一个计算操作。在第二状态512中接收到的数据段以及从第三状态514开始时位于进程的中间结果的数据段被输入该计算操作。
在第四状态516中,每个进程504保持与和第三状态514相同的交互伙伴配对。每个进程504与其的交互伙伴交换另一对数据段。每个传送的数据段,也可包含从第三状态514开始时位于传送该数据段的进程的中间数据的四分之一。
在数据交换510的同时,每个进程执行另一个计算操作。在第三状态514中接收到的数据段以及从第三状态514开始时位于进程的中间结果的数据段被输入该计算操作。
在第五状态518中,每个进程已经与其第二个交互伙伴交换了全部数据。因此,每个进程504与先前没有与该进程配对的另一个交互伙伴配对。在示例性数据交换中,第三次配对也根据前文定义的配对算法执行。特别地,每个进程计算其号码506与掩码的异或。掩码是通过将第三状态514内使用的掩码的值左移一位计算的。由于第三状态514内地掩码的值是2的二进制表示,所以第五状态518内的掩码的值是4的二进制表示。结果,每个进程选择具有等于第三最低有效位被倒置的其自身号码的号码的交互伙伴。
每个进程504然后与其的交互伙伴交换510一对数据段。每个数据段可包含从第五状态518开始时位于传送该数据段的进程的中间数据的四分之一。
在数据交换510的同时,每个进程执行另一个计算操作。在第四状态512中接收到的数据段以及从第五状态518开始时位于进程的中间结果的数据段被输入该计算操作。
在第六状态520中,每个进程504保持与和第五状态518相同的交互伙伴配对。每个进程与其的交互伙伴交换另一对数据段。同样,每个数据段可包含从第五状态518开始时位于传送该数据段的进程的中间数据的四分之一。
在数据交换510的同时,每个进程执行另一个计算操作。在第五状态518中接收到的数据段以及从第五状态518开始时位于进程的中间结果的数据段被输入该计算操作。应注意,在这一点上,每个进程与三个不同交互伙伴中的每一个交换所有数据。但是,在第六状态520期间交换的数据没有被输入计算操作。因此,执行最终计算操作。在第六状态520中接收到的数据段以及从第五状态518开始时位于进程的中间结果的数据段被输入该计算操作。在本发明的一个实施例中,没有与最终计算操作同时传送数据。在本发明的另一个实施例中,最终计算操作与初始数据交换同时执行以收集计算操作的结果。例如,最终计算操作可与图6的传送操作606或图7的传送操作706同时执行。
在本发明的一个实施例中,在所有数据段与log2N个交互伙伴中的每一个均交换之后可认为全局归约操作的分配阶段已经完成,其中N是参与全局归约操作的进程的数量。示例性系统502包括八个进程504。因此,由于log28=3,所以对于示例性系统此条件在第六状态520结束时被满足。
现在转到图6,示出收集在多个处理器之间分配的计算操作的结果的示例性操作的流程图。在所述多个进程之一处接收该结果。图6示出图2内所示的收集阶段的实施例,提供了另外的细节并采取单个进程的角度(perspective)。应强调,有助于收集操作的每个进程单独执行下文列出的操作。这并不意味着每个进程隔离地操作。相反,下文详细说明的许多操作影响两个或多个进程之间的交互。
收集结果可与如图3内所示的分布式计算操作一起执行。特别地,在此示出的用于收集结果的示例性操作可在分布式计算操作之后执行,以便检索分配计算操作的结果。在图3内所示的示例性分布式计算操作结束时,总结果的子集位于有助于分布式计算操作的每个进程内。对于特定的计算操作和输入向量,位于一个进程的结果数据量可等于位于任何其他进程的结果数据量。在此情况下,位于该进程的结果数据可代表分布式计算操作的总结果的等于

的比例,其中N是有助于分布式计算操作的进程的数量。如果在分布式计算操作之后收集结果,则可再次使用参与分布式计算操作的相同进程以收集结果。
应强调,收集结果不需要在分布式计算操作之后立即进行。如本发明设想的,收集结果可被执行以在单个进程从多个进程检索任意数据。此外,如本发明设想的,收集结果可与本发明没有设想的用于在多个进程之间分配计算操作的算法一起执行。在任何情况下,将被收集的数据最初位于每个进程中。
收集可由于接收到执行这样的全局归约操作的指示时已被调用,该全局归约操作被配置成在多个进程之间分配计算操作并收集计算操作的结果以便在单个进程接收该结果。在此情况下,可设想分布式计算操作例如图3内所示的示例性算法在收集结果之前执行。这是因为图6内所示的示例性算法被配置成收集已经被执行的分布式计算操作的结果。在本发明的一个实施例中,接收到的指示指定应该执行实现消息传递接口定义的MPI_REDUCE原语的操作。
在执行文中所示的示例性操作之前,可为从中收集结果的多个进程中的每一个分配号码。为每个进程分配唯一的号码有利地帮助下文所述的示例性配对算法。没有两个进程被分配相同的号码。号码可以是从零开始的连续整数。可设想,唯一号码至少在单个全局归约操作期间保持不变。如果在分布式计算操作之后收集结果,则可设想,使用与在分布式计算算法期间用于将进程配对的算法内的号码相同的号码。此外,如果再次使用参与分布式计算算法的进程收集结果,则以前被分配给每个进程的号码仍可用于收集结果的操作。在此情况下,因为再次使用以前分配的号码,则可省略在收集结果之前为每个进程分配号码。在用于MPI_REDUCE和MPI_ALLREDUCE实现的本发明的实施例中,为此可使用MPI定义的进程的排序。
在配对操作602中,每个进程可选择一个将与其交互的进程。进程还可不选择交互伙伴。应强调,由于执行配对操作的多个进程中的每一个,每个进程具有最多一个交互伙伴。
在本发明的一个实施例中,计算等于2的因数次幂的值。如果进程的号码正好是被计算出的值的两倍的倍数,则其选择具有等于进程的号码加上被计算出的值的号码的交互伙伴。否则,进程不选择交互伙伴。在数学方面,如果进程的号码用i表示而因数用k表示,进程可确定2k+1除以i得到的余数。当且仅当余数为零时,进程选择具有号码i+2k的交互伙伴。在第一次执行配对操作602时,因数可以是号码1的二进制表示。
在确定操作604中,进程确定是否选择交互伙伴。如果没有选择交互伙伴,则控制转到确定步骤608。如果选择交互伙伴,则处理继续进行传送操作606。
在传送操作606中,进程将一个或多个计算操作的结果传送给进程的交互伙伴。该结果可包括目前位于进程的计算进程的所有结果。
在确定操作608中,进程(没有选择交互伙伴)确定是否接收到一个或多个计算操作的结果。此确定可包括在接收到数据之前或者在经过预定量的时间之前等待。如果接收到结果,则处理继续进行接收操作610。如果没有接收到结果,则控制转到确定操作612。
在接收操作610中,进程从其的交互伙伴接收到一个或多个计算操作的结果。如同传送操作606一样,该结果的接收是非堵塞的。为了实现此目标,可经由远程直接存储器存取接收结果。应注意,在此情况下,因为进程的接收可通过网络适配器实现,所以执行该进程的处理器不需要采取行动。
在确定操作612中,每个进程确定结果是否被完全收集。如果是,则处理可停止。如果没有,则控制返回配对操作602。每个单独的进程可一直等待,直到在返回配对操作602之前所有进程已经达到确定操作612。
在经过示例性收集算法的log2N次迭代之后,其中N是从事全局归约操作的进程的数量,组合结果在单个进程中被完全接收到。因此,确定操作612可包括确定是否已经完成log2N次迭代。例如,如果16个进程从事全局归约操作,则确定操作612可确定是否已经完成log216=4次迭代。
如果控制返回配对操作602,则在第一次迭代和随后的迭代之间存在很大区别。应注意,配对操作602或者使该进程与随后的以前没有与该进程配对的交互合作对象相关联,或者使该进程不与交互伙伴相关联。在本发明的一个实施例中,使用如前文所述的计算操作计算交互伙伴的号码,但是其中因数包含在先前的配对操作中没有使用的值。特别地,因数可包含等于配对操作602的先前迭代内使用的因数加1的值。
在随后的迭代中传送操作606可将在先前的迭代期间接收到的结果转发给为当前迭代选择的交互伙伴。特别地,传送操作606传送的一个或多个计算操作的结果可包括在先前的迭代中在该进程接收到的计算操作的结果。从而,接收操作610可同样包括接收在先前的迭代期间在该进程接收到的计算操作的结果。
应强调,在示例性收集阶段结束时,分布式计算操作的组合结果可在本领域内已知为根的单个进程被接收。当根据上述示例性配对算法对进程配对时,结果在具有号码0的进程被接收。应注意,分配给进程的号码因此必须被选择为使得号码0被分配给将用作根的进程。
现在转到图7,示出收集在多个进程之间分配的计算操作的结果的示例性操作的另一个流程图。与图6相反,结果在多个进程中的每一个中被接收。图7示出图2内所示的收集阶段的实施例,提供了另外的细节并采取单个进程的观点。应强调,有助于收集操作的每个进程单独执行下文列出的操作。这并不意味着每个进程隔离地操作。相反,下文详细说明的许多操作影响两个或多个进程之间的交互。
如同在单个进程接收结果的情况一样,收集结果例如每个进程接收结可与如图3内所示的分布式计算操作一起执行。特别地,在此示出的用于收集结果的示例性操作可在分布式计算操作之后执行,以便检索分布式计算操作的结果。在图3内所示的示例性分布式计算操作结束时,总结过的子集位于有助于分布式计算操作的每个进程中。对于特定的计算操作和输入向量,位于一个进程的结果数据量可等于位于任何其他进程的结果数据量。在此情况下,位于该进程的结果数据可代表分布式计算操作的总结果的等于

的比例,其中N是有助于分布式计算操作的进程的数量。如果在分布式计算操作之后收集结果,则可再次使用参与分布式计算操作的相同进程以收集结果。
应强调,如同其中在单个进程接收结果的情况一样,收集结果例如每个进程收集结果不需要立即在分布式计算操作之后进行。如本发明设想的,收集结果可被执行以在多个进程中的每一个从该多个进程检索任意数据。此外,如本发明设想的,收集结果可与本发明没有设想的用于在多个进程之间分配计算操作的算法一起执行。在任何情况下,将被收集的数据最初位于每个进程中。
收集结果可由于接收到执行这样的全局归约操作的指示时已被调用,该全局归约操作被配置成在多个进程之间分配计算操作并收集计算操作的结果,以便在执行该计算操作的所有进程接收该结果。在此情况下,可设想分布式计算操作例如图3内所示的示例性算法在收集结果之前执行。这是因为图7内所示的示例性算法被配置成收集已经被执行的分布式计算操作的结果。在本发明的一个实施例中,接收到的指示指定应该执行实现消息传递接口定义的MPI_ALLREDUCE原语的操作。
在执行文中所示的示例性操作之前,可为从中收集结果的多个进程中的每一个分配号码。为每个进程分配唯一的号码有利地帮助下文所述的示例性配对算法。应注意,号码以与从单个进程接收结果的情况相同的方式被分配。特别地,没有两个进程被分配相同的号码。号码可以是从零开始的连续整数。可设想,唯一号码至少在单个全局归约操作期间保持不变。如果在分布式计算操作之后收集结果,则可设想,使用与在分布式计算算法期间用于将进程配对的算法内的号码相同的号码。此外,如果再次使用参与分布式计算算法的进程收集结果,则以前被分配给每个进程的号码仍可用于收集结果的操作。在此情况下,因为再次使用以前分配的号码,则可省略在收集结果之前为每个进程分配号码。
在配对操作702中,每个进程可选择一个将与其交互的进程。进程还可不选择交互伙伴。与其中在单个进程接收结果的情况不同,配对是对称的。特别地,如果第一进程与第二进程配对,则第二进程也与第一进程配对。应强调,由于执行配对操作的多个进程,每个进程具有最多一个交互伙伴。
在本发明的一个实施例中,计算等于2的因数次幂的值。如果进程的号码正好是被计算出的值的两倍的倍数,则其选择具有等于进程的号码加上被计算出的值的号码的交互伙伴。在数学方面,如果进程的号码用i表示而因数用k表示,进程可确定2k+1除以i得到的余数。当且仅当余数为零时,进程选择具有号码i+2k的交互伙伴。
如果根据前述公式,进程被第二进程选择作为交互伙伴,则进程同样选择该第二进程作为其交互伙伴。这可通过从选择进程接收到请求实现。这还可通过应用用于选择交互伙伴的公式的数学逆以确定另一个进程是否将选择该进程来实现。应注意,根据前述公式选择第二进程的进程将不会再被第三进程根据相同的公式选择。
如果前述两个步骤没有将进程与交互伙伴配对,则对于当前迭代,进程没有选择交互伙伴。
在确定操作704中,进程确定是否选择交互伙伴。如果没有选择交互伙伴,则控制转到确定步骤612。如果已选择交互伙伴,则处理继续进行传送操作706。
在传送操作706中,进程将一个或多个计算操作的结果传送给进程的交互伙伴。该结果可包括目前位于进程的计算进程的所有结果。
在接收操作708中,进程从其交互伙伴接收一个或多个计算操作的结果。接收操作708可与传送操作706同时执行。
在确定操作710中,每个进程确定结果是否被完全收集。如果是,则处理可停止。如果没有,则控制返回配对操作702。每个单独的进程可一直等待,直到在返回配对操作702之前所有进程已经达到确定操作710。
在经过示例性收集算法的log2N次迭代之后,其中N是从事全局归约操作的进程的数量,组合结果在多个进程中的每一个处被完全接收到。因此,确定操作710可包括确定是否已经完成log2N次迭代。例如,如果16个进程从事全局归约操作,则确定操作710可确定是否已经完成log216=4次迭代。
如果控制返回配对操作702,则在第一次迭代和随后的迭代之间存在很大区别。应注意,配对操作702或者使该进程与随后的以前没有与该进程配对的交互合作对象相关联,或者使该进程不与交互伙伴相关联。在本发明的一个实施例中,使用如前文所述的计算操作计算交互伙伴的号码,但是其中因数包含在先前的配对操作中没有使用的值。特别地,因数可包含等于配对操作602的先前迭代内使用的因数加1的值。
在随后的迭代中传送操作706可将在前面的迭代中接收到的结果转发给为当前迭代选择的交互伙伴。特别地,传送操作706传送的一个或多个计算操作的结果可包括在先前的迭代期间在该进程接收到的计算操作的结果。从而,接收操作708可同样包括接收在先前的迭代期间在该进程接收到的计算操作的结果。
应强调,在示例性收集阶段结束时,分布式计算操作的组合结果可在多个进程中的每一个处被接收。
图8A和8B示出被单个进程执行以帮助在多个进程之间分配并归约向量的示例性操作的流程图。重点强调,每个处理器独立地执行流程图所示的操作。
在图8A和8B内使用的符号和标记如下 n是参与向量的分配和归约定进程的数量。在图8A和8B的示例性操作中,假设n可被表示为2的整数幂。特别地,n可被表示为2q,其中完成分配操作所需的迭代的次数。进程被从0到n-1依次编号。但是,本领域的那些技术人员应理解,该算法可被容易地修改以适应不是2的整数幂的进程数。
pu是执行图8A和8B内所示的操作的进程的号码。换句话说,pu是在阅读该算法时考虑其观点的进程的号码。
pv是编号为pu的进程的交互伙伴的号码。
input_vector指示输入向量。
output_vector指示输出向量。
length指示将被归约的向量的长度。应设想,input_vector和output_vector的长度相同。
在图8A的初始化操作802中,进程自身进行初始化以分配并归约向量。初始化可包括将变量设定为初始值。特别地 slice[i]包含在迭代期间将被交换的子向量被分割成的切片的数量。在图8A和8B的示例性操作中,对于在0和q-1之间且包含0和q-1在内的i的每个整数值,slice[i]都被初始化为2。但是,应注意,slice[i]的不同值可被选择以优化特定配置的性能。除了2之外的多个切片可被选择以优化流水线的深度。此外,针对每次迭代可选择不同数量的切片。
i——指示当前子向量的计数器——被初始化为0。
j——指示当前子向量的当前切片的计数器——被初始化为0。
pv——新交互伙伴的排序——被设定为pu和1的按位异或。
l——包含子向量的大小——被初始化为长度除以2。
ls——包含子向量的切片的大小——被初始化为l除以slice

vec1——包含将被传送的向量的缓冲器——被初始化为input_vector。
vec2——包含被接收的向量的缓冲器——被初始化为output_vector。
在确定操作804中,在进程的排序pu和1之间执行按位与操作。如果结果为1,则控制前进到初始化操作806。如果结果为0,则控制前进到初始化操作808。
如果选择初始化操作806,则设定下列变量 b_send——指示将被发送的子向量内的将被发送的下一个位置的计数器变量——被初始化为ls。
b_recv——指示被接收的子向量内的将被接收的下一个位置的计数器变量——被初始化为0。
adjust被初始化为-1。
如果相反选择初始化操作808,则设定下列变量 b_send被初始化为0。
b_recv被初始化为ls。
adjust被初始化为+1。
在传送操作810中,进程将第一切片传送给其交互伙伴。特别地,在位置b_send开始并且在位置b_send+ls-1结束的切片vec1被传送给交互伙伴。可设想,传送操作810是非堵塞的。特别地,传送操作810可完全或部分地与以下操作并行地进行。这可因远程直接存储器存取(RDMA)而更容易,RDMA会在进程本身继续进行以下操作的同时实现数据传送。
在接收操作812中,进程从其交互伙伴接收到第一个切片。特别地,从交互伙伴接收到在位置b_recv开始并且在位置b_recv+ls-1结束的切片vec2。如同传送操作810一样,可设想接收操作812是非堵塞的。特别地,接收操作812可完全或部分地与以下操作并行地进行。这可因远程直接存储器存取(RDMA)而更容易,RDMA会在进程本身继续进行以下操作的同时实现数据传送。为此,可设想,接收操作812与传送操作810同时进行。
应注意,被交换的第一对切片在主循环之前。这是因为循环中发生的处理包括在归约接收到的一对切片的同时交换一对切片。这继而需要初始循环迭代内已经接收到一对切片。
在增加操作814中,计数器变量j加1。这反映了接下来将传送第二个切片这一事实。
在确定操作806中,比较i与q-1。如果i小于q-1,则控制转到图2B内的操作820。如果i大于或等于q-1,则处理停止,因为此条件应该只有在向量的分配和归约完成时才发生。应注意,确定操作816在概念上与本领域内已知的许多编程语言构成的“当”循环相同。
在图8B内的等待操作820中,进程一直等待,直到接收操作812完成。
在记录操作822中,进程记录向量内的位置以便有助于归约操作842。记录可包括设定特定变量等于特定值,如下 vec3——包含将被归约的向量的缓冲器——被设定为vec1。
vec4——包含将被归约的向量的另一个缓冲器——被设定为vec2。
b_reduce_1——vec3内的从该处开始归约操作的位置——被设定为b_send加adjust与ls的乘积。应注意,adjust等于+1或-1。在前一种情况下,b_reduce_1等于b_send加ls。在后一种情况下,b_reduce_1等于b_sen减ls。
b_reduce_2——vec4内的从该处开始归约操作的位置——被设定为b_recv。
e_reduce_1——vec3内的在该处结束归约操作的位置——被设定为b_reduce_1加ls减1。
e_reduce_2——vec4内的在该处结束归约操作的位置——被设定为b_reduce_2加ls减1。
在确定操作824中,比较j与slice[i],并且比较i与q-1。如果j等于slice[i]而i不等于q-1,则控制转到重新初始化操作826。如果任何一个或两个条件都非真,则控制转到确定操作834。应注意,当j等于slice[i]而i等于q-1时,不再传送切片而刚刚被传送的数据段保持将被归约。在此情况下,经由确定操作824省略下一个切片的传送,这是有利地,因为不存在下一个切片。但是,因为刚刚被传送的切片仍必须被归约,所以没有省略归约。然后将在确定操作816处离开循环。
在重新初始化操作826中,进程执行初始化操作以选择下一个交互伙伴并准备与该进程交换信息。具体的,以前讨论的变量可被初始化为适合于与新进程交互的值。该变量以及它们的初值可包括 i——子向量索引——加1。
vec1被设定为vec2。这是因为中间结果向量将被用作下一个输入向量。
vec2加1。这使得将使用输出向量内的下一个可用空间。
pv——新交互伙伴的排序——被设定为pu和左移i位的1的异或。
l——子向量的大小——被设定为长度除以2的i+1次幂。应注意,这使得被交换的数据量为在前一次迭代期间交换的数据量的一半。
ls——子向量的切片的大小——被设定为l除以slice[i]。因此,切片的大小被设定为l的新值除以将被用于此迭代的切片的数量。
j——切片索引——被设定为1。
在确定操作828中,在进程的排序pu和左移i位的1之间执行按位与操作。如果结果非零,则控制前进到初始化操作830。如果结果为零,则控制前进到初始化操作832。应注意,确定操作828与确定操作804相似。
如果初始化操作830被选择,则设定以下变量 b_send——指示将被发送的子向量内的将被发送的下一个位置——被初始化为ls。
b_recv——指示被接收的子向量内的将被接收的下一个位置——被初始化为0。
adjust被初始化为-1。
应注意,重新初始化操作830与初始化操作806相同。
如果相反,选择初始化操作832,则设定以下变量 b_send被初始化为0。
b_recv被初始化为ls。
adjust被初始化为+1。
应注意,重新初始化操作832与初始化操作808相同。还应注意,通过遵循此算法,进程可从迭代到迭代切换角色。
在重新初始化操作830或重新初始化操作832之后,控制然后转到发送操作838。
在确定操作834中,比较j与slice[i]。如果j不等于slice[i],则控制转到初始化操作836。否则,控制转到归约操作842。
在初始化操作836中,设定以下变量 b_send增加ls的值的两倍。
b_recv同样增加ls的值得两倍。
j——切片索引——加1。
在传送操作838(其在初始化操作836、重新初始化操作830或重新初始化操作832之后),进程将第一切片传送给其交互伙伴。特别地,从位置b_send开始并在位置b_send+ls-1结束的vec1的切片被传送给交互伙伴。可设想,传送操作838是非堵塞的。特别地,传送操作838可全部或部分与以下操作并行地执行。这可因远程直接存储器存取(RDMA)而更容易,RDMA会在进程本身继续进行以下操作的同时实现数据传送。应注意,传送操作838与传送操作810相同。
在接收操作840中,进程从其交互伙伴接收第一切片。尤其是,从交互伙伴接收开始于位置b_recv、结束于位置b_recv+ls-1的vec2的切片。对于传送操作838,设想接收操作840是非堵塞的。尤其是,接收操作840可整体或部分平行于下列操作执行。这可因远程直接存储器存取(RDMA)而更容易,RDMA会在进程本身继续进行以下操作的同时实现数据传送。为此,考虑接收操作840与传送操作838同时进行。应当注意,接收操作840与接收操作812相同。
在归约操作842中,对先前的切片执行归约操作。归约操作接受从位置b_reduce_1到e_reduce_1的vec3和从位置b_reduce_2到e_reduce_2的vec4作为输入。应强调,归约操作可包括本领域内已知的多种计算操作中的任何一种。控制然后返回图8A上的确定操作816。
参照图9,示出本发明设想的计算机系统902的示例性实施例。计算机系统902包括处理单元904,系统存储器906,以及将系统存储器906耦合到处理单元904的系统总线908。系统存储器906包括只读存储器(ROM)908和随机存取存储器(RAM)910。包含帮助在计算机系统902内的元件之间传送信息的基本例程的基本输入/输出系统(BIOS)912被存储在ROM 908内。
计算机系统902还包括硬盘驱动器914,磁盘驱动器916(将从可取出磁盘918读取并写入该磁盘),和光盘驱动器920(用于读光盘922或从其他光学介质读取并写入该其他光学介质)。硬盘驱动器914、磁盘驱动器916和光盘驱动器920分别通过硬盘接口924、磁盘接口926和光盘接口928连接到系统总线908。驱动器以及与它们相关联的计算机可读介质为计算机系统902提供了非易失性存储。尽管计算机可读的介质是指硬盘、可取出的磁盘介质和可取出的光盘介质,但是本领域的那些技术人员应理解,可被计算机读取的其他类型的介质例如闪存卡也可用于示例性计算机系统902。
多种程序模块可被存储在驱动器和RAM 108内,包括运行时间平台931、计算进程110、程序数据934和其它程序模块(未示出)。如上所述,计算进程110可实现多种目标。这些目标包括但不局限于科学和科技研究、预测未来天气状况以及模拟科学现象。计算操作可作为高性能计算任务的一部分被执行。
用户可通过键盘936和点击设备例如鼠标938向计算机系统902输入命令和信息。其他输入设备(未示出)可包括麦克风、调制解调器、操纵杆、游戏垫、圆盘式卫星天线、扫描器等等。这些以及其他输入设备常常通过串行端口接口940连接到处理单元,该串行端口耦合到系统总线908。
监视器942或其他类型的显示设备也经由接口例如视频适配器944耦合到系统总线908。除了监视器之外,计算机系统902还包括其他外围输出设备(未示出)例如扬声器和打印机。
计算机系统902使用与一个或多个远程设备的逻辑连接在网络环境内操作。远程设备可包括服务器、路由器、对等设备或其它公共网络节点。当用于网络环境中时,计算机系统902通常通过网络接口946连接到网络114上。在网络环境中,相对于计算机系统902或其一部分说明的程序模块可被存储在一个或多个远程存储设备内。
本领域的技术人员应理解,本发明可表现为方法、系统或计算机程序产品。因此,本发明可表现为完全是硬件的实施例、完全是软件的实施例(包括固件、驻留软件、微代码等),或组合在此通常被称为“电路”、“模块”或“系统”的软件和硬件方面的实施例的形式。此外,本发明还可表现为计算机程序产品或其中包含计算机可用的程序代码的计算机可读存储介质的形式。
任何合适的计算机可用或计算机可读介质可被利用。计算机可用或计算机可读的介质可以是例如但不局限于电子、磁、光学、电磁、红外线或半导体系统、装置、设备或传播介质。计算机可读介质的更具体的示例(非详尽的列表)如下具有一条或多条线的电子连接,便携式计算机软盘,硬盘、直接存取存储器(RAM),只读存储器(ROM),可擦除的可编程只读存储器(EPROM或闪存),光导纤维,便携式光盘只读存储器(CD-ROM),光学存储设备,传送介质例如支持互联网或内联网的那些介质,或磁性存储设备。应注意,计算机可用或计算机可读介质甚至可以是纸或可在其上打印程序的另一种合适的介质,程序可被经由例如对该纸或其它介质进行光学扫描被电子捕获,然后被编译、解释或如果必要的话以合适的方式处理,然后被存储在计算机存储器内。在此文献的上下文内,计算机可用或计算机可读介质可以是可包含、存储、传递、传播或传送被指令执行系统、装置或设备使用或与之有关的程序的任何介质。计算机可用介质可包括或者在基带内或者作为载波的一部分的其中包含计算机可用程序代码的被传播的数据信号。可使用任何合适的介质包括但不局限于互联网、有线线路、光纤电缆、RF等传送计算机可用程序代码。
用于执行本发明的操作的计算机程序代码可用面向对象程序设计语言例如Java、Smalltalk、C++等写成。但是,用于执行本发明的操作的计算机程序代码还可用传统的过程程序设计语言例如“C”程序设计语言或类似程序设计语言写成。程序代码可完全在用户的计算机上、部分在用户的计算机上、作为独立软件包、部分在用户的计算机上而部分在远程计算机上,或完全在远程计算机或服务器上执行。在后者的情况中,远程计算机可通过局域网(LAN)或广域网(WAN)连接到用户的计算机,或者可(例如,使用因特网服务提供商通过因特网)与外部计算机连接。
上文参照根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图说明了本发明。应理解,流程图和/或框图等每个块以及流程图和/或框图内的块的组合可用计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以生成机器,从而该指令经由计算机或其他可编程数据处理装置的处理器执行,创建用于实现流程图和/或框图块内制定的功能/行为的部件。
这些计算机程序指令还可被存储在计算机可读存储器内,可指引计算机或其他可编程数据处理装置以特定方式起作用,从而被存储在计算机可读存储器内的指令可制成包含实现流程图和/或框图块内指定的功能/性能的指令部件的制成品。
计算机程序指令还可被装载到计算机或其他可编程数据处理装置上以使得在计算机或其他可编程装置上执行一连串操作步骤以产生被计算机实现的进程,从而在计算机或其他可编程装置上执行的该指令提供了用于实现流程图和/或框图块内指定的功能/行为的步骤。
附图内的流程图和框图示出根据本发明的各种实施例的系统、方法和计算机程序产品的可能的实现的结构、功能和操作。在此方面,流程图或框图内的每个块可代表代码的模块、代码段或一部分,其包括用于实现特定逻辑函数的一个或多个可执行指令。还应注意,在一些可选择的实现中,块内指示的功能可以与附图内指示的顺序不同的顺序发生。例如,连续示出的两个块实际上可基本同时执行,或者块有时可根据调用的功能以颠倒的顺序执行。还应注意,框图和/或流程图的每个块以及框图和/或流程图的块的组合可用执行被指定的功能或行为的专用的基于硬件的系统或专用硬件或计算机指令的组合实现。
文中使用的术语仅是为了描述具体实施例而不是打算限制本发明。如文中使用的,除非上下文另外清楚地示出,否则单数形式“一”和“该”也将包含复数形式。还应理解,术语“包括”和/或“包含”在用于此说明书时指定存在提到的特征、整数、步骤、操作、元件和/或组件,但是不排除存在或添加一种或多种其他的特征、整数、步骤、操作、元件、组件和/或它们的组。
下面的权利要求内对应的结构、材料、行为以及所有部件或步骤加功能元件的等同物将包含用于与如由权利要求具体规定的其他被要求的元件共同实现功能的任何结构、材料或行为。对本发明的说明仅是为了说明和描述,而不是打算是穷尽的或将本发明局限于公开的形式。许多修改和变型对于本领域的普通技术人员是显而易见的且不会背离本发明的范围和精神。实施例被选择和说明以便最好地解释本发明的原理以及实际应用,并且使本领域的其他普通技术人员能够理解本发明的具有适合于设想的具体使用的各种修改的各种实施例。
通过这种详细说明本申请的发明并参照本发明的实施例,很明显,可存在修改和变型而不会背离所附权利要求内限定的本发明的范围。
权利要求
1.一种用于在多个进程之间分配计算操作的方法,该方法包括
将所述多个进程配对,以便每个进程具有至少一个交互伙伴;
选择位于进程的数据的子集;
将该数据的被选择的子集分成多个数据段;
将从该划分操作得到的第一数据段从该进程传送给该进程的交互伙伴;
在该进程从该交互伙伴接收第二数据段;
在该传送和接收操作的同时,对以前从先前的交互伙伴接收到的第三数据段和来自所述多个数据段的第四数据段执行计算操作;以及
迭代所述传送、接收和计算操作,直到所有数据段被交换。
2.根据权利要求1的方法,其中所述数据的子集包括所述数据的一半。
3.根据权利要求1的方法,其中该方法还包括重复所述配对、选择、划分、传送、接收、计算和迭代操作一次或多次,其中在第一次配对操作之后的下一次配对操作使所述进程与以前没有与该进程配对的随后的交互伙伴相关联。
4.根据权利要求3的方法,其中该方法还包括
为所述多个进程中的每一个分配号码,其中没有两个进程被分配相同的号码;
计算进程的号码与掩码的异或并执行第一次配对操作,从而使进程与具有等于该计算操作的结果的号码的交互伙伴相关联;以及
为该第一次配对操作之后的每次配对操作重复该计算操作,其中该掩码包括先前的配对操作中没有使用的值。
5.根据权利要求1的方法,其中该方法还包括接收执行这样的全局归约操作的指示,即该全局归约操作被配置成在多个进程之间分配计算操作并收集该计算操作的结果,以便在单个进程接收该结果。
6.根据权利要求1的方法,其中该方法还包括接收执行这样的全局归约操作的指示,即该全局归约操作被配置成在多个进程之间分配计算操作并收集该计算操作的结果,以便在执行该计算操作的所有进程接收该结果。
7.根据权利要求1的方法,其中所述数据段被经由远程直接存储器存取传送。
8.根据权利要求1的方法,其中所述计算操作被配置用于模拟可观测事件。
9.根据权利要求1的方法,其中所述计算操作被配置用于预测未来天气状况。
10.一种用于在多个进程之间分配计算操作的计算机装置,该计算机装置包括
用于存储数据的存储单元;
用于执行这样的操作的处理单元,即将所述多个进程配对以便每个进程具有至少一个交互伙伴,选择位于进程的数据的子集,并将所述数据的被选择的子集分成多个数据段;
用于将由该划分操作得到的第一数据段从该进程传送给该进程的交互伙伴,并在该进程从该交互伙伴接收第二数据段的存储器存取单元;
其中该处理单元被配置成在该传送和接收操作的同时,对以前从先前的交互伙伴接收到的第三数据段和来自所述多个数据段的第四数据段执行计算操作。
11.根据权利要求10的计算机装置,其中所述数据的所述子集包括所述数据的一半。
12.根据权利要求10的计算机装置,其中所述处理单元还执行重复所述配对、选择、划分、和计算操作一次或多次的操作,其中在第一次配对操作之后的下一次配对操作使所述进程与以前没有与该进程配对的随后的交互伙伴相关联。
13.根据权利要求12的计算机装置,其中所述处理单元还执行以下操作
为所述多个进程中的每一个分配号码,其中没有两个进程被分配相同的号码;
计算进程的号码与掩码的异或并执行第一次配对操作,从而使进程与具有等于该计算操作的结果的号码的交互伙伴相关联;以及
为该第一次配对操作之后的每次配对操作重复该计算操作,其中该掩码包括先前的配对操作中没有使用的值。
14.根据权利要求10的计算机装置,其中所述存储器存取单元被配置用于经由远程直接存储器存取传送数据段。
15.根据权利要求10的计算机装置,其中所述计算操作被配置用于模拟可观测事件。
全文摘要
描述了用于在多个进程之间分配计算操作并从该多个进程收集计算操作的结果的方法、系统和计算机程序。示例性方法包括以下操作将多个进程配对以便每个进程具有最多一个交互伙伴;选择位于进程的数据的一半;将该数据的所述被选择的一半分成多个数据段;将从该划分操作得到的第一数据段从该进程传送给该进程的交互伙伴;在该进程从该交互伙伴接收第二数据段;在该传送和接收操作的同时,对以前从先前的交互伙伴接收到的第三数据段和来自所述多个数据段的第四数据段执行计算操作;并且迭代该传送、接收和计算操作,直到所有数据段被交换。
文档编号G06F9/46GK101206588SQ20071018693
公开日2008年6月25日 申请日期2007年11月15日 优先权日2006年12月15日
发明者彬 贾 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1