欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

GPU任務(wù)調(diào)度方法及系統(tǒng)與流程

文檔序號:11406932閱讀:3128來源:國知局
GPU任務(wù)調(diào)度方法及系統(tǒng)與流程

本發(fā)明涉及處理器技術(shù)領(lǐng)域,特別是涉及gpu技術(shù)領(lǐng)域,具體為一種gpu任務(wù)調(diào)度方法及系統(tǒng)。



背景技術(shù):

隨著互聯(lián)網(wǎng)用戶的快速增長,數(shù)據(jù)量的急劇膨脹,數(shù)據(jù)中心對計算的需求也在迅猛上漲。諸如深度學習在線預(yù)測、視頻轉(zhuǎn)碼以及圖片壓縮解壓縮等各類新型應(yīng)用的出現(xiàn)對計算的需求已遠遠超出了傳統(tǒng)cpu處理器的能力所及。gpu等有別于cpu的新型處理器的出現(xiàn)為數(shù)據(jù)中心帶來了巨大的體系結(jié)構(gòu)變革。

傳統(tǒng)的高性能計算集群通過mpi等方式作為主要通信方式,利用隊列系統(tǒng)讓每個任務(wù)獨占式地享用集群中的資源。相對于高性能計算集群中的獨占式訪問,數(shù)據(jù)中心需要同時為多個用戶提供服務(wù)。因此為了提高數(shù)據(jù)中心的利用率,用戶往往需要共享數(shù)據(jù)中心中的計算資源。另外,在實際環(huán)境中,不同的用戶會有不同的應(yīng)用請求服務(wù),且不同的服務(wù)請求到達的時間也各不相同,在此情況下,如何有效地解決資源的競爭和共享成為了提高數(shù)據(jù)中心資源的利用率的關(guān)鍵。動態(tài)任務(wù)調(diào)度就是最常見的共享計算資源的解決方案。

對于多任務(wù)共享cpu以及cpu的任務(wù)調(diào)度,研究人員已經(jīng)進行了大量的研究。而對于gpu,由于其產(chǎn)生之初便是為了高性能計算的獨占式服務(wù)而設(shè)計的,因此其原本的硬件架構(gòu)并不支持多任務(wù)共享gpu。gpukernel是一段在gpu上執(zhí)行的代碼。當調(diào)用gpu計算時,需要從cpu端將kernel和對應(yīng)的輸入?yún)?shù)傳遞到gpu上。kernel可以并發(fā)執(zhí)行,目前,用戶可通過定義可并行的kernelstream來實現(xiàn)kernel的并發(fā)執(zhí)行。stream可理解為一堆異步的操作,同一stream中的操作有嚴格的執(zhí)行順序,而不同stream之間則沒有該限制。利用不同stream異步執(zhí)行的特性,就可以通過協(xié)調(diào)不同stream來提高資源的利用率。從軟件角度來看,不同stream中的不同操作可以并行執(zhí)行,但在硬件角度卻不一定如此。kernel并行的程度依賴于pcie接口的帶寬以及kernel在每個streamingmultiprocessor(sm)中可獲得的資源,在資源不足的情況下,stream仍然需要等待其他的stream完成執(zhí)行才能開始執(zhí)行。因此,多任務(wù)共享gpu需要打破現(xiàn)有g(shù)pu硬件框架的限制。意識到該問題,學術(shù)界和工業(yè)界均開始重視起gpu的硬件級共享以及搶占支持。

cpu上的搶占式多任務(wù)是通過上下文切換實現(xiàn)的,上下文切換引入的額外的延遲和吞吐量損失對于cpu來說是完全可以接收的。而對于gpu來說,由于gpu架構(gòu)以及相關(guān)特性與cpu存在較大的差異,在gpu上實現(xiàn)搶占式多任務(wù)將會引入相對cpu上大得多的額外開銷。僅對于一個sm來說,上下文切換可能會涉及到近256kb大小的寄存器以及48kb的共享內(nèi)存的內(nèi)容切換。而目前gpu的性能在很大程度上受到內(nèi)存帶寬的限制,由于內(nèi)存請求引入的延遲過大,即使gpu的多線程計算能力也無法完全掩蓋內(nèi)存延遲所帶來的影響。考慮到內(nèi)存請求對gpu性能的整體影響,在設(shè)計調(diào)度算法時也不能忽視調(diào)度算法所引起的額外的內(nèi)存請求。

現(xiàn)有技術(shù)中,一種方式是chimera通過將不同的sm劃分給不同的kernel實現(xiàn)多kernel共享一個gpu。另外,chimera針對不同的應(yīng)用場景提出了以下三種不同的搶占策略:

1.contextswitching:即通過把一個sm上的正在運行的threadblock(tb)的上下文保存到內(nèi)存里,并發(fā)射一個新的kernel來搶占當前sm。

2.draining:暫停發(fā)射新的kernel,直到一個正在運行的kernel的所有tb運行結(jié)束。

3.flushing:對于具有“冪等性”(idempotent)kernel,即使強制結(jié)束當前正在運行的tb,重新啟動后也不會對kernel最后的結(jié)果產(chǎn)生影響,因此在上下文切換時可直接將其tb強行中止,且不需要保存任何上下文信息。

三種策略各有優(yōu)劣,其中contextswitching所引入的額外開銷對于延遲和吞吐量的影響居于另外兩個策略之間;draining對吞吐量的影響最小,但對延遲的影響最大;flushing對延遲幾乎沒有影響,但若是搶占發(fā)生在tb即將運行結(jié)束時,則會對吞吐量造成很大的影響。

當有一個新的kernel到達時,chimera會根據(jù)三種策略所引入的開銷以及當前正在運行的kernel的狀態(tài),選擇將被搶占的sm,以及其上運行的tb被搶占的方式,從而達到以一個較小的開銷實現(xiàn)搶占的效果。

