本發(fā)明涉及異構(gòu)系統(tǒng)低功耗領(lǐng)域,尤其涉及一種基于AOV網(wǎng)關(guān)鍵路徑查詢的異構(gòu)系統(tǒng)動態(tài)功耗優(yōu)化方法。
背景技術(shù):
同行業(yè)已有一些降低異構(gòu)系統(tǒng)動態(tài)功耗的方法,現(xiàn)有的GPU低功耗優(yōu)化多是針對單個GPU任務的功耗問題,很少有工作針對CPU-GPU異構(gòu)系統(tǒng)特點研究整個應用程序的功耗優(yōu)化。然而在應用程序中存在多個不同類型任務,同時在CUDA編程環(huán)境中,主機CPU在調(diào)用cudaThreadSynchronize()后就處于空閑狀態(tài),這實際上是對計算資源的浪費,雖然GPU的計算能力非常強大,但處理大規(guī)模數(shù)據(jù)集時也是很耗時的,可以將一部分計算任務分配給處于空閑狀態(tài)的CPU來處理,讓CPU與GPU并行工作,勢必會減少內(nèi)核函數(shù)的執(zhí)行時間,進而減少整個程序的執(zhí)行時間。因此對于一個給定的任務(沒有依賴關(guān)系的循環(huán)迭代),如何在CPU和GPU之間進行任務劃分,使得異構(gòu)系統(tǒng)在滿足性能(能量)約束的條件下,取得能量(性能)最優(yōu)是我們設計的新技術(shù)方案的設計初衷。
技術(shù)實現(xiàn)要素:
為克服現(xiàn)有技術(shù)的不足,在程序中尋找一組非關(guān)鍵任務(在程序運行過程匯總不影響整個程序執(zhí)行時間的任務)并確定相應CPU或GPU頻率調(diào)節(jié)系數(shù),使得程序在CPU-GPU異構(gòu)系統(tǒng)中運行時執(zhí)行時間保持不變且能耗最優(yōu),本發(fā)明提出一種基于AOV網(wǎng)關(guān)鍵路徑查詢的異構(gòu)系統(tǒng)動態(tài)功耗優(yōu)化方法。
本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
一種基于AOV網(wǎng)關(guān)鍵路徑查詢的異構(gòu)系統(tǒng)動態(tài)功耗優(yōu)化方法,包括步驟
S1:從程序中分離出不同類型的任務,將單GPU任務再進行劃分至CPU和GPU上同時執(zhí)行,同時運行的過程描述為任務之間的依賴關(guān)系,構(gòu)造程序運行過程的AOV網(wǎng)絡;
S2:對運行過程的AOV網(wǎng)絡進行分析,確定關(guān)鍵路徑,將非關(guān)鍵路徑上的CPU和GPU任務進行頻率調(diào)節(jié)以節(jié)省功耗;
S3:根據(jù)關(guān)鍵任務執(zhí)行的時間確定非關(guān)鍵任務可以放松的執(zhí)行時間范圍,從而求解每個任務處理器頻率調(diào)節(jié)幅度以最小化功耗的消耗。
進一步地,步驟S1中所述不同類型的任務包括CPU計算任務、通信任務和GPU計算任務。
本發(fā)明的有益效果在于,與現(xiàn)有技術(shù)相比,本發(fā)明無需中心節(jié)點,針對用戶任務需求,通過分布式搜索并綜合考慮服務節(jié)點可用能源與網(wǎng)絡通信延遲等問題,提高了服務組合尋優(yōu)搜索效率,并得到能滿足應用服務質(zhì)量需求的最佳節(jié)點組合。
附圖說明
圖1是本發(fā)明一種基于AOV網(wǎng)關(guān)鍵路徑查詢的異構(gòu)系統(tǒng)動態(tài)功耗優(yōu)化方法;
圖2是本發(fā)明一種基于AOV網(wǎng)關(guān)鍵路徑查詢的異構(gòu)系統(tǒng)動態(tài)功耗優(yōu)化方法的一個實施例的典型CUDA程序示意圖;
圖3是圖2的程序任務依賴圖;
圖4是圖3的程序AOV示意圖;
圖5a-圖5f是圖4的案例分析圖;
圖6是圖2中的各任務的EST和LST圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參見圖1,本發(fā)明一種基于AOV網(wǎng)關(guān)鍵路徑查詢的異構(gòu)系統(tǒng)動態(tài)功耗優(yōu)化方法,包括步驟
S1:從程序中分離出不同類型的任務,將單GPU任務再進行劃分至CPU和GPU上同時執(zhí)行,同時運行的過程描述為任務之間的依賴關(guān)系,構(gòu)造程序運行過程的AOV網(wǎng)絡;
S2:對運行過程的AOV網(wǎng)絡進行分析,確定關(guān)鍵路徑,將非關(guān)鍵路徑上的CPU和GPU任務進行頻率調(diào)節(jié)以節(jié)省功耗;
S3:根據(jù)關(guān)鍵任務執(zhí)行的時間確定非關(guān)鍵任務可以放松的執(zhí)行時間范圍,從而求解每個任務處理器頻率調(diào)節(jié)幅度以最小化功耗的消耗。
進一步地,步驟S1中所述不同類型的任務包括CPU計算任務、通信任務和GPU計算任務。
一個典型的CUDA程序如圖2所示,假設此時將單個GPU任務劃分為2個子任務。Block1,block2,block4表示和GPU任務不相關(guān)的CPU任務,將單個GPU任務劃分為N個子任務,每個子任務對應一個子Kernel函數(shù),每個子kernel函數(shù)結(jié)束時需要通過主機調(diào)用cudaThreadSynchronize()進行同步,block3_1-block3_N表示將每個子任務分一部分任務交由CPU處理。具體做法是:
步驟1:分析程序中的任務依賴關(guān)系建立程序任務依賴圖。為了簡化問題并不失一般性,假定單個GPU任務劃分為2個子任務,每個子任務又進行CPU與GPU的任務劃分,其程序任務依賴圖G=(V,E)(V表示任務依賴圖中節(jié)點,E表示任務依賴關(guān)系)如圖3所示。圖中C代表CPU計算任務,T代表數(shù)據(jù)在CPU與GPU之間進行傳輸,G代表GPU計算任務。
步驟2:構(gòu)造AOV網(wǎng)絡圖。并發(fā)執(zhí)行的任務之間存在資源沖突,遵循仲裁機制:假定若某一時刻任務流中同時存在多個滿足先后依賴關(guān)系但存在資源沖突的任務,則優(yōu)先選擇任務流編號較小的任務執(zhí)行。建立資源沖突任務之間的依賴關(guān)系。例如圖3中,當CPU任務C1執(zhí)行完成后,滿足任務依賴關(guān)系的任務包括T1,C2和T2。其中T1和T2同屬于通信任務,因此存在資源沖突不能同時執(zhí)行,根據(jù)仲裁機制優(yōu)先執(zhí)行T1,因此應在原圖的基礎(chǔ)上增加T1與T2之間的任務依賴關(guān)系。程序依賴任務圖擴展為圖4。
步驟3:確定程序中各任務的最早開始時間與最遲開始時間。用EST(Mi)表示任務Mi最早開始時間函數(shù),LST(Mi)表示任務Mi最晚開始時間函數(shù),<vj,vi>則表示節(jié)點j要先于節(jié)點i執(zhí)行。
最早開始時間:
最遲開始時間:
因此任務Mi最早與最晚開始執(zhí)行時間EST(Mi)和LST(Mi)可以根據(jù)公式(1)和(2)遞推得出。
步驟4:判斷關(guān)鍵路徑。如果任務的最早可能開始時間等于其最晚允許開始時間,則可以判斷該任務位于AOV網(wǎng)的關(guān)鍵路徑上,其運行時間直接影響整個程序的運行時間,不能進行放松。反之如果任務的最早可能開始時間小于其最晚允許開始時間,則判斷該任務位于AOV網(wǎng)的非關(guān)鍵路徑上,可以對該任務進行頻率調(diào)節(jié),適當增加運行時間,降低系統(tǒng)動態(tài)能耗。
步驟5:將動態(tài)能耗最優(yōu)問題轉(zhuǎn)變?yōu)镹元極值問題進行求解。針對非關(guān)鍵節(jié)點集合Pi,我們構(gòu)造一個AOV子網(wǎng)假定AOV子網(wǎng)中有N個非關(guān)鍵的CPU和GPU任務節(jié)點,記為其處理器和存儲器初始頻率為1≤j≤N,進行頻率調(diào)節(jié)后它們的頻率分別變?yōu)榇藭r各任務的計算時間變?yōu)樵L存時間變?yōu)槠渌蝿盏臅r間不變。我們可以根據(jù)公式(15)計算出調(diào)節(jié)后的最早可能開始時間,記為
當時,在一定范圍內(nèi)增大計算操作時間(T′comp),降低處理器運行頻率,系統(tǒng)動態(tài)能耗歸結(jié)為N元極值問題:
當時,在一定范圍內(nèi)增大存儲操作時間(T′mem),降低存儲器訪存頻率,系統(tǒng)動態(tài)能耗歸結(jié)為N元極值問題:
圖5a-圖5f給出了實施例程序的分析過程。其中圖5a為原始算法流程,共包括6個步驟:首先是對a,b兩個數(shù)組的初始化,然后調(diào)用過程f1和f2分別對a和b進行處理,得到數(shù)組c和d。第4行表示函數(shù)f3由一個標量α計算出一個數(shù)組e;第5行則表示函數(shù)f4由a,b兩個數(shù)組計算出標量結(jié)果β;最后一行表示函數(shù)f5由β,c,d和e計算出數(shù)組g。圖5b給出了上述算法的一個CUDA實現(xiàn),假設f1,f2,f3和f5函數(shù)可以被并行化,因此使用Kernel函數(shù)實現(xiàn),分別對應于Kernel1-Kernel4;f4函數(shù)不能被并行化,因此仍由CPU完成。Kernel1和Kernel2執(zhí)行之前需要調(diào)用cudaMemcpy將輸入數(shù)組a和b載入GPU存儲器,Kernel4執(zhí)行結(jié)束后需將數(shù)組g回存至CPU存儲器,為了開發(fā)Kernel計算和通信的并行性,隱藏通信開銷,CUDA實現(xiàn)中將Kernel1、Kernel2、Kernel3及其對應的通信操作設定為異步模式,而Kernel4使用到了前3個Kernel函數(shù)的輸出,因此調(diào)用Kernel4之前先進行全局的任務流同步操作。圖5c給出了構(gòu)造的任務依賴圖,假定各個任務的執(zhí)行時間如圖5d所列,加入了T1到T2,G3到G1和G1到G2的資源依賴邊,生成的AOV網(wǎng)絡如圖5e所示。此時利用公式(1)和(2)可以推算出各個節(jié)點的最早可能開始和最遲允許開始時間如圖6所示??梢钥闯觯蝿誄1,T1,T2,G2,S1,G4,T3的最早可能開始時間和最晚允許開始時間相等,他們構(gòu)成AOV網(wǎng)的關(guān)鍵路徑,如圖5f中的陰影結(jié)點所示。因此系統(tǒng)中可以進行頻率調(diào)節(jié)的非關(guān)鍵任務包括G1,G3和C2。這3個任務可以劃分為互不可達的兩組,如圖5f中的虛線框所示,可以獨立進行功耗調(diào)節(jié)。C2的情況比較簡單,它的最早可能和最晚允許開始時間分別為1和13,因此根據(jù)公式(3-4)給出的先定條件,C2調(diào)節(jié)CPU的頻率只要不影響S1的最早可能開始時間即可。根據(jù)公式(1)可知C2執(zhí)行時間可以延長為16,因此執(zhí)行任務C2時,CPU的頻率最低可降至原來的1/4,C2的能量消耗降為原來的1/16。對于G1和G3,同理可知對GPU的頻率調(diào)節(jié)不能影響S1的最早可能開始時間。由于G1和G3的初始運行時間都是2,不放假設它們在初始頻率下消耗的能量都為E,調(diào)節(jié)后運行時間變?yōu)楹透鶕?jù)公式(1),G1和G3任務能量最優(yōu)的運行時間可表示為
其中,
求解上式可得,時,兩者總能量消耗最小為8/9E。
以上所述是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍。