亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于Whippletree模型的GPU動態(tài)任務(wù)分配方法與流程

文檔序號:11133736閱讀:862來源:國知局
一種基于Whippletree模型的GPU動態(tài)任務(wù)分配方法與制造工藝

本發(fā)明涉及一種GPU調(diào)度方法,尤其是涉及一種基于Whippletree模型的GPU動態(tài)任務(wù)分配方法。



背景技術(shù):

隨著信息時代的發(fā)展,計算機(jī)處理器處理的信息量日漸增大,其數(shù)據(jù)處理能力要求越來越高,傳統(tǒng)的微處理器體系結(jié)構(gòu)已經(jīng)逐漸無法有效地適應(yīng)大信息量的高效處理,從傳統(tǒng)的指令級并行發(fā)展到線程級并行,成為提高處理器性能的一個趨勢。

大規(guī)模并行的SIMD(Single Instruction Multiple Data,單指令多數(shù)據(jù)流)計算機(jī)體系結(jié)構(gòu)最近成為眾多研究的熱點(diǎn),GPU作為協(xié)處理器近年來在高性能計算、圖像處理等領(lǐng)域得到廣泛應(yīng)用,然而GPU上的調(diào)度模型對于均衡的作業(yè)有比較理想的性能,卻在動態(tài)作業(yè)調(diào)度的開發(fā)上進(jìn)展有限。調(diào)度在系統(tǒng)設(shè)計上是一個重要的課題。CPU上的調(diào)度模型比較成熟,但GPU的體系架構(gòu)與CPU的體系架構(gòu)在幾個基礎(chǔ)的特性上有所差異,因此,將CPU上的成熟調(diào)度模型直接簡單地移植到GPU上不可行的,主要原因包括分支復(fù)雜和數(shù)據(jù)結(jié)構(gòu)分層等,無法直接使用。

盡管許多研究人員已經(jīng)開始關(guān)注動態(tài)任務(wù)分配,但是數(shù)據(jù)局部性卻未受到足夠的重視,至今沒有針對數(shù)據(jù)的研究來有效地支持不同類型的并行。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種提高GPU利用率的基于Whippletree模型的GPU動態(tài)任務(wù)分配方法。

本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):

一種基于Whippletree模型的GPU動態(tài)任務(wù)分配方法,包括以下步驟:

1)構(gòu)建Whippletree模型,包括數(shù)據(jù)元素單元、代碼單元、任務(wù)單元和代碼集合單元;

2)測試所述Whippletree模型的正確性和性能;

3)以經(jīng)過測試的Whippletree模型進(jìn)行GPU動態(tài)任務(wù)分配。

所述Whippletree模型為面向CUDA層面建立。

所述數(shù)據(jù)元素單元存儲有執(zhí)行過程中要處理的數(shù)據(jù)元素;

所述代碼單元存儲有用于處理所述數(shù)據(jù)元素的代碼,并限定了處理單個所述數(shù)據(jù)元素需要的線程數(shù);

所述任務(wù)單元中存儲有根據(jù)需要處理的數(shù)據(jù)元素與相應(yīng)代碼生成的任務(wù),所述任務(wù)具有不同等級。

所述Whippletree模型執(zhí)行的內(nèi)核函數(shù)由持續(xù)從隊(duì)列中讀取任務(wù)的工作塊構(gòu)成,每一所述代碼分配有一個隊(duì)列。

所述隊(duì)列具有多種類型的入列和出列策略。

對于包含多線程的代碼,所述Whippletree模型在執(zhí)行新的內(nèi)核函數(shù)前進(jìn)行線程的同步。

所述不同等級的任務(wù)使用不同特性的GPU架構(gòu),不同等級的任務(wù)放入不同的隊(duì)列中。

所述步驟2)的測試包括正確性測試和矩陣乘法測試;

所述正確性測試具體為:對不同層次的任務(wù)進(jìn)行測試,根據(jù)GPU上線程的分配結(jié)果測試Whippletree模型的正確性;

所述矩陣乘法測試具體為:通過不同尺寸的矩陣乘法進(jìn)行測試,分析Whippletree模型的性能。

與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):