chimera中采取的三種策略均存在比較嚴重的缺點,如果是通過內(nèi)存進行切換,就會產(chǎn)生大量的內(nèi)存訪問,對性能產(chǎn)生影響。如果等待tb結(jié)束,則會導致不可預(yù)期的搶占延遲。而“冪等性”則對kernel本身有比較大的要求。

這三種策略的綜合結(jié)果是能夠在搶占發(fā)生時,如何根據(jù)當前運行環(huán)境的狀態(tài),盡量減少搶占過程所引入的開銷,而對于任務(wù)動態(tài)到達的場景,chimera沒有提出相對應(yīng)的調(diào)度策略,無法實現(xiàn)全局的吞吐量優(yōu)化。

現(xiàn)有技術(shù)中,還有一種方式是simultaneousmultikernel通過在每個sm增加搶占機制,實現(xiàn)部分上下文切換(partialcontextswitching)從而能夠?qū)φ谶\行的kernel進行部分資源的搶占,使得多個kernel可以共享一個sm的資源。對于多個kernel之間的資源分配,該研究采取的是主導資源公平算法(drf),drf是一種通用的多資源的max-minfairness分配策略。drf的主題思想是在多用戶環(huán)境下一個用戶的資源分配應(yīng)該由用戶的主導份額的資源決定,主導份額的資源指的是在所有已經(jīng)分配給用戶的多種資源中,占據(jù)最大份額的一種資源。在gpu中總共有四種資源:寄存器、共享內(nèi)存、線程以及tb。

simultaneousmultikernel提供了讓不同kernel共享gpu的硬件機制,但沒有對共享gpu的kernel進行進一步限制。在數(shù)據(jù)中心的應(yīng)用場景下,simultaneousmultikerne研究表明,不同的kernel具有不同的資源利用率。有些kernel幾乎不使用scratchpad內(nèi)存,而是頻繁的訪問l1緩存。而另一些kernel則正相反。這導致了gpu整體資源利用率的低下。雖然simultaneousmultikernel在硬件上允許kernel之間利用互補的資源,但其并沒有給出調(diào)度動態(tài)到來的任務(wù)使其資源互補的算法。因此,在數(shù)據(jù)中心的應(yīng)用場景下,simultaneousmultikernel無法徹底解決資源利用率的問題。



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

鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種gpu任務(wù)調(diào)度方法及系統(tǒng),用于解決現(xiàn)有技術(shù)中g(shù)pu任務(wù)調(diào)度存在的影響內(nèi)存性能,延遲高以及資源利用率低的問題。

為實現(xiàn)上述目的及他相關(guān)目的,本發(fā)明在一方面提供一種gpu任務(wù)調(diào)度系統(tǒng),所述任務(wù)調(diào)度系統(tǒng)包括:應(yīng)用分析模塊,用于接收用戶的應(yīng)用程序請求,分析應(yīng)用程序,根據(jù)所述應(yīng)用程序的類型和輸入數(shù)據(jù)集的大小分析獲取所述應(yīng)用程序的各個kernel的指令數(shù);動態(tài)任務(wù)調(diào)度模塊,包括:動態(tài)檢測單元,用于動態(tài)檢測、接收用戶的應(yīng)用程序請求并將接收的用戶的應(yīng)用程序請求發(fā)送至所述應(yīng)用分析模塊;數(shù)量查詢單元,用于從運行時系統(tǒng)查詢當前運行的kernel數(shù)量;處理單元,用于判斷當前運行的kernel數(shù)量是否達到預(yù)設(shè)的上限值,若否,則從被搶占的kernel以及新到達的kernel中挑選與當前運的kernel組合形成kernel組合優(yōu)先級最高的kernel并將挑選的kernel發(fā)射至運行時系統(tǒng),若是,則繼續(xù)判斷被搶占的kernel和新到達的kernel中是否存在與當前運行kernel進行組合得到更高優(yōu)先級的kernel組合,若否,則保持當前運行的kernel狀態(tài),若是,則繼續(xù)判斷搶占程序后的gpu性能提升是否大于搶占過程所占用的gpu開銷,若是,則進行搶占,若否,則保持當前運行的kernel狀態(tài)。

于本發(fā)明的一實施例中,被搶占的kernel的優(yōu)先級高于新到達的kernel的優(yōu)先級,使得gpu性能越好的kernel組合的優(yōu)先級越高。

于本發(fā)明的一實施例中,通過預(yù)設(shè)的歸一化ipc衡量gpu性能,歸一化ipc的計算公式為:

其中,norm_ipc表示為歸一化ipc,ipcshare表示為kernel與其他kernel共享gpu時gpu表現(xiàn)出的ipc,ipcalone表示為kernel獨占gpu時gpu表現(xiàn)出的ipc。

于本發(fā)明的一實施例中,搶占程序后的gpu性能提升根據(jù)搶占前歸一化ipc和搶占后歸一化ipc的對比獲取,其中:搶占前歸一化ipc為:

搶占后歸一化ipc為:

preempt_cycle=(0.09526×miss_rate+0.01633)×(reg+smem)×tb;

其中,normalized_ipci表示為第i個kernel的指令數(shù),running1表示為正在運行的第一個kernel,running2表示正在運行的第二個kernel,rest_cycle表示為正在運行的兩個kernel還能一起運行的時鐘周期數(shù),rest_instrunning1表示為正在運行的第一個kernel剩余的指令數(shù),ipcrunning1表示為正在運行的第一個kernel所表現(xiàn)出的ipc,rest_instrunning2表示為正在運行的第二個kernel剩余的指令數(shù),ipcrunning2表示為正在運行的第二個kernel所表現(xiàn)出的ipc,norm_ipci表示為第i個kernel所表現(xiàn)出的歸一化ipc,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù),miss_rate表示為未被搶占的kernel發(fā)生高速緩存缺失的頻率,reg表示為被搶占的kernel中每個線程塊占用寄存器的字節(jié)數(shù),smem表示為被搶占的kernel中每個線程塊占用共享內(nèi)存的字節(jié)數(shù),tb表示為被搶占的kernel中線程塊的數(shù)量。

