本發(fā)明專利技術(shù)涉及一種基于CUDA并行環(huán)境的GPU并行程序優(yōu)化方法,定義了GPU程序內(nèi)核的性能瓶頸,根據(jù)級別包括全局儲存器訪問延遲、共享存儲器訪問沖突、指令流水線沖突、指令瓶頸。并為每個性能瓶頸提出實際可操作的判定標準和瓶頸優(yōu)化解決方法:全局儲存器訪問延遲優(yōu)化方法:轉(zhuǎn)存共享存儲器、訪問歸并、提高線程級并行度、提高指令級并行度;共享存儲器訪問沖突和指令流水線沖突優(yōu)化方法:解決bank?conflict,轉(zhuǎn)存寄存器、提高線程級并行度、提高指令級并行度;指令瓶頸:指令替換和減少分支。本發(fā)明專利技術(shù)為CUDA程序編寫和優(yōu)化提供依據(jù),幫助程序編寫者方便得找到CUDA程序中的性能瓶頸,并針對性能瓶頸做出高效有針對性的優(yōu)化,使得CUDA程序可以更大限度的發(fā)揮GPU設(shè)備的計算能力。
【技術(shù)實現(xiàn)步驟摘要】
本專利技術(shù)涉及一種圖形、動畫、科學(xué)計算、地質(zhì)、生物、物理模擬等諸多領(lǐng)域的并行計算與數(shù)據(jù)處理方法,特別涉及一種基于CUDA架構(gòu)的GPU內(nèi)核程序優(yōu)化方法,屬于高性能計算領(lǐng)域。
技術(shù)介紹
CUDA 架構(gòu)(Compute Unified Device Architecture)是面向 GPU (Graphic Processing Unit)圖形處理器等設(shè)備的并行計算架構(gòu),是一套在GPU上完成高性能計算的解決方案,在CUDA環(huán)境上并行編程的接口 API有CUDA C,C++,OpenCL, RapidMind等。CUDA C是基于CUDA架構(gòu)的C語言擴展,程序編寫者可以方便的利用這套API進行GPU編程。而程序的效果實現(xiàn)則依賴于程序員編寫性能高效、功能穩(wěn)定和可移植性強的CUDA內(nèi)核程序, CUDA內(nèi)核程序又被稱為kernel函數(shù),是在GPU上運行的并行計算函數(shù),內(nèi)核程序的性能直接反映了程序?qū)υO(shè)備計算資源的利用情況。目前針對CUDA內(nèi)核程序的優(yōu)化存在一些較為成熟的技術(shù),本專利技術(shù)重點整理了以下內(nèi)容
技術(shù)介紹
一 CUDA的技術(shù)手冊(CUDA的技術(shù)手冊以NVIDIA. CUDA C Best Practices Guide. January 2012.為主)上公布了對存儲器訪問、處理器資源利用以及指令優(yōu)化的一些技術(shù)。在這套手冊中,強調(diào)了兩部分內(nèi)容一是通過提高以SM設(shè)備占有率為指標的程序并行度來掩蓋指令執(zhí)行時遇到的延遲問題;二是對以全局存儲器訪問為代表的存儲器訪問模式進行較深入的優(yōu)化。但是,這些優(yōu)化技術(shù)的不足在于過多的考慮設(shè)備占有率對程序性能的影響,其提出的程序并行度也主要是線程級并行(TLP =Thread Level Parallelism),而沒有提及指令級并行(ILP !Instruction Level Parallelism)這一優(yōu)化 CUDA程序性能的重要技術(shù);同時,CUDA技術(shù)手冊在考慮程序延遲時輕視了全局存儲器延遲外的其它延遲,這些延遲成為程序進一步優(yōu)化工作中的重點。技術(shù)背景二 =NVIDIA公司的王鵬博士提出了一套較為完整的CUDA程序優(yōu)化流程, (Peng Wang. CUDA Optimization.1n:NVIDIA GPU Technology Conference, 2010.)將性能瓶頸分為存儲器瓶頸、指令瓶頸和延遲瓶頸,并給出了具體的瓶頸解決方法。但是,這套優(yōu)化流程所給出的瓶頸判定標準不夠清晰明確,如指令瓶頸的判定僅有兩條1.計算密集型程序很容易成為指令瓶頸;2.將指令優(yōu)化放在存儲器優(yōu)化和延遲優(yōu)化之后等(具體可參見文獻 Peng Wang. CUDA Optimization.1n:NVIDIA GPU Technology Conference, 2010.);同樣,在這套優(yōu)化流程中也沒有提到ILP優(yōu)化和非全局存儲器訪問的延遲問題。
技術(shù)介紹
三伯克利大學(xué)的Volkov在2010年GTC大會上對CUDA程序在低占有率下使用指令級并行的優(yōu)化方案進行了論述Vasily Volkov,Better Performance at Lower Occupancy, GTC 2010,UC Berkeley, September 22,2010,提出了可以在較低的占有率下進行CUDA程序優(yōu)化,并給出具有優(yōu)化效果的程序樣例。Volkov在之后的另外兩篇文獻 Vasily Volkov,Use registers and multiple outputs per thread on GPU,UC Berkeley,PMAAj 10, June30,2010 和 Vasily Volkov, Unrolling parallel loops, UC Berkeley, tutorial talk SCI I, November 14, 2011中對指令并行如何操作做了進一步的解釋。但是, 這些文獻中都沒有對指令集并行優(yōu)化的場合和條件做出限定,這一技術(shù)與實際應(yīng)用仍有距離。本專利技術(shù)認為指令級并行并不適合所有的代碼,并首次對指令并行使用的場合和條件做出嚴格限定。上述這些公開的優(yōu)化技術(shù)都只局限于CUDA程序優(yōu)化的幾個方面,不足以充分發(fā)揮GPU設(shè)備的運算能力,實際達到的優(yōu)化效果也不夠完善;同時,這些文獻或作者往往沒有給出技術(shù)的理論闡述,對優(yōu)化技術(shù)的使用場合和條件解釋的不清楚,因此很難達到實際可操作的標準。在實際編寫的大量CUDA程序中,性能的優(yōu)化工作往往是不夠的,要求更多的程序員可以快捷的掌握CUDA程序的編寫和優(yōu)化技術(shù)而不止是讓技術(shù)停留在研究層面。因此,提出一套完整的實際可操作的,具有較強通用性和優(yōu)化效果的技術(shù)流程是本領(lǐng)域亟待解決的技術(shù)問題。
技術(shù)實現(xiàn)思路
針對目前已公開的優(yōu)化技術(shù)現(xiàn)狀,本專利技術(shù)提供了一種實際可操作的CUDA內(nèi)核程序性能優(yōu)化解決方案,從性能瓶頸的判定到優(yōu)化方法的選取,再到優(yōu)技術(shù)的具體實施給出詳細方案和步驟,為CUDA程序編寫和優(yōu)化提供依據(jù),幫助程序編寫者方便得找到CUDA程序中的性能瓶頸,并針對性能瓶頸做出高效有針對性的優(yōu)化,使得CUDA程序可以更大限度的發(fā)揮GPU設(shè)備的計算能力。本專利技術(shù)所使用的CUDA架構(gòu)軟硬件特性資料主要引自本領(lǐng)域較權(quán)威的技術(shù)指南 《GPU高性能運算之CUDA》(張舒,褚艷利等編著,中國水利水電出版社2009年)以及NVIDIA 公司提高的 CUDA C 編程手冊(NVIDIA. CUDA C Programming Guide. January 2012·)。目前市場上支持CUDA的GPU設(shè)備規(guī)格不盡相同,本專利技術(shù)以設(shè)備計算能力設(shè)備計算能力是衡量 GPU設(shè)備對CUDA支持能力的指標,較高級的版本會繼承發(fā)展較低級版本的全部特性并增添新的功能2. I的GF114子架構(gòu),GF114架構(gòu)是Fermi 2. O架構(gòu)的典型代表,該架構(gòu)的GPU是目前硬件市場的主流產(chǎn)品。在本專利技術(shù)中以該設(shè)備為例具體說明,并且盡可能的兼顧其它版本的計算能力。本專利技術(shù)技術(shù)方案如下一種基于CUDA并行環(huán)境的GPU程序優(yōu)化方法,其步驟包括I)根據(jù)CUDA上的程序分析工具對GPU程序進行檢測,得到程序需求占有率并判斷此時程序是否存在全局存儲器訪問瓶頸,同時對所述全局存儲器訪問瓶頸進行消除,進入步驟2);2)根據(jù)共享存儲器中bank-conflicts訪問沖突的數(shù)目判斷所述步驟I)的GPU程序中是否存在共享存儲器訪問瓶頸,同時消除所述共享存儲器訪問瓶頸和新生成的全局存儲器訪問瓶頸,進入步驟3);3)使用CUDA的程序分析工具在所述步驟2)的GPU程序提取出性能參數(shù),綜合分析判斷是否存在流水線指令執(zhí)行依賴瓶頸并消除該指令流水線沖突,得到實際IPC可達到指令瓶頸IPC的GPU程序進入步驟4);4)在所述步驟3)中若GPU程序?qū)嶋HIPC達到指令瓶頸IPC,則進行指令瓶頸優(yōu)化5處理;5)重復(fù)遍歷以上步驟I) 一4),直至所述GPU程序不存在上述步驟2)-4)中的任意一項瓶頸并且程序性能提升滿足用戶需求,完成GPU程序優(yōu)化過程。所述程序需求占有率¢1=^/48=0^/1^)=1=1748,其中Na為active warp數(shù)目,T為一次訪問存儲延遲,NnZNi為訪問存儲請求次數(shù)與指令數(shù)目之比。所述全局存儲器訪問瓶頸判斷方法是若實際占本文檔來自技高網(wǎng)...
【技術(shù)保護點】
一種基于CUDA并行環(huán)境的GPU程序優(yōu)化方法,其步驟包括:1)根據(jù)CUDA上的程序分析工具對GPU程序進行檢測,得到程序需求占有率并判斷此時程序是否存在全局存儲器訪問瓶頸,同時對所述全局存儲器訪問瓶頸進行消除,進入步驟2);2)根據(jù)共享存儲器中bank?conflicts訪問沖突的數(shù)目判斷所述步驟1)的GPU程序中是否存在共享存儲器訪問瓶頸,同時消除所述共享存儲器訪問瓶頸和新生成的全局存儲器訪問瓶頸,進入步驟3);3)使用CUDA的程序分析工具在所述步驟2)的GPU程序提取出性能參數(shù),判斷是否存在流水線指令執(zhí)行依賴瓶頸并消除該指令流水線沖突,得到實際IPC可達到指令瓶頸IPC的GPU程序進入步驟4);4)在所述步驟3)中若GPU程序?qū)嶋HIPC達到指令瓶頸IPC,則進行指令瓶頸優(yōu)化處理;5)重復(fù)遍歷以上步驟1)—4),直至所述GPU程序不存在上述步驟2)?4)中的任意一項瓶頸,完成GPU程序優(yōu)化。
【技術(shù)特征摘要】
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:孟洋,李勝,汪國平,
申請(專利權(quán))人:北京大學(xué),
類型:發(fā)明
國別省市:
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。