概述:在本文中,我們在一個異構的計算機集羣中使用一種基於重複任務調度方法。基於重複調度方法是爲了減少有相關聯的任務之間的通信操作,在這裏關鍵任務被多次分配到多臺機器上,而隨後的任務的開始時間也會減少。這種任務重複的過程也會不均勻地被各個系統所處理,那些關鍵的任務會被分配或者複製到運行得更快的機器中。這個算法已經應用到我們的原型程序並行化工具中,這個工具是爲了生成可在一個奔騰計算機集羣上運行的MPI代碼。我們的實驗使用3種數值計算應用表明異構的計算機集羣正成爲一個不可避免的趨勢,也說明其確實有利於對並行程序的執行優化。
關鍵字:調度,任務圖,算法,並行處理,異構系統,計算機集羣計算,任務重複,資源管理。
1、介紹
近年來,我們看到越來越多使用高速網絡連接的計算機解決許多計算密集型問題的並行應用程序。使用計算機集羣的並行處理,通常也稱爲集羣計算,能夠使一個比以往任何時候更大的用戶社區在一個現成的平臺有效地解決許多困難的優化問題。然而,實現有效的目標集羣計算的任務需要處理大量的資源管理問題,其中一個最重要的問題就是任務的調度。事實上,有效地利用這種異構集羣的聚合計算能力,關鍵在於如何明智地在機器上分配任務和制定任務序列。從廣義上講,調度問題中存在兩種形式:動態和靜態。在動態調度中,在任務的執行之前只能對並行任務進行一些假設,因此,必須使動態調度決策。一個這樣動態調度算法的目標不僅包括最小化項目的完成時間,而且包括最小化調度開銷,這也是調度程序運行成本計算中的很大一部分。在集羣計算機環境中,這樣的動態調度算法通常採用的所謂“空閒週期竊取”的方法,它試圖動態地把工作負載均勻地分散到所有的機器上。然而,當調度的目標是儘量減少並行應用程序的執行時間,這樣的動態調度策略不合適。
另一方面, 使用靜態調度算法的方法,它可以使用更長時間來生成一個優化的離線調度策略。這對許多科學應用尤其有效,比如自適應性模擬n體問題、使用迭代的對象識別圖像處理算法,和其他一些數值應用等,因爲這樣的應用程序可以在編譯時就可以確定其特徵。因此並行程序可以用一個有向無環圖來表示,任務的節點權重代表任務處理時間和邊的權值表示數據依賴關係以及任務之間的通信時間。一般來說靜態調度問題是非完全多項式和可以在許多啓發式並行機器調度相關的文獻中找到。然而,集羣的任務的調度問題是一個相對較少探討的話題。具體來說, 在集羣計算的調度問題中有兩個困難的研究問題需要解決:
1) 通信開銷:
相對於機器的處理能力來說,計算機網絡的通信開銷仍然是非常不可忽視的。因此,爲了避免過度的並行通信開銷,任務通信的數量應該儘可能小。
2) 異構性:
在不斷進行升級的計算機集羣中,硬件配置差異性是不可避免的。這些差異性對一些高度常規的應用程序(例如,一些數據並行問題)可能是一個潛在的問題。
在這項研究中,我們將任務複製的方法應用到集羣任務調度。在基於複製任務的調度中,爲了減少有關聯的任務之間的通信操作,關鍵任務會被分配到多個機器中,這接下來的任務的開始時間也減少了。這裏可以在很多文獻中找到任務複製的方法。然而,這些方法都爲了設計均勻的並行體系結構。此外,前人的方法的評估方式都是使用模擬而不是真實並行編譯器的應用程序。在我們的方法中,複製過程是通過跟蹤任務的異構系統給出的關鍵路徑圖來將任務分配或者複製到更快的機器中。任務重複對異構系統來說確實是尤其有效,因爲應用程序的整體完成時間通常可以由一個子集任務決定( 即關鍵路徑,在第二節中詳細討論),這放到更快的機器上執行。我們的原型程序並行化工具中實現了該基於複製的調度的算法,這個工具產生的MPI代碼可以在奔騰計算機上執行。我們的測試系統示意圖見圖1。在通過快速以太網交換機連接奔騰II計算機異構集羣中,我們使用幾個實際應用證明了複製技術是可以非常有效的減少應用程序的完成時間。本文的其餘部分組織如下。在下一節中,我們將詳細描述模型使用和複製算法的設計思路。第三節包括我們的性能研究的結果。最後一節總結了全文。
2、 異構計算機集羣的調度
在本節中,我們首先描述調度模型,然後討論了重複技術在我們的並行代碼生成器的調度模塊中的使用。
2.1 模型
並行程序是由n任務{
爲了對有
消息
任務
2.2 基於重複調度的並行代碼生成
CASCH(計算機輔助調度)工具是以複製調度爲核心模塊的。CASCH工具的系統結構如圖3所示。它使用一個調度算法來執行調度,將一個順序的程序生成一個任務圖,然後通過該任務圖按照預定形式生成能夠在集羣的工作站工作的並行代碼。通過時序數據庫,我們可以對任務和消息進行時序分配,而時序數據庫可以通過分析基本操作得到。一旦生成任務圖,則可以調用基於重複的調度程序。
爲了最小化集羣的應用程序的整體執行時間,調度程序必須首先確定哪些任務是更重要的,因爲它們需要被安排在較早的時段開始,這也可能會對他們的祖先進行復制。在任務圖中,關鍵路徑CP指包含任務的最長路徑,這是一個重要的結構,因爲它可能會決定的整體執行時間。爲了判斷一個任務是否在關鍵路徑之中,我們引入兩個值:
算法1:構造調度列表
輸入:一個擁有N個任務{T1,T2,……,TN}
的程序的任務圖
輸出:一系列任務的順序
1、採用深度優先搜索計算出所有任務的t−level 和b−level ;
2、確定CP;如果有多個CPs,隨機地選擇執行時間最長的一條,然後隨機斷開CP;
3、將沒有前驅任務的CP任務放到的有序表的開始位置;
4、i←2;Tx←下一個CP任務 ;
5、while 沒有將所有的CP任務包含到有序表中do
6 、ifTx 的所有前驅任務都在有序表中then
7、將Tx 放到第i個位置,然後i自增1
8、else 讓Ty d成爲Tx 的前驅任務,這裏的Tx 包必須不在順序列表中且有着最大的b−level 。
9、如果Ty 的所有前驅都在有序列表中,那麼把Ty 放到有序表中的第i位置,然後讓i增1;否則遞歸地將Ty 的所有的前驅任務放到有序表中,這樣擁有最大的b−level 的前驅任務就會被優先加進去了。
10、重複上面的操作直到Tx 的前驅任務都加入到了有序表中。
11、將Tx 放入到有序表中的i位置,將i自增1。
12、Tx ← 下一個CP任務。
13、依據b−level 遞減的順序將所有的OB任務加入到有序表中。
使用上面的調度列表,我們就可以確定哪些任務在複製過程中必須優先考慮。在調度過程中,CP任務總是被優先考慮的。然而,除非不依賴CP任務的前驅任務都已經被調度,否則我們無法安排所有的CP任務。所以,我們需要使用遞歸方法。對於每一個CP任務,我們首先遞歸檢查它的前驅是否被安排。如果不是,那麼調度候選隊列將被調整成在調度列表前面的未調度的前驅任務。實際上安排一個任務,我們儘量將它安排到最快的機器以減少它的完成時間。重複是爲了能夠最小化完成時間,因爲一個任務需要儘可能多的前驅任務被插到它之前。當任務的完成時間開始增加或者增加的時間已經用完時,複製過程就會停止。其中選擇複製的前驅任務的順序由調度列表來管理。而異構因子
算法2:異構複製調度
輸入:n任務的程序任務{T1,T2,……Tn} ,m機器的異構系統{P1,P2,……Pm} ,和機器的相對速度。
輸出:一個重複的調度列表。
1.構建調度表(使用算法1)
2.對於每個CP任務,首先遞歸地分配它的所有未調度的前驅BI任務到一臺機器上,因而它們能夠通過同時複製更多前驅任務到多個機器上以加快完成(使用異構因子hix 來確定完成時間)。複製任務的順序由調度列表來管理;最後應用同樣的遞歸過程到CP任務本身。
3.將餘下任務(例如OB任務)不使用任何重複直接安排到最快的機器上以保證該調度列表的長度不增加;如果失敗,就使用遞歸複製技術來安排OB任務。
關於如何利用機器的異構性,可以看圖4中的高斯消去法任務圖中的兩個調度過程時間表(之前圖1也展示過了)。在異構機器上,左邊的圖是沒用用到複製技術的最好調度方式。而右邊的圖中使用了6臺異構機器,其中
在調度的特徵生成之後,代碼生成器就可以使用SPMD(Single Program Multimple Data)模型來實施調度過程了。將構成任務的程序語句或程序分配給指定的機器執行,通過機器的ID來檢測執行狀態,如圖5所示。與此同時,與該任務相關聯的數據結構也被複制。代碼生成器的輸出是一個插入MPI通信原語的C程序。然後由此產生的並行程序代碼會在集羣上的工作站被編譯和執行。