于本發(fā)明的一實施例中,搶占過程所占用的gpu開銷通過搶占過程中歸一化ipc衡量,所述搶占過程中歸一化ipc為:

norm_ipcrunning1×decay_rate×preempt_cycle;

其中,norm_ipcrunning1表示為未被搶占kernel所表現(xiàn)出的歸一化ipc,decay_rate表示為未被搶占的kernel由于搶占過程而導致的ipc衰減率,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù),kernel∈memory_intensive表示為未被搶占的kernel屬于內(nèi)存密集型kernel,kernel∈compute_intensive表示為未被搶占的kernel屬于計算密集型kernel。

實現(xiàn)上述目的,本發(fā)明在另外一方面還提供一種芯片,所述芯片為異構(gòu)多核硬件結(jié)構(gòu),所述芯片內(nèi)裝設(shè)有如上所述的gpu任務(wù)調(diào)度系統(tǒng)。

實現(xiàn)上述目的,本發(fā)明在另外一方面還提供一種gpu任務(wù)調(diào)度方法,所述任務(wù)調(diào)度方法包括:動態(tài)檢測并接收用戶的應(yīng)用程序請求,分析應(yīng)用程序,根據(jù)所述應(yīng)用程序的類型和輸入數(shù)據(jù)集的大小分析獲取所述應(yīng)用程序的各個kernel的指令數(shù);從運行時系統(tǒng)查詢當前運行的kernel數(shù)量,并判斷當前運行的kernel數(shù)量是否達到預(yù)設(shè)的上限值,若否,則從被搶占的kernel以及新到達的kernel中挑選與當前運的kernel組合形成kernel組合優(yōu)先級最高的kernel并將挑選的kernel發(fā)射至運行時系統(tǒng),若是,則繼續(xù)判斷被搶占的kernel和新到達的kernel中是否存在與當前運行kernel進行組合得到更高優(yōu)先級的kernel組合,若否,則保持當前運行的kernel狀態(tài),若是,則繼續(xù)判斷搶占程序后的gpu性能提升是否大于搶占過程所占用的gpu開銷,若是,則進行搶占,若否,則保持當前運行的kernel狀態(tài)。

于本發(fā)明的一實施例中,被搶占的kernel的優(yōu)先級高于新到達的kernel的優(yōu)先級,使得gpu性能越好的kernel組合的優(yōu)先級越高。

于本發(fā)明的一實施例中,通過預(yù)設(shè)的歸一化ipc衡量gpu性能,歸一化ipc的計算公式為:

其中,norm_ipc表示為歸一化ipc,ipcshare表示為kernel與其他kernel共享gpu時gpu表現(xiàn)出的ipc,ipcalone表示為kernel獨占gpu時gpu表現(xiàn)出的ipc。

于本發(fā)明的一實施例中,搶占程序后的gpu性能提升根據(jù)搶占前歸一化ipc和搶占后歸一化ipc的對比獲取,其中:

搶占前歸一化ipc為:

搶占后歸一化ipc為:

preempt_cycle=(0.09526×miss_rate+0.01633)×(reg+smem)×tb;

其中,normalized_ipci表示為第i個kernel的指令數(shù),running1表示為正在運行的第一個kernel,running2表示正在運行的第二個kernel,rest_cycle表示為正在運行的兩個kernel還能一起運行的時鐘周期數(shù),rest_instrunning1表示為正在運行的第一個kernel剩余的指令數(shù),ipcrunning1表示為正在運行的第一個kernel所表現(xiàn)出的ipc,rest_instrunning2表示為正在運行的第二個kernel剩余的指令數(shù),ipcrunning2表示為正在運行的第二個kernel所表現(xiàn)出的ipc,norm_ipci表示為第i個kernel所表現(xiàn)出的歸一化ipc,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù),miss_rate表示為未被搶占的kernel發(fā)生高速緩存缺失的頻率,reg表示為被搶占的kernel中每個線程塊占用寄存器的字節(jié)數(shù),smem表示為被搶占的kernel中每個線程塊占用共享內(nèi)存的字節(jié)數(shù),tb表示為被搶占的kernel中線程塊的數(shù)量。

于本發(fā)明的一實施例中,搶占過程所占用的gpu開銷通過搶占過程中歸一化ipc衡量,所述搶占過程中歸一化ipc為:

norm_ipcrunning1×decay_rate×preempt_cycle;

其中,norm_ipcrunning1表示為未被搶占kernel所表現(xiàn)出的歸一化ipc,decay_rate表示為未被搶占的kernel由于搶占過程而導致的ipc衰減率,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù),kernel∈memory_intensive表示為未被搶占的kernel屬于內(nèi)存密集型kernel,kernel∈compute_intensive表示為未被搶占的kernel屬于計算密集型kernel。

如上所述,本發(fā)明的一種gpu任務(wù)調(diào)度方法及系統(tǒng),具有以下有益效果:

1、本發(fā)明提供了一個高性能的gpu搶占式任務(wù)調(diào)度系統(tǒng),其基于硬件式搶占機制和高性能任務(wù)調(diào)度算法,可以在無需升級硬件設(shè)備的情況下,應(yīng)對應(yīng)用請求動態(tài)到達的情況,有效降低延遲,提高資源利用率,提高gpu的性能。

2、本發(fā)明的成果可以用于構(gòu)建具有商業(yè)意義的、基于cpu和異構(gòu)計算芯片gpu的異構(gòu)數(shù)據(jù)中心,面向用戶提供程序動態(tài)任務(wù)調(diào)度服務(wù)。

3、本發(fā)明簡單實用,具有良好的市場前景和廣泛的適用性。

