專利名稱:在多線程計算環(huán)境中建立跨越多個進程的通信程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng)中管理共享資源的功能,更具體來說,涉及一種用于例如在消息傳送接口(MPI)庫內(nèi)實現(xiàn)的線程安全的分布式合意技術(shù)(thread-safe distributed consensus technique)。
為了更好地理解本發(fā)明的背景,首先來解釋一些術(shù)語。本領(lǐng)域中有名的術(shù)語一對稱多處理器(SMP),指的是計算系統(tǒng)中硬件的一個方面,更具體來說,涉及處理器平面(planar)本身的物理布局和設(shè)計。這類多個處理器單元的一個特點是對全局存儲器的共享和對SMP系統(tǒng)的輸入/輸出(I/O)相同使用權(quán)。
與現(xiàn)代復(fù)雜計算系統(tǒng)普遍相關(guān)的另一個術(shù)語是“線程”。術(shù)語“線程”的大體意義只是指在計算機執(zhí)行的應(yīng)用軟件和操作系統(tǒng)的內(nèi)核中經(jīng)過的簡單執(zhí)行路徑。本領(lǐng)域中人們都知道,普遍允許每個進程映象(process image)中有多個這種線程。
POSIX標(biāo)準(zhǔn)中現(xiàn)在已經(jīng)收入了線程標(biāo)準(zhǔn)。例如在K.Robbins和S.Robbins所作的名為《實用UNIX程序設(shè)計一并發(fā)、通信和多線程指南》(Practical UNIX Programming-A Guide to Concurrency,Communication and Multi-Threading)(Prentice Hall PTR出版,1996)一文中介紹了POSIX標(biāo)準(zhǔn)下的基本線程管理。
本文在描述本發(fā)明實施例時所用的另一個概念是鎖(locks)。在現(xiàn)代計算系統(tǒng)中通常有一些關(guān)鍵的代碼段和共享數(shù)據(jù)結(jié)構(gòu),諸如共享庫,它們的完整性對系統(tǒng)的正確運行及其重要。概括來說,鎖是在軟件(或硬件)中用來“串行化”對這些關(guān)鍵的代碼段和/或共享數(shù)據(jù)結(jié)構(gòu)的訪問的設(shè)備。
另一個要注意的術(shù)語是多線程安全(multithread-safe)的代碼的概念。如果競爭相同資源或例程的多個執(zhí)行線程被串行化,使得能對所有線程保證數(shù)據(jù)完整性,則代碼被視為是線程/多線程安全的。實現(xiàn)這一點的一種方法是借助上述的鎖。
作為另外的背景,消息傳送接口(MPI)標(biāo)準(zhǔn)定義下列語義并行作業(yè)中的進程在一個保證域內(nèi)消息完整性的通信域(communicationdomain)(以下也稱“通信程序”)內(nèi)交換消息。在一個域中發(fā)出的消息不干涉另一個域中發(fā)出的消息。當(dāng)并行作業(yè)開始時,各進程的子集可以合作,以按需建立單獨的通信域。
申請人認(rèn)識到多線程環(huán)境中產(chǎn)生的一個問題,其中多個線程可能同時試圖獲得通信域。如果沒有辦法來解決這個問題,就可能會發(fā)生死鎖。所以需要一種確定性的、非死鎖的技術(shù)來實現(xiàn)多線程處理系統(tǒng)中的分布式合意。本發(fā)明就是為解決這個需要而提供的一種技術(shù)。
簡要地說,本發(fā)明的一個方面提出一個用于跨越多線程計算機環(huán)境的多個進程建立通信程序的方法,該環(huán)境中多個進程可能同時在試圖建立通信程序(communicator)。該方法包括在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符;在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求(claim)該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符,作為新標(biāo)識符,由此建立通信程序。
本發(fā)明的另一個方面提供一個用于跨越多線程計算機環(huán)境的多個進程建立通信程序的系統(tǒng),該環(huán)境中多個進程可能同時在試圖建立通信程序。系統(tǒng)包括的一個裝置,用于在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符;還有一個裝置,用于在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符,作為新標(biāo)識符,由此建立通信程序。
本發(fā)明的再一個方面包含至少一個可由機器讀取的程序存儲裝置,內(nèi)含至少一個可由機器執(zhí)行的指令程序,指令程序用來執(zhí)行跨越多線程計算機環(huán)境的多個進程建立通信程序的方法,該環(huán)境中多個進程可能同時在試圖建立通信程序。該方法包括在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符;在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符,作為新標(biāo)識符,由此建立通信程序。
重申一遍,這里提出一種用于在多線程的多進程計算環(huán)境中實現(xiàn)分布式合意的技術(shù)。該技術(shù)是確定性的,因為各線程將在有限次數(shù)的重試中以可預(yù)測的順序成功創(chuàng)建一個通信程序。該技術(shù)被相信優(yōu)于所謂的“隨機化”算法,在這種算法中,未能創(chuàng)建通信程序的線程只是等待過了隨機量的時間后再重試。此外,這里提出的技術(shù)保證避免線程之間的死鎖。這優(yōu)于其它檢測到死鎖情況就采取打破死鎖的行動的算法。死鎖檢測通常涉及注意到某一段時間過去了還沒有線程在進行。這里提出的分布式合意功能是高效的,因為線程為獲得對新通信域的分布式合意而被迫重試的次數(shù)有個上限一即使存在多組試圖同時創(chuàng)建通信程序的線程也是如此。
由以下結(jié)合附圖對本發(fā)明的某些最佳實施例的詳細說明,可以更容易了解本發(fā)明的上述及其它目的、優(yōu)點和特點。附圖簡介
圖1表示一例包含按照本發(fā)明的通信域合意功能的線程計算機環(huán)境;圖2是多個有多個線程的進程的簡化圖,其中按本發(fā)明原理建立了跨越多個進程的多個線程的通信域;圖3A和3B表示按照本發(fā)明原理的通信域合意技術(shù)的一個實施例。
下面結(jié)合圖1說明一例包含和使用按照本發(fā)明的通信域合意功能的線程計算機環(huán)境。
如圖所示,計算機環(huán)境100包括多個經(jīng)連接104而相連的計算節(jié)點102。例如,每個計算節(jié)點可包含是一個國際商用機器公司推出的RS/6000 SP系統(tǒng)的節(jié)點,連接104可以是個也是國際商用機器公司推出的分組交換網(wǎng)絡(luò),諸如SP轉(zhuǎn)接器或高性能轉(zhuǎn)接器(HPS)。再次注意,圖1僅僅是舉例表示的。這里所披露的技術(shù),還可應(yīng)用于圖1所示多處理器環(huán)境以外的任何單線程的或多線程的程序的集合。
在環(huán)境100內(nèi),消息分組被通過分組交換網(wǎng)絡(luò)104從源計算節(jié)點(發(fā)送節(jié)點)傳送到接收計算節(jié)點(接收節(jié)點)。例如計算單元N的用戶任務(wù)106可以向計算單元1(接收節(jié)點)的用戶任務(wù)106傳送消息。適配器112連接計算單元102與轉(zhuǎn)接器104?!队糜贏IX管理的IBM并行系統(tǒng)支援程序指南》(IBM Parallel System Support ProgramsFor AIX Administration Guide)(出版號GC23-3897-02(1996))中詳細介紹了轉(zhuǎn)接器104的一個例子。
進一步來說,計算單元與其相關(guān)適配器112之間的通信,例如由包括諸如打開通信、關(guān)閉通信、啟用路由、停用路由、返回狀態(tài)和重置適配器等功能(functions)的接口描述。在一個實施例中,接口包含消息傳送接口(MPI)110-這里也稱MPI庫。
對適配器的接入由每個計算單元102內(nèi)的內(nèi)核擴展/設(shè)備驅(qū)動程序108作中介。擴展(extension)108包括的一組功能(functions),有操作系統(tǒng)本身(例如國際商用機器公司出售的AIX操作系統(tǒng))的權(quán)力。內(nèi)核擴展(kernel extension)授權(quán)由用戶任務(wù)106(或程序)使用適配器112并有在需要時中斷用戶任務(wù)的能力。用戶任務(wù)通過MPI庫110與適配器112通信。對MPI庫的更詳細介紹,例如可參閱國際商用機器公司的出版物-題目為《AIX的IBM并行環(huán)境MPI程序設(shè)計和子例程參考》(IBM Parallel Environment for AIXMPIProgramming and Subroutine Reference)(第2版,第4期(1998年10月)),這里特此引用其全文。
在各種其它出版物中詳細介紹了國際商用機器公司對MPI庫的實現(xiàn)。例如,參閱“IBM系統(tǒng)雜志”(IBM System Journal)中題為《IBMSP2的并行環(huán)境中的通信軟件》(The Communication Software inParallel Environment of the IBM PS2)(卷34,1995第2期205-21頁)的文章。另外的信息可見于W.Richard Stevens編著的名為《UNIX網(wǎng)絡(luò)程序設(shè)計》(UNIX Network Programming)(Prentice Hall公司出版,1990)的教科書。特此全文引用這兩個參考文獻。
如上所述,這里假設(shè)計算環(huán)境包含一個使得用戶任務(wù)可以包含多個線程的線程計算機環(huán)境,;庫是線程MPI。線程計算環(huán)境是當(dāng)今該產(chǎn)業(yè)中眾所周知的。線程MPI庫可從國際商用機器公司購買-《AIX的IBM并行環(huán)境》(IBM Parallel Environment for AIX)(第2版,第4期,IBM產(chǎn)品號5765-543(1998年10月))。這個線程MPI包含在AIX系統(tǒng)上運行的被許可程序產(chǎn)品。
在討論本發(fā)明的一個詳細實施例之前,提供以下背景定義“并行作業(yè)”是在一系列處理器上執(zhí)行的任務(wù)的集合。這些任務(wù)為共同解決問題而合作并交換數(shù)據(jù)。
“任務(wù)”或“進程”是執(zhí)行程序(指令序列)的實例,由地址空間和一個或多個控制流組成。地址空間是任務(wù)可能引用或訪問的存儲單元的集合。
“線程”是任務(wù)內(nèi)部的控制流。如今大多數(shù)系統(tǒng)都支持單任務(wù)內(nèi)的多個控制流。線程可以并行地執(zhí)行。
“MPI通信程序”是由一組通信的任務(wù)組成的邏輯單位。在一個例子中,通信程序可以用稱為環(huán)境ID(context ID)標(biāo)識符實現(xiàn)。
“環(huán)境ID”或“環(huán)境標(biāo)識符”是一個在包含特定MPI通信程序任務(wù)中都相同的號碼,對該通信程序中涉及的任何任務(wù)上的任何其它通信程序來說是獨一無二的。
“通信域”是其中的包含通信程序的任務(wù)交換消息的環(huán)境(context)。它具有孤島性-在域內(nèi)發(fā)送的消息不會被傳遞到域外的(即不同通信程序中的)任務(wù)。本文中通信域和通信程序可以交換使用。
“歸約”(reduce或reduction)操作是對值的一個集合進行的操作(例如求和、按位與),其中由通信任務(wù)的集合的每個成員提供一個值。操作的結(jié)果可以被返回一個進程中(歸約操作)或返回到所有參與的進程(全歸約(allreduce)操作)。
為了管理對通信域的區(qū)分(separation),一種MPI庫的實現(xiàn)將每個通信域與該域中的作業(yè)進程一致同意的獨有“環(huán)境ID”相關(guān)聯(lián)。以創(chuàng)建新通信域為目的的MPI庫例程可以被并行作業(yè)的進程的子集(即線程)調(diào)用。該庫例程必須通過標(biāo)識和要求一個在域中所有進程中是獨一無二的、在子集中所有進程處都是可用的共用環(huán)境ID來創(chuàng)建新通信域。創(chuàng)建新通信域的調(diào)用可以由幾組線程-有些線程可以位于同一個進程中或者位于不同的進程中-同時進行。
圖2表示的情況中,三個進程200、202、204(進程1、進程2和進程3)上的每個線程1都調(diào)用MPI庫,以建立通信程序A;進程1和2上的線程2調(diào)用MPI庫,以建立通信程序B;進程2和3上的線程3調(diào)用MPI庫,以建立通信程序C。在任何給定的進程,調(diào)用可按任意順序發(fā)生。MPI語義要求所有線程前進,每個庫調(diào)用最終返回。
問題是,在有多組線程(這些線程可能同時在試圖獲得一個可用的ID)的情況下,如何為每個新通信域選擇獨有的環(huán)境ID。在多線程庫中,對諸如環(huán)境IDs列表的全局?jǐn)?shù)據(jù)的訪問必須是串行化的。然而,沒有線程可以在通信階段持有進程標(biāo)識公用環(huán)境ID所需的鎖,因為作業(yè)會死鎖。
因此,概括地說,這里提出一種在其中的多個線程可能同時試圖建立通信程序的多線程計算機環(huán)境中建立跨越多個進程的通信程序的同時避免死鎖的方法。當(dāng)試圖建立通信程序的線程一致同意一個在含有參與線程的各進程中獨一無二的值(環(huán)境ID)時,通信程序被視為被建立。
該方法采用兩個階段。在階段一中,在試圖創(chuàng)建通信程序的線程之間建立一個候選環(huán)境ID(在本文中也稱為候選標(biāo)識符)。在階段二中,每個參與線程檢查候選環(huán)境ID是否能在其進程被要求,如果是,就試圖要求該環(huán)境ID并向其它參與線程報告這個操作的結(jié)果。為了避免死鎖,將各進程的試圖建立通信程序的線程放入每個進程處控制進程中哪個線程有權(quán)要求的優(yōu)先隊列中。在一個例子中,這些線程是根據(jù)線程為新通信程序正在從其調(diào)用的當(dāng)前環(huán)境標(biāo)識符而被優(yōu)先化的。如果在階段二期間任何線程報告失敗,該方法再次以階段一的對新候選環(huán)境ID的選擇開始。
更具體來說,按照本發(fā)明,MPI庫在并行作業(yè)中每個進程處保存一個是標(biāo)量(scalars)的自由環(huán)境IDs的列表(本文中也稱“全局環(huán)境列表)。這個環(huán)境ID列表對該進程是全局的,線程對它的訪問被鎖串行化。當(dāng)某MPI作業(yè)被啟動時,所有參與進程都是單線程的,屬于單一的、被分配例如最小環(huán)境ID的通信域。初始化之后,任何線程集合的每個為創(chuàng)建新通信域而調(diào)用庫的線程在現(xiàn)有域的環(huán)境中這樣做。在本發(fā)明的一個方面中,這個現(xiàn)有域的環(huán)境標(biāo)識符被用來如下文另外說明的、優(yōu)先化新環(huán)境ID的分配。
借助其發(fā)出了新通信域請求的環(huán)境ID被放入一個有序的(“優(yōu)先列表”)中,該列表對進程是全局的,借助鎖被訪問。已經(jīng)借助最小環(huán)境ID作出請求的線程將位于優(yōu)先列表中的首位,因此將是被允許更新該進程處的全局環(huán)境列表的線程。
對最終環(huán)境ID(本文中也稱新環(huán)境ID)要求最少兩輪通信。第一輪通信產(chǎn)生一個候選環(huán)境ID(候選標(biāo)識符),保證所有當(dāng)前域中的進程都在參與該子例程調(diào)用(即,該調(diào)用可能在有些進程上被延遲或阻塞)。當(dāng)知道所有進程都在參與時,每個進程將其當(dāng)前的環(huán)境ID插入其進程的優(yōu)先列表(也稱為優(yōu)先隊列)。在任何給定進程,候選環(huán)境ID可能已經(jīng)在第一輪通信期間鎖被釋放時被另一個線程要求過,所以下一步是檢查是否該候選環(huán)境ID能在所有參與進程處被要求-在這種情況下可以取得合意。如果候選標(biāo)識符仍然是可用的,并且該線程位于優(yōu)先列表中的首位(即具有優(yōu)先權(quán)),該線程就在全局環(huán)境列表中更新(即刪除)該候選標(biāo)識符,這樣來“要求”該候選標(biāo)識符是新標(biāo)識符。如果該線程不是位于優(yōu)先列表中的首位,該線程就釋放鎖,等待條件變量。第二輪通信開始,如果表明候選標(biāo)識符沒能在某個進程處被要求,則任何更新過其進程的全局環(huán)境標(biāo)識符列表的線程都放棄更新(即將以前刪除的候選標(biāo)識符添加回列表中)。如果候選標(biāo)識符被所有進程被要求,則成功的線程就從優(yōu)先列表中刪除它們當(dāng)前的環(huán)境標(biāo)識符并喚醒任何等待的線程。
因為在優(yōu)先列表中沒有最高優(yōu)先權(quán)而等待的線程,在為察看候選標(biāo)識符是否仍然是可用的而檢查全局環(huán)境標(biāo)識符的時刻恢復(fù)處理。由于某參與線程沒能在其相應(yīng)進程要求候選標(biāo)識符而對其沒有達成合意的線程,在第一輪通信繼續(xù),以選擇新候選標(biāo)識符。
圖3A和3B表示按照本發(fā)明的原則在多線程計算機環(huán)境中建立跨越多個進程的通信程序的確定性方法的更詳細的實施例。應(yīng)當(dāng)注意的是,該同一個控制流(圖3A和3B)要在計算域中的所有進程上運行。本地context_list是本地進程可用的自由環(huán)境標(biāo)識符的列表。find_candidate_context(temp_list)函數(shù)的作用是尋找在所有進程上可用的環(huán)境ID。update_results(value)函數(shù)的作用是,如果在所有進程上value為真,就返回TRUE(真),否則返回FALSE(假)。如果有兩個線程同時在試圖獲得新環(huán)境標(biāo)識符,一個線程最后將處于等待狀態(tài)。
參看圖3A,處理接收current_context作為輸入(300),這是為新的通信程序而從其作出調(diào)用的當(dāng)前通信程序的環(huán)境標(biāo)識符。下一步,獲得鎖,new_context_commit被設(shè)定為FALSE,向get_context隊列(即優(yōu)先隊列)添加current_context(310)。
處理然后詢問new_context_commit標(biāo)志是否為TRUE(320),如果是,就釋放鎖并返回作為新候選標(biāo)識符的候選標(biāo)識符,由此建立通信程序并結(jié)束處理(330)。假設(shè)new_context_commit標(biāo)志不是真,則建立一個有效環(huán)境IDs的列表(temp_context_list),釋放鎖,尋找新環(huán)境標(biāo)識符(find-candidate_context(temp_list)),然后重新獲得鎖,將try_to_commit標(biāo)志設(shè)置成TRUE(340)。find-candidate_context(temp_list)是一個子例程,它將尋找在該特定通信程序上的所有進程上有效的新環(huán)境標(biāo)識符。下一步,詢問try_to_commit標(biāo)志是否為TRUE(350)。如果不是,則處理返回去詢問詢問new_context_commit標(biāo)志是否為TRUE(320)。否則就詢問new_context(即候選標(biāo)識符)是否在本地環(huán)境列表(進程的可用環(huán)境列表)中(360)。如果不是,則釋放鎖,update_results(value)例程返回FALSE值,再次獲得鎖并將try_to_commit設(shè)置成FALSE(370)。處理然后如圖所示返回到詢問(350)。
參看圖3B,如果new_context在本地環(huán)境列表中,處理就詢問是否線程在優(yōu)先列表中有優(yōu)先權(quán),即位于get_context隊列的首位(400)。如果不是,則釋放鎖,線程等待環(huán)境條件,然后重新獲得鎖(440)。等待環(huán)境條件(wait on context condition)就是等候來自隊列中較高優(yōu)先權(quán)的線程的信號。然后,處理返回去詢問try_to_commit標(biāo)志是否為TRUE(350,圖3A)。
如果線程在優(yōu)先列表中有優(yōu)先權(quán),則處理更新進程的可用環(huán)境標(biāo)識符列表(即從列表刪除候選標(biāo)識符ID),釋放鎖,向其它參與線程發(fā)送update_results TRUE信號,重新獲得鎖,設(shè)置try_to_commit標(biāo)志為FALSE(410)。下一步,處理詢問是否update_results在所有進程上為真。這個詢問決定了是否所有進程都成功地通過刪除候選環(huán)境標(biāo)識符而更新了它們的本地環(huán)境標(biāo)識符隊列。如果不是,則每個更新過其本地環(huán)境標(biāo)識符隊列的進程必須撤銷對本地環(huán)境列表的改變(430),然后返回去詢問try_to_commit標(biāo)志是否為TRUE(350,圖3A)。假設(shè)所有進程都更新了它們的可用環(huán)境標(biāo)識符列表,則從優(yōu)先列表(即get_context_queue)刪除current_context,發(fā)出環(huán)境條件信號,將new_context_commit標(biāo)志設(shè)置為TRUE(450)。環(huán)境條件的信號發(fā)送喚醒優(yōu)先隊列中的任何等待線程(440)。處理返回去詢問try_to_commit標(biāo)志是否為TRUE(350),然后如上述的那樣繼續(xù)。
作為進一步的解釋,下面提供按照本發(fā)明原則的一個實施例的偽碼。
在這個偽碼中,注意mpi_allreduce(X)是一個庫例程,它對參與調(diào)用的進程提供的X個值的集合執(zhí)行歸約操作(例如求和,按位與),并將結(jié)果分送到該集合中所有進程。這是現(xiàn)有的庫函數(shù),被用來執(zhí)行下述算法的通信階段。
本發(fā)明能被包含在例如具有例如計算機可用媒體的制成品(例如一個或多個計算機產(chǎn)品)中。該媒體中包含例如提供和便于實現(xiàn)本發(fā)明的功能的計算機可讀的程序代碼。制成品可以被作為計算機系統(tǒng)的一部分采用或者單獨出售。
此外,可以提供至少一個可由機器讀取的程序存儲裝置,內(nèi)含至少一個可由機器執(zhí)行的指令程序,以執(zhí)行本發(fā)明的功能。
這里所表示的流程圖是舉例提供的。在不偏離本發(fā)明的精神的情況下可以對這些示意圖或本文所述各步驟(或操作)作改動。例如在某些情況下,可以按不同的順序執(zhí)行各步驟,可以增加、刪除或修改各步驟。所有這些改動都被視為包含后附權(quán)利要求中所述的本發(fā)明的部分。
盡管本文根據(jù)本發(fā)明的某些最佳實施例詳細地說明了本發(fā)明,本領(lǐng)域的熟練人員可以實現(xiàn)對這些實施例的修改和改變。所以,要求由后附的權(quán)利要求來涵蓋不脫離本發(fā)明真正精神和范圍的所有這類修改和改變。
權(quán)利要求
1.一種用于多線程計算機環(huán)境中建立跨越多個進程的通信程序的方法,在該環(huán)境中多個進程可能同時在試圖建立通信程序,該方法包含(1)在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符;(2)在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符作為新標(biāo)識符,由此建立通信程序。
2.按照權(quán)利要求1方法,進一步包含根據(jù)每個參與線程的現(xiàn)有標(biāo)識符將每個參與線程放入它的進程處的優(yōu)先隊列,并在通信(2)期間用優(yōu)先隊列來避免不同的試圖建立通信程序的參與線程的各組的多個線程之間的死鎖。
3.按照權(quán)利要求2的方法,在每個參與線程的檢查進一步包含允許具有最高定義優(yōu)先級的線程在其進程處要求候選標(biāo)識符,具有最高定義優(yōu)先級的線程是從優(yōu)先隊列中確定的。
4.按照權(quán)利要求1的方法,所述通信(2)進一步包含將每個參與線程的檢查的結(jié)果向該組參與線程的其它參與線程報告。
5.按照權(quán)利要求1的方法,所述通信(1)進一步包含為建立通信程序的候選標(biāo)識符而在多個進程的每個進程處檢查本地候選標(biāo)識符列表。
6.按照權(quán)利要求1的系統(tǒng),如果所述通信(2)未能建立通信程序,該方法進一步包含為建立新候選標(biāo)識符而重復(fù)所述通信(1)并為該新候選標(biāo)識符而重復(fù)所述通信(2)。
7.按照權(quán)利要求1的方法,所述通信(1)和所述通信(2)是通過MPI庫內(nèi)的子例程調(diào)用而實現(xiàn)的,候選標(biāo)識符包含候選環(huán)境標(biāo)識符。
8.按照權(quán)利要求1的方法,所述通信(1)保證多個進程的所有進程都在參與建立通信程序;所述通信(2)包含-對于每個參與線程-將該線程的當(dāng)前標(biāo)識符插入對該線程的進程是全局的的優(yōu)先隊列中;所述通信(2)進一步包含允許借助最高優(yōu)先級的當(dāng)前標(biāo)識符提出了通信程序請求的線程被允許要求其候選標(biāo)識符為新標(biāo)識符。
9.按照權(quán)利要求1的方法,所述通信(2)進一步包含,如果參與線程在在其進程中保存的優(yōu)先隊列中有優(yōu)先權(quán)就要求該候選標(biāo)識符,如果如此,就通過從在該進程保存的候選標(biāo)識符的本地標(biāo)識符列表中刪除該候選標(biāo)識符而要求該候選標(biāo)識符為該新標(biāo)識符。
10.按照權(quán)利要求9的方法,當(dāng)在多個進程的某進程處不能要求該候選標(biāo)識符時,所述通信(2)進一步包含撤銷由當(dāng)時的參與線程對其進程的本地標(biāo)識符列表的任何更新。
11.一種用于多線程計算機環(huán)境中建立跨越多個進程的通信程序的系統(tǒng),在該環(huán)境中多個進程可能同時在試圖建立通信程序,該系統(tǒng)包含(1)用于在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符的裝置;(2)用于在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符,作為新標(biāo)識符,由此建立通信程序的裝置。
12.按照權(quán)利要求11系統(tǒng),進一步包含用于根據(jù)每個參與線程的現(xiàn)有標(biāo)識符將每個參與線程放入優(yōu)先隊列的裝置;用于在所述通信(2)期間用優(yōu)先隊列來避免不同的試圖建立通信程序的參與線程的各組的多個線程之間的死鎖的裝置。
13.按照權(quán)利要求12的系統(tǒng),在每個參與線程的檢查進一步包含用于允許具有最高定義優(yōu)先級的線程在其進程處要求候選標(biāo)識符的裝置具有最高定義優(yōu)先級的線程是從優(yōu)先隊列中確定的。
14.按照權(quán)利要求11的系統(tǒng),所述用于通信(2)的裝置進一步包含用于將將每個參與線程的檢查的結(jié)果向該組參與線程的其它參與線程報告的裝置。
15.按照權(quán)利要求11的系統(tǒng),所述用于通信(1)的裝置進一步包含用于為建立通信程序的候選標(biāo)識符而在多個進程的每個進程處檢查本地候選標(biāo)識符列表的裝置。
16.按照權(quán)利要求11的系統(tǒng),如果所述用于通信(2)的裝置未能建立通信程序,該系統(tǒng)進一步包含用于為建立新候選標(biāo)識符而重復(fù)所述通信(1)并為該新候選標(biāo)識符而重復(fù)所述通信(2)的裝置。
17.按照權(quán)利要求11的方法,所述用于通信(1)的裝置和所述用于通信(2)的裝置是通過MPI庫內(nèi)的子例程調(diào)用而實現(xiàn)的,候選標(biāo)識符包含候選環(huán)境標(biāo)識符。
18.按照權(quán)利要求11的系統(tǒng),所述用于通信(1)的裝置保證多個進程的所有進程都在參與建立通信程序;所述用于通信(2)的裝置包含一對于每個參與線程,用于將該線程的當(dāng)前標(biāo)識符插入對該線程的進程是全局的的優(yōu)先隊列中的裝置;所述用于通信(2)的裝置進一步包含用于允許借助最高優(yōu)先級的當(dāng)前標(biāo)識符提出了通信程序請求的線程被允許要求其候選標(biāo)識符為新標(biāo)識符的裝置。
19.按照權(quán)利要求11的系統(tǒng),所述用于通信(2)的裝置進一步包含用于如果參與線程在在其進程中保存的優(yōu)先隊列中有優(yōu)先權(quán)就要求該候選標(biāo)識符,如果如此,就通過從在該進程保存的候選標(biāo)識符的本地標(biāo)識符列表中刪除該候選標(biāo)識符而要求該候選標(biāo)識符為該新標(biāo)識符的裝置。
20.按照權(quán)利要求19的系統(tǒng),當(dāng)在多個進程的某進程處不能要求該候選標(biāo)識符時,所述用于通信(2)的裝置進一步包含用于撤銷由當(dāng)時的參與線程對其進程的本地標(biāo)識符列表的任何更新的裝置。
21.一個多進程、多線程的計算機環(huán)境,包含至少一個適合盡管多個進程可能同時在試圖建立通信程序時也允許建立跨越它的多個進程的通信程序的計算單元,該建立過程沒有死鎖,其中該至少一個計算單元適合(1)在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符;(2)在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符,作為新標(biāo)識符,由此建立通信程序。
22.至少一個由機器可讀的程序存儲設(shè)備,包含至少一個可由機器執(zhí)行的指令程序,用于執(zhí)行一種用于在其中的多個進程可能同時在試圖建立通信程序的多線程計算機環(huán)境中建立跨越多個進程的通信程序的方法,該方法包含(1)在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符;(2)在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符,作為新標(biāo)識符,由此建立通信程序。
23.按照權(quán)利要求22的至少一個程序存儲設(shè)備,進一步包含根據(jù)每個參與線程的現(xiàn)有標(biāo)識符將每個參與線程放入優(yōu)先隊列,并在所述通信(2)期間用優(yōu)先隊列來避免不同的試圖建立通信程序的參與線程的各組的多個線程之間的死鎖。
24.按照權(quán)利要求23的至少一個程序存儲設(shè)備,在每個參與線程的檢查進一步包含允許具有最高定義優(yōu)先級的線程在其進程處要求候選標(biāo)識符,具有最高定義優(yōu)先級的線程是從優(yōu)先隊列中確定的。
25.按照權(quán)利要求22的至少一個程序存儲設(shè)備,所述通信(2)進一步包含將每個參與線程的檢查的結(jié)果向該組參與線程的其它參與線程報告。
26.按照權(quán)利要求22的至少一個程序存儲設(shè)備,所述通信(1)進一步包含為建立通信程序的候選標(biāo)識符而在多個進程的每個進程處檢查本地候選標(biāo)識符列表。
27.按照權(quán)利要求22的至少一個程序存儲設(shè)備,如果所述通信(2)未能建立通信程序,該方法進一步包含為建立新候選標(biāo)識符而重復(fù)所述通信(1)并為該新候選標(biāo)識符而重復(fù)所述通信(2)。
28.按照權(quán)利要求22的至少一個程序存儲設(shè)備,所述通信(1)和所述通信(2)是通過MPI庫內(nèi)的子例程調(diào)用而實現(xiàn)的,并且候選標(biāo)識符包含候選環(huán)境標(biāo)識符。
29.按照權(quán)利要求22的至少一個程序存儲設(shè)備,所述通信(1)保證多個進程的所有進程都在參與建立通信程序;所述通信(2)包含-對于每個參與線程,將該線程的當(dāng)前標(biāo)識符插入對該線程的進程是全局的的優(yōu)先隊列中;所述通信(2)進一步包含允許借助最高優(yōu)先級的當(dāng)前標(biāo)識符提出了通信程序請求的線程被允許要求其候選標(biāo)識符為新標(biāo)識符。
30.按照權(quán)利要求22的至少一個程序存儲設(shè)備,所述通信(2)進一步包含,如果參與線程在在其進程中保存的優(yōu)先隊列中有優(yōu)先權(quán)就要求該候選標(biāo)識符,如果如此,就通過從在該進程保存的候選標(biāo)識符的本地標(biāo)識符列表中刪除該候選標(biāo)識符而要求該候選標(biāo)識符為該新標(biāo)識符。
31.按照權(quán)利要求30的至少一個程序存儲設(shè)備,當(dāng)在多個進程的某進程處不能要求該候選標(biāo)識符時,所述通信(2)進一步包含撤銷由當(dāng)時參與的線程對其進程的本地標(biāo)識符列表的任何更新。
全文摘要
提供一種確定性的、非死鎖技術(shù),用于在多線程計算環(huán)境中取得分布式合意。該技術(shù)包括在多個進程之間通信,以便為分布在多個進程上的一組參與線程的通信程序建立候選標(biāo)識符;在多個進程之間通信,以便在多個線程的每個參與線程處檢查是否能在其進程要求該候選標(biāo)識符,如果能,就要求該候選標(biāo)識符,作為新標(biāo)識符,由此建立通信程序。舉例來說,該技術(shù)可以通過消息傳送接口(MPI)庫內(nèi)的子例程調(diào)用來實現(xiàn)。
文檔編號G06F9/44GK1289962SQ0012868
公開日2001年4月4日 申請日期2000年9月19日 優(yōu)先權(quán)日1999年9月23日
發(fā)明者R·布拉克莫雷, R·R·特雷曼恩, A·B·懷特 申請人:國際商業(yè)機器公司