專利名稱:面向gpu的細粒度并行應用映射方法
技術領域:
本發(fā)明涉及圖形處理單元GPlXGraphics Processing Unit)體系結(jié)構(gòu)領域應用映射方法,特別是一種面向 GPU 通用計算 GPGPU (General Purpose computing on GraphicsProcessing Units)的細粒度并行應用映射方法。
背景技術:
所謂面向體系結(jié)構(gòu)的應用映射,就是將具體的應用高效移植到特定目標體系結(jié)構(gòu)的一種方法。如果不采用面向體系結(jié)構(gòu)的應用映射方法,具體的應用可能不會高效運行在目標體系結(jié)構(gòu)上,甚至根本就不能運行在目標體系結(jié)構(gòu)上。因此,面向體系結(jié)構(gòu)的應用映射方法是高性能計算體系結(jié)構(gòu)研究和應用的基礎。 隨著科技的進步,科學應用的分支日益精細,對大規(guī)模計算的需求也日趨迫切。盡管當前高性能計算機的計算速度已達到千萬億次(PFlops, 1015Flops)級別,但大量的高性能應用(如高精度氣象預報和地球系統(tǒng)模擬研究)仍驅(qū)動著高性能計算機向著E級(EFlops, IO18FIops)邁進。傳統(tǒng)的處理器已無法滿足應用對大規(guī)模計算的需求。當前GPGPU憑借其大規(guī)模并行計算能力和易編程性已成為高性能計算和科學計算應用重要的加速手段,并廣泛應用于其它通用計算領域。目前GPGPU已廣泛應用于醫(yī)學成像、氣象預測、代數(shù)運算和分子動力學模擬等高性能計算領域。醫(yī)學成像領域Hwu W領導的小組長期致力于通過GPGPU加速高級磁共振成像(MRI,Magnetic Resonance Imaging)重建速度以提高圖像質(zhì)量使得MRI技術更適用于臨床應用,Hartley使用GPGPU集群來實現(xiàn)大規(guī)模醫(yī)學成像計算,性能得到兩個數(shù)量級的提升。氣象領域由于局部地區(qū)的天氣預報需要在細粒度網(wǎng)格上進行快速運算,Takashi等人使用GPGPU實現(xiàn)由日本氣象局開發(fā)的下一代的天氣預報模型ASUCA模型并且獲得了大規(guī)模的加速比。代數(shù)運算領域馬安國等人使用GPU+CPU異構(gòu)系統(tǒng)加速高性能Linpack程序,通過分別采用Pinned存儲模式和Pageable存儲模式以對比兩種存儲模式對應用性能的影響。從系統(tǒng)的角度探索了在主機和設備上并行協(xié)作加速應用,Kerr實現(xiàn)了 QR分解算法在GPGPU上的性能加速,Volkov等人利用GPGPU中的類向量執(zhí)行部件對LU和QR分解算法實現(xiàn)了加速,在有限元分析方面,Komatitsch等人在NVIDIA GPGPU上實現(xiàn)了由地震造成的地震波傳播的模擬。分子動力學領域=Stone等人在GPGPU上實現(xiàn)分子軌道計算獲得了 125倍的性能加速,Van等人將分子動力學中的模擬計算問題映射到GPGPU上獲得了一定的性能加速。此外,GPU還廣泛應用于超級計算機系統(tǒng)的加速處理器,2010年11月世界超級計算機T0P500排名前5位的機器中有3臺機器采用CPU與GPU融合的體系結(jié)構(gòu)。其中由國防科技大學計算機學院研制的采用CPU和GPU相結(jié)合的異構(gòu)融合計算體系結(jié)構(gòu)“天河-1A”超級計算機位列世界第一。天河-IA計算處理系統(tǒng)包含7168個計算結(jié)點和1024個服務結(jié)點,每個計算結(jié)點包含2路Intel CPU和一路NVIDIA GPU,每個服務結(jié)點包含2路飛騰CPU。全系統(tǒng)共計23552個微處理器,其中英特爾至強X5670 CPU (2. 93GHz、6核)14336個、飛騰-1000 CPU (I. 0GHz、8 核)2048 個、NVIDIA M2050 GPU (I. 15GHz、14 核/448 個 CUDA核)7168個,CPU核共計102400個,GPU核共計100352個,峰值速度達4700 TFlops,持續(xù)速度達2566 TFlops0 “天河-1A”已在國家超級計算天津中心投入業(yè)務運行,在石油勘探、高端裝備制造、生物醫(yī)藥、動漫設計、新能源、新材料、工程設計與仿真分析、氣象預報、遙感數(shù)據(jù)處理、金融風險分析等方面獲得成功應用。因此,面向GPU的應用映射方法就是如何將具體的應用高效移植到GPU體系結(jié)構(gòu)上,以充分挖掘應用程序的并行,最大限度開發(fā)GPU強大的計算潛能。目前,被GPU編程人員廣泛接受的面向GPU體系結(jié)構(gòu)的應用映射方法是片段級并行。其具體步驟為第一步,構(gòu)建由GPU+CPU組成的異構(gòu)系統(tǒng),具體方法為選擇一款支持CUDA架構(gòu)的GPU顯卡(如NVidia公司的顯卡),將其安裝到計算機主板上的顯卡PCI-E插槽,這樣就完成了 GPU+CPU組成的異構(gòu)系統(tǒng)的構(gòu)建,搭建成功后的GPU+CPU異構(gòu)系統(tǒng)的微體系結(jié)構(gòu)如圖I所示。圖I的右半部分為CPU+GPU異構(gòu)系統(tǒng)的宏觀示意圖;左半部分為GPU的內(nèi)部微體系 結(jié)構(gòu)示意圖。其中CPU與GPU的數(shù)據(jù)交互通過PCI-E通道來完成。GPU的內(nèi)部微體系結(jié)構(gòu)主要包括GPU顯存和K個流多處理器SM (Streaming Multiprocessor)處理單元,K為正整數(shù);每個SM由m個流處理器(m為正整數(shù))、共享存儲器、常量Cache和紋理Cache組成;每個流處理器均包含多個寄存器。第二步,安裝GPU運行環(huán)境并啟動GPU進行初始化工作,具體方法如下2. I安裝對應操作系統(tǒng)下的GPU顯卡驅(qū)動程序;2. 2安裝支持對應操作系統(tǒng)下的NVidia GPU編程的cudatoolkit程序包;2. 3安裝支持對應操作系統(tǒng)下的NVidia GPU編程的cudasdk程序包;2. 4將2. 2和2. 3安裝的cudatoolkit和cudasdk程序安裝路徑下的include和Iib文件夾路徑添加到用戶當前的path路徑和library路徑下;2. 5啟動CUDA API culnit ()函數(shù)完成GPU啟動并進行初始化。第三步,CPU負責將應用映射輸入集(通常是存放于磁盤等外部設備空間中的數(shù)據(jù)集)讀入內(nèi)存;第四步,啟動GPU數(shù)據(jù)傳輸應用編程接口 API (Application ProgrammingInterface)函數(shù)將內(nèi)存的應用映射輸入集傳輸至GPU顯存;第五步,對傳入GPU顯存的應用映射輸入集片段化,將應用映射輸入集隨機劃分為多個零碎片段并盡量保持各個片段之間相互獨立;假設輸入集大小為size,每個零碎片段的大小為frag,則片段化后的零碎片段的總數(shù)為"_=L&e//rog」p/ze/.fr嘆」表示對size/frag取整,size由應用映射輸入集的大小決定,frag和num由程序員隨機選擇。應用映射輸入集的隨機劃分導致GPU+CPU組成的異構(gòu)系統(tǒng)效能低。第六步,GPU程序員負責將片段化后的零碎片段調(diào)度到GPU的一個流多處理器SM (Streaming Multiprocessor)上,GPU將不同的數(shù)據(jù)集片段以線程模式隨機分派到每個流處理器上運行,一個流處理器運行一個線程,一個線程計算一個數(shù)據(jù)集片段,同一個SM內(nèi)的線程組成一個線程塊并共享該SM內(nèi)的共享存儲器。然而,由于GPGPU體系結(jié)構(gòu)的差異以及諸多高性能計算應用特征不盡相同,傳統(tǒng)的片段級并行GPU應用映射方法雖然簡單,但是在實際的工程實踐中暴露出諸多缺陷,主要有I.片段級并行中,數(shù)據(jù)集片段大小由程序員隨機選擇,沒有一種可遵循的規(guī)范,從而導致應用映射并行粒度過大或過小。并行粒度過大不能充分利用GPU計算資源;并行粒度過小則增加GPU計算線程之間的通信。因此,片段級并行會降低程序執(zhí)行的速度,增加程序執(zhí)行時間,導致GPU+CPU組成的異構(gòu)系統(tǒng)效能低。2.隨著GPU廣泛應用于醫(yī)學成像、氣象預測、代數(shù)運算和分子動力學模擬等高性能通用計算領域。片段級并行方法很難適應GPU應用映射呈現(xiàn)多樣化 和復雜化的特征。因此,片段級并行不能充分利用應用程序的特征,從而GPU不能充分發(fā)揮強大的計算潛能,導致GPU程序執(zhí)行時間長。
發(fā)明內(nèi)容
本發(fā)明要解決的技術問題是提出面向GPU的細粒度并行應用映射方法,以解決片段級并行方法計算粒度隨機確定導致GPU+CPU組成的異構(gòu)系統(tǒng)效能較低和不能充分利用應用程序特征的缺陷。本發(fā)明的技術方案是第一步,構(gòu)建由GPU+CPU異構(gòu)計算系統(tǒng),其方法與片段級并行映射方法構(gòu)建GPU+CPU異構(gòu)系統(tǒng)第一步一樣;第二步,安裝GPU運行環(huán)境并啟動GPU進行初始化工作,其方法與片段級并行映射
方法第二步一樣;第三步,與片段級并行映射方法第三步一樣,CPU負責將n維應用映射輸入集Pn[M1] [M2].. [Mi].. [Mn]讀入內(nèi)存,PJM1] [M2]. [Mi].. [Mn]是一個 n 維數(shù)組,n 為正整數(shù),數(shù)組的第一維的維度(即該維的長度或該維包含元素的個數(shù))為M1,第二維的維度為M2,……,第i維的維度為Mi……,第n維的維度為Mn;當n彡2時,n彡i彡2;第四步,與片段級并行映射方法第四步一樣,啟動GPU數(shù)據(jù)傳輸應用編程接口 API函數(shù)將內(nèi)存的Pn[Mj [M2].. . [Mi].. . [MJ傳輸至GPU顯存;第五步,若n = I,轉(zhuǎn)第七步;若1!彡2,執(zhí)行第六步;第六步,對PjM1] [M2]. . . [Mi]. . . [MJ進行像素化,方法如下6. In維數(shù)組歸一化,即將n維數(shù)組Pn[M1] [M2]. . [Mi]. . . [Mj轉(zhuǎn)化為一個等價的二維數(shù)組。方法如下
n6. I. I 計算 n 維數(shù)組 Pn[Mj [M2]. . . [Mi]…[Mn]包含的元素總數(shù)= O ,
1=1
n
Om,表示M1, M,2…,Mn連乘。
1=16. I. 2 將 Pn[M1] [M2]. [Mi]. . [Mj 的 total 個元素依次賦值給二維數(shù)組 P2[M1][total/Mj,具體方法如下6. I. 2. I 定義循環(huán)變量 In1, m2,…mn ;6. I. 2. 2 初始化 Hi1=O ;6. 1.2.3設置變量i,i > 2,按以下方法將n維數(shù)組的total個元素依次賦值給二維數(shù)組P2 [M1] [total/Mj 6. 1.2.3. I 若 Hi1 (M1,則 m2=0,轉(zhuǎn) 6. I. 2. 3. 2 ;否則轉(zhuǎn) 6. I. 2. 3. n+1 ;6. I. 2. 3. 2 若 m2〈M2,則 m3=0,轉(zhuǎn) 6. I. 2. 3. 3 ;否則 Hi1 加一,轉(zhuǎn) 6. I. 2. 3. I ;6. 1.2.3.3若1113〈]\13,則1114=0,轉(zhuǎn)6. I. 2. 3. 4 ;否則 m2 加一,轉(zhuǎn) 6. I. 2. 3. 2 ;......6. I. 2. 3. i-1 若 IV1〈Mh,則 Ini=O,轉(zhuǎn) 6. I. 2. 3. i ;否則 In^2 加一,轉(zhuǎn) 6. I. 2. 3. i_2 ;6. I. 2. 3. i 若111爲貝丨J mi+1=0,轉(zhuǎn) 6. I. 2. 3. i+1 ;否則 In^1 加一,轉(zhuǎn) 6. I. 2. 3. i_l ;6. I. 2. 3. i+1 若 mi+1〈Mi+1,則 mi+2=0,轉(zhuǎn) 6. I. 2. 3. i+2 ;否則 Hii 加一,轉(zhuǎn) 6. I. 2. 3. i ;......6. I. 2. 3. n-1 若 Hin^1 <Mn_!,則 mn=0,轉(zhuǎn) 6. I. 2. 3. n ;否則 mn_2 加一,轉(zhuǎn) 6. I. 2. 3. n~2 ;6. I. 2. 3. n若mn〈Mn成立,則執(zhí)行n維數(shù)組到二維數(shù)組的賦值操作,即
n
P2[mi] Ylm, =A…,循環(huán)變量 Hin 加一,轉(zhuǎn) 6. I. 2. 3.n ;否則 IV1 加一,轉(zhuǎn)
L /=-」
6.1.2. 3. n-1 ;6. I. 2. 3. n+1完成n維數(shù)組到二維數(shù)組的賦值轉(zhuǎn)換。6. 2對二維數(shù)組P2 [M1] [total/Mj進行像素化。方法如下 假設p [s] [r]表示二維數(shù)組P2 [M1] [total/Mj第s列第r行的元素,其中0彡s彡M1-I并且0彡r ( (total/Mj-l ;對于高度為M1,寬度為total/M:的圖像I,用I(s,r)表示圖像第s列第r行的像素。6. 2. I 初始化 s=0, r=0;6. 2. 2若s < M1并且KtotaVM1,將二維數(shù)組第s列第r行的元素賦值給圖像I第s列第r行的像素,即I (s, r) =p [s] [r];6. 2. 3 循環(huán)變量 s 加一,即 s = s+1;6. 2. 4 循環(huán)變量 r 加一,r = r+1;第七步,采用GPU+CPU異構(gòu)計算系統(tǒng)實現(xiàn)面向n維數(shù)據(jù)結(jié)構(gòu)輸入集的細粒度像素級并行應用映射,具體方法如下假設搭建的CPU+GPU異構(gòu)系統(tǒng)包含K個流多處理器SM (StreamingMultiprocessor),每個SM包含m個流處理器。7. I計算圖像I的像素總數(shù)pixel,若n = I,貝丨J Pixel=M1,執(zhí)行7. 2 ;若n彡2,貝丨JPixel=M1 X (total/Mj,執(zhí)行 7. 2 ;7. 2計算異構(gòu)系統(tǒng)包含處理器核心的總數(shù)core = mXK ;7. 3若pixel ( core,啟動pixel個獨立的GPU線程,將每一個像素分派給一個獨立的GPU線程,一個流處理器運行一個獨立的GPU線程,GPU線程運行完后轉(zhuǎn)7. 9;若pixel>core,執(zhí)行 7. 4 ; 7. 4通過查詢GPU屬性(見GPU產(chǎn)品說明書)獲取一個SM上可以同時運行的最大線程數(shù)t-,通常U 256;7. 5 定義
權(quán)利要求
1.一種面向GPU的細粒度并行應用映射方法,包括以下步驟 第一歩,構(gòu)建由GPU+CPU組成的異構(gòu)系統(tǒng),其中CPU與GPU的數(shù)據(jù)交互通過PCI-E通道來完成,GPU包括GPU顯存和K個流多處理器SM處理單元,每個SM由m個流處理器、共享存儲器、常量Cache和紋理Cache組成;K為正整數(shù),m為正整數(shù); 第二步,安裝GPU運行環(huán)境并啟動GPU進行初始化工作; 第三歩,CPU負責將n維應用映射輸入集PJM1] [M2]…[Mn]讀入內(nèi)存,PJM1][M2].. . [Mi].. . [Mn]是ー個n維數(shù)組,n為正整數(shù),數(shù)組的第一維的維度即該維包含元素的個數(shù)為M1,第二維的維度為M2,……,第i維的維度為Mi……,第n維的維度為Mn ;當n彡2時,n≤i≤2 ; 第四步,啟動GPU數(shù)據(jù)傳輸應用編程接ロ API函數(shù)將內(nèi)存的Pn[M1] [M2].. [Mi].. [MJ傳輸至GPU顯存; 其特征在于還包括以下步驟 第五步,若n = I,轉(zhuǎn)第七步;若n > 2,執(zhí)行第六步; 第六步,對Pn[M1] [M2]. [Mi]. [Mn]進行像素化,方法如下.6. In維數(shù)組歸ー化,即將Pn[M1] [M2].. [Mi].. [Mn]轉(zhuǎn)化為一個等價的ニ維數(shù)組,方法如下 . 6. I. I 計算 Pn[Mj [M2].. . [Mi].. . [MJ 包含的元素總數(shù)
2.如權(quán)利要求I所述的面向GPU的細粒度并行應用映射方法,其特征在于所述將Pn[M1] [M2].. [Mi].. [Mn]的total個元素依次賦值給ニ維數(shù)組P2[M1] [total/Mj的方法是 . 6. I. 2. I定義循環(huán)變量Hi1, m2,…mn ; . 6. I. 2. 2 初始化 Hi1=O ; .6. I. 2. 3設置變量i,i > 2,按以下方法將n維數(shù)組的total個元素依次賦值給ニ維數(shù)組 P2 [M1] [total/Mj .6. I. 2. 3. I 若 Hi1〈Mp 則 m2=0,轉(zhuǎn) 6. I. 2. 3. 2 ;否則轉(zhuǎn) 6. I. 2. 3. n+1 ; .6. I. 2. 3. 2 若 m2<M2,則 m3=0,轉(zhuǎn) 6. I. 2. 3. 3 ;否則 Hi1 加一,轉(zhuǎn) 6. I. 2. 3. I ;.6. I. 2. 3. 3 若 m3〈M3,則 m4=0,轉(zhuǎn) 6. I. 2. 3. 4 ;否則 m2 加一,轉(zhuǎn) 6. I. 2. 3. 2 ;.6. I. 2. 3. i-1 若叫べU Hii=O,轉(zhuǎn) 6. I. 2. 3. i ;否則 Iv2 加一,轉(zhuǎn) 6. I. 2. 3. i_2 ; . 6. I. 2. 3. i 若 Hii(Mi,則 mi+1=0,轉(zhuǎn) 6. I. 2. 3. i+1 ;否則 Iv1 加一,轉(zhuǎn) 6. I. 2. 3. i-1 ; .6. I. 2. 3. i+1 若 mi+1〈Mi+1,貝丨J mi+2=0,轉(zhuǎn) 6. I. 2. 3. i+2 ;否則 Hii 加一,轉(zhuǎn) 6. I. 2. 3. i ;.6. I. 2. 3. n-1 若 IV,Mlri,則 mn=0,轉(zhuǎn) 6. I. 2. 3. n ;否則 mn_2 加一,轉(zhuǎn) 6. I. 2. 3. n~2 ; . 6.I. 2. 3. n若mn〈Mn成立,則執(zhí)行n維數(shù)組到ニ維數(shù)組的賦值操作,即 Il/う[m,] I I tir = Pn [/ ,][/ ,]■ ■ [/ ],循環(huán)變量 mn 加一,轉(zhuǎn) 6. I. 2. 3. n ;n ;則 Iv1 加一,轉(zhuǎn).6.I. 2. 3. n-1 ; .6.I. 2. 3. n+1完成n維數(shù)組到ニ維數(shù)組的賦值轉(zhuǎn)換。
全文摘要
本發(fā)明公開了一種面向GPU的細粒度并行應用映射方法,目的是解決現(xiàn)有映射方法計算粒度隨機確定導致GPU+CPU組成的異構(gòu)系統(tǒng)效能低和不能充分利用應用程序特征的缺陷。技術方案是構(gòu)建由GPU+CPU組成的異構(gòu)系統(tǒng),安裝GPU運行環(huán)境并啟動GPU進行初始化工作,CPU負責將應用映射輸入集讀入內(nèi)存,啟動API函數(shù)將應用映射輸入集傳輸至GPU顯存,對于多維數(shù)據(jù),先將多維數(shù)組轉(zhuǎn)化成二維數(shù)組,再將二維數(shù)組像素化,最后采用GPU+CPU異構(gòu)計算系統(tǒng)實現(xiàn)面向n維數(shù)據(jù)結(jié)構(gòu)輸入集的細粒度像素級并行應用映射。采用本發(fā)明能充分利用應用程序特征,任務劃分明確,并行粒度小,能最大化CPU+GPU異構(gòu)計算系統(tǒng)的效能,性能加速比顯著。
文檔編號G06F15/80GK102799416SQ20121024449
公開日2012年11月28日 申請日期2012年7月16日 優(yōu)先權(quán)日2012年7月16日
發(fā)明者王志英, 甘新標, 沈立, 黃立波, 陸洪毅, 朱琪, 蘇博, 鄭重, 徐帆, 魏雄 申請人:中國人民解放軍國防科學技術大學