附圖說明

圖1顯示為本發(fā)明的一種gpu任務(wù)調(diào)度方法的流程示意圖。

圖2顯示為本發(fā)明的一種gpu任務(wù)調(diào)度系統(tǒng)的原理框圖。

圖3顯示為本發(fā)明與現(xiàn)有的軟件層的關(guān)系架構(gòu)圖。

圖4顯示為本發(fā)明的gpu任務(wù)調(diào)度方法及系統(tǒng)的實施過程示意圖。

元件標號說明

100gpu任務(wù)調(diào)度系統(tǒng)

110應(yīng)用分析模塊

120動態(tài)任務(wù)調(diào)度模塊

121動態(tài)檢測單元

122數(shù)量查詢單元

123處理單元

s101~s108步驟

具體實施方式

以下通過特定的具體實例說明本發(fā)明的實施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的具體實施方式加以實施或應(yīng)用,本說明書中的各項細節(jié)也可以基于不同觀點與應(yīng)用,在沒有背離本發(fā)明的精神下進行各種修飾或改變。

本實施例的目的在于提供一種gpu任務(wù)調(diào)度方法及系統(tǒng),用于解決現(xiàn)有技術(shù)中g(shù)pu任務(wù)調(diào)度存在的影響內(nèi)存性能,延遲高以及資源利用率低的問題。以下將詳細闡述本發(fā)明的一種gpu任務(wù)調(diào)度方法及系統(tǒng)的原理及實施方式,使本領(lǐng)域技術(shù)人員不需要創(chuàng)造性勞動即可理解本發(fā)明的一種gpu任務(wù)調(diào)度方法及系統(tǒng)。

具體地,本實施例旨在實現(xiàn)一個高性能的gpu搶占式任務(wù)調(diào)度,其基于硬件搶占機制和高性能任務(wù)調(diào)度算法,分別完成基于gpu的多任務(wù)共享以及搶占和在任務(wù)動態(tài)到達的情況下動態(tài)調(diào)度的工作。便于開發(fā)人員在無需關(guān)心硬件系統(tǒng)以及調(diào)度細節(jié)的前提下獲得高吞吐和低延遲。

以下對本實施例的gpu任務(wù)調(diào)度方法及系統(tǒng)進行詳細說明。

如圖1所示,本實施例提供一種gpu任務(wù)調(diào)度方法,所述任務(wù)調(diào)度方法包括:

步驟s101,動態(tài)檢測并接收用戶的應(yīng)用程序請求,分析應(yīng)用程序,根據(jù)所述應(yīng)用程序的類型和輸入數(shù)據(jù)集的大小分析獲取所述應(yīng)用程序的各個kernel的指令數(shù)。

步驟s102,從運行時系統(tǒng)查詢當前運行的kernel數(shù)量。

步驟s103,判斷當前運行的kernel數(shù)量是否達到預(yù)設(shè)的上限值,若否,則執(zhí)行步驟s104,若是,則執(zhí)行步驟s105。

步驟s104,從被搶占的kernel以及新到達的kernel中挑選與當前運的kernel組合形成kernel組合優(yōu)先級最高的kernel并將挑選的kernel發(fā)射至運行時系統(tǒng)。

步驟s105,繼續(xù)判斷被搶占的kernel和新到達的kernel中是否存在與當前運行kernel進行組合得到更高優(yōu)先級的kernel組合,若否,則執(zhí)行步驟s106,若是,則執(zhí)行步驟s107。

步驟s106,保持當前運行的kernel狀態(tài)。

步驟s107,繼續(xù)判斷搶占程序后的gpu性能提升是否大于搶占過程所占用的gpu開銷,若是,則執(zhí)行步驟s108,進行搶占,若否,則返回步驟s106保持當前運行的kernel狀態(tài)。

以下對本實施例的gpu任務(wù)調(diào)度方法進行詳細說明。

根據(jù)kernel在運行過程中對不同類型資源的需求程度不同,可將kernel分為內(nèi)存密集型和計算密集型兩種類型。計算密集型的kernel對計算資源的需求較大,而內(nèi)存密集型的kernel在運行過程中對內(nèi)存的訪問表現(xiàn)的比較頻繁。由于兩種類型的kernel對資源的需求表現(xiàn)為互補,因此當兩者共享gpu時,可最大程度的提高資源的利用率,且在最大程度上避免發(fā)生資源爭搶。另外,由于gpu的性能在很大程度上被內(nèi)存帶寬所限制,內(nèi)存密集型的kernel共享gpu時所表現(xiàn)出的性能結(jié)果要差于計算密集型的kernel共享gpu時的性能結(jié)果。根據(jù)不同組合的kernel所表現(xiàn)出的性能結(jié)果,將性能表現(xiàn)更好的kernel組合賦予更高的優(yōu)先級。該優(yōu)先級便作為調(diào)度過程中進行發(fā)射kernel以及實施搶占的重要依據(jù)。另外,出于對延遲的考慮,已經(jīng)被搶占的kernel在優(yōu)先級上要高于新到達的kernel,即在組合優(yōu)先級相等的情況下,優(yōu)先會將已經(jīng)被搶占過的kernel發(fā)射上去。

所以于本實施例中,被搶占的kernel的優(yōu)先級高于新到達的kernel的優(yōu)先級,使得gpu性能越好的kernel組合的優(yōu)先級越高。

當需要發(fā)生搶占時,除了考慮優(yōu)先級的影響,還要考慮搶占過程所引入的額外開銷。于本實施例中,通過預(yù)設(shè)的歸一化ipc(instructionpercycle,每周期執(zhí)行指令數(shù))衡量gpu性能,歸一化ipc的計算公式為:

其中,norm_ipc表示為歸一化ipc,ipcshare表示為kernel與其他kernel共享gpu時gpu表現(xiàn)出的ipc,ipcalone表示為kernel獨占gpu時gpu表現(xiàn)出的ipc。

