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