1)本發(fā)明實(shí)現(xiàn)動態(tài)任務(wù)的GPU調(diào)度,通過對任務(wù)分級,使得并行塊更加稀疏分散,在程序負(fù)載不均衡時仍可以獲得較高的GPU利用效率。

2)本發(fā)明的Whippletree模型通過細(xì)粒度的資源調(diào)度和開發(fā)稀疏分散的并行,根據(jù)任務(wù)和數(shù)據(jù)的切分,將整個程序合理地分配給GPU上的線程,從而提高GPU的利用效率。

3)本發(fā)明通過小的工作塊來進(jìn)行有效的填充,使得處理器單元的負(fù)載連貫。

4)本發(fā)明Whippletree模型支持多指令流多數(shù)據(jù)流(MIMD),任務(wù)可以動態(tài)地創(chuàng)建而且調(diào)度考慮到了數(shù)據(jù)局部性。

5)本發(fā)明可對線程進(jìn)行同步,隊(duì)列在每個點(diǎn)不使用額外的鎖,可以提高隊(duì)列的執(zhí)行效率。

附圖說明

圖1為本發(fā)明的流程示意圖。

具體實(shí)施方式

下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。本實(shí)施例以本發(fā)明技術(shù)方案為前提進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。

如圖1所示,本實(shí)施例提供一種基于Whippletree模型的GPU動態(tài)任務(wù)分配方法,包括以下步驟:

1)構(gòu)建Whippletree模型。Whippletree模型為基于CUDA層面的任務(wù)分配模型。CUDA編程模型將CPU作為主機(jī),GPU作為協(xié)處理器或者設(shè)備。在一個系統(tǒng)中可以存在一個主機(jī)和若干個設(shè)備。CPU、GPU各自擁有相互獨(dú)立的存儲地址空間:主機(jī)端內(nèi)存和設(shè)備端顯存。CUDA對內(nèi)存的操作與一般的C程序基本相同,但是增加了一種新的pinned memory;操作顯存則需要調(diào)用CUDA API存儲器管理函數(shù)。一旦確定了程序中的并行部分,就可以考慮把這部分計算工作交給GPU。運(yùn)行在GPU上的CUDA并行計算函數(shù)稱為內(nèi)核函數(shù)。一個完整的CUDA程序是由一系列的設(shè)備端kernel函數(shù)并行步驟和主機(jī)端的串行處理步驟共同組成的。這些處理步驟會按照程序中相應(yīng)語句的順序依次執(zhí)行,滿足順序一致性。CUDA(Compute Unified Device Architecture),是顯卡廠商N(yùn)VIDIA推出的運(yùn)算平臺。CUDATM是一種由NVIDIA推出的通用并行計算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計算問題。它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計算引擎。開發(fā)人員現(xiàn)在可以使用C語言來為CUDATM架構(gòu)編寫程序,C語言是應(yīng)用最廣泛的一種高級編程語言。所編寫出的程序可以在支持CUDATM的處理器上以超高性能運(yùn)行。

在Whippletree中使用動態(tài)并行策略,即允許代碼直接調(diào)用GPU上的內(nèi)核,以前的動態(tài)并行策略要求跟蹤內(nèi)核的層次,這限制了程序的性能;此外,為了避免阻塞GPU,必須支持線程塊的調(diào)度;最后,數(shù)據(jù)間要通過緩慢的全局內(nèi)存進(jìn)行通信。

建立的Whippletree模型包括數(shù)據(jù)元素單元、代碼單元、任務(wù)單元和代碼集合單元。數(shù)據(jù)元素單元work items存儲有執(zhí)行過程中要處理的數(shù)據(jù)元素;代碼單元procedures存儲有用于處理數(shù)據(jù)元素的代碼,每個procedure聲明其在處理單個數(shù)據(jù)元素所需要的線程數(shù);任務(wù)單元tasks中存儲有根據(jù)需要處理的數(shù)據(jù)元素與相應(yīng)代碼生成的任務(wù),任務(wù)具有不同等級。代碼集合單元programs指的是procedures組成的集合,內(nèi)部的procedure可以相互之間創(chuàng)建任務(wù)。