為了實現(xiàn)吞吐量的最大化,則要盡可能保持各時刻運行分kernel的歸一化ipc之和最大。若被搶占的kernel或者新到達的kernel與正在運行的kernel能到組合出比當前運行的kernel組合更高優(yōu)先級的組合,則進一步考慮是否進行搶占。判斷是否搶占的邏輯取決于搶占前和搶占后的歸一化ipc的對比,即搶占程序后的gpu性能提升根據(jù)搶占前歸一化ipc和搶占后歸一化ipc的對比獲取。搶占前的歸一化ipc取決于當前正在運行的kernel,動態(tài)調(diào)度模塊可通過向運行時系統(tǒng)層發(fā)出請求獲取當前正在運行的kernel的狀態(tài),其中包括各個kernel已經(jīng)運行的指令數(shù)和實際運行的ipc,結(jié)合程序分析模塊分析出的各個kernel的總指令數(shù),則可以預(yù)測出搶占前歸一化ipc為:

搶占后歸一化ipc為:

preempt_cycle=(0.09526×miss_rate+0.01633)×(reg+smem)×tb;

其中,normalized_ipci表示為第i個kernel的指令數(shù),running1表示為正在運行的第一個kernel,running2表示正在運行的第二個kernel,rest_cycle表示為正在運行的兩個kernel還能一起運行的時鐘周期數(shù),rest_instrunning1表示為正在運行的第一個kernel剩余的指令數(shù),ipcrunning1表示為正在運行的第一個kernel所表現(xiàn)出的ipc,rest_instrunning2表示為正在運行的第二個kernel剩余的指令數(shù),ipcrunning2表示為正在運行的第二個kernel所表現(xiàn)出的ipc,norm_ipci表示為第i個kernel所表現(xiàn)出的歸一化ipc,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù),miss_rate表示為未被搶占的kernel發(fā)生高速緩存缺失的頻率,reg表示為被搶占的kernel中每個線程塊占用寄存器的字節(jié)數(shù),smem表示為被搶占的kernel中每個線程塊占用共享內(nèi)存的字節(jié)數(shù),tb表示為被搶占的kernel中線程塊的數(shù)量。

于本實施例中,搶占過程所占用的gpu開銷通過搶占過程中歸一化ipc衡量,所述搶占過程中歸一化ipc為:

norm_ipcrunning1×decay_rate×preempt_cycle;

其中,norm_ipcrunning1表示為未被搶占kernel所表現(xiàn)出的歸一化ipc,decay_rate表示為未被搶占的kernel由于搶占過程而導致的ipc衰減率,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù)。

搶占后的歸一化ipc由兩個階段組成,一部分是搶占過程中的ipc表現(xiàn),另一部分是搶占完成后的ipc表現(xiàn)。搶占發(fā)生時,未被搶占的kernel仍在繼續(xù)運行,而被搶占的kernel需要先將相關(guān)的上下文保存到內(nèi)存中,這其中涉及到大量的內(nèi)存訪問操作。根據(jù)實際測試情況可知,當未被搶占的kernel屬于內(nèi)存密集型類型的kernel時,其ipc會減小到原來的83%~97%不等,而計算密集型的kernel基本不受影響,因此根據(jù)kernel的類型,decay_rate定義如下:

kernel∈memory_intensive表示為未被搶占的kernel屬于內(nèi)存密集型kernel,kernel∈compute_intensive表示為未被搶占的kernel屬于計算密集型kernel

搶占過程所占用的時鐘周期數(shù)(cycle)受到兩個因素的影響:第一個因素為被換出的kernel的上下文的大小,其中包括該kernel所占用的tb,以及每個tb所占用的寄存器數(shù)量和共享內(nèi)存的大小,這些數(shù)量決定了保存完整上下文所需要執(zhí)行的內(nèi)存訪問操作的數(shù)量,通過統(tǒng)計測試結(jié)果可知,搶占過程所持續(xù)的cycle數(shù)與所要保存的字節(jié)數(shù)成正相關(guān),且可通過線性模型對兩者的關(guān)系進行擬合;另一個因素是未被換出的kernel執(zhí)行內(nèi)存訪問操作的頻繁程度,由于搶占過程中涉及到較多的內(nèi)存操作,若未被搶占的kernel也涉及到較多的內(nèi)存操作,會更加拖慢搶占過程,可通過l2cachemiss的頻率來衡量kernel涉及內(nèi)存操作的頻率,研究過程中發(fā)現(xiàn),搶占過程cycle數(shù)和上下文切換字節(jié)數(shù)的線性模型的斜率與正在運行的kernel的cachemiss頻率成正相關(guān),且成線性關(guān)系。因此搶占過程的cycle數(shù)可大致擬合以下關(guān)系式:

preempt_cycle=(0.09526×miss_rate+0.01633)×(reg+smem)×tb。

搶占過程中歸一化ipc定義為:norm_ipcrunning1×decay_rate×preempt_cycle。

搶占后的ipc無法精確得知,可通過歷史數(shù)據(jù)獲取一個經(jīng)驗值,搶占后的歸一化ipc定義為:

根據(jù)搶占前歸一化ipc和搶占后歸一化ipc的對比獲取搶占程序后的gpu性能提升,即

兩者相減。具體地,計算搶占前歸一化ipc和搶占后歸一化ipc的差值,獲取搶占程序后的gpu性能提升。

為實現(xiàn)上述gpu任務(wù)調(diào)度方法,本實施例提供一種gpu任務(wù)調(diào)度系統(tǒng)100,如圖2所示,所述gpu任務(wù)調(diào)度系統(tǒng)100包括:應(yīng)用分析模塊110和動態(tài)任務(wù)調(diào)度模塊120。以下對本實施例中的任務(wù)用分析模塊和動態(tài)任務(wù)調(diào)度模塊120進行詳細說明。

