一種動態(tài)均衡異構計算系統(tǒng)負載的方法
【專利摘要】本發(fā)明公布了一種動態(tài)均衡異構計算系統(tǒng)負載的方法,目的是解決異構計算系統(tǒng)靜態(tài)負載平衡方法靈活性差、效率低的問題。技術方案是先進行系統(tǒng)初始化及信息配置;然后為主處理器和加速器各創(chuàng)建一個計算負載隊列,并將計算負載隊列初始化;接著構建主處理器和加速器狀態(tài)圖,依據(jù)主處理器和加速器狀態(tài)轉換圖,搜索處理器可工作集,依據(jù)異構計算系統(tǒng)實時運行情況,在各處理器間動態(tài)均衡調度負載,最后進行負載更新。采用本發(fā)明能增強異構系統(tǒng)計算負載均衡的靈活性,提升異構計算系統(tǒng)資源利用率。
【專利說明】一種動態(tài)均衡異構計算系統(tǒng)負載的方法
【技術領域】
[0001] 本發(fā)明涉及負載均衡方法,尤指面向異構計算系統(tǒng)的負載動態(tài)均衡方法。
【背景技術】
[0002] 異構計算系統(tǒng)是由主處理器和加速器兩種不同體系結構處理器搭建的計算機系 統(tǒng)。目前,主流的異構計算系統(tǒng)有CPU+GPU(Graphics Processing Units)和CPU+MIC(Many Integrated Core)組成異構計算系統(tǒng)。
[0003] 由于異構計算系統(tǒng)中主處理器(如CPU)和加速器(GPU、MIC)設計目標的不同,處 理器(主處理器和加速器的統(tǒng)稱)計算能力差異大,異構計算系統(tǒng)運行一段時間后,某些處 理器可能處于超載狀態(tài),而另一些處理器卻處于空閑狀態(tài)。如何有效地避免空閑與忙等待, 可以減少任務的響應時間和提高異構計算系統(tǒng)的資源利用率。
[0004] 隨著異構計算機系統(tǒng)的普及和大規(guī)模異構計算應用領域的不斷拓展,面向異構計 算系統(tǒng)的負載均衡方法主要有以下幾種:
[0005] (1)依據(jù)處理器設計目標,將控制事務交付給主處理器,而計算密集型負載則由加 速器來加速,該方法中各處理器僅需專一于各自擅長的任務,但是該方法很容易造成加速 器和主處理器"空閑"和"忙等待"并存的局面。
[0006] (2)依據(jù)各處理器計算能力,將計算負載分攤給各處理器,計算能力強的加速器應 該分派的計算負載相對較多,主要負責控制事務的處理器計算能力相對較弱,僅需要處理 小部分負載。該方法在一定程度上達到了主處理器和加速器協(xié)同計算的目的并且提高了異 構計算系統(tǒng)的資源利用率。但是,該方法應用的前提是各處理器運行過程中一直處于正常 工作狀態(tài),忽略了處理器中斷等異常情況。一旦運行過程中處理器異常,該負載均衡方法就 失效了。
[0007] 上述兩類面向異構計算系統(tǒng)的負載均衡方法都屬于靜態(tài)負載均衡方法。在一定程 度上,面向具體的大規(guī)模應用加速都可以提高異構計算的執(zhí)行效率。但是靜態(tài)負載均衡方 法效率低、靈活性差,不能夠依據(jù)異構計算系統(tǒng)當前的負載狀態(tài)有針對性地進行負載均衡, 實時決定每個負載的執(zhí)行過程,嚴重影響了異構計算系統(tǒng)的資源利用率。因此,面向異構計 算系統(tǒng)提供一種動態(tài)均衡異構計算系統(tǒng)負載的方法是提高異構計算系統(tǒng)資源利用率的關 鍵技術。
【發(fā)明內容】
[0008] 本發(fā)明要解決的技術問題在于:針對異構計算系統(tǒng)靜態(tài)負載平衡方法靈活性差、 效率低的問題,提出一種動態(tài)均衡異構計算系統(tǒng)負載的方法,以提升異構計算系統(tǒng)資源利 用率和增強異構系統(tǒng)負載均衡的靈活性。
[0009] 為了解決上述技術問題,本發(fā)明的具體技術方案為:
[0010] 第一步、系統(tǒng)初始化及信息配置。具體步驟如下:
[0011] 1. 1采用異構計算系統(tǒng)基礎軟件工具集提供的初始化函數(shù)(如init)完成異構計 算系統(tǒng)初始化;
[0012] 1. 2獲取主處理器和加速器的配置信息,S卩,異構系統(tǒng)中主處理器的個數(shù)P、每個 主處理器擁有的浮點乘累加功能部件的數(shù)目m及主頻f,加速器的個數(shù)p'、每個加速器擁 有的浮點乘累加功能部件的數(shù)目m'及主頻f';
[0013] 1. 3定義主處理器集合P = {pQ, Pi,…Pi,…,pj,其中
【權利要求】
1. 一種動態(tài)均衡異構計算系統(tǒng)負載的方法,其特征在于包括以下步驟: 第一步、系統(tǒng)初始化及信息配置,具體步驟如下: 1. 1采用異構計算系統(tǒng)基礎軟件工具集提供的初始化函數(shù)完成異構計算系統(tǒng)初始化; 1. 2獲取主處理器和加速器的配置信息,S卩,異構系統(tǒng)中主處理器的個數(shù)P、每個主處 理器擁有的浮點乘累加功能部件的數(shù)目m及主頻f,加速器的個數(shù)p'、每個加速器擁有的浮 點乘累加功能部件的數(shù)目m'及主頻f ; 1. 3定義主處理器集合P = {pQ, Pi,…Pi,…,pm},其中Pi (0彡i彡m)表示編號為i的 主處理器; 1. 4定義加速器集合P' = {p' Q, p' i,…p' r,…,p' J,其中p' ^ (0彡i'彡η)表示編號 為i'的加速器; 1. 5計算主處理器的理論計算峰值Rpeak = p*m*f ; 1. 6計算加速器的理論計算峰值R' peak = p' *m' *f' ; 1.7確定負載劃分因子η R peakZKpeak ; 第二步、為主處理器和加速器各創(chuàng)建一個計算負載隊列,計算負載隊列包含頭指針和 由計算負載編號Tid及Next指針組成的結構體,具體方法如下: 2. 1定義負載結構體Task,其中包含負載編號Tid和指向下一個結構體的指針Next兩 個域; 2. 2創(chuàng)建主處理器負載隊列H_Queue ; 2. 3定義指向主處理器負載隊列第一個負載的結構體頭指針HJfead ; 2. 4初始化H_Head為空(NULL),負載編號Tid_H = 0 ; 2. 5創(chuàng)建加速器負載隊列A_Queue ; 2. 6定義指向加速器負載隊列第一個負載的結構體頭指針A_Head ; 2. 7初始化AJfead為空,負載編號Tid_A = 0 ; 第三步、計算負載隊列初始化,具體步驟如下: 3. 1依據(jù)應用程序特征將負載集合T劃分為?\和T2兩個負載子集合,并且滿足如下規(guī) 則:
(1) 其中,compt(Tn)為負載Τη的計算量,il = 1,2 ; 3. 2將?\插入隊列A_Queue的頭部,負載編號Tid_A = Tid_A+l ; 3. 3定義加速器負載隊列當前指針A_Cur, A_Cur = A_Head,加速器隊列當前指針指向加速器隊列頭指針; 3. 4將T2插入隊列H_Queue的頭部,負載編號Tid_H = Tid_H+l ; 3. 5定義主處理器計算負載隊列當前指針H_Cur, H_Cur = HJfead,主處理器計算負載隊列當前指針指向主處理器隊列頭指針; 第四步、構建主處理器和加速器狀態(tài)圖,定義主處理器和加速器有三種狀態(tài):忙即 busy、閑即idle、異常即down,其中busy表示主處理器或加速器處于正常工作狀態(tài),idle表 示主處理器或加速器正常等待工作狀態(tài),down表示主處理器或加速器異常不能正常工作; 具體方法如下: 4. 1定義主處理器和加速器狀態(tài)集合/Λ = 0; 4. 2依據(jù)異構系統(tǒng)特征和應用程序特征決定負載運行閥值△ Γ,閥值應大于應用程序 計算量與異構系統(tǒng)計算峰值的比值; 4. 3任取主處理器Pi e P并且廠,g P.v; 4. 4若主處理器Pi已上電并且Pi無負載正在運行,轉換Pi狀態(tài)為idle,若Pi已上電并 且Pi上有負載正在運行,轉換Pi狀態(tài)為busy,若 Pi無法加電或是無法加載負載或是負載連 續(xù)運行時間超過閥值Λ Γ,轉換Pi狀態(tài)為down ; 4. 5Ps = Ps+ {pj,表示將元素 Pi加入到集合Ps ; 4. 6P = P-{pj,表示將元素 Pi從集合P中刪除; 4. 7若集合P不為空,即尸#0,轉4. 3,否則,轉4. 8 ; 4. 8任取加速器p' 〃 e P'并且/心芒 4. 9若加速器p' i,已加電并且p' i,無負載正在運行,轉換p' i,狀態(tài)為idle,若p' i,已 加電并且P'i,上有負載正在運行,轉換P'i,狀態(tài)為busy,若p\,無法加電或是無法加載負 載或是負載連續(xù)運行時間超過閥值Δ Γ,轉換p' i,狀態(tài)為down ; 4. lOPs = Ps+ {p' r},表示將元素 p' 〃加入到集合Ps ; 4. llPs = Ps-{p' ,表示將元素 p' i,從集合Ps中刪除; 4. 12若集合P'不為空,即PV0,轉4. 8,否則,轉第五步; 第五步、依據(jù)主處理器和加速器狀態(tài)轉換圖,搜索處理器可工作集,具體方法如下: 5. 1定義處理器可工作集= 0 5. 2任取處理器ps e ps ; 5. 3若ps的狀態(tài)為idle ;轉5. 4,否則,轉5. 5 ; 5. 4將該處理器加入處理器可工作集合Pwable,即Pwable = Pwable+{ps}; 5. 5Ps = Ps- {pj ; 5. 6若ft式0,轉5. 2 ;否貝丨J,轉5. 7 ; 5· 7若Pwable不為空,即AvW# 0 ,轉5· 8,否貝丨J,轉第八步; 5. 8定義主處理器可工作狀態(tài)集合Pw = 0 ; 5. 9定義加速器可工作狀態(tài)集合尸冰=0 ; 5. 10 任取處理器 pwable e Pwable ; 5· 11 若 pwable e P,將 pwable 加入集合 PW,PW = PW+ {pwable},否則,將 pwable 加入集合 P' w, P' w = P' w+ {pwable}; 5. 12Pwable = Pwable-{pwable},表示將處理器 pwable 從集合 Pwable 中刪除; 5. 13若Pwable不為空,即iVaWe式0,轉5. 10,否貝丨J,轉第六步; 第六步、依據(jù)異構計算系統(tǒng)實時運行情況,在各處理器間動態(tài)均衡調度負載,具體方法 如下: 6. 1若加速器可工作集不為空,BP,P'w#0,轉6. 2,否則,轉6. 12 ; 6. 2若A_cur關NULL,轉6. 3,處理加速器隊列A_Queue,否則,轉6. 7,處理主處理器隊 列 H_Queue ; 6. 3將加速器隊列當前負載,即加速器隊列當前指針A_cur指向的負載分派給加速器 p' i,(p,r e p' w); 6. 4加速器隊列當前指針向后移動指向下一個負載,即,A_Cur = A_Cur- > Next ; 6. 5P' w = P' w-{p' ,表示將加速器p' 〃從集合P' w中刪除; 6. 6若A_cur關NULL,轉6. 1,否貝lj,轉6. 7,處理主處理器隊列H_Queue ; 6. 7若H_cur關NULL,轉6. 8,否則,轉第七步,負載更新; 6. 8將主處理器隊列當前負載,即主處理器隊列當前指針H_CUr指向的負載分派給加 速器 P' i,(P,i,e p' W); 6. 9H_Cur = H_Cur- > Next,主處理器隊列當前指針后移指向下一個負載; 6. 10P' w = P' w-{p' r}; 6. 11若H_cur尹NULL,轉6. 1,否則,轉第七步進行負載更新; 6. 12若主處理器可工作集不為空,Pw# 0,轉6. 13,否則,轉第四步,搜索處理器可工 作集; 6. 13若H_cur關NULL,轉6. 14,處理主處理器隊列H_Queue,否貝丨』,轉6. 18處理加速器 隊列 A_Queue ; 6. 14將主處理器隊列當前負載,即主處理器隊列當前指針H_CUr指向的負載分派給主 處理器 Pi (Pi e Pw); 6. 15H_Cur = H_Cur- > Next,加速器隊列當前指針后移指向下一個負載; 6. 16Pw = Pw-{pi}; 6. 17gH_cur關NULL,轉6. 12,否則,轉6. 18,處理加速器隊; 6. 18將加速器隊列當前負載,S卩加速器隊列當前指針A_cur指向的負載分派給主處理 器 Pi(Pi e pw); 6. 19A_Cur = A_Cur- > Next ; 6. 20Pw = Pw- {pj ; 6. 21 gA_cur關NULL,轉6. 12,否則,轉第七步; 第七步、負載更新: 7. 1依據(jù)應用程序特征將待加入的負載集合Τ'劃分為Τ'i和Τ'2兩個計算負載子集合, 并且滿足如下規(guī)則:
(2) 其中,compt (Τ' t)為計算負載Τ' t的計算量,It = 1,2}; 7. 2將Τ' i插入隊列A_Queue的頭部,負載編號Tid_A = Tid_A+l ; 7. 3A_Cur = A_Head,加速器隊列當前指針指向加速器隊列頭指針; 7. 4將1%插入隊列H_Queue的頭部,負載編號Tid_H = Tid_H+l ; 7. 5H_Cur = HJfead,主處理器計算負載隊列當前指針指向主處理器隊列頭指針; 7. 6 gH_Cur = NULL并且A_Cur = NULL,轉第八步,否貝U,轉第四步; 第八步、結束。
【文檔編號】G06F9/50GK104298564SQ201410544782
【公開日】2015年1月21日 申請日期:2014年10月15日 優(yōu)先權日:2014年10月15日
【發(fā)明者】甘新標, 劉杰, 遲利華, 晏益慧, 徐涵, 胡慶豐, 蔣杰, 李勝國, 蘇博, 周懷哲, 王慶林, 皇甫永碩, 崔顯濤, 周陳 申請人:中國人民解放軍國防科學技術大學