Whippletree模型根據(jù)數(shù)據(jù)局部性和程序的特點(diǎn)對任務(wù)進(jìn)行分級,不同等級的任務(wù)使用不同特性的GPU架構(gòu),不同等級的任務(wù)放入不同的隊(duì)列中。level-0的任務(wù)可以使用束等級的特性,在同一個SIMD組中執(zhí)行;level-1的任務(wù)可以使用塊等級的特性,在同一個流處理器中執(zhí)行;而level-2的任務(wù)只能使用GPU全局的特性。不同等級的任務(wù)放入不同的隊(duì)列中,再通過GPU的工作塊從隊(duì)列中讀取任務(wù)。

Whippletree模型執(zhí)行的內(nèi)核函數(shù)由持續(xù)從隊(duì)列中讀取任務(wù)的工作塊構(gòu)成,每一代碼分配有一個隊(duì)列。我們?yōu)槊總€procedure分配一個隊(duì)列,使得不同的任務(wù)類型能夠以不同的方式執(zhí)行,在執(zhí)行過程中可以創(chuàng)建任意類型的新任務(wù)。

Whippletree模型的隊(duì)列管理:為適應(yīng)具有不同特性的程序,本發(fā)明通過模板庫為Whippletree模型添加不同類型的入列和出列策略,可以根據(jù)應(yīng)用的特征選擇不同的策略,從而提高模型的適用性。

因?yàn)樵L問全局內(nèi)存的代碼較高,共享內(nèi)存隊(duì)列對于提高程序的性能至關(guān)重要,然而共享內(nèi)存有限,而且可能在任務(wù)執(zhí)行過程中使用,因此共享內(nèi)存隊(duì)列相對較少,在決定工作塊的大小后,可以用剩余的共享內(nèi)存來完成本地的隊(duì)列管理任務(wù)。

Whippletree模型的線程同步:在程序包含多階段的procedure時,我們需要在開始執(zhí)行新的內(nèi)核函數(shù)之前進(jìn)行線程的同步。由于隊(duì)列不支持同時的入列和出列操作,因此隊(duì)列在每個點(diǎn)不使用額外的鎖,可以提高隊(duì)列的執(zhí)行效率。

2)測試Whippletree模型的正確性和性能,具體為:

通過對不同層次的任務(wù)進(jìn)行測試,根據(jù)GPU上線程的分配結(jié)果測試模型的正確性。我們選擇十個level-2任務(wù)和四十個level-0任務(wù)進(jìn)行測試,根據(jù)測試結(jié)果可知每個level-2任務(wù)由單個線程執(zhí)行,而每個level-0任務(wù)由單個線程束執(zhí)行,與Whippletree模型設(shè)計思想相符。

通過不同尺寸的矩陣乘法進(jìn)行測試,比較Whippletree模型與cuda的內(nèi)置函數(shù)(cuda_matmul)的性能并分析結(jié)果。本實(shí)施例分別選擇尺寸為3200,6400,9600的矩陣進(jìn)行測試。

通過不同尺寸的矩陣乘法進(jìn)行測試,比較Whippletree模型與另一個基于動態(tài)作業(yè)調(diào)度的GPU模型的性能并分析結(jié)果。在與cuda內(nèi)置函數(shù)比較后,本實(shí)施例分別選擇尺寸為3200,6400,9600的矩陣進(jìn)行下一步測試。

測試服務(wù)器的主要參數(shù)為:中央處理器Processor E5-2695 v3@2.30GHz,內(nèi)存12GB,GPU Tesla K40,CUDA核心數(shù)目為2880。

結(jié)果顯示,對于不同等級的任務(wù),線程的分配情況與我們預(yù)期一致,證明了Whippletree模型的正確性;通過與cuda的內(nèi)置函數(shù)(cuda_matmul)比較,發(fā)現(xiàn)Whippletree模型的性能要優(yōu)于cuda的內(nèi)置函數(shù),加速比為1.084x;通過與另一個基于動態(tài)作業(yè)調(diào)度的GPU模型比較,發(fā)現(xiàn)Whippletree模型的性能要更優(yōu),加速比為3.743x。這一實(shí)驗(yàn)表明,本發(fā)明方法構(gòu)建的Whippletree模型對于GPU上的作業(yè)調(diào)度有著優(yōu)異的性能和適用性。

3)以經(jīng)過測試的Whippletree模型進(jìn)行GPU動態(tài)任務(wù)分配。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1