如圖3所示,本實施例中g(shù)pu任務(wù)調(diào)度系統(tǒng)100的軟件架構(gòu)分為三層:應(yīng)用層、調(diào)度層和運行時系統(tǒng)層。其中,應(yīng)用層主要由用戶應(yīng)用所組成,用戶遵循一般的gpu編程規(guī)則,編寫能在gpu上運行的kernel程序,即可在本發(fā)明所提供的軟件架構(gòu)中運行。所述gpu任務(wù)調(diào)度系統(tǒng)100運行于調(diào)度層,即調(diào)度層運行應(yīng)用分析模塊110和動態(tài)任務(wù)調(diào)度模塊120。運行時系統(tǒng)層是系統(tǒng)的主要組成部分之一,在用戶可執(zhí)行程序運行時,運行時系統(tǒng)通過調(diào)度層的調(diào)度結(jié)果調(diào)度任務(wù)或者對正在運行的程序進行搶占。運行時系統(tǒng)層通過在每個sm增加搶占機制,實現(xiàn)了部分上下文切換,從而能夠?qū)φ谶\行的kernel進行部分資源的搶占,使得多個kernel可以共享一個sm的資源。當運行時系統(tǒng)層接收到調(diào)度層發(fā)射的新的kernel,運行時系統(tǒng)層優(yōu)先使用各sm中未被占用的資源為新kernel分配tb,當資源不足時,需要搶占部分正在運行的kernel的資源。被換出的tb的上下文被保存到內(nèi)存中,換出過程結(jié)束后,新的kernel的tb被換入,整個上下文切換過程中正在運行的kernel的tb不會被打斷。需要進行搶占時,被換出的kernel的tb會被全部換出,其上下文同樣被保存到內(nèi)存中。

其中,1、用戶與應(yīng)用層的交互包括:a)用戶根據(jù)gpu編程規(guī)范編寫用戶應(yīng)用程序;b)

經(jīng)過本地調(diào)試后,確保程序正確。

2、用戶與調(diào)度層的交互包括:a)用戶向調(diào)度層提交應(yīng)用請求;b)應(yīng)用分析模塊110接收用戶請求。

3、用戶與運行時系統(tǒng)層的交互包括:a)運行時系統(tǒng)層向用戶返回運行結(jié)果。

4、調(diào)度層之間的交互包括:a)應(yīng)用分析模塊110向動態(tài)任務(wù)調(diào)度模塊120轉(zhuǎn)移用戶請求;b)應(yīng)用分析模塊110向動態(tài)任務(wù)調(diào)度模塊120發(fā)送應(yīng)用分析結(jié)果。

5、調(diào)度層與運行時系統(tǒng)層的交互包括:a)調(diào)度層向運行時系統(tǒng)層發(fā)送發(fā)射應(yīng)用請求;b)

調(diào)度層向運行時系統(tǒng)層發(fā)送搶占請求;c)運行時系統(tǒng)層向調(diào)度層發(fā)送運行kernel狀態(tài)。

具體地,于本實施中,所述應(yīng)用分析模塊110負責接收用戶的應(yīng)用請求并分析用戶應(yīng)用程序,通過機器學習算法,根據(jù)所輸入的應(yīng)用程序類型以及輸入數(shù)據(jù)集的大小,分析出應(yīng)用程序的指令數(shù),其輸出信息將作為動態(tài)任務(wù)調(diào)度模塊120的重要參考信息。具體地,所述應(yīng)用分析模塊110用于接收用戶的應(yīng)用程序請求,分析應(yīng)用程序,根據(jù)所述應(yīng)用程序的類型和輸入數(shù)據(jù)集的大小分析獲取所述應(yīng)用程序的各個kernel的指令數(shù)。

所述動態(tài)任務(wù)調(diào)度模塊120與所述應(yīng)用分析模塊110是一個有機整體,但各司其職。所述動態(tài)任務(wù)調(diào)度模塊120接收來自用戶和應(yīng)用分析程序的輸入信息,并根據(jù)綜合信息做出調(diào)度判斷。所述動態(tài)任務(wù)調(diào)度模塊120的第一個功能是接收用戶的請求。由于用戶的請求是動態(tài)到達,因此需要周期性地檢查是否有新的用戶請求到達,新到達的用戶程序需要首先經(jīng)過應(yīng)用分析程序的分析,新的應(yīng)用和其相關(guān)的分析結(jié)果將一起被發(fā)送到所述動態(tài)任務(wù)調(diào)度模塊120;所述動態(tài)任務(wù)調(diào)度模塊120的第二個功能是根據(jù)當前正在運行的程序狀態(tài)以及新到達的應(yīng)用的特征,判斷是否向底層發(fā)射新的任務(wù)或者對正在運行的程序進行搶占。

具體地,所述動態(tài)任務(wù)調(diào)度模塊120包括:動態(tài)檢測單元121,數(shù)量查詢單元122以及處理單元123。所述動態(tài)檢測單元121用于動態(tài)檢測、接收用戶的應(yīng)用程序請求并將接收的用戶的應(yīng)用程序請求發(fā)送至所述應(yīng)用分析模塊110。所述數(shù)量查詢單元122用于從運行時系統(tǒng)查詢當前運行的kernel數(shù)量。

所述處理單元123用于判斷當前運行的kernel數(shù)量是否達到預(yù)設(shè)的上限值,若否,則從被搶占的kernel以及新到達的kernel中挑選與當前運的kernel組合形成kernel組合優(yōu)先級最高的kernel并將挑選的kernel發(fā)射至運行時系統(tǒng),若是,則繼續(xù)判斷被搶占的kernel和新到達的kernel中是否存在與當前運行kernel進行組合得到更高優(yōu)先級的kernel組合,若否,則保持當前運行的kernel狀態(tài),若是,則繼續(xù)判斷搶占程序后的gpu性能提升是否大于搶占過程所占用的gpu開銷,若是,則進行搶占,若否,則保持當前運行的kernel狀態(tài)。

