專利名稱:用于在多個(gè)進(jìn)程之間分配計(jì)算操作的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及并行計(jì)算。更準(zhǔn)確地說(shuō),本發(fā)明涉及用于在多個(gè)進(jìn)程之間分配計(jì)算操作并且從該多個(gè)進(jìn)程收集該計(jì)算操作的結(jié)果的技術(shù)。
背景技術(shù):
并行計(jì)算是在多個(gè)處理器和/或多個(gè)計(jì)算系統(tǒng)之間分配計(jì)算操作。并行計(jì)算是有利的,這是因?yàn)槿绻褂枚鄠€(gè)處理器,則計(jì)算花費(fèi)高的處理任務(wù)可花費(fèi)較少的時(shí)間完成。例如,科學(xué)和科技研究常常包含這樣的計(jì)算任務(wù),該計(jì)算任務(wù)由于其復(fù)雜性而在單個(gè)處理器上需要數(shù)年才能完成。但是,這種任務(wù)如果在大量處理器之間分配則往往可在可管理的時(shí)間量?jī)?nèi)完成。天氣預(yù)報(bào)和真實(shí)世界現(xiàn)象的計(jì)算機(jī)仿真也經(jīng)常包含復(fù)雜的計(jì)算任務(wù),該計(jì)算任務(wù)也可從并行計(jì)算中受益。并行計(jì)算對(duì)于高性能計(jì)算尤其有利,高性能計(jì)算是在本領(lǐng)域內(nèi)用于指示需要非常大量的計(jì)算資源的計(jì)算任務(wù)的術(shù)語(yǔ)。
歷史上,已經(jīng)使用具有非常快的處理器的超級(jí)計(jì)算機(jī)、專用系統(tǒng)計(jì)算花費(fèi)高的計(jì)算任務(wù)。但是,并行計(jì)算系統(tǒng)可以比超級(jí)計(jì)算機(jī)成本效率更高的方式執(zhí)行這種任務(wù)。主要原因是與通過(guò)增加單個(gè)處理器的速度來(lái)提高計(jì)算能力相比,通過(guò)并行計(jì)算添加額外的處理器可更有效地和/或以較低成本提高性能。這是因?yàn)樵黾訂蝹€(gè)處理器的速度和性能存在報(bào)酬遞減情況。相反,事實(shí)上往往不會(huì)限制有助于計(jì)算任務(wù)的處理器的數(shù)量。將多個(gè)處理器耦合到一起所需的開銷是遠(yuǎn)不如增加單個(gè)處理器的速度的報(bào)酬遞減重要的因素。此外,并行計(jì)算可有利地減少完成計(jì)算任務(wù)所需的功耗。這是因?yàn)椴⑿袌?zhí)行得到的性能通常要比增加處理速度得到的性能更加功率高效。
并行計(jì)算中的一個(gè)操作是全局歸約操作。在全局歸約操作中,多個(gè)進(jìn)程合作以完成計(jì)算操作。進(jìn)程位于不同的處理器和/或不同的計(jì)算系統(tǒng)內(nèi)。每個(gè)進(jìn)程一開始具有本領(lǐng)域內(nèi)已知的一些數(shù)據(jù)作為輸入向量。全局歸約操作使用專用的計(jì)算操作或一組計(jì)算操作組合所有輸入向量。當(dāng)向量大時(shí),這可通過(guò)每個(gè)處理器在向量的子集上執(zhí)行計(jì)算操作或一組計(jì)算操作來(lái)實(shí)現(xiàn)。應(yīng)強(qiáng)調(diào),本領(lǐng)域內(nèi)已知的多種計(jì)算操作可與全局歸約一起應(yīng)用。全局歸約操作的性能對(duì)于許多高性能并行應(yīng)用是重要的。
為了成功地進(jìn)行并行計(jì)算,重要地是共享計(jì)算任務(wù)的進(jìn)程有效地交互。計(jì)算任務(wù)以預(yù)定義的方式在參與進(jìn)程之間分配是非常有利的。為了實(shí)現(xiàn)此目標(biāo),進(jìn)程應(yīng)該理想地根據(jù)預(yù)定義的通信協(xié)議相互通信。消息傳遞接口或MPI是本領(lǐng)域內(nèi)已知的有助于合作執(zhí)行計(jì)算任務(wù)的多個(gè)處理器之間的通信的協(xié)議。MPI定義了各種通信的語(yǔ)義。
為了有助于通信,MPI定義了多個(gè)原語(yǔ)。一些MPI原語(yǔ)執(zhí)行點(diǎn)對(duì)點(diǎn)通信。在這些原語(yǔ)中存在單向發(fā)送操作和單向接收操作。其他MPI原語(yǔ)有助于集群通信。這些原語(yǔ)包括MPI_BARRIER和MPI_BCAST。集群通信原語(yǔ)的子集值得注意,這是因?yàn)樗鼈冊(cè)诙鄠€(gè)進(jìn)程之間分配計(jì)算操作。特別地,原語(yǔ)將通信和計(jì)算組合在相同操作內(nèi)。此子集包括原語(yǔ)MPI_REDUCE和MPI_ALLREDUCE,這兩個(gè)原語(yǔ)都執(zhí)行全局歸約操作。
在MPI_REDUCE操作中,每個(gè)進(jìn)程具有輸入向量。MPI_REDUCE操作的輸出是對(duì)所有輸入向量應(yīng)用全局組合或歸約操作的結(jié)果。MPI定義了一些內(nèi)核計(jì)算操作包括求和以及確定最小值或最大值。另外,可實(shí)現(xiàn)MPI沒有預(yù)見的定制計(jì)算操作。當(dāng)歸約完成時(shí),在已知為根的進(jìn)程可利用歸約操作的結(jié)果??芍付膫€(gè)進(jìn)程將用作根。
MPI_ALLREDUCE操作的輸入和輸出與MPI_REDUCE操作相似。但是,在MPI_ALLREDUCE操作結(jié)束時(shí),在每個(gè)處理器可利用跨越所有處理器的歸約操作的組合結(jié)果。
MPI_REDUCE和MPI_ALLREDUCE原語(yǔ)的性能對(duì)于基于MPI對(duì)并行計(jì)算應(yīng)用的性能是重要的。一個(gè)長(zhǎng)期的概括確定對(duì)于使用消息傳遞接口的并行計(jì)算應(yīng)用,在MPI_REDUCE和MPI_ALLREDUCE內(nèi)花費(fèi)的時(shí)間量占任何MPI函數(shù)內(nèi)配置的應(yīng)用花費(fèi)的總時(shí)間的超過(guò)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的計(jì)算成本至少為(N-1)Lγ,其中N是進(jìn)程數(shù),L是用字節(jié)表示的向量長(zhǎng)度而γ是每個(gè)字節(jié)的歸約操作成本。如果在進(jìn)程之間平均分配,則在任何具體進(jìn)程內(nèi)的計(jì)算成本為至少
計(jì)算系統(tǒng)的互連方式可包括遠(yuǎn)程直接存儲(chǔ)器存取(RDMA)能力。RDMA是一種這樣的方法,即通過(guò)該方法,屬于一個(gè)計(jì)算機(jī)系統(tǒng)的內(nèi)存內(nèi)的數(shù)據(jù)在兩個(gè)系統(tǒng)的處理器執(zhí)行不同操作的同時(shí)被傳送給屬于另一個(gè)計(jì)算機(jī)系統(tǒng)的內(nèi)存而不會(huì)干擾這些操作。現(xiàn)有技術(shù)內(nèi)存在用于使用RDMA提高M(jìn)PI_REDUCE或MPI_ALLREDUCE的性能的技術(shù)。特別地,RDMA提供的處理與數(shù)據(jù)傳送重疊可與MPI_REDUCE或MPI_ALLREDUCE提供的流水線組合。此現(xiàn)有技術(shù)的技術(shù)將被稱為流水線RDMA樹(PRT)算法。
對(duì)于MPI_REDUCE,PRT算法將每個(gè)輸入向量分成q個(gè)切片并且流水線地處理這些切片。沿連接進(jìn)程樹的節(jié)點(diǎn)的邊緣組織通信。樹的節(jié)點(diǎn)代表參與進(jìn)程,并且樹的根部代表MPI_REDUCE操作的根。每個(gè)進(jìn)程需要q步通信和計(jì)算。在步驟i,進(jìn)程首先等待其的所有子進(jìn)程經(jīng)由RDMA輸送它們的向量的切片i。父進(jìn)程然后組合接收到的切片與其自己的輸入向量的切片i。在該進(jìn)程處的在切片i上執(zhí)行的歸約操作與從其子進(jìn)程接收切片(i+1)重疊。這是可能的,因?yàn)闅w約操作由處理器執(zhí)行而同時(shí)數(shù)據(jù)傳送由RDMA適配器處理。最后,父進(jìn)程將組合結(jié)果發(fā)送給其父進(jìn)程。這里,切片i的發(fā)送可再次與切片(i+1)上的歸約操作重疊。
盡管與MPI_REDUCE和MPI_ALLREDUCE原語(yǔ)的非RDMA實(shí)現(xiàn)相比PRT算法提供了提高的性能,但是其仍只是次優(yōu)的。例如,考慮歸約單個(gè)字節(jié)的計(jì)算成本大于或等于傳送單個(gè)字節(jié)的成本,或歸約單個(gè)字節(jié)的計(jì)算成本小于傳送單個(gè)字節(jié)的通信成本。這是從對(duì)于兩個(gè)被定義的數(shù),第一個(gè)數(shù)必須大于、等于或小于第二個(gè)數(shù)的數(shù)學(xué)公理直接得出的。
如果歸約成本大于或等于通信成本,則大部分通信成本被計(jì)算疊蓋。在此情況下,PRT算法在使用二叉樹實(shí)現(xiàn)時(shí)的計(jì)算成本大約為
這大于MPI_REDUCE和MPI_ALLREDUCE本質(zhì)上要求的分布式計(jì)算成本的下限的兩倍。使用其他進(jìn)程樹結(jié)構(gòu)實(shí)現(xiàn)PRT算法會(huì)導(dǎo)致更高的成本。
如果相反,歸納成本小于通信成本,則通信成本成為應(yīng)用PRT算法所需的總成本中的主要因素。通信成本大約為
其中β是傳送單個(gè)字節(jié)的通信成本。既不是葉節(jié)點(diǎn)也不是根節(jié)點(diǎn)的每個(gè)進(jìn)程傳遞的數(shù)據(jù)的總量為3L。這是因?yàn)槊總€(gè)這種進(jìn)程從兩個(gè)子進(jìn)程中的每一個(gè)接收長(zhǎng)度為L(zhǎng)字節(jié)的向量,并將長(zhǎng)度為L(zhǎng)字節(jié)的向量發(fā)送給其父進(jìn)程。盡管RDMA消除了用于傳送數(shù)據(jù)的處理器和存儲(chǔ)器上的串行化的瓶頸,但是適配器帶寬要求大大增加。此缺點(diǎn)在實(shí)現(xiàn)MPI_ALLREDUCE原語(yǔ)時(shí)會(huì)尤其明顯,這是因?yàn)榧炔皇侨~節(jié)點(diǎn)也不是根節(jié)點(diǎn)的每個(gè)進(jìn)程必須傳送6L字節(jié)的數(shù)據(jù)。
發(fā)明內(nèi)容
本發(fā)明通過(guò)引入改進(jìn)的用于在多個(gè)進(jìn)程之間分配計(jì)算操作并從所述多個(gè)進(jìn)程收集計(jì)算操作的結(jié)果的方法解決了現(xiàn)有技術(shù)的上述限制。與本領(lǐng)域內(nèi)已知的并行計(jì)算方法相比,這些改進(jìn)的方法需要較少的處理時(shí)間以及較少的帶寬。改進(jìn)的方法可應(yīng)用于實(shí)現(xiàn)消息傳遞接口的MPI_REDUCE和MPI_ALLREDUCE原語(yǔ)。
本發(fā)明的一個(gè)示例性實(shí)施例是一種用于在多個(gè)進(jìn)程之間分配計(jì)算操作的方法。該方法包括將所述多個(gè)進(jìn)程配對(duì)以便每個(gè)進(jìn)程具有至少一個(gè)交互伙伴。選擇操作選擇位于進(jìn)程的數(shù)據(jù)的子集。該數(shù)據(jù)的子集可包括所述數(shù)據(jù)的一半。劃分操作將數(shù)據(jù)的被選擇的子集分成多個(gè)數(shù)據(jù)段。從該劃分操作得到的第一數(shù)據(jù)段被從進(jìn)程傳送給該進(jìn)程的交互伙伴。第二數(shù)據(jù)段被在該進(jìn)程從該交互伙伴接收到。在傳送和接收操作的同時(shí),對(duì)以前從先前的交互伙伴接收到的第三數(shù)據(jù)段和來(lái)自所述多個(gè)數(shù)據(jù)段的第四數(shù)據(jù)段執(zhí)行計(jì)算操作。傳送、接收和計(jì)算操作迭代進(jìn)行,直到所有數(shù)據(jù)段被交換。
本發(fā)明的另一個(gè)示例性實(shí)施例是一種用于收集在多個(gè)進(jìn)程之間分配的計(jì)算操作的結(jié)果的方法。該方法包括用于將多個(gè)進(jìn)程配對(duì)以便每個(gè)進(jìn)程具有至少一個(gè)交互伙伴。傳送操作將一個(gè)或多個(gè)計(jì)算操作的結(jié)果從進(jìn)程傳送給該進(jìn)程的交互伙伴。迭代操作在配對(duì)和傳送操作上執(zhí)行零次或更多次。在第一次配對(duì)操作之后的配對(duì)操作使進(jìn)程與以前沒有與該進(jìn)程配對(duì)的交互伙伴相關(guān)聯(lián)。
本發(fā)明的還另一個(gè)示例性方面是一種用于在多個(gè)進(jìn)程之間分配計(jì)算操作的計(jì)算機(jī)裝置。該計(jì)算機(jī)裝置包括用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元和處理單元。該處理單元配置成執(zhí)行這樣的操作,即將所述多個(gè)進(jìn)程配對(duì)以便每個(gè)進(jìn)程具有至少一個(gè)交互伙伴,選擇位于進(jìn)程的數(shù)據(jù)的子集,并將所述數(shù)據(jù)的被選擇的子集分成多個(gè)數(shù)據(jù)段。該數(shù)據(jù)的子集可包括所述數(shù)據(jù)的一半。存儲(chǔ)器存取單元被配置成將由該劃分操作得到的第一數(shù)據(jù)段從該進(jìn)程傳送給該進(jìn)程的交互伙伴,并在該進(jìn)程從該交互合作對(duì)象接收第二數(shù)據(jù)段。在傳送和接收操作的同時(shí),該處理單元配置成對(duì)以前從先前的交互伙伴接收到的第三數(shù)據(jù)段和來(lái)自所述多個(gè)數(shù)據(jù)段的第四數(shù)據(jù)段執(zhí)行計(jì)算操作。
本發(fā)明的還另一個(gè)示例性方法是一種被包含在計(jì)算機(jī)可讀介質(zhì)內(nèi)的用于在多個(gè)進(jìn)程之間分配計(jì)算操作的計(jì)算機(jī)程序產(chǎn)品。該計(jì)算機(jī)程序產(chǎn)品包括用于將多個(gè)進(jìn)程配對(duì)以便每個(gè)進(jìn)程具有至少一個(gè)交互伙伴的代碼,用于將一個(gè)或多個(gè)計(jì)算操作的結(jié)果從進(jìn)程傳送給該進(jìn)程的交互伙伴的程序代碼,以及用于在該配對(duì)和傳送操作上迭代零次或多次的程序代碼。在該第一次配對(duì)操作之后的配對(duì)操作使進(jìn)程與以前沒有與該進(jìn)程配對(duì)的交互伙伴相關(guān)聯(lián)。
本發(fā)明的前述以及其他特征、實(shí)用性和優(yōu)點(diǎn)在下文對(duì)如附圖內(nèi)所示的本發(fā)明的各種實(shí)施例的更具體描述中是顯而易見的。
圖1示出本發(fā)明設(shè)想的用于執(zhí)行并行計(jì)算的示例性系統(tǒng)。
圖2示出在多個(gè)進(jìn)程之間執(zhí)行全局組合或歸約操作的示例性操作的流程圖。
圖3示出在多個(gè)進(jìn)程之中分配計(jì)算操作的示例性操作的流程圖。
圖4用圖表示出當(dāng)單個(gè)進(jìn)程參與示例性分布式計(jì)算操作時(shí)該進(jìn)程內(nèi)的數(shù)據(jù)的改變。
圖5用圖表示出有助于分布式計(jì)算操作的多個(gè)進(jìn)程之中的數(shù)據(jù)的示例性交換。
圖6示出收集在多個(gè)進(jìn)程之中分配的計(jì)算操作的結(jié)果的示例性操作的流程圖,其中該結(jié)果在單個(gè)進(jìn)程處被接收。
圖7示出收集在多個(gè)進(jìn)程之間分配的計(jì)算操作的結(jié)果的示例性操作的流程圖,其中結(jié)果在該多個(gè)進(jìn)程中的每一個(gè)處被接收。
圖8A和8B示出被單個(gè)進(jìn)程執(zhí)行以幫助在多個(gè)進(jìn)程之間分配并歸約向量的示例性操作的流程圖。
圖9示出本發(fā)明設(shè)想的計(jì)算機(jī)系統(tǒng)的示例性實(shí)施例。
具體實(shí)施例方式 下面的說(shuō)明書詳細(xì)描述了如何使用本發(fā)明在多個(gè)進(jìn)程之間分配計(jì)算操作并從該多個(gè)進(jìn)程收集計(jì)算操作的結(jié)果。貫穿本發(fā)明的說(shuō)明書,參照?qǐng)D1-9。當(dāng)參考附圖時(shí),貫穿所有附圖示出的類似的結(jié)構(gòu)和元件用類似的標(biāo)號(hào)指示。
圖1示出本發(fā)明設(shè)想的用于執(zhí)行并行計(jì)算的示例性系統(tǒng)102。該系統(tǒng)包括一個(gè)或多個(gè)計(jì)算系統(tǒng)104??稍O(shè)想,每個(gè)計(jì)算系統(tǒng)104是通用計(jì)算機(jī)。但是,計(jì)算系統(tǒng)104可包括被配置成執(zhí)行預(yù)定計(jì)算操作的專用電子器件。計(jì)算系統(tǒng)104可基于多種體系結(jié)構(gòu)。計(jì)算系統(tǒng)104可執(zhí)行本領(lǐng)域內(nèi)已知的多種操作系統(tǒng)包括但不局限于z/OS、AIX、Linux和Windows中的任何一個(gè)。z/OS和AIX是InternationalBusiness Machines Corporation,Armonk,New York,United States的注冊(cè)商標(biāo)。Linux是Linus Torvalds在美國(guó)和其它國(guó)家的注冊(cè)商標(biāo)。Windows是Microsoft Corporation,Redmond,Washington,UnitedStates的注冊(cè)商標(biāo)。每個(gè)計(jì)算系統(tǒng)104可連接到多種外部設(shè)備,包括但不局限于鍵盤、鼠標(biāo)、顯示器以及一個(gè)或多個(gè)磁盤驅(qū)動(dòng)器。應(yīng)注意,計(jì)算系統(tǒng)104可以是異構(gòu)系統(tǒng)。特別地,它們?cè)隗w系結(jié)構(gòu)、操作系統(tǒng)或其它重要方面互不相同。根據(jù)本領(lǐng)域內(nèi)使用的并行計(jì)算術(shù)語(yǔ),計(jì)算系統(tǒng)104可被稱為節(jié)點(diǎn)。
每個(gè)計(jì)算系統(tǒng)104包括一個(gè)或多個(gè)處理器106。處理器可以是本領(lǐng)域內(nèi)已知的用于執(zhí)行計(jì)算操作的多種技術(shù)設(shè)備中的任何一個(gè)??稍O(shè)想,每個(gè)處理器106是集成電路。在本發(fā)明的一個(gè)實(shí)施例中,每個(gè)處理器是被配置成執(zhí)行任意軟件指令的通用微處理器。在本發(fā)明的另一個(gè)實(shí)施例內(nèi),每個(gè)處理器是被配置成執(zhí)行預(yù)定義的計(jì)算操作的專用集成電路。每個(gè)處理器106可與隨機(jī)存取存儲(chǔ)器108的一個(gè)或多個(gè)存儲(chǔ)體耦合。
處理器106可執(zhí)行一個(gè)或多個(gè)計(jì)算進(jìn)程110。計(jì)算進(jìn)程可用軟件、硬件或其組合實(shí)現(xiàn)。例如,計(jì)算進(jìn)程110可包括緊密耦合到被專門配置成執(zhí)行預(yù)定義的計(jì)算操作的專用集成電路的軟件指令。
在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算進(jìn)程110包括被存儲(chǔ)在耦合到處理器106的隨機(jī)存取存儲(chǔ)器108內(nèi)的指令。這些指令被裝載到處理器106內(nèi)并在該處被執(zhí)行。另外,計(jì)算進(jìn)程110可操作位于隨機(jī)存儲(chǔ)存儲(chǔ)器108內(nèi)的數(shù)據(jù)112。計(jì)算進(jìn)程可在特定處理器上實(shí)現(xiàn)本發(fā)明的方法。這種進(jìn)程可包括預(yù)定義的計(jì)算操作。計(jì)算進(jìn)程還可實(shí)現(xiàn)支持本發(fā)明的方法所需的輔助功能。例如,關(guān)鍵的操作系統(tǒng)任務(wù)例如進(jìn)程調(diào)動(dòng)、存儲(chǔ)器分配和磁盤存取可經(jīng)由實(shí)現(xiàn)操作系統(tǒng)功能性的計(jì)算進(jìn)程實(shí)現(xiàn)。另外,處理器106可執(zhí)行與本發(fā)明無(wú)關(guān)的計(jì)算進(jìn)程。例如,計(jì)算系統(tǒng)104可執(zhí)行包含一個(gè)或多個(gè)計(jì)算進(jìn)程110的文字處理系統(tǒng)。由于本領(lǐng)域內(nèi)已知的文字處理系統(tǒng)花費(fèi)大部分時(shí)間等待用戶輸入,所以處理器106的大部分計(jì)算能力可用于同時(shí)實(shí)現(xiàn)本發(fā)明的計(jì)算進(jìn)程110。
實(shí)現(xiàn)本發(fā)明的計(jì)算進(jìn)程110可與號(hào)碼相關(guān)聯(lián)。在具體實(shí)施例中,系統(tǒng)102內(nèi)沒有兩個(gè)計(jì)算進(jìn)程110被分配相同的號(hào)碼。應(yīng)注意,本領(lǐng)域內(nèi)已知的許多操作系統(tǒng)為在給定計(jì)算系統(tǒng)104內(nèi)執(zhí)行的每個(gè)計(jì)算進(jìn)程110分配唯一號(hào)碼。本發(fā)明分配給每個(gè)計(jì)算進(jìn)程的號(hào)碼并不必須得自操作系統(tǒng)分配的號(hào)碼。
計(jì)算系統(tǒng)104可連接到網(wǎng)絡(luò)114。網(wǎng)絡(luò)114可允許任何計(jì)算系統(tǒng)104與任何其他計(jì)算系統(tǒng)通信。網(wǎng)絡(luò)可以是本領(lǐng)域內(nèi)已知的多種類型,作為示例包括但不局限于TCP/IP、Wi-Fi、Bluetooth、令牌環(huán)和微波中的任何一個(gè)。Wi-Fi是Wireless Ethernet Compatibility Alliance,Inc.,Austin,Texas,United States的注冊(cè)商標(biāo)。Bluetooth是BluetoothSIG,Inc.,Bellevue,Washington,United States的注冊(cè)商標(biāo)。網(wǎng)絡(luò)114可使計(jì)算系統(tǒng)104緊密耦合。網(wǎng)絡(luò)可包括各種硬件設(shè)備例如開關(guān)(未示出)。應(yīng)注意,用于平行計(jì)算系統(tǒng)的網(wǎng)絡(luò)114有時(shí)被稱為通信架構(gòu)。
為了有助于連接到網(wǎng)絡(luò)114,每個(gè)計(jì)算系統(tǒng)104可耦合到存儲(chǔ)器存取單元116。存儲(chǔ)器存取單元116可將數(shù)據(jù)從計(jì)算機(jī)傳送到網(wǎng)絡(luò),并從網(wǎng)絡(luò)接收到用于該計(jì)算機(jī)的數(shù)據(jù)。應(yīng)強(qiáng)調(diào),傳送操作和接收操作是非阻塞的。非阻塞在此是指?jìng)魉蛿?shù)據(jù)的行為不會(huì)影響發(fā)送或接收處理器106的操作。
為了實(shí)現(xiàn)此目標(biāo),網(wǎng)絡(luò)適配器可實(shí)現(xiàn)遠(yuǎn)程直接存儲(chǔ)器存取或RDMA。經(jīng)由RDMA,存儲(chǔ)區(qū)存取單元116可將位于被在特定處理器106上執(zhí)行的計(jì)算進(jìn)程110使用的隨機(jī)存取存儲(chǔ)器108的數(shù)據(jù)直接傳送到被在與初始進(jìn)程不同的計(jì)算系統(tǒng)104中執(zhí)行的計(jì)算進(jìn)程110使用的隨機(jī)存取存儲(chǔ)器內(nèi)。存儲(chǔ)器存取單元116然后可通知擁有該遠(yuǎn)程存取存儲(chǔ)器的遠(yuǎn)程處理器106傳送完成。相反,存儲(chǔ)器存取單元116可有助于從在遠(yuǎn)程處理器106處執(zhí)行的計(jì)算進(jìn)程接收數(shù)據(jù),并可將接收到的數(shù)據(jù)直接寫入位于本地計(jì)算系統(tǒng)104的計(jì)算進(jìn)程110使用的隨機(jī)存取存儲(chǔ)器108。應(yīng)強(qiáng)調(diào),RDMA以非堵塞的方式傳送和接收數(shù)據(jù)。但是,應(yīng)注意,本發(fā)明并不必須使用RDMA。相反,允許計(jì)算進(jìn)程110以非堵塞的方式將數(shù)據(jù)傳送給任何其他計(jì)算進(jìn)程的任何方法都可被使用。
當(dāng)計(jì)算系統(tǒng)104包含多個(gè)處理器106時(shí),每個(gè)處理器106可單獨(dú)執(zhí)行實(shí)現(xiàn)本發(fā)明的方法的計(jì)算進(jìn)程110。在位于相同計(jì)算系統(tǒng)104的這種計(jì)算進(jìn)程110之間交換數(shù)據(jù)可能不需要遠(yuǎn)程直接存儲(chǔ)器存取,這是因?yàn)樘幚砥飨嗑嗖⒉贿h(yuǎn)。相反,可使用簡(jiǎn)單的技術(shù)在處理器106之間傳送信息。一種這樣的技術(shù)是本領(lǐng)域內(nèi)已知的用于從與隨機(jī)存取存儲(chǔ)器處于相同計(jì)算系統(tǒng)上的部件直接存取隨機(jī)存取存儲(chǔ)器的直接存儲(chǔ)器存取。另一種這樣的技術(shù)是共享存儲(chǔ)器,一種其中多個(gè)處理器106可存取隨機(jī)存取存儲(chǔ)器的存儲(chǔ)體的方法。在所有實(shí)現(xiàn)本發(fā)明的處理器106位于單個(gè)計(jì)算系統(tǒng)104的情況下,系統(tǒng)可能不包含網(wǎng)絡(luò)104。在此情況下,可使用前文所述的方法而不是RDMA在處理器106之間交換數(shù)據(jù)。
現(xiàn)在轉(zhuǎn)到圖2,示出執(zhí)行全局組合或歸約操作的示例性步驟的流程圖。全局組合或歸約操作可在多個(gè)進(jìn)程之間分配計(jì)算操作。計(jì)算操作可以是本領(lǐng)域的多種計(jì)算操作內(nèi)的任何一個(gè)。計(jì)算操作可以比較簡(jiǎn)單,例如對(duì)一連串輸入值進(jìn)行求和。計(jì)算操作也可非常復(fù)雜。計(jì)算操作被執(zhí)行以促進(jìn)多種目標(biāo)。這種目標(biāo)可包括但不局限于科學(xué)和科技研究,預(yù)測(cè)未來(lái)天氣狀況并模擬可觀測(cè)事件。計(jì)算操作可作為高性能計(jì)算任務(wù)的一部分被執(zhí)行。
多個(gè)進(jìn)程并行操作以完成全局組合或歸約操作。進(jìn)程可屬于分布式計(jì)算系統(tǒng)例如圖1內(nèi)所示的示例性系統(tǒng)。但是,應(yīng)強(qiáng)調(diào),多種系統(tǒng)都適合于執(zhí)行本發(fā)明的方法。
全局組合或歸約操作對(duì)在本領(lǐng)域內(nèi)已知為向量的輸入數(shù)據(jù)起作用。多種數(shù)據(jù)可被輸入作為向量。數(shù)據(jù)可包括科學(xué)或技術(shù)數(shù)據(jù)。例如但是并不限制,數(shù)據(jù)可包括被配置成預(yù)測(cè)未來(lái)天氣狀況的計(jì)算機(jī)操作的輸入。數(shù)據(jù)還可包括被配置成模擬科學(xué)現(xiàn)象或可觀測(cè)現(xiàn)象的計(jì)算操作的輸入。向量可包括大量數(shù)據(jù)(千字節(jié)或兆字節(jié)的數(shù)據(jù))。
數(shù)據(jù)可以是多種數(shù)據(jù)類型中的任何一種??赡艿臄?shù)據(jù)類型包括但不局限于整數(shù)、浮點(diǎn)數(shù)、字符串以及其他數(shù)據(jù)類型的陣列。數(shù)據(jù)類型還可以是包含多種類型的子字段數(shù)據(jù)結(jié)構(gòu)。向量可具有非常復(fù)雜的數(shù)據(jù)類型。在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)可以是消息傳遞接口定義的任何數(shù)據(jù)類型,包括基于內(nèi)核MPI數(shù)據(jù)類型導(dǎo)出的數(shù)據(jù)類型。對(duì)于具體的全局組合或歸約操作,向量需要匹配特定數(shù)據(jù)類型。
每個(gè)進(jìn)程最初被提供不同的輸入數(shù)據(jù)。這可通過(guò)劃分輸入全局組合或歸約操作的單個(gè)向量來(lái)實(shí)現(xiàn)。應(yīng)注意,如果這種向量代表不連續(xù)的數(shù)據(jù),則首先必須壓縮數(shù)據(jù)以便向量連續(xù)。單個(gè)向量可在有助于全局組合或歸約操作的進(jìn)程內(nèi)之間分配,從而向每個(gè)進(jìn)程提供向量的單個(gè)子集,其中子集是分離的。換句話說(shuō),向量?jī)?nèi)的每個(gè)數(shù)據(jù)被正好包含在一個(gè)子集內(nèi)。因此,每個(gè)數(shù)據(jù)正好位于一個(gè)進(jìn)程內(nèi)。
可設(shè)想每個(gè)進(jìn)程以相同數(shù)量的輸入數(shù)據(jù)開始。應(yīng)注意,這并不是必要條件;輸入數(shù)據(jù)不可能總是具有正好相等的長(zhǎng)度。具體的,如果數(shù)據(jù)的總長(zhǎng)度不可被進(jìn)程數(shù)量均勻劃分,則在理論上不能將向量分成使得每個(gè)子集具有正好相等的長(zhǎng)度。本領(lǐng)域的技術(shù)人員可修改文中所示的示例性算法以允許每個(gè)進(jìn)程中的數(shù)據(jù)具有不相等的長(zhǎng)度。
全局組合或歸約操作可被分成兩個(gè)階段分配階段和收集階段。在分配階段,向量在從事全局組合或歸約操作的多個(gè)進(jìn)程之間被分配。系統(tǒng)內(nèi)的每個(gè)進(jìn)程在向量的子集上執(zhí)行計(jì)算操作。應(yīng)強(qiáng)調(diào),計(jì)算操作可以是本領(lǐng)域內(nèi)已知的多種計(jì)算任務(wù)中的任何一種。計(jì)算操作可以是比較簡(jiǎn)單的操作例如向量?jī)?nèi)的數(shù)據(jù)的正則數(shù)學(xué)求和。計(jì)算操作也可以是非常復(fù)雜的操作例如預(yù)測(cè)未來(lái)天氣狀況或模擬可觀測(cè)事件。應(yīng)注意,計(jì)算操作可包括其他計(jì)算操作。在分配向量的一個(gè)子集的同時(shí)對(duì)向量的另一個(gè)子集執(zhí)行計(jì)算操作,這兩個(gè)向量是分離的。此流水線技術(shù)有利地減少了完成全局歸約操作所需的時(shí)間。
在收集階段,檢索在每個(gè)進(jìn)程執(zhí)行的計(jì)算操作的結(jié)果。在本發(fā)明的一個(gè)實(shí)施例中,沿一個(gè)方向傳送數(shù)據(jù)直到在單個(gè)進(jìn)程中接收到全部結(jié)果。如消息傳遞接口內(nèi)定義的MPI_REDUCE操作可使用此實(shí)施例實(shí)現(xiàn)。在本發(fā)明的另一個(gè)實(shí)施例中,沿兩個(gè)方向傳送數(shù)據(jù)直到在每個(gè)進(jìn)程中接收到全部結(jié)果。如消息傳遞接口內(nèi)定義的MPI_ALLREDUCE操作可使用此實(shí)施例實(shí)現(xiàn)。
分配階段以配對(duì)操作202開始。在配對(duì)操作202中,將多個(gè)進(jìn)程配對(duì)。配對(duì)操作202可被執(zhí)行為使得每個(gè)進(jìn)程具有最多一個(gè)交互伙伴。可設(shè)想,有助于全局歸約操作的進(jìn)程的數(shù)量是2的冪。基于前文的兩個(gè)假設(shè),每個(gè)進(jìn)程將通常具有正好一個(gè)交互伙伴。盡管示例性方法假設(shè)進(jìn)程的數(shù)量為2的冪以便進(jìn)行說(shuō)明,但是本領(lǐng)域的技術(shù)人員可容易地修改該算法以利于不是2的冪的進(jìn)程數(shù)量。
在交換操作204中,在每對(duì)進(jìn)程之間交換數(shù)據(jù)。每個(gè)進(jìn)程將位于該處的數(shù)據(jù)的子集傳送給其的交互伙伴。該數(shù)據(jù)的子集可包括一半數(shù)據(jù)。由于交互伙伴本身是進(jìn)程,從而每個(gè)進(jìn)程的交互伙伴同樣傳送其數(shù)據(jù)的子集。因此,每個(gè)進(jìn)程接收其交互伙伴傳送的數(shù)據(jù)??墒褂眠h(yuǎn)程直接存儲(chǔ)器存取以非堵塞的方式傳送和接收該數(shù)據(jù)。應(yīng)注意,如果進(jìn)程的數(shù)量不是2的冪,則特定進(jìn)程可能不能通過(guò)配對(duì)操作202配對(duì)。在此情況下,未配對(duì)的進(jìn)程可不參與交換操作204。
在被傳送之前,數(shù)據(jù)被分成多個(gè)數(shù)據(jù)段。因此,每個(gè)進(jìn)程將由分段操作得到的數(shù)據(jù)段傳送給其的交互伙伴。同時(shí),每個(gè)進(jìn)程從其對(duì)交互伙伴接收到由在該交互伙伴處執(zhí)行的分段操作得到的數(shù)據(jù)段。此進(jìn)程重復(fù)進(jìn)程,直到所有數(shù)據(jù)段被交換。以此方式對(duì)數(shù)據(jù)分段有利地允許每個(gè)進(jìn)程在接收另一個(gè)數(shù)據(jù)段的同時(shí)對(duì)以前接收到的數(shù)據(jù)段執(zhí)行計(jì)算操作。由于傳送和接收操作被以非堵塞的方式執(zhí)行,所以它們通常不會(huì)延遲或干擾計(jì)算操作。結(jié)果,使得等待所耗費(fèi)的時(shí)間最少。因此,此流水線策略有利地減少了完成全局組合或歸約操作所需的時(shí)間量。
進(jìn)程可將最近接收到的數(shù)據(jù)段和不是從與該第一數(shù)據(jù)段相同的進(jìn)程接收到的第二數(shù)據(jù)段輸入計(jì)算操作。具體的,在交換操作204的第一次迭代中,第二數(shù)據(jù)段可以是在全局組合或歸約操作開始時(shí)最初被輸入進(jìn)程的向量的子集。應(yīng)注意,在進(jìn)程的第一次配對(duì)中,在數(shù)據(jù)段的第一次傳送和接收期間,考慮到以前沒有從當(dāng)前交互伙伴接收到數(shù)據(jù)段,可省略該計(jì)算操作。
作為具體示例,進(jìn)程i及其交互伙伴j可在給定時(shí)間點(diǎn)具有不同的數(shù)據(jù)(即向量)。進(jìn)程i可將其數(shù)據(jù)的一半傳送給進(jìn)程j,并且進(jìn)程j將其數(shù)據(jù)的前一半傳送給進(jìn)程i。進(jìn)程i然后可對(duì)兩部分?jǐn)?shù)據(jù)的前一半執(zhí)行計(jì)算操作,并且進(jìn)程j可對(duì)兩部分?jǐn)?shù)據(jù)的后一半執(zhí)行計(jì)算操作。在這樣做時(shí),如上所述每次對(duì)一對(duì)數(shù)據(jù)段執(zhí)行計(jì)算操作。
一旦所有數(shù)據(jù)段被交換并且被輸入計(jì)算過(guò)程,則對(duì)每對(duì)數(shù)據(jù)段的計(jì)算操作的輸出可被連結(jié)以形成中間結(jié)果。對(duì)每對(duì)數(shù)據(jù)段的計(jì)算操作的輸出的長(zhǎng)度可比兩個(gè)輸入數(shù)據(jù)段的組合長(zhǎng)度短。在此情況下,中間結(jié)果的長(zhǎng)度短于在交換操作204的一次迭代期間輸入計(jì)算操作的數(shù)據(jù)的組合長(zhǎng)度。在本發(fā)明的一個(gè)實(shí)施例中,中間結(jié)果的長(zhǎng)度是組合輸入數(shù)據(jù)的長(zhǎng)度的一半。應(yīng)注意,這使得交換操作204每進(jìn)行一次連續(xù)迭代,中間結(jié)果的大小就縮短一半。
在確定操作206中,確定分配階段是否完成。如果沒有,則控制返回配對(duì)操作202??稍O(shè)想,分配階段被定義為在配對(duì)操作202和交換操作204迭代log2N次之后完成,其中N是從事全局歸約操作的進(jìn)程的數(shù)量。在前面的公式中,log2指示基數(shù)為2的對(duì)數(shù)操作。因此,確定操作206可包括確定是否已經(jīng)完成由前面公式確定的迭代次數(shù)。例如,如果16個(gè)處理器從事全局歸約操作,則需要log216=4次迭代。
配對(duì)操作202和交換操作204可在第二次及隨后的迭代時(shí)例如在確定過(guò)程206已經(jīng)發(fā)生至少一次之后表現(xiàn)與第一次迭代時(shí)不同。具體的,在第一次配對(duì)操作之后的配對(duì)操作202的實(shí)例使每個(gè)進(jìn)程與以前未與該進(jìn)程配對(duì)的交互伙伴相關(guān)聯(lián)。此外,交換操作204可對(duì)前一次迭代的中間結(jié)果進(jìn)行操作。因此,輸入計(jì)算操作的第二個(gè)數(shù)據(jù)段可以是中間結(jié)果的子集。應(yīng)注意,如果在前一次迭代之后的中間結(jié)果的長(zhǎng)度短于在該前一次迭代開始時(shí)存在的數(shù)據(jù)的長(zhǎng)度,則操作204將交換比前一次迭代少的數(shù)據(jù)。例如,如果每次迭代將數(shù)據(jù)的大小減半,則交換操作204將交換前一次迭代的數(shù)據(jù)的一半。
收集階段以配對(duì)操作208開始。在配對(duì)操作208中,將多個(gè)進(jìn)程配對(duì)。配對(duì)操作208可被執(zhí)行為使得每個(gè)進(jìn)程具有最多一個(gè)交互伙伴。不需要也不允許每個(gè)進(jìn)程與在分配階段期間在配對(duì)操作202內(nèi)選擇的相同交互伙伴配對(duì)。但是,如果配對(duì)操作208已經(jīng)執(zhí)行了至少一次,則每個(gè)進(jìn)程可與以前沒有通過(guò)配對(duì)操作208與該進(jìn)程配對(duì)的交互伙伴相關(guān)聯(lián),或者不與交互伙伴相關(guān)聯(lián)。
在檢索操作210中,傳送一個(gè)或多個(gè)計(jì)算操作的結(jié)果。結(jié)果包括在傳送結(jié)果的進(jìn)程中執(zhí)行的一個(gè)或多個(gè)計(jì)算操作的輸出。在第一次配對(duì)之后進(jìn)行配對(duì)時(shí),該結(jié)果還可包括在其他進(jìn)程執(zhí)行的計(jì)算操作的以及從檢索操作210的先前的迭代期間接收到的結(jié)果。可使用遠(yuǎn)程直接存儲(chǔ)器存取以非堵塞的方式傳送結(jié)果。應(yīng)注意,給定進(jìn)程可不通過(guò)配對(duì)操作208進(jìn)行配對(duì)。在此情況下,未被配對(duì)的進(jìn)程可不參與檢索操作210。
在本發(fā)明的一個(gè)實(shí)施例中,每對(duì)進(jìn)程之一將一個(gè)或多個(gè)計(jì)算操作的結(jié)果傳送給其的交互伙伴。如消息傳遞接口內(nèi)定義的MPI_REDUCE操作可使用此實(shí)施例實(shí)現(xiàn)。在本發(fā)明的另一個(gè)實(shí)施例中,每個(gè)進(jìn)程如先前的實(shí)施例將一個(gè)或多個(gè)計(jì)算操作的結(jié)果傳送給其的交互伙伴,并另外從其對(duì)交互伙伴接收一個(gè)或多個(gè)計(jì)算操作的結(jié)果。如消息傳遞接口內(nèi)定義的MPI_ALLREDUCE操作可使用此實(shí)施例實(shí)現(xiàn)。
在確定操作212中,確定收集階段是否完成。如果沒有,則控制返回配對(duì)操作208。應(yīng)注意,在前兩個(gè)操作的log2N次之后在組合結(jié)果的目的地完全接收到該組合結(jié)果,其中N是從事全局歸約操作的進(jìn)程的數(shù)量。由于這是收集階段的目標(biāo),所以在log2N次迭代之后可認(rèn)為收集階段完成。因此,確定操作212可包括確定是否已經(jīng)完成log2N次迭代。例如,如果16個(gè)處理器從事全局組合或歸約操作,則需要log216=4次迭代。
使用本發(fā)明的方法,全局歸約操作可執(zhí)行少至
個(gè)計(jì)算操作,其中N是進(jìn)程數(shù)而L是用字節(jié)表示的向量的長(zhǎng)度。可認(rèn)為這代表了理論下限。當(dāng)例如在MPI_REDUCE操作期間在單個(gè)進(jìn)程接收全局歸約操作的結(jié)果時(shí),被每個(gè)進(jìn)程發(fā)送和接收的最大字節(jié)數(shù)可低至
當(dāng)在參與全局歸約定全部進(jìn)程接收全局歸約操作的結(jié)果時(shí),被每個(gè)進(jìn)程發(fā)送和接收的最大字節(jié)數(shù)仍可低至
在給定時(shí)間被一個(gè)進(jìn)程發(fā)送和接收到的最大字節(jié)數(shù)為
其中q是在傳送期間數(shù)據(jù)被劃分的數(shù)據(jù)段的數(shù)量。具體的,必須沿每個(gè)方向傳送
個(gè)字節(jié)。不管在單個(gè)進(jìn)程還是全部進(jìn)程接收結(jié)果,這都是真的。
應(yīng)強(qiáng)調(diào),這些數(shù)字是對(duì)上述現(xiàn)有技術(shù)的重大改進(jìn)。在現(xiàn)有技術(shù)中,必須傳送
個(gè)字節(jié)以便執(zhí)行其中結(jié)果被在單個(gè)進(jìn)程接收的全局歸約操作。在此總數(shù)中,必須發(fā)送
個(gè)字節(jié)而必須接收
個(gè)字節(jié)。為了執(zhí)行其中結(jié)果被在全部進(jìn)程接收的全局歸約操作,必須傳送
個(gè)字節(jié)。在此總數(shù)中,必須沿每個(gè)方向傳送
個(gè)字節(jié)。這些改進(jìn)得到了由于遠(yuǎn)程直接存儲(chǔ)器存取任何進(jìn)程執(zhí)行的通信一般可被與計(jì)算重疊這一事實(shí)以及通信可被雙向執(zhí)行這一事實(shí)的幫助。
使用本發(fā)明的方法執(zhí)行其中結(jié)果被在單個(gè)進(jìn)程接收到全局歸約操作所需的時(shí)間量為 如果γ>β′ 2Lβ′,如果γ≤β′ 其中,γ是每個(gè)字節(jié)的歸約操作成本,β′是當(dāng)存在傳送和接收時(shí)每個(gè)字節(jié)的通信成本。此外,應(yīng)強(qiáng)調(diào),此時(shí)間小于前文所述的現(xiàn)有技術(shù)解決方案所需的時(shí)間。
現(xiàn)在轉(zhuǎn)到圖3,示出在多個(gè)進(jìn)程之間分配計(jì)算操作的示例性操作的流程圖。圖3從單個(gè)進(jìn)程角度示出圖2內(nèi)所示的分配階段另外的細(xì)節(jié)。應(yīng)強(qiáng)調(diào),有助于分布式計(jì)算操作的每個(gè)進(jìn)程單獨(dú)地執(zhí)行下文列出的操作。這并不意味著每個(gè)進(jìn)程隔離地操作。相反,下文詳細(xì)說(shuō)明的許多操作影響兩個(gè)或多個(gè)進(jìn)程之間的交互。
在執(zhí)行在此示出的示例性操作之前,為有助于分布式計(jì)算操作的多個(gè)進(jìn)程中的每一個(gè)分配號(hào)碼。為每個(gè)進(jìn)程分配唯一的號(hào)碼有利地幫助下文所述的示例性配對(duì)算法。沒有兩個(gè)進(jìn)程被分配相同的號(hào)碼。該號(hào)碼可以是從零開始的連續(xù)整數(shù)??稍O(shè)想該唯一號(hào)碼至少在單個(gè)全局歸約操作期間保持不變。在用于MPI_REDUCE和MPI_ALLREDUCE實(shí)現(xiàn)的本發(fā)明的一個(gè)實(shí)施例中,為此目的可使用MPI定義的進(jìn)程的排序。
在文中所示的示例性操作開始時(shí),每個(gè)進(jìn)程以分離的輸入數(shù)據(jù)開始。數(shù)據(jù)可以是在有助于分布式計(jì)算操作的多個(gè)進(jìn)程之間分配的輸入向量的子集??稍O(shè)想,一個(gè)進(jìn)程的輸入數(shù)據(jù)的量等于任何其他進(jìn)程的輸入數(shù)據(jù)的量。如果這些假設(shè)為真,則在一個(gè)進(jìn)程的輸入數(shù)據(jù)代表輸入向量的等于
的比例,其中N是有助于分布式計(jì)算操作的進(jìn)程的數(shù)量。
多種數(shù)據(jù)可被輸入進(jìn)程。特別地,用作可能的輸入向量的示例的任何數(shù)據(jù)類型也可被輸入單個(gè)進(jìn)程。長(zhǎng)度可能是數(shù)千字節(jié)、數(shù)兆字節(jié)或更長(zhǎng)的大量數(shù)據(jù)可被輸入進(jìn)程。數(shù)據(jù)可以是多種數(shù)據(jù)類型中的任何一種??赡艿臄?shù)據(jù)類型可包括但不局限于整數(shù)、浮點(diǎn)數(shù)、字符串以及其他數(shù)據(jù)類型的陣列。數(shù)據(jù)類型還可以是包含多種類型的子字段數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)可具有非常復(fù)雜的數(shù)據(jù)類型。在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)可以是消息傳遞接口定義的任何數(shù)據(jù)類型,包括基于內(nèi)核MPI數(shù)據(jù)類型導(dǎo)出的數(shù)據(jù)類型。對(duì)于具體的全局組合或歸約操作,輸入進(jìn)程的數(shù)據(jù)需要匹配特定數(shù)據(jù)類型。
分布式計(jì)算操作可在接收到執(zhí)行這樣的全局歸約操作的指示時(shí)被調(diào)用,該全局歸約操作被配置成在多個(gè)進(jìn)程之間分配計(jì)算操作并收集計(jì)算操作的結(jié)果以便在單個(gè)進(jìn)程接收該結(jié)果。在此情況下,可設(shè)想在執(zhí)行分布式計(jì)算操作之后,收集分布式計(jì)算操作的結(jié)果從而在單個(gè)進(jìn)程接收該結(jié)果。例如,圖3內(nèi)所示的示例性操作之后可執(zhí)行例如圖6內(nèi)所示的那些操作。在本發(fā)明的實(shí)施例中,被接收到的指示指定應(yīng)該執(zhí)行實(shí)現(xiàn)消息傳遞接口定義的MPI_REDUCE原語(yǔ)的操作。
分布式計(jì)算操作還可在接收到執(zhí)行這樣的全局歸約操作的指示時(shí)被調(diào)用,該全局歸約操作被配置成在多個(gè)進(jìn)程之間分配計(jì)算操作并收集計(jì)算操作的結(jié)果以便在執(zhí)行該計(jì)算操作的全部進(jìn)程接收該結(jié)果。在此情況下,可設(shè)想在執(zhí)行分布式計(jì)算操作之后,收集分布式計(jì)算操作的結(jié)果從而在多個(gè)進(jìn)程中的每一個(gè)接收該結(jié)果。例如,圖3內(nèi)所示的示例性操作之后可執(zhí)行例如圖7內(nèi)所示的那些操作。在本發(fā)明的實(shí)施例中,被接收到的指示指定應(yīng)該執(zhí)行實(shí)現(xiàn)消息傳遞接口定義的MPI_ALLREDUCE原語(yǔ)的操作。
在配對(duì)操作302中,每個(gè)進(jìn)程選擇零個(gè)或多個(gè)與其交互的進(jìn)程。被選擇的進(jìn)程被稱為交互合作對(duì)象。
在本發(fā)明的一個(gè)實(shí)施例中,進(jìn)程可以選擇最多一個(gè)交互伙伴。應(yīng)強(qiáng)調(diào),由于執(zhí)行配對(duì)操作的多個(gè)進(jìn)程中的每一個(gè),每個(gè)進(jìn)程具有最多一個(gè)交互伙伴。可設(shè)想每個(gè)進(jìn)程在大多數(shù)情況下將正好選擇一個(gè)交互伙伴。但是,不選擇交互伙伴對(duì)于使本發(fā)明的方法適合于多種系統(tǒng)、體系結(jié)構(gòu)和計(jì)算操作是有用的。具體的,有助于分布式計(jì)算操作的進(jìn)程的數(shù)量并不必須是2的冪。為了有助于通過(guò)數(shù)量不是2的冪的進(jìn)程使用本發(fā)明的方法,在給定迭代期間特定進(jìn)程忽略選擇交互伙伴是有利的。實(shí)際上,如果進(jìn)程的數(shù)量為奇數(shù),則在邏輯上每個(gè)進(jìn)程不可能正好具有一個(gè)交互伙伴。如果進(jìn)程不選擇交互伙伴,則對(duì)于該進(jìn)程控制轉(zhuǎn)到確定操作306。
在本發(fā)明的另一個(gè)實(shí)施例中,一個(gè)進(jìn)程可選擇多余一個(gè)交互伙伴。此實(shí)施例可有利地允許多余兩個(gè)進(jìn)程根據(jù)本發(fā)明的流水線策略交換數(shù)據(jù)。本領(lǐng)域的技術(shù)人員應(yīng)理解,圖3內(nèi)所示的示例性算法可被容易地修改以允許多余兩個(gè)進(jìn)程同時(shí)參與數(shù)據(jù)的流水線交換。
可計(jì)算進(jìn)程的號(hào)碼與掩碼的異或(XOR)。然后可執(zhí)行配對(duì)操作,一邊進(jìn)程與具有等于計(jì)算操作的結(jié)果的號(hào)碼的交互伙伴相關(guān)聯(lián)。當(dāng)?shù)谝淮螆?zhí)行配對(duì)操作302時(shí),掩碼可包含號(hào)碼1的二進(jìn)制表示。應(yīng)注意,在此情況下,交互合作對(duì)象被選擇具有等于最低有效位被倒置的進(jìn)程的號(hào)碼的號(hào)碼。還應(yīng)注意,此算法將使得被該進(jìn)程選擇的交互伙伴同樣選擇該進(jìn)程作為交互伙伴。
在選擇操作304中,每個(gè)進(jìn)程選擇位于該進(jìn)程的數(shù)據(jù)的子集。該數(shù)據(jù)的子集可包括所述數(shù)據(jù)的一半。數(shù)據(jù)可位于耦合到執(zhí)行該進(jìn)程的隨機(jī)存取存儲(chǔ)器內(nèi)。數(shù)據(jù)還可被存儲(chǔ)在其他類型的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)內(nèi)。應(yīng)注意,當(dāng)?shù)谝淮螆?zhí)行選擇操作304時(shí),數(shù)據(jù)可以是進(jìn)程的初始輸入。
在本發(fā)明的一個(gè)實(shí)施例中,如果進(jìn)程的號(hào)碼小于其交互伙伴的號(hào)碼,則進(jìn)程選擇其數(shù)量的后一半作為子集。如果進(jìn)程的號(hào)碼大于其交互伙伴的號(hào)碼,則進(jìn)程選擇器數(shù)據(jù)的前一半作為子集。
在劃分操作306中,每個(gè)進(jìn)程將數(shù)據(jù)的被選擇的子集分成多個(gè)數(shù)據(jù)段。應(yīng)注意,劃分操作不需要在物理上重新設(shè)置數(shù)據(jù)的被選擇的子集。相反,劃分可包括每個(gè)數(shù)據(jù)段的識(shí)別和邊界的內(nèi)部認(rèn)知。在本發(fā)明的一個(gè)實(shí)施例中,陣列可被配置成存儲(chǔ)每個(gè)數(shù)據(jù)段的在對(duì)應(yīng)于該數(shù)據(jù)段的總數(shù)據(jù)內(nèi)的偏離字節(jié)數(shù)。使用此方法,長(zhǎng)度為4096字節(jié)的示例性的被選擇的數(shù)據(jù)子集可保持處于其當(dāng)前位置。為了劃分?jǐn)?shù)據(jù)的被選擇的子集,可用兩個(gè)元素初始化陣列。第一個(gè)元素指示第一個(gè)數(shù)據(jù)段包括0到2047的偏離字節(jié)數(shù),而第二個(gè)元素指示第二個(gè)數(shù)據(jù)端包括2048到4095的偏離字節(jié)數(shù)。在本發(fā)明的另一個(gè)實(shí)施例中,進(jìn)程可以每個(gè)數(shù)據(jù)段一次的循環(huán)迭代,并且可在每個(gè)迭代中為當(dāng)前字段動(dòng)態(tài)地計(jì)算合適的偏離字節(jié)數(shù)。
可確定該數(shù)據(jù)的被選擇的子集劃分成的數(shù)據(jù)段的數(shù)量,以便優(yōu)化分布式計(jì)算操作的性能。大量數(shù)據(jù)段可有利地增加數(shù)據(jù)傳送和計(jì)算在時(shí)間上的重疊。這是因?yàn)樵谟?jì)算操作開始之前,第一對(duì)數(shù)據(jù)段必須被完全交換。因此,計(jì)算延遲交換一對(duì)數(shù)據(jù)段所需的時(shí)間量。從而,在執(zhí)行任何計(jì)算之前必須傳送數(shù)據(jù)的被選擇的子集的
,其中M是數(shù)據(jù)段的數(shù)量。因此,增加數(shù)據(jù)段的數(shù)量會(huì)減少在計(jì)算開始之前的延時(shí)。所有事物都是相等的,增加數(shù)據(jù)段的數(shù)量會(huì)減少執(zhí)行分布式計(jì)算操作所需的時(shí)間。但是,增加數(shù)據(jù)段的數(shù)量還會(huì)增加數(shù)據(jù)傳送所需的網(wǎng)絡(luò)開銷。因此,選擇數(shù)據(jù)段的數(shù)量以便對(duì)于給定實(shí)現(xiàn)最優(yōu)地平衡這兩個(gè)因素。在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)的被選擇的子集被分成兩個(gè)數(shù)據(jù)段。
應(yīng)注意,對(duì)于兩個(gè)不同的全局歸約操作數(shù)據(jù)段的數(shù)量無(wú)需相同。甚至對(duì)于在相同全局歸約操作內(nèi)的劃分操作306的兩次不同的迭代數(shù)據(jù)段也無(wú)需相同。例如,可選擇多個(gè)數(shù)據(jù)段以便每個(gè)數(shù)據(jù)段盡可能地大而不會(huì)超過(guò)網(wǎng)絡(luò)協(xié)議定義的最大包大小。
在傳送操作308中,每個(gè)進(jìn)程將得自劃分操作306的數(shù)據(jù)段傳送給該進(jìn)程的交互合作對(duì)象。數(shù)據(jù)段的傳送是非堵塞的。為了實(shí)現(xiàn)此目標(biāo),可經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取傳送數(shù)據(jù)段。可設(shè)想,數(shù)據(jù)段一旦被傳送則進(jìn)程將不再進(jìn)一步利用該數(shù)據(jù)段。但是,進(jìn)程不需要特意重新分配屬于該數(shù)據(jù)段的存儲(chǔ)器,用零或其它填充數(shù)據(jù)重寫該數(shù)據(jù)段或丟棄該數(shù)據(jù)段。
在接收操作310中,每個(gè)進(jìn)程從其對(duì)交互合作對(duì)象接收數(shù)據(jù)段??稍O(shè)想,接收操作310與傳送操作308同時(shí)執(zhí)行。如同傳送操作308一樣,數(shù)據(jù)段的接收也是非堵塞的。為了實(shí)現(xiàn)此目標(biāo),可經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取接收數(shù)據(jù)段。
在確定操作312中,確定是否已經(jīng)從交互合作對(duì)象接收到至少一個(gè)數(shù)據(jù)段。如果是,則處理繼續(xù)進(jìn)行計(jì)算操作314。如果不是,則控制轉(zhuǎn)到確定操作316。這是必需的,因?yàn)橛?jì)算操作314可被配置成接收從當(dāng)前交互伙伴接收到的數(shù)據(jù)段作為輸入。但是,在經(jīng)由傳送操作308和接收操作310進(jìn)行的與交互伙伴的數(shù)據(jù)段的第一次交換期間,沒有以前的數(shù)據(jù)段被從該交互伙伴完全接收到。因此,在與交互伙伴進(jìn)行的數(shù)據(jù)段的第一次交換期間計(jì)算操作314可能沒有輸入數(shù)據(jù)。
在計(jì)算操作314中,每個(gè)進(jìn)程對(duì)以前接收到的第一數(shù)據(jù)段和不是從與第一數(shù)據(jù)段相同的數(shù)據(jù)段接收到的數(shù)據(jù)的第二數(shù)據(jù)段執(zhí)行操作。特別地,第一數(shù)據(jù)段可能已被從當(dāng)前交互伙伴接收到。第二數(shù)據(jù)段可得自劃分操作306。應(yīng)注意,在第一次迭代時(shí),由于劃分操作306接收初始輸入的被選擇的子集作為數(shù)據(jù),則第二數(shù)據(jù)段本身是初始輸入的子集。針對(duì)每對(duì)數(shù)據(jù)段的計(jì)算操作314的輸出的長(zhǎng)度可比兩個(gè)輸入數(shù)據(jù)段的長(zhǎng)度的總和短。在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算操作314的輸出是輸入計(jì)算操作314的數(shù)據(jù)段的組合長(zhǎng)度的大小的一半。
應(yīng)強(qiáng)調(diào),計(jì)算操作可以是本領(lǐng)域內(nèi)已知的多種計(jì)算操作中的任何一種。計(jì)算操作可以是比較簡(jiǎn)單的操作。例如,其可以確定向量?jī)?nèi)的數(shù)據(jù)的總和。其還可確定數(shù)據(jù)內(nèi)發(fā)現(xiàn)的最大值和/或最小值。計(jì)算操作還可以是非常復(fù)雜的操作,例如預(yù)測(cè)未來(lái)天氣狀況或模擬科學(xué)現(xiàn)象。應(yīng)注意,計(jì)算操作可包括其他計(jì)算操作。
計(jì)算操作314與傳送操作308和接收操作310同時(shí)執(zhí)行。但是,這三個(gè)操作不需要精確地同時(shí)開始和結(jié)束。例如,計(jì)算操作314可在傳送操作308和/或接收操作310完成之前結(jié)束。相反,傳送操作308和接收操作310可在計(jì)算操作314確定結(jié)果之前結(jié)束。應(yīng)強(qiáng)調(diào),計(jì)算操作314與數(shù)據(jù)的傳送和接收同時(shí)執(zhí)行會(huì)有利地減少完成分布式計(jì)算操作所需的總時(shí)間。由于傳送和接收操作以非堵塞的方式執(zhí)行,所以它們通常不會(huì)延遲或干擾計(jì)算操作。結(jié)果,使等待損失的時(shí)間最少。因此,此流水線策略有利地減少完成分布式計(jì)算操作所需的時(shí)間量。
在確定操作316中,每個(gè)進(jìn)程確定數(shù)據(jù)的被選擇的子集內(nèi)的所有數(shù)據(jù)段是否已經(jīng)被傳送,以及交互伙伴期望的所有數(shù)據(jù)段是否已經(jīng)被接收到。如果一個(gè)或多個(gè)數(shù)據(jù)段還沒有被傳送或接收到,則控制返回傳送操作308。如果所有數(shù)據(jù)段已經(jīng)被交換,則處理繼續(xù)進(jìn)行計(jì)算操作318。
在計(jì)算操作318中,將與計(jì)算操作314執(zhí)行的操作相同的操作應(yīng)用于最后一對(duì)數(shù)據(jù)段。第一個(gè)數(shù)據(jù)段可以是從當(dāng)前交互伙伴接收到的尾段。第二個(gè)數(shù)據(jù)段可以是得自劃分操作306的尾段。計(jì)算操作318是必要的,因?yàn)橛?jì)算操作314應(yīng)用于已經(jīng)從交互伙伴完全接收到的數(shù)據(jù)段。因此,一旦所有數(shù)據(jù)段已經(jīng)被交換,則至少一個(gè)接收到的數(shù)據(jù)段還沒有被輸入計(jì)算操作314。
在本發(fā)明的一個(gè)實(shí)施例中,在配對(duì)操作302的下一次迭代之前沒有對(duì)最后一對(duì)數(shù)據(jù)段執(zhí)行計(jì)算操作318。結(jié)果,在對(duì)最后一對(duì)數(shù)據(jù)段執(zhí)行計(jì)算操作318的同時(shí),第一對(duì)數(shù)據(jù)段可與下一個(gè)交互伙伴交換。此實(shí)施例有利地增加數(shù)據(jù)傳送和計(jì)算的時(shí)間重疊,從而減少了完成分布式計(jì)算操作所需的總時(shí)間。在本發(fā)明的一個(gè)實(shí)施例中,對(duì)于進(jìn)程的最后配對(duì),計(jì)算操作318沒有與任何數(shù)據(jù)傳送同時(shí)執(zhí)行。在本發(fā)明的另一個(gè)實(shí)施例中,對(duì)于進(jìn)程的最后配對(duì),計(jì)算操作318與被執(zhí)行以收集計(jì)算操作的結(jié)果的數(shù)據(jù)的初始交換同時(shí)執(zhí)行。例如,最終計(jì)算操作318可與圖6的傳送操作606或圖7的傳送操作706同時(shí)執(zhí)行。
在確定操作320中,每個(gè)進(jìn)程確定計(jì)算操作的分配是否完成。如果是,則目前的一組操作完成。但是,處理可繼續(xù)進(jìn)程收集階段例如圖6或7內(nèi)所示的示例性操作,以便收集結(jié)果。如果計(jì)算操作的分配沒有完成,則控制返回配對(duì)操作302。
可設(shè)想,分配階段被定義為在log2N次迭代之后完成,其中N是從事全局歸約操作的進(jìn)程的數(shù)量。在前面的公式中,log2指示基數(shù)為2的對(duì)數(shù)操作。因此,確定操作320可包括確定是否已經(jīng)完成由前面公式確定的迭代次數(shù)。例如,如果16個(gè)處理器從事全局歸約操作,則需要log216=4次迭代。
對(duì)每對(duì)數(shù)據(jù)段的計(jì)算操作314和318的輸出可被連結(jié)以形成中間結(jié)果。應(yīng)注意,如果計(jì)算操作314和318輸出其大小小于計(jì)算操作的輸入的大小的總和的結(jié)果,則中間結(jié)果的大小將小于在前一次迭代開始時(shí)位于一對(duì)進(jìn)程的數(shù)據(jù)的大小的總和。應(yīng)注意,在此情況下,中間結(jié)果的大小隨著每次迭代而減少。
在本發(fā)明的一個(gè)實(shí)施例中,使用遞歸減半法執(zhí)行全局歸約操作的分配。在此實(shí)施例中,計(jì)算操作314和318都可輸出其大小是計(jì)算操作的輸入的大小的總和的一半的結(jié)果。因此,中間結(jié)果的大小是在前一次迭代開始時(shí)位于一對(duì)進(jìn)程的數(shù)據(jù)的大小的總和的一半。此外,在每次迭代之后的中間結(jié)果是在前一次迭代之后的中間結(jié)果的大小的一半。
如果控制返回配對(duì)操作302,則在第一次迭代和隨后的迭代之間存在很大區(qū)別。應(yīng)注意,配對(duì)操作302使該進(jìn)程與隨后的以前沒有與該進(jìn)程配對(duì)的交互合作對(duì)象相關(guān)聯(lián)。在本發(fā)明的一個(gè)實(shí)施例中,如前文所述地使用異或操作計(jì)算交互合作對(duì)象的號(hào)碼,但是其中掩碼包含先前的配對(duì)操作內(nèi)沒有使用的值。特別地,掩碼可包含配對(duì)操作302的先前迭代內(nèi)使用的掩碼的左移一位的值。應(yīng)注意,在此情況下,交互伙伴被選擇具有與其一位被倒置的進(jìn)程的號(hào)碼相等的號(hào)碼,其中該倒置位的位置是與交互伙伴的先前選擇內(nèi)的倒置位位置相比其次的最高有效位。
在隨后的迭代中選擇操作304可選擇先前迭代的中間結(jié)果的一半。結(jié)果,隨后的迭代可在先前迭代的中間結(jié)果上執(zhí)行操作,而不是在初始輸入數(shù)據(jù)上執(zhí)行操作。具體地,隨后的迭代中計(jì)算操作314和318的第二數(shù)據(jù)段輸入可是中間結(jié)果的子集而不是初始輸入的子集。
可設(shè)想,每個(gè)進(jìn)程的數(shù)據(jù)輸入的長(zhǎng)度相等。在此情況下,在分配階段結(jié)束時(shí),每個(gè)進(jìn)程將具有總結(jié)果的等于
的比例,其中N是有助于分布式計(jì)算操作的進(jìn)程的數(shù)量。
圖4用圖表示出當(dāng)單個(gè)進(jìn)程參與分布式計(jì)算操作時(shí)該進(jìn)程的數(shù)據(jù)的變化。在圖4中,最初位于進(jìn)程內(nèi)的數(shù)據(jù)段404、406、408、410用具有對(duì)角線圖案的正方形示出。從該進(jìn)程的交互伙伴接收到的數(shù)據(jù)用具有水平線圖案的正方形示出。由在該進(jìn)程執(zhí)行的計(jì)算操作得到的數(shù)據(jù)用具有網(wǎng)點(diǎn)圖案的正方形示出。存儲(chǔ)介質(zhì)內(nèi)的沒有包含于分布式計(jì)算操作相關(guān)的數(shù)據(jù)的位置用具有白色圖案的正方形示出。水平的每組正方形示出了耦合到該進(jìn)程的計(jì)算機(jī)可讀存儲(chǔ)器的內(nèi)容。更接近頁(yè)面底部的正方形組示出在連續(xù)的隨后的時(shí)間點(diǎn)的進(jìn)程的狀態(tài)。
在第一狀態(tài)402中,初始數(shù)據(jù)段404、406、408、410位于該進(jìn)程中。初始數(shù)據(jù)可以是該進(jìn)程的初始輸入。初始數(shù)據(jù)還可以是先前計(jì)算操作的中間結(jié)果。數(shù)據(jù)可被存儲(chǔ)在耦合到執(zhí)行該進(jìn)程的處理器的隨機(jī)存取存儲(chǔ)器內(nèi)。該數(shù)據(jù)還可被存儲(chǔ)在其他類型的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)內(nèi)。
進(jìn)程可實(shí)例化打算保持接收到的數(shù)據(jù)段以及計(jì)算操作的結(jié)果的緩沖器412。緩沖器可以是暫時(shí)性質(zhì)的。緩沖器412可與初始數(shù)據(jù)段404、406、408、410位于相同的隨機(jī)存取存儲(chǔ)器或其它存儲(chǔ)介質(zhì)內(nèi)??烧?qǐng)求操作系統(tǒng)分配存儲(chǔ)器內(nèi)的特定位置以存儲(chǔ)緩沖器412。應(yīng)注意,本領(lǐng)域內(nèi)已知的許多操作系統(tǒng)在將存儲(chǔ)器位置的先前的內(nèi)容分配給進(jìn)程之前不會(huì)重寫該內(nèi)容。盡管緩沖器412被用圖示出為空白空間,但是進(jìn)程不需要用零或其他填充數(shù)據(jù)重寫緩沖器,或相反在緩沖器被初始化時(shí)清除緩沖器內(nèi)的先前的內(nèi)容。可設(shè)想,在存儲(chǔ)器分配時(shí)緩沖器內(nèi)存在的任何數(shù)據(jù)將被接收到的數(shù)據(jù)段重寫。
在第二狀態(tài)414中,進(jìn)程選擇最左側(cè)的兩個(gè)數(shù)據(jù)量404、406作為將被傳送給交互伙伴的數(shù)據(jù)的子集。因此,被選擇的數(shù)據(jù)的數(shù)據(jù)段404被傳送308給交互伙伴。數(shù)據(jù)段404可包含初始數(shù)據(jù)的四分之一。同時(shí),從相同交互伙伴接收310到數(shù)據(jù)的第二個(gè)數(shù)據(jù)段。數(shù)據(jù)的第二個(gè)數(shù)據(jù)段被寫入緩沖器412內(nèi)的一個(gè)位置。傳送308和接收310操作以非堵塞的方式執(zhí)行。在本發(fā)明的一個(gè)實(shí)施例中,傳送308和接收310操作經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取執(zhí)行。應(yīng)注意,在還沒有從交互伙伴接收到整個(gè)數(shù)據(jù)段之前,不會(huì)執(zhí)行計(jì)算操作。
在第三狀態(tài)416內(nèi),數(shù)據(jù)的被選擇的子集的另一個(gè)數(shù)據(jù)段406被傳送308給交互伙伴。數(shù)據(jù)段406可包含初始數(shù)據(jù)的四分之一。被傳送的數(shù)據(jù)段406與在第二狀態(tài)414內(nèi)被傳送308的數(shù)據(jù)段404不同。同時(shí),從相同的交互伙伴接收310到數(shù)據(jù)的第二個(gè)數(shù)據(jù)段。被接收到的數(shù)據(jù)段與在第二狀態(tài)內(nèi)接收310到的數(shù)據(jù)段不同。數(shù)據(jù)的第二數(shù)據(jù)段被寫入緩沖器412內(nèi)的位置。如在第二狀態(tài)內(nèi),傳送308和接收310以非堵塞的方式執(zhí)行。在本發(fā)明的一個(gè)實(shí)施例中,傳送308和接收310經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取執(zhí)行。
在第二狀態(tài)期間傳送308的數(shù)據(jù)段404理想地已被完全傳送。如果情況如此,則示例性的分布式計(jì)算操作不再需要418被完全傳送的數(shù)據(jù)段。應(yīng)注意,盡管不再被需要的數(shù)據(jù)用空白空間示出,但是進(jìn)程不需要特意重新分配屬于該數(shù)據(jù)的存儲(chǔ)器,用零或其它填充數(shù)據(jù)重寫該數(shù)據(jù)或相反清除該數(shù)據(jù)。
理想地,在第二狀態(tài)414期間被接收的數(shù)據(jù)段420已經(jīng)被完全接收到。如果情況如此,則進(jìn)程在接收到的數(shù)據(jù)段420和初始數(shù)據(jù)的數(shù)據(jù)段408上執(zhí)行計(jì)算操作314。數(shù)據(jù)段404可包含初始數(shù)據(jù)的四分之一。應(yīng)注意,初始數(shù)據(jù)的數(shù)據(jù)段408不是被選擇的數(shù)據(jù)的子集的一部分。計(jì)算操作314可以是本領(lǐng)域內(nèi)已知的多種計(jì)算任務(wù)中的任何一種。計(jì)算操作314可組合輸入該操作的兩個(gè)數(shù)據(jù)段408和420。應(yīng)強(qiáng)調(diào),計(jì)算操作314與傳送308和接收310兩個(gè)其他數(shù)據(jù)段同時(shí)執(zhí)行。
在第四狀態(tài)422中,不再傳送和接收數(shù)據(jù)段。在第三狀態(tài)內(nèi)執(zhí)行的計(jì)算操作314已生成結(jié)果428。結(jié)果,不再需要426在第三狀態(tài)內(nèi)輸入計(jì)算操作的輸入數(shù)據(jù)的數(shù)據(jù)段408。
在第三狀態(tài)416期間被傳送308的數(shù)據(jù)段406理想地已經(jīng)給被完全傳送。如果情況如此,則示例性分布式計(jì)算操作同樣不再需要424被完全傳送的數(shù)據(jù)段。
理想地,在第三數(shù)據(jù)段416期間被接收到的數(shù)據(jù)段430已經(jīng)被完全接收到。如果情況如此,則進(jìn)程在接收到的數(shù)據(jù)段430和初始數(shù)據(jù)的數(shù)據(jù)段410上執(zhí)行計(jì)算操作318。數(shù)據(jù)段410可包含初始數(shù)據(jù)的四分之一。應(yīng)注意,初始數(shù)據(jù)的數(shù)據(jù)段410是沒有被選擇的數(shù)據(jù)的子集的一部分。計(jì)算操作318可以與計(jì)算操作314相同。計(jì)算操作318可以是本領(lǐng)域內(nèi)已知的多種計(jì)算操作中的任何一種。計(jì)算操作314可組合輸入該操作的兩個(gè)數(shù)據(jù)段410、430。
在第五狀態(tài)432中,在第四狀態(tài)422內(nèi)執(zhí)行的計(jì)算操作318已生成結(jié)果436。結(jié)果,不再需要434在第三狀態(tài)內(nèi)輸入計(jì)算操作的輸入數(shù)據(jù)的數(shù)據(jù)段410。
在第三狀態(tài)416期間執(zhí)行的計(jì)算操作314的結(jié)果428與在第四狀態(tài)422期間執(zhí)行的計(jì)算操作318的結(jié)果436一起代表中間結(jié)果。這種中間結(jié)果可被輸入分配階段的另一個(gè)迭代。被組合的結(jié)果428、436還可代表最終結(jié)果。這里,結(jié)果428、436可被傳送給顯示單元,該單元以文本或圖形格式該結(jié)果顯示給用戶。
圖5示出有助于分布式計(jì)算操作的多個(gè)進(jìn)程之間的示例性數(shù)據(jù)交換。
水平的每組正方形圖示出在特定時(shí)間點(diǎn)被多個(gè)進(jìn)程執(zhí)行的操作。如圖4相同,更接近頁(yè)面底部的正方形組示出在連續(xù)的隨后的時(shí)間點(diǎn)的系統(tǒng)的狀態(tài)。
示例性并行計(jì)算系統(tǒng)502包括多個(gè)處理器504,每個(gè)處理器均有助于全局歸約操作。全局歸約操作可經(jīng)由消息傳遞接口定義的MPI_REDUCE或MPI_ALLREDUCE原語(yǔ)實(shí)現(xiàn)。示例性系統(tǒng)包括八個(gè)進(jìn)程。但是應(yīng)強(qiáng)調(diào),示例性系統(tǒng)所示的方法可被應(yīng)用于具有任意數(shù)量的進(jìn)程的系統(tǒng)。一些數(shù)據(jù)最初被輸入每個(gè)進(jìn)程。
每個(gè)進(jìn)程被分配號(hào)碼506。沒有兩個(gè)進(jìn)程被分配相同的號(hào)碼。在示例性系統(tǒng)中,號(hào)碼是從零開始的連續(xù)整數(shù)。由于存在八個(gè)進(jìn)程,所以最高的號(hào)碼為7。在圖5所示的操作序列中號(hào)碼不會(huì)改變。
應(yīng)注意,在示例性系統(tǒng)中,當(dāng)如上所述將數(shù)據(jù)的被選擇的子集劃分成數(shù)據(jù)段時(shí),每個(gè)進(jìn)程被配置成將數(shù)據(jù)正好分成兩個(gè)數(shù)據(jù)段。
在第一狀態(tài)508內(nèi),每個(gè)進(jìn)程504已經(jīng)接收一些數(shù)據(jù)作為輸入。每個(gè)進(jìn)程與正好一個(gè)交互伙伴配對(duì)。在示例性數(shù)據(jù)交換中,根據(jù)前文定義的配對(duì)算法將該進(jìn)程配對(duì)。特別地,每個(gè)進(jìn)程計(jì)算其號(hào)碼506和掩碼的異或,其中掩碼包含號(hào)碼1的二進(jìn)制表示。然后每個(gè)進(jìn)程與具有等于該計(jì)算操作的結(jié)果的號(hào)碼的進(jìn)程配對(duì)。結(jié)果,每個(gè)進(jìn)程選擇具有等于最低有效位被倒置的其自身號(hào)碼的號(hào)碼的交互伙伴。應(yīng)注意,此算法將使得進(jìn)程選擇的交互伙伴同樣選擇該進(jìn)程作為其交互伙伴。
每個(gè)進(jìn)程504然后與其交互伙伴交換510一對(duì)數(shù)據(jù)段。作為在圖5中使用的術(shù)語(yǔ),交換是指每個(gè)進(jìn)程同時(shí)將數(shù)據(jù)段傳送給其交互伙伴并從其交互伙伴接收數(shù)據(jù)段。在圖5所示的所有交換中,傳送和接收是非堵塞的并且可經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取實(shí)現(xiàn)。被傳送的每個(gè)數(shù)據(jù)段可包含輸入傳送該數(shù)據(jù)段的進(jìn)程的數(shù)據(jù)的四分之一。
在第二狀態(tài)512內(nèi),每個(gè)進(jìn)程504保持與和第一狀態(tài)508相同的交互伙伴配對(duì)。每個(gè)進(jìn)程與其交互伙伴交換510另一對(duì)數(shù)據(jù)段。同樣,被傳送的每個(gè)數(shù)據(jù)段可包含輸入傳送該數(shù)據(jù)段的進(jìn)程的數(shù)據(jù)的四分之一。
在數(shù)據(jù)交換510的同時(shí)每個(gè)進(jìn)程執(zhí)行計(jì)算操作。在第一狀態(tài)508內(nèi)接收到的數(shù)據(jù)段和最初輸入進(jìn)程的數(shù)據(jù)段被輸入計(jì)算操作。應(yīng)強(qiáng)調(diào),圖5中執(zhí)行的計(jì)算操作可以是本領(lǐng)域內(nèi)已知的多種計(jì)算任務(wù)中的任何一種。特別地,計(jì)算操作可以是歸約操作。
在第三狀態(tài)514中,每個(gè)進(jìn)程已經(jīng)與其最初的交互伙伴交換了其全部數(shù)據(jù)。這是因?yàn)閷⒈幻總€(gè)進(jìn)程傳送的數(shù)據(jù)被分成兩個(gè)數(shù)據(jù)段,并且與當(dāng)前交互伙伴執(zhí)行兩次交換。因此,每個(gè)進(jìn)程504與先前沒有與該進(jìn)程配對(duì)的另一個(gè)交互伙伴配對(duì)。在示例性數(shù)據(jù)交換中,第二次配對(duì)也根據(jù)前文定義的配對(duì)算法執(zhí)行。特別地,每個(gè)進(jìn)程計(jì)算其號(hào)碼506與掩碼的異或。掩碼是通過(guò)將第一狀態(tài)508內(nèi)使用的掩碼的值左移一位計(jì)算的。由于第一狀態(tài)508內(nèi)地掩碼的值是1的二進(jìn)制表示,所以第三狀態(tài)514內(nèi)的掩碼的值是2的二進(jìn)制表示。結(jié)果,每個(gè)進(jìn)程選擇具有等于第二最低有效位被倒置的其自身號(hào)碼的號(hào)碼的交互伙伴。
每個(gè)進(jìn)程504然后與其的新交互伙伴交換510一對(duì)數(shù)據(jù)段。每個(gè)數(shù)據(jù)段可包含從第三狀態(tài)514開始時(shí)位于傳送該數(shù)據(jù)段的進(jìn)程的中間數(shù)據(jù)的四分之一。
在數(shù)據(jù)交換510的同時(shí),每個(gè)進(jìn)程執(zhí)行另一個(gè)計(jì)算操作。在第二狀態(tài)512中接收到的數(shù)據(jù)段以及從第三狀態(tài)514開始時(shí)位于進(jìn)程的中間結(jié)果的數(shù)據(jù)段被輸入該計(jì)算操作。
在第四狀態(tài)516中,每個(gè)進(jìn)程504保持與和第三狀態(tài)514相同的交互伙伴配對(duì)。每個(gè)進(jìn)程504與其的交互伙伴交換另一對(duì)數(shù)據(jù)段。每個(gè)傳送的數(shù)據(jù)段,也可包含從第三狀態(tài)514開始時(shí)位于傳送該數(shù)據(jù)段的進(jìn)程的中間數(shù)據(jù)的四分之一。
在數(shù)據(jù)交換510的同時(shí),每個(gè)進(jìn)程執(zhí)行另一個(gè)計(jì)算操作。在第三狀態(tài)514中接收到的數(shù)據(jù)段以及從第三狀態(tài)514開始時(shí)位于進(jìn)程的中間結(jié)果的數(shù)據(jù)段被輸入該計(jì)算操作。
在第五狀態(tài)518中,每個(gè)進(jìn)程已經(jīng)與其第二個(gè)交互伙伴交換了全部數(shù)據(jù)。因此,每個(gè)進(jìn)程504與先前沒有與該進(jìn)程配對(duì)的另一個(gè)交互伙伴配對(duì)。在示例性數(shù)據(jù)交換中,第三次配對(duì)也根據(jù)前文定義的配對(duì)算法執(zhí)行。特別地,每個(gè)進(jìn)程計(jì)算其號(hào)碼506與掩碼的異或。掩碼是通過(guò)將第三狀態(tài)514內(nèi)使用的掩碼的值左移一位計(jì)算的。由于第三狀態(tài)514內(nèi)地掩碼的值是2的二進(jìn)制表示,所以第五狀態(tài)518內(nèi)的掩碼的值是4的二進(jìn)制表示。結(jié)果,每個(gè)進(jìn)程選擇具有等于第三最低有效位被倒置的其自身號(hào)碼的號(hào)碼的交互伙伴。
每個(gè)進(jìn)程504然后與其的交互伙伴交換510一對(duì)數(shù)據(jù)段。每個(gè)數(shù)據(jù)段可包含從第五狀態(tài)518開始時(shí)位于傳送該數(shù)據(jù)段的進(jìn)程的中間數(shù)據(jù)的四分之一。
在數(shù)據(jù)交換510的同時(shí),每個(gè)進(jìn)程執(zhí)行另一個(gè)計(jì)算操作。在第四狀態(tài)512中接收到的數(shù)據(jù)段以及從第五狀態(tài)518開始時(shí)位于進(jìn)程的中間結(jié)果的數(shù)據(jù)段被輸入該計(jì)算操作。
在第六狀態(tài)520中,每個(gè)進(jìn)程504保持與和第五狀態(tài)518相同的交互伙伴配對(duì)。每個(gè)進(jìn)程與其的交互伙伴交換另一對(duì)數(shù)據(jù)段。同樣,每個(gè)數(shù)據(jù)段可包含從第五狀態(tài)518開始時(shí)位于傳送該數(shù)據(jù)段的進(jìn)程的中間數(shù)據(jù)的四分之一。
在數(shù)據(jù)交換510的同時(shí),每個(gè)進(jìn)程執(zhí)行另一個(gè)計(jì)算操作。在第五狀態(tài)518中接收到的數(shù)據(jù)段以及從第五狀態(tài)518開始時(shí)位于進(jìn)程的中間結(jié)果的數(shù)據(jù)段被輸入該計(jì)算操作。應(yīng)注意,在這一點(diǎn)上,每個(gè)進(jìn)程與三個(gè)不同交互伙伴中的每一個(gè)交換所有數(shù)據(jù)。但是,在第六狀態(tài)520期間交換的數(shù)據(jù)沒有被輸入計(jì)算操作。因此,執(zhí)行最終計(jì)算操作。在第六狀態(tài)520中接收到的數(shù)據(jù)段以及從第五狀態(tài)518開始時(shí)位于進(jìn)程的中間結(jié)果的數(shù)據(jù)段被輸入該計(jì)算操作。在本發(fā)明的一個(gè)實(shí)施例中,沒有與最終計(jì)算操作同時(shí)傳送數(shù)據(jù)。在本發(fā)明的另一個(gè)實(shí)施例中,最終計(jì)算操作與初始數(shù)據(jù)交換同時(shí)執(zhí)行以收集計(jì)算操作的結(jié)果。例如,最終計(jì)算操作可與圖6的傳送操作606或圖7的傳送操作706同時(shí)執(zhí)行。
在本發(fā)明的一個(gè)實(shí)施例中,在所有數(shù)據(jù)段與log2N個(gè)交互伙伴中的每一個(gè)均交換之后可認(rèn)為全局歸約操作的分配階段已經(jīng)完成,其中N是參與全局歸約操作的進(jìn)程的數(shù)量。示例性系統(tǒng)502包括八個(gè)進(jìn)程504。因此,由于log28=3,所以對(duì)于示例性系統(tǒng)此條件在第六狀態(tài)520結(jié)束時(shí)被滿足。
現(xiàn)在轉(zhuǎn)到圖6,示出收集在多個(gè)處理器之間分配的計(jì)算操作的結(jié)果的示例性操作的流程圖。在所述多個(gè)進(jìn)程之一處接收該結(jié)果。圖6示出圖2內(nèi)所示的收集階段的實(shí)施例,提供了另外的細(xì)節(jié)并采取單個(gè)進(jìn)程的角度(perspective)。應(yīng)強(qiáng)調(diào),有助于收集操作的每個(gè)進(jìn)程單獨(dú)執(zhí)行下文列出的操作。這并不意味著每個(gè)進(jìn)程隔離地操作。相反,下文詳細(xì)說(shuō)明的許多操作影響兩個(gè)或多個(gè)進(jìn)程之間的交互。
收集結(jié)果可與如圖3內(nèi)所示的分布式計(jì)算操作一起執(zhí)行。特別地,在此示出的用于收集結(jié)果的示例性操作可在分布式計(jì)算操作之后執(zhí)行,以便檢索分配計(jì)算操作的結(jié)果。在圖3內(nèi)所示的示例性分布式計(jì)算操作結(jié)束時(shí),總結(jié)果的子集位于有助于分布式計(jì)算操作的每個(gè)進(jìn)程內(nèi)。對(duì)于特定的計(jì)算操作和輸入向量,位于一個(gè)進(jìn)程的結(jié)果數(shù)據(jù)量可等于位于任何其他進(jìn)程的結(jié)果數(shù)據(jù)量。在此情況下,位于該進(jìn)程的結(jié)果數(shù)據(jù)可代表分布式計(jì)算操作的總結(jié)果的等于
的比例,其中N是有助于分布式計(jì)算操作的進(jìn)程的數(shù)量。如果在分布式計(jì)算操作之后收集結(jié)果,則可再次使用參與分布式計(jì)算操作的相同進(jìn)程以收集結(jié)果。
應(yīng)強(qiáng)調(diào),收集結(jié)果不需要在分布式計(jì)算操作之后立即進(jìn)行。如本發(fā)明設(shè)想的,收集結(jié)果可被執(zhí)行以在單個(gè)進(jìn)程從多個(gè)進(jìn)程檢索任意數(shù)據(jù)。此外,如本發(fā)明設(shè)想的,收集結(jié)果可與本發(fā)明沒有設(shè)想的用于在多個(gè)進(jìn)程之間分配計(jì)算操作的算法一起執(zhí)行。在任何情況下,將被收集的數(shù)據(jù)最初位于每個(gè)進(jìn)程中。
收集可由于接收到執(zhí)行這樣的全局歸約操作的指示時(shí)已被調(diào)用,該全局歸約操作被配置成在多個(gè)進(jìn)程之間分配計(jì)算操作并收集計(jì)算操作的結(jié)果以便在單個(gè)進(jìn)程接收該結(jié)果。在此情況下,可設(shè)想分布式計(jì)算操作例如圖3內(nèi)所示的示例性算法在收集結(jié)果之前執(zhí)行。這是因?yàn)閳D6內(nèi)所示的示例性算法被配置成收集已經(jīng)被執(zhí)行的分布式計(jì)算操作的結(jié)果。在本發(fā)明的一個(gè)實(shí)施例中,接收到的指示指定應(yīng)該執(zhí)行實(shí)現(xiàn)消息傳遞接口定義的MPI_REDUCE原語(yǔ)的操作。
在執(zhí)行文中所示的示例性操作之前,可為從中收集結(jié)果的多個(gè)進(jìn)程中的每一個(gè)分配號(hào)碼。為每個(gè)進(jìn)程分配唯一的號(hào)碼有利地幫助下文所述的示例性配對(duì)算法。沒有兩個(gè)進(jìn)程被分配相同的號(hào)碼。號(hào)碼可以是從零開始的連續(xù)整數(shù)??稍O(shè)想,唯一號(hào)碼至少在單個(gè)全局歸約操作期間保持不變。如果在分布式計(jì)算操作之后收集結(jié)果,則可設(shè)想,使用與在分布式計(jì)算算法期間用于將進(jìn)程配對(duì)的算法內(nèi)的號(hào)碼相同的號(hào)碼。此外,如果再次使用參與分布式計(jì)算算法的進(jìn)程收集結(jié)果,則以前被分配給每個(gè)進(jìn)程的號(hào)碼仍可用于收集結(jié)果的操作。在此情況下,因?yàn)樵俅问褂靡郧胺峙涞奶?hào)碼,則可省略在收集結(jié)果之前為每個(gè)進(jìn)程分配號(hào)碼。在用于MPI_REDUCE和MPI_ALLREDUCE實(shí)現(xiàn)的本發(fā)明的實(shí)施例中,為此可使用MPI定義的進(jìn)程的排序。
在配對(duì)操作602中,每個(gè)進(jìn)程可選擇一個(gè)將與其交互的進(jìn)程。進(jìn)程還可不選擇交互伙伴。應(yīng)強(qiáng)調(diào),由于執(zhí)行配對(duì)操作的多個(gè)進(jìn)程中的每一個(gè),每個(gè)進(jìn)程具有最多一個(gè)交互伙伴。
在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算等于2的因數(shù)次冪的值。如果進(jìn)程的號(hào)碼正好是被計(jì)算出的值的兩倍的倍數(shù),則其選擇具有等于進(jìn)程的號(hào)碼加上被計(jì)算出的值的號(hào)碼的交互伙伴。否則,進(jìn)程不選擇交互伙伴。在數(shù)學(xué)方面,如果進(jìn)程的號(hào)碼用i表示而因數(shù)用k表示,進(jìn)程可確定2k+1除以i得到的余數(shù)。當(dāng)且僅當(dāng)余數(shù)為零時(shí),進(jìn)程選擇具有號(hào)碼i+2k的交互伙伴。在第一次執(zhí)行配對(duì)操作602時(shí),因數(shù)可以是號(hào)碼1的二進(jìn)制表示。
在確定操作604中,進(jìn)程確定是否選擇交互伙伴。如果沒有選擇交互伙伴,則控制轉(zhuǎn)到確定步驟608。如果選擇交互伙伴,則處理繼續(xù)進(jìn)行傳送操作606。
在傳送操作606中,進(jìn)程將一個(gè)或多個(gè)計(jì)算操作的結(jié)果傳送給進(jìn)程的交互伙伴。該結(jié)果可包括目前位于進(jìn)程的計(jì)算進(jìn)程的所有結(jié)果。
在確定操作608中,進(jìn)程(沒有選擇交互伙伴)確定是否接收到一個(gè)或多個(gè)計(jì)算操作的結(jié)果。此確定可包括在接收到數(shù)據(jù)之前或者在經(jīng)過(guò)預(yù)定量的時(shí)間之前等待。如果接收到結(jié)果,則處理繼續(xù)進(jìn)行接收操作610。如果沒有接收到結(jié)果,則控制轉(zhuǎn)到確定操作612。
在接收操作610中,進(jìn)程從其的交互伙伴接收到一個(gè)或多個(gè)計(jì)算操作的結(jié)果。如同傳送操作606一樣,該結(jié)果的接收是非堵塞的。為了實(shí)現(xiàn)此目標(biāo),可經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取接收結(jié)果。應(yīng)注意,在此情況下,因?yàn)檫M(jìn)程的接收可通過(guò)網(wǎng)絡(luò)適配器實(shí)現(xiàn),所以執(zhí)行該進(jìn)程的處理器不需要采取行動(dòng)。
在確定操作612中,每個(gè)進(jìn)程確定結(jié)果是否被完全收集。如果是,則處理可停止。如果沒有,則控制返回配對(duì)操作602。每個(gè)單獨(dú)的進(jìn)程可一直等待,直到在返回配對(duì)操作602之前所有進(jìn)程已經(jīng)達(dá)到確定操作612。
在經(jīng)過(guò)示例性收集算法的log2N次迭代之后,其中N是從事全局歸約操作的進(jìn)程的數(shù)量,組合結(jié)果在單個(gè)進(jìn)程中被完全接收到。因此,確定操作612可包括確定是否已經(jīng)完成log2N次迭代。例如,如果16個(gè)進(jìn)程從事全局歸約操作,則確定操作612可確定是否已經(jīng)完成log216=4次迭代。
如果控制返回配對(duì)操作602,則在第一次迭代和隨后的迭代之間存在很大區(qū)別。應(yīng)注意,配對(duì)操作602或者使該進(jìn)程與隨后的以前沒有與該進(jìn)程配對(duì)的交互合作對(duì)象相關(guān)聯(lián),或者使該進(jìn)程不與交互伙伴相關(guān)聯(lián)。在本發(fā)明的一個(gè)實(shí)施例中,使用如前文所述的計(jì)算操作計(jì)算交互伙伴的號(hào)碼,但是其中因數(shù)包含在先前的配對(duì)操作中沒有使用的值。特別地,因數(shù)可包含等于配對(duì)操作602的先前迭代內(nèi)使用的因數(shù)加1的值。
在隨后的迭代中傳送操作606可將在先前的迭代期間接收到的結(jié)果轉(zhuǎn)發(fā)給為當(dāng)前迭代選擇的交互伙伴。特別地,傳送操作606傳送的一個(gè)或多個(gè)計(jì)算操作的結(jié)果可包括在先前的迭代中在該進(jìn)程接收到的計(jì)算操作的結(jié)果。從而,接收操作610可同樣包括接收在先前的迭代期間在該進(jìn)程接收到的計(jì)算操作的結(jié)果。
應(yīng)強(qiáng)調(diào),在示例性收集階段結(jié)束時(shí),分布式計(jì)算操作的組合結(jié)果可在本領(lǐng)域內(nèi)已知為根的單個(gè)進(jìn)程被接收。當(dāng)根據(jù)上述示例性配對(duì)算法對(duì)進(jìn)程配對(duì)時(shí),結(jié)果在具有號(hào)碼0的進(jìn)程被接收。應(yīng)注意,分配給進(jìn)程的號(hào)碼因此必須被選擇為使得號(hào)碼0被分配給將用作根的進(jìn)程。
現(xiàn)在轉(zhuǎn)到圖7,示出收集在多個(gè)進(jìn)程之間分配的計(jì)算操作的結(jié)果的示例性操作的另一個(gè)流程圖。與圖6相反,結(jié)果在多個(gè)進(jìn)程中的每一個(gè)中被接收。圖7示出圖2內(nèi)所示的收集階段的實(shí)施例,提供了另外的細(xì)節(jié)并采取單個(gè)進(jìn)程的觀點(diǎn)。應(yīng)強(qiáng)調(diào),有助于收集操作的每個(gè)進(jìn)程單獨(dú)執(zhí)行下文列出的操作。這并不意味著每個(gè)進(jìn)程隔離地操作。相反,下文詳細(xì)說(shuō)明的許多操作影響兩個(gè)或多個(gè)進(jìn)程之間的交互。
如同在單個(gè)進(jìn)程接收結(jié)果的情況一樣,收集結(jié)果例如每個(gè)進(jìn)程接收結(jié)可與如圖3內(nèi)所示的分布式計(jì)算操作一起執(zhí)行。特別地,在此示出的用于收集結(jié)果的示例性操作可在分布式計(jì)算操作之后執(zhí)行,以便檢索分布式計(jì)算操作的結(jié)果。在圖3內(nèi)所示的示例性分布式計(jì)算操作結(jié)束時(shí),總結(jié)過(guò)的子集位于有助于分布式計(jì)算操作的每個(gè)進(jìn)程中。對(duì)于特定的計(jì)算操作和輸入向量,位于一個(gè)進(jìn)程的結(jié)果數(shù)據(jù)量可等于位于任何其他進(jìn)程的結(jié)果數(shù)據(jù)量。在此情況下,位于該進(jìn)程的結(jié)果數(shù)據(jù)可代表分布式計(jì)算操作的總結(jié)果的等于
的比例,其中N是有助于分布式計(jì)算操作的進(jìn)程的數(shù)量。如果在分布式計(jì)算操作之后收集結(jié)果,則可再次使用參與分布式計(jì)算操作的相同進(jìn)程以收集結(jié)果。
應(yīng)強(qiáng)調(diào),如同其中在單個(gè)進(jìn)程接收結(jié)果的情況一樣,收集結(jié)果例如每個(gè)進(jìn)程收集結(jié)果不需要立即在分布式計(jì)算操作之后進(jìn)行。如本發(fā)明設(shè)想的,收集結(jié)果可被執(zhí)行以在多個(gè)進(jìn)程中的每一個(gè)從該多個(gè)進(jìn)程檢索任意數(shù)據(jù)。此外,如本發(fā)明設(shè)想的,收集結(jié)果可與本發(fā)明沒有設(shè)想的用于在多個(gè)進(jìn)程之間分配計(jì)算操作的算法一起執(zhí)行。在任何情況下,將被收集的數(shù)據(jù)最初位于每個(gè)進(jìn)程中。
收集結(jié)果可由于接收到執(zhí)行這樣的全局歸約操作的指示時(shí)已被調(diào)用,該全局歸約操作被配置成在多個(gè)進(jìn)程之間分配計(jì)算操作并收集計(jì)算操作的結(jié)果,以便在執(zhí)行該計(jì)算操作的所有進(jìn)程接收該結(jié)果。在此情況下,可設(shè)想分布式計(jì)算操作例如圖3內(nèi)所示的示例性算法在收集結(jié)果之前執(zhí)行。這是因?yàn)閳D7內(nèi)所示的示例性算法被配置成收集已經(jīng)被執(zhí)行的分布式計(jì)算操作的結(jié)果。在本發(fā)明的一個(gè)實(shí)施例中,接收到的指示指定應(yīng)該執(zhí)行實(shí)現(xiàn)消息傳遞接口定義的MPI_ALLREDUCE原語(yǔ)的操作。
在執(zhí)行文中所示的示例性操作之前,可為從中收集結(jié)果的多個(gè)進(jìn)程中的每一個(gè)分配號(hào)碼。為每個(gè)進(jìn)程分配唯一的號(hào)碼有利地幫助下文所述的示例性配對(duì)算法。應(yīng)注意,號(hào)碼以與從單個(gè)進(jìn)程接收結(jié)果的情況相同的方式被分配。特別地,沒有兩個(gè)進(jìn)程被分配相同的號(hào)碼。號(hào)碼可以是從零開始的連續(xù)整數(shù)??稍O(shè)想,唯一號(hào)碼至少在單個(gè)全局歸約操作期間保持不變。如果在分布式計(jì)算操作之后收集結(jié)果,則可設(shè)想,使用與在分布式計(jì)算算法期間用于將進(jìn)程配對(duì)的算法內(nèi)的號(hào)碼相同的號(hào)碼。此外,如果再次使用參與分布式計(jì)算算法的進(jìn)程收集結(jié)果,則以前被分配給每個(gè)進(jìn)程的號(hào)碼仍可用于收集結(jié)果的操作。在此情況下,因?yàn)樵俅问褂靡郧胺峙涞奶?hào)碼,則可省略在收集結(jié)果之前為每個(gè)進(jìn)程分配號(hào)碼。
在配對(duì)操作702中,每個(gè)進(jìn)程可選擇一個(gè)將與其交互的進(jìn)程。進(jìn)程還可不選擇交互伙伴。與其中在單個(gè)進(jìn)程接收結(jié)果的情況不同,配對(duì)是對(duì)稱的。特別地,如果第一進(jìn)程與第二進(jìn)程配對(duì),則第二進(jìn)程也與第一進(jìn)程配對(duì)。應(yīng)強(qiáng)調(diào),由于執(zhí)行配對(duì)操作的多個(gè)進(jìn)程,每個(gè)進(jìn)程具有最多一個(gè)交互伙伴。
在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算等于2的因數(shù)次冪的值。如果進(jìn)程的號(hào)碼正好是被計(jì)算出的值的兩倍的倍數(shù),則其選擇具有等于進(jìn)程的號(hào)碼加上被計(jì)算出的值的號(hào)碼的交互伙伴。在數(shù)學(xué)方面,如果進(jìn)程的號(hào)碼用i表示而因數(shù)用k表示,進(jìn)程可確定2k+1除以i得到的余數(shù)。當(dāng)且僅當(dāng)余數(shù)為零時(shí),進(jìn)程選擇具有號(hào)碼i+2k的交互伙伴。
如果根據(jù)前述公式,進(jìn)程被第二進(jìn)程選擇作為交互伙伴,則進(jìn)程同樣選擇該第二進(jìn)程作為其交互伙伴。這可通過(guò)從選擇進(jìn)程接收到請(qǐng)求實(shí)現(xiàn)。這還可通過(guò)應(yīng)用用于選擇交互伙伴的公式的數(shù)學(xué)逆以確定另一個(gè)進(jìn)程是否將選擇該進(jìn)程來(lái)實(shí)現(xiàn)。應(yīng)注意,根據(jù)前述公式選擇第二進(jìn)程的進(jìn)程將不會(huì)再被第三進(jìn)程根據(jù)相同的公式選擇。
如果前述兩個(gè)步驟沒有將進(jìn)程與交互伙伴配對(duì),則對(duì)于當(dāng)前迭代,進(jìn)程沒有選擇交互伙伴。
在確定操作704中,進(jìn)程確定是否選擇交互伙伴。如果沒有選擇交互伙伴,則控制轉(zhuǎn)到確定步驟612。如果已選擇交互伙伴,則處理繼續(xù)進(jìn)行傳送操作706。
在傳送操作706中,進(jìn)程將一個(gè)或多個(gè)計(jì)算操作的結(jié)果傳送給進(jìn)程的交互伙伴。該結(jié)果可包括目前位于進(jìn)程的計(jì)算進(jìn)程的所有結(jié)果。
在接收操作708中,進(jìn)程從其交互伙伴接收一個(gè)或多個(gè)計(jì)算操作的結(jié)果。接收操作708可與傳送操作706同時(shí)執(zhí)行。
在確定操作710中,每個(gè)進(jìn)程確定結(jié)果是否被完全收集。如果是,則處理可停止。如果沒有,則控制返回配對(duì)操作702。每個(gè)單獨(dú)的進(jìn)程可一直等待,直到在返回配對(duì)操作702之前所有進(jìn)程已經(jīng)達(dá)到確定操作710。
在經(jīng)過(guò)示例性收集算法的log2N次迭代之后,其中N是從事全局歸約操作的進(jìn)程的數(shù)量,組合結(jié)果在多個(gè)進(jìn)程中的每一個(gè)處被完全接收到。因此,確定操作710可包括確定是否已經(jīng)完成log2N次迭代。例如,如果16個(gè)進(jìn)程從事全局歸約操作,則確定操作710可確定是否已經(jīng)完成log216=4次迭代。
如果控制返回配對(duì)操作702,則在第一次迭代和隨后的迭代之間存在很大區(qū)別。應(yīng)注意,配對(duì)操作702或者使該進(jìn)程與隨后的以前沒有與該進(jìn)程配對(duì)的交互合作對(duì)象相關(guān)聯(lián),或者使該進(jìn)程不與交互伙伴相關(guān)聯(lián)。在本發(fā)明的一個(gè)實(shí)施例中,使用如前文所述的計(jì)算操作計(jì)算交互伙伴的號(hào)碼,但是其中因數(shù)包含在先前的配對(duì)操作中沒有使用的值。特別地,因數(shù)可包含等于配對(duì)操作602的先前迭代內(nèi)使用的因數(shù)加1的值。
在隨后的迭代中傳送操作706可將在前面的迭代中接收到的結(jié)果轉(zhuǎn)發(fā)給為當(dāng)前迭代選擇的交互伙伴。特別地,傳送操作706傳送的一個(gè)或多個(gè)計(jì)算操作的結(jié)果可包括在先前的迭代期間在該進(jìn)程接收到的計(jì)算操作的結(jié)果。從而,接收操作708可同樣包括接收在先前的迭代期間在該進(jìn)程接收到的計(jì)算操作的結(jié)果。
應(yīng)強(qiáng)調(diào),在示例性收集階段結(jié)束時(shí),分布式計(jì)算操作的組合結(jié)果可在多個(gè)進(jìn)程中的每一個(gè)處被接收。
圖8A和8B示出被單個(gè)進(jìn)程執(zhí)行以幫助在多個(gè)進(jìn)程之間分配并歸約向量的示例性操作的流程圖。重點(diǎn)強(qiáng)調(diào),每個(gè)處理器獨(dú)立地執(zhí)行流程圖所示的操作。
在圖8A和8B內(nèi)使用的符號(hào)和標(biāo)記如下 n是參與向量的分配和歸約定進(jìn)程的數(shù)量。在圖8A和8B的示例性操作中,假設(shè)n可被表示為2的整數(shù)冪。特別地,n可被表示為2q,其中完成分配操作所需的迭代的次數(shù)。進(jìn)程被從0到n-1依次編號(hào)。但是,本領(lǐng)域的那些技術(shù)人員應(yīng)理解,該算法可被容易地修改以適應(yīng)不是2的整數(shù)冪的進(jìn)程數(shù)。
pu是執(zhí)行圖8A和8B內(nèi)所示的操作的進(jìn)程的號(hào)碼。換句話說(shuō),pu是在閱讀該算法時(shí)考慮其觀點(diǎn)的進(jìn)程的號(hào)碼。
pv是編號(hào)為pu的進(jìn)程的交互伙伴的號(hào)碼。
input_vector指示輸入向量。
output_vector指示輸出向量。
length指示將被歸約的向量的長(zhǎng)度。應(yīng)設(shè)想,input_vector和output_vector的長(zhǎng)度相同。
在圖8A的初始化操作802中,進(jìn)程自身進(jìn)行初始化以分配并歸約向量。初始化可包括將變量設(shè)定為初始值。特別地 slice[i]包含在迭代期間將被交換的子向量被分割成的切片的數(shù)量。在圖8A和8B的示例性操作中,對(duì)于在0和q-1之間且包含0和q-1在內(nèi)的i的每個(gè)整數(shù)值,slice[i]都被初始化為2。但是,應(yīng)注意,slice[i]的不同值可被選擇以優(yōu)化特定配置的性能。除了2之外的多個(gè)切片可被選擇以優(yōu)化流水線的深度。此外,針對(duì)每次迭代可選擇不同數(shù)量的切片。
i——指示當(dāng)前子向量的計(jì)數(shù)器——被初始化為0。
j——指示當(dāng)前子向量的當(dāng)前切片的計(jì)數(shù)器——被初始化為0。
pv——新交互伙伴的排序——被設(shè)定為pu和1的按位異或。
l——包含子向量的大小——被初始化為長(zhǎng)度除以2。
ls——包含子向量的切片的大小——被初始化為l除以slice
。
vec1——包含將被傳送的向量的緩沖器——被初始化為input_vector。
vec2——包含被接收的向量的緩沖器——被初始化為output_vector。
在確定操作804中,在進(jìn)程的排序pu和1之間執(zhí)行按位與操作。如果結(jié)果為1,則控制前進(jìn)到初始化操作806。如果結(jié)果為0,則控制前進(jìn)到初始化操作808。
如果選擇初始化操作806,則設(shè)定下列變量 b_send——指示將被發(fā)送的子向量?jī)?nèi)的將被發(fā)送的下一個(gè)位置的計(jì)數(shù)器變量——被初始化為ls。
b_recv——指示被接收的子向量?jī)?nèi)的將被接收的下一個(gè)位置的計(jì)數(shù)器變量——被初始化為0。
adjust被初始化為-1。
如果相反選擇初始化操作808,則設(shè)定下列變量 b_send被初始化為0。
b_recv被初始化為ls。
adjust被初始化為+1。
在傳送操作810中,進(jìn)程將第一切片傳送給其交互伙伴。特別地,在位置b_send開始并且在位置b_send+ls-1結(jié)束的切片vec1被傳送給交互伙伴??稍O(shè)想,傳送操作810是非堵塞的。特別地,傳送操作810可完全或部分地與以下操作并行地進(jìn)行。這可因遠(yuǎn)程直接存儲(chǔ)器存取(RDMA)而更容易,RDMA會(huì)在進(jìn)程本身繼續(xù)進(jìn)行以下操作的同時(shí)實(shí)現(xiàn)數(shù)據(jù)傳送。
在接收操作812中,進(jìn)程從其交互伙伴接收到第一個(gè)切片。特別地,從交互伙伴接收到在位置b_recv開始并且在位置b_recv+ls-1結(jié)束的切片vec2。如同傳送操作810一樣,可設(shè)想接收操作812是非堵塞的。特別地,接收操作812可完全或部分地與以下操作并行地進(jìn)行。這可因遠(yuǎn)程直接存儲(chǔ)器存取(RDMA)而更容易,RDMA會(huì)在進(jìn)程本身繼續(xù)進(jìn)行以下操作的同時(shí)實(shí)現(xiàn)數(shù)據(jù)傳送。為此,可設(shè)想,接收操作812與傳送操作810同時(shí)進(jìn)行。
應(yīng)注意,被交換的第一對(duì)切片在主循環(huán)之前。這是因?yàn)檠h(huán)中發(fā)生的處理包括在歸約接收到的一對(duì)切片的同時(shí)交換一對(duì)切片。這繼而需要初始循環(huán)迭代內(nèi)已經(jīng)接收到一對(duì)切片。
在增加操作814中,計(jì)數(shù)器變量j加1。這反映了接下來(lái)將傳送第二個(gè)切片這一事實(shí)。
在確定操作806中,比較i與q-1。如果i小于q-1,則控制轉(zhuǎn)到圖2B內(nèi)的操作820。如果i大于或等于q-1,則處理停止,因?yàn)榇藯l件應(yīng)該只有在向量的分配和歸約完成時(shí)才發(fā)生。應(yīng)注意,確定操作816在概念上與本領(lǐng)域內(nèi)已知的許多編程語(yǔ)言構(gòu)成的“當(dāng)”循環(huán)相同。
在圖8B內(nèi)的等待操作820中,進(jìn)程一直等待,直到接收操作812完成。
在記錄操作822中,進(jìn)程記錄向量?jī)?nèi)的位置以便有助于歸約操作842。記錄可包括設(shè)定特定變量等于特定值,如下 vec3——包含將被歸約的向量的緩沖器——被設(shè)定為vec1。
vec4——包含將被歸約的向量的另一個(gè)緩沖器——被設(shè)定為vec2。
b_reduce_1——vec3內(nèi)的從該處開始?xì)w約操作的位置——被設(shè)定為b_send加adjust與ls的乘積。應(yīng)注意,adjust等于+1或-1。在前一種情況下,b_reduce_1等于b_send加ls。在后一種情況下,b_reduce_1等于b_sen減ls。
b_reduce_2——vec4內(nèi)的從該處開始?xì)w約操作的位置——被設(shè)定為b_recv。
e_reduce_1——vec3內(nèi)的在該處結(jié)束歸約操作的位置——被設(shè)定為b_reduce_1加ls減1。
e_reduce_2——vec4內(nèi)的在該處結(jié)束歸約操作的位置——被設(shè)定為b_reduce_2加ls減1。
在確定操作824中,比較j與slice[i],并且比較i與q-1。如果j等于slice[i]而i不等于q-1,則控制轉(zhuǎn)到重新初始化操作826。如果任何一個(gè)或兩個(gè)條件都非真,則控制轉(zhuǎn)到確定操作834。應(yīng)注意,當(dāng)j等于slice[i]而i等于q-1時(shí),不再傳送切片而剛剛被傳送的數(shù)據(jù)段保持將被歸約。在此情況下,經(jīng)由確定操作824省略下一個(gè)切片的傳送,這是有利地,因?yàn)椴淮嬖谙乱粋€(gè)切片。但是,因?yàn)閯倓偙粋魉偷那衅员仨毐粴w約,所以沒有省略歸約。然后將在確定操作816處離開循環(huán)。
在重新初始化操作826中,進(jìn)程執(zhí)行初始化操作以選擇下一個(gè)交互伙伴并準(zhǔn)備與該進(jìn)程交換信息。具體的,以前討論的變量可被初始化為適合于與新進(jìn)程交互的值。該變量以及它們的初值可包括 i——子向量索引——加1。
vec1被設(shè)定為vec2。這是因?yàn)橹虚g結(jié)果向量將被用作下一個(gè)輸入向量。
vec2加1。這使得將使用輸出向量?jī)?nèi)的下一個(gè)可用空間。
pv——新交互伙伴的排序——被設(shè)定為pu和左移i位的1的異或。
l——子向量的大小——被設(shè)定為長(zhǎng)度除以2的i+1次冪。應(yīng)注意,這使得被交換的數(shù)據(jù)量為在前一次迭代期間交換的數(shù)據(jù)量的一半。
ls——子向量的切片的大小——被設(shè)定為l除以slice[i]。因此,切片的大小被設(shè)定為l的新值除以將被用于此迭代的切片的數(shù)量。
j——切片索引——被設(shè)定為1。
在確定操作828中,在進(jìn)程的排序pu和左移i位的1之間執(zhí)行按位與操作。如果結(jié)果非零,則控制前進(jìn)到初始化操作830。如果結(jié)果為零,則控制前進(jìn)到初始化操作832。應(yīng)注意,確定操作828與確定操作804相似。
如果初始化操作830被選擇,則設(shè)定以下變量 b_send——指示將被發(fā)送的子向量?jī)?nèi)的將被發(fā)送的下一個(gè)位置——被初始化為ls。
b_recv——指示被接收的子向量?jī)?nèi)的將被接收的下一個(gè)位置——被初始化為0。
adjust被初始化為-1。
應(yīng)注意,重新初始化操作830與初始化操作806相同。
如果相反,選擇初始化操作832,則設(shè)定以下變量 b_send被初始化為0。
b_recv被初始化為ls。
adjust被初始化為+1。
應(yīng)注意,重新初始化操作832與初始化操作808相同。還應(yīng)注意,通過(guò)遵循此算法,進(jìn)程可從迭代到迭代切換角色。
在重新初始化操作830或重新初始化操作832之后,控制然后轉(zhuǎn)到發(fā)送操作838。
在確定操作834中,比較j與slice[i]。如果j不等于slice[i],則控制轉(zhuǎn)到初始化操作836。否則,控制轉(zhuǎn)到歸約操作842。
在初始化操作836中,設(shè)定以下變量 b_send增加ls的值的兩倍。
b_recv同樣增加ls的值得兩倍。
j——切片索引——加1。
在傳送操作838(其在初始化操作836、重新初始化操作830或重新初始化操作832之后),進(jìn)程將第一切片傳送給其交互伙伴。特別地,從位置b_send開始并在位置b_send+ls-1結(jié)束的vec1的切片被傳送給交互伙伴??稍O(shè)想,傳送操作838是非堵塞的。特別地,傳送操作838可全部或部分與以下操作并行地執(zhí)行。這可因遠(yuǎn)程直接存儲(chǔ)器存取(RDMA)而更容易,RDMA會(huì)在進(jìn)程本身繼續(xù)進(jìn)行以下操作的同時(shí)實(shí)現(xiàn)數(shù)據(jù)傳送。應(yīng)注意,傳送操作838與傳送操作810相同。
在接收操作840中,進(jìn)程從其交互伙伴接收第一切片。尤其是,從交互伙伴接收開始于位置b_recv、結(jié)束于位置b_recv+ls-1的vec2的切片。對(duì)于傳送操作838,設(shè)想接收操作840是非堵塞的。尤其是,接收操作840可整體或部分平行于下列操作執(zhí)行。這可因遠(yuǎn)程直接存儲(chǔ)器存取(RDMA)而更容易,RDMA會(huì)在進(jìn)程本身繼續(xù)進(jìn)行以下操作的同時(shí)實(shí)現(xiàn)數(shù)據(jù)傳送。為此,考慮接收操作840與傳送操作838同時(shí)進(jìn)行。應(yīng)當(dāng)注意,接收操作840與接收操作812相同。
在歸約操作842中,對(duì)先前的切片執(zhí)行歸約操作。歸約操作接受從位置b_reduce_1到e_reduce_1的vec3和從位置b_reduce_2到e_reduce_2的vec4作為輸入。應(yīng)強(qiáng)調(diào),歸約操作可包括本領(lǐng)域內(nèi)已知的多種計(jì)算操作中的任何一種??刂迫缓蠓祷貓D8A上的確定操作816。
參照?qǐng)D9,示出本發(fā)明設(shè)想的計(jì)算機(jī)系統(tǒng)902的示例性實(shí)施例。計(jì)算機(jī)系統(tǒng)902包括處理單元904,系統(tǒng)存儲(chǔ)器906,以及將系統(tǒng)存儲(chǔ)器906耦合到處理單元904的系統(tǒng)總線908。系統(tǒng)存儲(chǔ)器906包括只讀存儲(chǔ)器(ROM)908和隨機(jī)存取存儲(chǔ)器(RAM)910。包含幫助在計(jì)算機(jī)系統(tǒng)902內(nèi)的元件之間傳送信息的基本例程的基本輸入/輸出系統(tǒng)(BIOS)912被存儲(chǔ)在ROM 908內(nèi)。
計(jì)算機(jī)系統(tǒng)902還包括硬盤驅(qū)動(dòng)器914,磁盤驅(qū)動(dòng)器916(將從可取出磁盤918讀取并寫入該磁盤),和光盤驅(qū)動(dòng)器920(用于讀光盤922或從其他光學(xué)介質(zhì)讀取并寫入該其他光學(xué)介質(zhì))。硬盤驅(qū)動(dòng)器914、磁盤驅(qū)動(dòng)器916和光盤驅(qū)動(dòng)器920分別通過(guò)硬盤接口924、磁盤接口926和光盤接口928連接到系統(tǒng)總線908。驅(qū)動(dòng)器以及與它們相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)系統(tǒng)902提供了非易失性存儲(chǔ)。盡管計(jì)算機(jī)可讀的介質(zhì)是指硬盤、可取出的磁盤介質(zhì)和可取出的光盤介質(zhì),但是本領(lǐng)域的那些技術(shù)人員應(yīng)理解,可被計(jì)算機(jī)讀取的其他類型的介質(zhì)例如閃存卡也可用于示例性計(jì)算機(jī)系統(tǒng)902。
多種程序模塊可被存儲(chǔ)在驅(qū)動(dòng)器和RAM 108內(nèi),包括運(yùn)行時(shí)間平臺(tái)931、計(jì)算進(jìn)程110、程序數(shù)據(jù)934和其它程序模塊(未示出)。如上所述,計(jì)算進(jìn)程110可實(shí)現(xiàn)多種目標(biāo)。這些目標(biāo)包括但不局限于科學(xué)和科技研究、預(yù)測(cè)未來(lái)天氣狀況以及模擬科學(xué)現(xiàn)象。計(jì)算操作可作為高性能計(jì)算任務(wù)的一部分被執(zhí)行。
用戶可通過(guò)鍵盤936和點(diǎn)擊設(shè)備例如鼠標(biāo)938向計(jì)算機(jī)系統(tǒng)902輸入命令和信息。其他輸入設(shè)備(未示出)可包括麥克風(fēng)、調(diào)制解調(diào)器、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描器等等。這些以及其他輸入設(shè)備常常通過(guò)串行端口接口940連接到處理單元,該串行端口耦合到系統(tǒng)總線908。
監(jiān)視器942或其他類型的顯示設(shè)備也經(jīng)由接口例如視頻適配器944耦合到系統(tǒng)總線908。除了監(jiān)視器之外,計(jì)算機(jī)系統(tǒng)902還包括其他外圍輸出設(shè)備(未示出)例如揚(yáng)聲器和打印機(jī)。
計(jì)算機(jī)系統(tǒng)902使用與一個(gè)或多個(gè)遠(yuǎn)程設(shè)備的邏輯連接在網(wǎng)絡(luò)環(huán)境內(nèi)操作。遠(yuǎn)程設(shè)備可包括服務(wù)器、路由器、對(duì)等設(shè)備或其它公共網(wǎng)絡(luò)節(jié)點(diǎn)。當(dāng)用于網(wǎng)絡(luò)環(huán)境中時(shí),計(jì)算機(jī)系統(tǒng)902通常通過(guò)網(wǎng)絡(luò)接口946連接到網(wǎng)絡(luò)114上。在網(wǎng)絡(luò)環(huán)境中,相對(duì)于計(jì)算機(jī)系統(tǒng)902或其一部分說(shuō)明的程序模塊可被存儲(chǔ)在一個(gè)或多個(gè)遠(yuǎn)程存儲(chǔ)設(shè)備內(nèi)。
本領(lǐng)域的技術(shù)人員應(yīng)理解,本發(fā)明可表現(xiàn)為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可表現(xiàn)為完全是硬件的實(shí)施例、完全是軟件的實(shí)施例(包括固件、駐留軟件、微代碼等),或組合在此通常被稱為“電路”、“模塊”或“系統(tǒng)”的軟件和硬件方面的實(shí)施例的形式。此外,本發(fā)明還可表現(xiàn)為計(jì)算機(jī)程序產(chǎn)品或其中包含計(jì)算機(jī)可用的程序代碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的形式。
任何合適的計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可被利用。計(jì)算機(jī)可用或計(jì)算機(jī)可讀的介質(zhì)可以是例如但不局限于電子、磁、光學(xué)、電磁、紅外線或半導(dǎo)體系統(tǒng)、裝置、設(shè)備或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的更具體的示例(非詳盡的列表)如下具有一條或多條線的電子連接,便攜式計(jì)算機(jī)軟盤,硬盤、直接存取存儲(chǔ)器(RAM),只讀存儲(chǔ)器(ROM),可擦除的可編程只讀存儲(chǔ)器(EPROM或閃存),光導(dǎo)纖維,便攜式光盤只讀存儲(chǔ)器(CD-ROM),光學(xué)存儲(chǔ)設(shè)備,傳送介質(zhì)例如支持互聯(lián)網(wǎng)或內(nèi)聯(lián)網(wǎng)的那些介質(zhì),或磁性存儲(chǔ)設(shè)備。應(yīng)注意,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)甚至可以是紙或可在其上打印程序的另一種合適的介質(zhì),程序可被經(jīng)由例如對(duì)該紙或其它介質(zhì)進(jìn)行光學(xué)掃描被電子捕獲,然后被編譯、解釋或如果必要的話以合適的方式處理,然后被存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器內(nèi)。在此文獻(xiàn)的上下文內(nèi),計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是可包含、存儲(chǔ)、傳遞、傳播或傳送被指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與之有關(guān)的程序的任何介質(zhì)。計(jì)算機(jī)可用介質(zhì)可包括或者在基帶內(nèi)或者作為載波的一部分的其中包含計(jì)算機(jī)可用程序代碼的被傳播的數(shù)據(jù)信號(hào)??墒褂萌魏魏线m的介質(zhì)包括但不局限于互聯(lián)網(wǎng)、有線線路、光纖電纜、RF等傳送計(jì)算機(jī)可用程序代碼。
用于執(zhí)行本發(fā)明的操作的計(jì)算機(jī)程序代碼可用面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言例如Java、Smalltalk、C++等寫成。但是,用于執(zhí)行本發(fā)明的操作的計(jì)算機(jī)程序代碼還可用傳統(tǒng)的過(guò)程程序設(shè)計(jì)語(yǔ)言例如“C”程序設(shè)計(jì)語(yǔ)言或類似程序設(shè)計(jì)語(yǔ)言寫成。程序代碼可完全在用戶的計(jì)算機(jī)上、部分在用戶的計(jì)算機(jī)上、作為獨(dú)立軟件包、部分在用戶的計(jì)算機(jī)上而部分在遠(yuǎn)程計(jì)算機(jī)上,或完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后者的情況中,遠(yuǎn)程計(jì)算機(jī)可通過(guò)局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)連接到用戶的計(jì)算機(jī),或者可(例如,使用因特網(wǎng)服務(wù)提供商通過(guò)因特網(wǎng))與外部計(jì)算機(jī)連接。
上文參照根據(jù)本發(fā)明的實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖說(shuō)明了本發(fā)明。應(yīng)理解,流程圖和/或框圖等每個(gè)塊以及流程圖和/或框圖內(nèi)的塊的組合可用計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可被提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器以生成機(jī)器,從而該指令經(jīng)由計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器執(zhí)行,創(chuàng)建用于實(shí)現(xiàn)流程圖和/或框圖塊內(nèi)制定的功能/行為的部件。
這些計(jì)算機(jī)程序指令還可被存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器內(nèi),可指引計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置以特定方式起作用,從而被存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器內(nèi)的指令可制成包含實(shí)現(xiàn)流程圖和/或框圖塊內(nèi)指定的功能/性能的指令部件的制成品。
計(jì)算機(jī)程序指令還可被裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置上以使得在計(jì)算機(jī)或其他可編程裝置上執(zhí)行一連串操作步驟以產(chǎn)生被計(jì)算機(jī)實(shí)現(xiàn)的進(jìn)程,從而在計(jì)算機(jī)或其他可編程裝置上執(zhí)行的該指令提供了用于實(shí)現(xiàn)流程圖和/或框圖塊內(nèi)指定的功能/行為的步驟。
附圖內(nèi)的流程圖和框圖示出根據(jù)本發(fā)明的各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能的實(shí)現(xiàn)的結(jié)構(gòu)、功能和操作。在此方面,流程圖或框圖內(nèi)的每個(gè)塊可代表代碼的模塊、代碼段或一部分,其包括用于實(shí)現(xiàn)特定邏輯函數(shù)的一個(gè)或多個(gè)可執(zhí)行指令。還應(yīng)注意,在一些可選擇的實(shí)現(xiàn)中,塊內(nèi)指示的功能可以與附圖內(nèi)指示的順序不同的順序發(fā)生。例如,連續(xù)示出的兩個(gè)塊實(shí)際上可基本同時(shí)執(zhí)行,或者塊有時(shí)可根據(jù)調(diào)用的功能以顛倒的順序執(zhí)行。還應(yīng)注意,框圖和/或流程圖的每個(gè)塊以及框圖和/或流程圖的塊的組合可用執(zhí)行被指定的功能或行為的專用的基于硬件的系統(tǒng)或?qū)S糜布蛴?jì)算機(jī)指令的組合實(shí)現(xiàn)。
文中使用的術(shù)語(yǔ)僅是為了描述具體實(shí)施例而不是打算限制本發(fā)明。如文中使用的,除非上下文另外清楚地示出,否則單數(shù)形式“一”和“該”也將包含復(fù)數(shù)形式。還應(yīng)理解,術(shù)語(yǔ)“包括”和/或“包含”在用于此說(shuō)明書時(shí)指定存在提到的特征、整數(shù)、步驟、操作、元件和/或組件,但是不排除存在或添加一種或多種其他的特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。
下面的權(quán)利要求內(nèi)對(duì)應(yīng)的結(jié)構(gòu)、材料、行為以及所有部件或步驟加功能元件的等同物將包含用于與如由權(quán)利要求具體規(guī)定的其他被要求的元件共同實(shí)現(xiàn)功能的任何結(jié)構(gòu)、材料或行為。對(duì)本發(fā)明的說(shuō)明僅是為了說(shuō)明和描述,而不是打算是窮盡的或?qū)⒈景l(fā)明局限于公開的形式。許多修改和變型對(duì)于本領(lǐng)域的普通技術(shù)人員是顯而易見的且不會(huì)背離本發(fā)明的范圍和精神。實(shí)施例被選擇和說(shuō)明以便最好地解釋本發(fā)明的原理以及實(shí)際應(yīng)用,并且使本領(lǐng)域的其他普通技術(shù)人員能夠理解本發(fā)明的具有適合于設(shè)想的具體使用的各種修改的各種實(shí)施例。
通過(guò)這種詳細(xì)說(shuō)明本申請(qǐng)的發(fā)明并參照本發(fā)明的實(shí)施例,很明顯,可存在修改和變型而不會(huì)背離所附權(quán)利要求內(nèi)限定的本發(fā)明的范圍。
權(quán)利要求
1.一種用于在多個(gè)進(jìn)程之間分配計(jì)算操作的方法,該方法包括
將所述多個(gè)進(jìn)程配對(duì),以便每個(gè)進(jìn)程具有至少一個(gè)交互伙伴;
選擇位于進(jìn)程的數(shù)據(jù)的子集;
將該數(shù)據(jù)的被選擇的子集分成多個(gè)數(shù)據(jù)段;
將從該劃分操作得到的第一數(shù)據(jù)段從該進(jìn)程傳送給該進(jìn)程的交互伙伴;
在該進(jìn)程從該交互伙伴接收第二數(shù)據(jù)段;
在該傳送和接收操作的同時(shí),對(duì)以前從先前的交互伙伴接收到的第三數(shù)據(jù)段和來(lái)自所述多個(gè)數(shù)據(jù)段的第四數(shù)據(jù)段執(zhí)行計(jì)算操作;以及
迭代所述傳送、接收和計(jì)算操作,直到所有數(shù)據(jù)段被交換。
2.根據(jù)權(quán)利要求1的方法,其中所述數(shù)據(jù)的子集包括所述數(shù)據(jù)的一半。
3.根據(jù)權(quán)利要求1的方法,其中該方法還包括重復(fù)所述配對(duì)、選擇、劃分、傳送、接收、計(jì)算和迭代操作一次或多次,其中在第一次配對(duì)操作之后的下一次配對(duì)操作使所述進(jìn)程與以前沒有與該進(jìn)程配對(duì)的隨后的交互伙伴相關(guān)聯(lián)。
4.根據(jù)權(quán)利要求3的方法,其中該方法還包括
為所述多個(gè)進(jìn)程中的每一個(gè)分配號(hào)碼,其中沒有兩個(gè)進(jìn)程被分配相同的號(hào)碼;
計(jì)算進(jìn)程的號(hào)碼與掩碼的異或并執(zhí)行第一次配對(duì)操作,從而使進(jìn)程與具有等于該計(jì)算操作的結(jié)果的號(hào)碼的交互伙伴相關(guān)聯(lián);以及
為該第一次配對(duì)操作之后的每次配對(duì)操作重復(fù)該計(jì)算操作,其中該掩碼包括先前的配對(duì)操作中沒有使用的值。
5.根據(jù)權(quán)利要求1的方法,其中該方法還包括接收?qǐng)?zhí)行這樣的全局歸約操作的指示,即該全局歸約操作被配置成在多個(gè)進(jìn)程之間分配計(jì)算操作并收集該計(jì)算操作的結(jié)果,以便在單個(gè)進(jìn)程接收該結(jié)果。
6.根據(jù)權(quán)利要求1的方法,其中該方法還包括接收?qǐng)?zhí)行這樣的全局歸約操作的指示,即該全局歸約操作被配置成在多個(gè)進(jìn)程之間分配計(jì)算操作并收集該計(jì)算操作的結(jié)果,以便在執(zhí)行該計(jì)算操作的所有進(jìn)程接收該結(jié)果。
7.根據(jù)權(quán)利要求1的方法,其中所述數(shù)據(jù)段被經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取傳送。
8.根據(jù)權(quán)利要求1的方法,其中所述計(jì)算操作被配置用于模擬可觀測(cè)事件。
9.根據(jù)權(quán)利要求1的方法,其中所述計(jì)算操作被配置用于預(yù)測(cè)未來(lái)天氣狀況。
10.一種用于在多個(gè)進(jìn)程之間分配計(jì)算操作的計(jì)算機(jī)裝置,該計(jì)算機(jī)裝置包括
用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元;
用于執(zhí)行這樣的操作的處理單元,即將所述多個(gè)進(jìn)程配對(duì)以便每個(gè)進(jìn)程具有至少一個(gè)交互伙伴,選擇位于進(jìn)程的數(shù)據(jù)的子集,并將所述數(shù)據(jù)的被選擇的子集分成多個(gè)數(shù)據(jù)段;
用于將由該劃分操作得到的第一數(shù)據(jù)段從該進(jìn)程傳送給該進(jìn)程的交互伙伴,并在該進(jìn)程從該交互伙伴接收第二數(shù)據(jù)段的存儲(chǔ)器存取單元;
其中該處理單元被配置成在該傳送和接收操作的同時(shí),對(duì)以前從先前的交互伙伴接收到的第三數(shù)據(jù)段和來(lái)自所述多個(gè)數(shù)據(jù)段的第四數(shù)據(jù)段執(zhí)行計(jì)算操作。
11.根據(jù)權(quán)利要求10的計(jì)算機(jī)裝置,其中所述數(shù)據(jù)的所述子集包括所述數(shù)據(jù)的一半。
12.根據(jù)權(quán)利要求10的計(jì)算機(jī)裝置,其中所述處理單元還執(zhí)行重復(fù)所述配對(duì)、選擇、劃分、和計(jì)算操作一次或多次的操作,其中在第一次配對(duì)操作之后的下一次配對(duì)操作使所述進(jìn)程與以前沒有與該進(jìn)程配對(duì)的隨后的交互伙伴相關(guān)聯(lián)。
13.根據(jù)權(quán)利要求12的計(jì)算機(jī)裝置,其中所述處理單元還執(zhí)行以下操作
為所述多個(gè)進(jìn)程中的每一個(gè)分配號(hào)碼,其中沒有兩個(gè)進(jìn)程被分配相同的號(hào)碼;
計(jì)算進(jìn)程的號(hào)碼與掩碼的異或并執(zhí)行第一次配對(duì)操作,從而使進(jìn)程與具有等于該計(jì)算操作的結(jié)果的號(hào)碼的交互伙伴相關(guān)聯(lián);以及
為該第一次配對(duì)操作之后的每次配對(duì)操作重復(fù)該計(jì)算操作,其中該掩碼包括先前的配對(duì)操作中沒有使用的值。
14.根據(jù)權(quán)利要求10的計(jì)算機(jī)裝置,其中所述存儲(chǔ)器存取單元被配置用于經(jīng)由遠(yuǎn)程直接存儲(chǔ)器存取傳送數(shù)據(jù)段。
15.根據(jù)權(quán)利要求10的計(jì)算機(jī)裝置,其中所述計(jì)算操作被配置用于模擬可觀測(cè)事件。
全文摘要
描述了用于在多個(gè)進(jìn)程之間分配計(jì)算操作并從該多個(gè)進(jìn)程收集計(jì)算操作的結(jié)果的方法、系統(tǒng)和計(jì)算機(jī)程序。示例性方法包括以下操作將多個(gè)進(jìn)程配對(duì)以便每個(gè)進(jìn)程具有最多一個(gè)交互伙伴;選擇位于進(jìn)程的數(shù)據(jù)的一半;將該數(shù)據(jù)的所述被選擇的一半分成多個(gè)數(shù)據(jù)段;將從該劃分操作得到的第一數(shù)據(jù)段從該進(jìn)程傳送給該進(jìn)程的交互伙伴;在該進(jìn)程從該交互伙伴接收第二數(shù)據(jù)段;在該傳送和接收操作的同時(shí),對(duì)以前從先前的交互伙伴接收到的第三數(shù)據(jù)段和來(lái)自所述多個(gè)數(shù)據(jù)段的第四數(shù)據(jù)段執(zhí)行計(jì)算操作;并且迭代該傳送、接收和計(jì)算操作,直到所有數(shù)據(jù)段被交換。
文檔編號(hào)G06F9/46GK101206588SQ20071018693
公開日2008年6月25日 申請(qǐng)日期2007年11月15日 優(yōu)先權(quán)日2006年12月15日
發(fā)明者彬 賈 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司