根據(jù)kernel在運行過程中對不同類型資源的需求程度不同,可將kernel分為內(nèi)存密集型和計算密集型兩種類型。計算密集型的kernel對計算資源的需求較大,而內(nèi)存密集型的kernel在運行過程中對內(nèi)存的訪問表現(xiàn)的比較頻繁。由于兩種類型的kernel對資源的需求表現(xiàn)為互補,因此當兩者共享gpu時,可最大程度的提高資源的利用率,且在最大程度上避免發(fā)生資源爭搶。另外,由于gpu的性能在很大程度上被內(nèi)存帶寬所限制,內(nèi)存密集型的kernel共享gpu時所表現(xiàn)出的性能結(jié)果要差于計算密集型的kernel共享gpu時的性能結(jié)果。根據(jù)不同組合的kernel所表現(xiàn)出的性能結(jié)果,將性能表現(xiàn)更好的kernel組合賦予更高的優(yōu)先級。該優(yōu)先級便作為調(diào)度過程中進行發(fā)射kernel以及實施搶占的重要依據(jù)。另外,出于對延遲的考慮,已經(jīng)被搶占的kernel在優(yōu)先級上要高于新到達的kernel,即在組合優(yōu)先級相等的情況下,優(yōu)先會將已經(jīng)被搶占過的kernel發(fā)射上去。

所以于本實施例中,被搶占的kernel的優(yōu)先級高于新到達的kernel的優(yōu)先級,使得gpu性能越好的kernel組合的優(yōu)先級越高。

當需要發(fā)生搶占時,除了考慮優(yōu)先級的影響,還要考慮搶占過程所引入的額外開銷。于本實施例中,通過預(yù)設(shè)的歸一化ipc衡量gpu性能,歸一化ipc的計算公式為:

其中,norm_ipc表示為歸一化ipc,ipcshare表示為kernel與其他kernel共享gpu時gpu表現(xiàn)出的ipc,ipcalone表示為kernel獨占gpu時gpu表現(xiàn)出的ipc。

為了實現(xiàn)吞吐量的最大化,則要盡可能保持各時刻運行分kernel的歸一化ipc之和最大。若被搶占的kernel或者新到達的kernel與正在運行的kernel能到組合出比當前運行的kernel組合更高優(yōu)先級的組合,則進一步考慮是否進行搶占。判斷是否搶占的邏輯取決于搶占前和搶占后的歸一化ipc的對比,即搶占程序后的gpu性能提升根據(jù)搶占前歸一化ipc和搶占后歸一化ipc的對比獲取。搶占前的歸一化ipc取決于當前正在運行的kernel,動態(tài)調(diào)度模塊可通過向運行時系統(tǒng)層發(fā)出請求獲取當前正在運行的kernel的狀態(tài),其中包括各個kernel已經(jīng)運行的指令數(shù)和實際運行的ipc,結(jié)合程序分析模塊分析出的各個kernel的總指令數(shù),則可以預(yù)測出搶占前歸一化ipc為:

搶占后歸一化ipc為:

preempt_cycle=(0.09526×miss_rate+0.01633)×(reg+smem)×tb;

其中,normalized_ipci表示為第i個kernel的指令數(shù),running1表示為正在運行的第一個kernel,running2表示正在運行的第二個kernel,rest_cycle表示為正在運行的兩個kernel還能一起運行的時鐘周期數(shù),rest_instrunning1表示為正在運行的第一個kernel剩余的指令數(shù),ipcrunning1表示為正在運行的第一個kernel所表現(xiàn)出的ipc,rest_instrunning2表示為正在運行的第二個kernel剩余的指令數(shù),ipcrunning2表示為正在運行的第二個kernel所表現(xiàn)出的ipc,norm_ipci表示為第i個kernel所表現(xiàn)出的歸一化ipc,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù),miss_rate表示為未被搶占的kernel發(fā)生高速緩存缺失的頻率,reg表示為被搶占的kernel中每個線程塊占用寄存器的字節(jié)數(shù),smem表示為被搶占的kernel中每個線程塊占用共享內(nèi)存的字節(jié)數(shù),tb表示為被搶占的kernel中線程塊的數(shù)量。

于本實施例中,搶占過程所占用的gpu開銷通過搶占過程中歸一化ipc衡量,所述搶占過程中歸一化ipc為:

norm_ipcrunning1×decay_rate×preempt_cycle;

其中,norm_ipcrunning1表示為未被搶占kernel所表現(xiàn)出的歸一化ipc,decay_rate表示為未被搶占的kernel由于搶占過程而導致的ipc衰減率,preempt_cycle表示為搶占過程所持續(xù)的時鐘周期數(shù),kernel∈memory_intensive表示為未被搶占的kernel屬于內(nèi)存密集型kernel,kernel∈compute_intensive表示為未被搶占的kernel屬于計算密集型kernel。

搶占后的歸一化ipc由兩個階段組成,一部分是搶占過程中的ipc表現(xiàn),另一部分是搶占完成后的ipc表現(xiàn)。搶占發(fā)生時,未被搶占的kernel仍在繼續(xù)運行,而被搶占的kernel需要先將相關(guān)的上下文保存到內(nèi)存中,這其中涉及到大量的內(nèi)存訪問操作。根據(jù)實際測試情況可知,當未被搶占的kernel屬于內(nèi)存密集型類型的kernel時,其ipc會減小到原來的83%~97%不等,而計算密集型的kernel基本不受影響,因此根據(jù)kernel的類型,decay_rate定義如下:

kernel∈memory_intensive表示為未被搶占的kernel屬于內(nèi)存密集型kernel,kernel∈compute_intensive表示為未被搶占的kernel屬于計算密集型kernel。

搶占過程所占用的時鐘周期數(shù)受到兩個因素的影響:第一個因素為被換出的kernel的上下文的大小,其中包括該所占用的tb,以及每個tb所占用的寄存器數(shù)量和共享內(nèi)存的大小,這些數(shù)量決定了保存完整上下文所需要執(zhí)行的內(nèi)存訪問操作的數(shù)量,通過統(tǒng)計測試結(jié)果可知,搶占過程所持續(xù)的cycle數(shù)與所要保存的字節(jié)數(shù)成正相關(guān),且可通過線性模型對兩者的關(guān)系進行擬合;另一個因素是未被換出的kernel執(zhí)行內(nèi)存訪問操作的頻繁程度,由于搶占過程中涉及到較多的內(nèi)存操作,若未被搶占的kernel也涉及到較多的內(nèi)存操作,會更加拖慢搶占過程,可通過l2cachemiss的頻率來衡量kernel涉及內(nèi)存操作的頻率,研究過程中發(fā)現(xiàn),搶占過程cycle數(shù)和上下文切換字節(jié)數(shù)的線性模型的斜率與正在運行的kernel的cachemiss頻率成正相關(guān),且成線性關(guān)系。因此搶占過程的cycle數(shù)可大致擬合以下關(guān)系式:

preempt_cycle=(0.09526×miss_rate+0.01633)×(reg+smem)×tb。

搶占過程中歸一化ipc定義為:norm_ipcrunning1×decay_rate×preempt_cycle。

搶占后的ipc無法精確得知,可通過歷史數(shù)據(jù)獲取一個經(jīng)驗值,搶占后的歸一化ipc定義為:

根據(jù)搶占前歸一化ipc和搶占后歸一化ipc的對比獲取搶占程序后的gpu性能提升,即具體地,計算搶占前歸一化ipc和搶占后歸一化ipc的差值,獲取搶占程序后的gpu性能提升。

此外,本實施例還提供一種芯片,所述芯片為異構(gòu)多核硬件結(jié)構(gòu),所述芯片內(nèi)裝設(shè)有如上所述的gpu任務(wù)調(diào)度系統(tǒng)1001。上述已經(jīng)對所述gpu任務(wù)調(diào)度系統(tǒng)1001進行了詳細說明,在此不再贅述。

為使本領(lǐng)域技術(shù)人員進一步理解本實施例中的gpu任務(wù)調(diào)度系統(tǒng)100和方法,如圖4所示,以下以具體實例說明本實施例中g(shù)pu任務(wù)調(diào)度系統(tǒng)100和方法的實施過程。

于本實施例中,底層硬件是一個基于numa(nonuniformmemoryaccessarchitecture,非統(tǒng)一內(nèi)存訪問)內(nèi)存系統(tǒng)的異構(gòu)多核架構(gòu)。

1、用戶編寫應(yīng)用程序:屬于應(yīng)用層,用戶按照gpu編程規(guī)范,編寫能在gpu上運行的kernel程序。

2、用戶提交應(yīng)用請求:用戶將應(yīng)用提交給調(diào)度層。

3、應(yīng)用分析模塊110分析應(yīng)用:應(yīng)用分析模塊110接收到用戶提交的請求,分析用戶提交的應(yīng)用,判斷應(yīng)用所屬的類型以及估計應(yīng)用的指令數(shù)。

4、提交應(yīng)交到動態(tài)任務(wù)調(diào)度模塊120:應(yīng)用分析模塊110將應(yīng)用以及相關(guān)的分析數(shù)據(jù)提交到動態(tài)任務(wù)調(diào)度模塊120。

5、查看當前運行kernel狀態(tài):動態(tài)調(diào)度模塊向運行時系統(tǒng)層查詢當前運行的kernel數(shù)量。

6、若未達到運行數(shù)量上限,則從被搶占的kernel以及新到達的knew中挑選與當前運行kernel組合優(yōu)先級最高的kpreempted并進行發(fā)射。

7、若已達到運行數(shù)量上限,則判斷是否需要進行搶占。判斷被搶占的kernel以及新到達的knew中是否存在與當前運行kernel進行組合得到更高優(yōu)先級的kernel。

8、若存在更優(yōu)的組合,則判斷搶占后的性能提升能否掩蓋搶占的開銷。

9.、若能掩蓋,則進行搶占。

綜上所述,本發(fā)明提供了一個高性能的gpu搶占式任務(wù)調(diào)度系統(tǒng),其基于硬件式搶占機制和高性能任務(wù)調(diào)度算法,可以在無需升級硬件設(shè)備的情況下,應(yīng)對應(yīng)用請求動態(tài)到達的情況,有效降低延遲,提高資源利用率,提高gpu的性能;本發(fā)明的成果可以用于構(gòu)建具有商業(yè)意義的、基于cpu和異構(gòu)計算芯片gpu的異構(gòu)數(shù)據(jù)中心,面向用戶提供程序動態(tài)任務(wù)調(diào)度服務(wù);本發(fā)明簡單實用,具有良好的市場前景和廣泛的適用性。所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點而具高度產(chǎn)業(yè)利用價值。

上述實施例僅例示性說明本發(fā)明的原理及功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾或改變。因此,舉凡所屬技術(shù)領(lǐng)域中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阳谷县| 惠安县| 景谷| 周宁县| 开化县| 固阳县| 灌云县| 科技| 洪泽县| 彝良县| 勃利县| 马龙县| 盐山县| 海门市| 临西县| 高平市| 新竹市| 喜德县| 韶山市| 靖宇县| 永昌县| 武隆县| 中牟县| 哈密市| 延川县| 星子县| 土默特左旗| 海安县| 郁南县| 讷河市| 山东省| 临武县| 宁明县| 佛冈县| 金溪县| 晋州市| 开封县| 宾阳县| 怀集县| 琼中| 蒙城县|