一種快速開發(fā)cuda并行程序的方法
【專利摘要】本發(fā)明提供一種快速開發(fā)CUDA并行程序的方法,涉及修改CPU串行程序和CUDA并行程序移植:按照CUDA并行程序格式要求修改原CPU串行程序,得到新版本的CPU串行程序;然后設計CUDA并行程序,把CPU串行程序移植到GPU平臺上并進行進一步的優(yōu)化。該一種快速開發(fā)CUDA并行程序的方法和現(xiàn)有技術相比,本發(fā)明利用先修改CPU串行程序后移植到GPU平臺的方法,充分利用CPU和GPU上的資源,快速、有效地實現(xiàn)基于GPU平臺進行程序并行化的方法,實用性強,易于推廣。
【專利說明】一種快速開發(fā)CUDA并行程序的方法
【技術領域】
[0001]本發(fā)明涉及計算機應用【技術領域】,具體的說是一種快速開發(fā)CUDA并行程序的方法。
【背景技術】
[0002]自從2006年英偉達(NVIDIA)公司推出圖形處理器G80 (包含了 128個流式多處理器,最新的G200包含了 240個多處理器)以來,圖形處理器(GPU,Graphic ProcessingUnit)在某些大規(guī)模并行計算的應用上,相對于CPU來說性能提高可達100倍以上。尤其從2008年5月,NVIDIA公司推出用于GPU的開發(fā)平臺統(tǒng)一計算設備架構(CUDA,ComputeUnified Device Architecture)軟件開發(fā)工具包(SDK, Software Development Kit) 1.1以來,基于GPU平臺的并行計算便得到了大規(guī)模的推廣。CUDA為GPU計算提供了統(tǒng)一計算設備架構,使用戶很容易地將GPU編程融于傳統(tǒng)的編程工具(例如Visual Studio、Gcc等)和語言(例如C、C++及FORTRAN等)中。在短短的一年以來,CUDA被應用于加速大規(guī)模并行計算領域的許多方面,如在圖像處理,物理模型模擬(如計算流體力學),工程和金融模擬與分析,生物醫(yī)藥工程,數(shù)據(jù)庫及數(shù)據(jù)挖掘,搜索,排序等諸多方面都有很好的應用,在很多應用中取得了 I至2個幾何數(shù)量級的加速。
[0003]GPU擁有更多的晶體管,用于數(shù)據(jù)處理而不是像CPU那樣去處理數(shù)據(jù)cache和指令控制,這意味著GPU具有巨大的并行計算能力。
[0004]CUDA C作為GPU的并行編程語言。CUDA C編程將CPU稱之為主機,將GPU作為一個協(xié)處理器稱為設備。在CUDA編程中,多個線程同時執(zhí)行在一個GPU上,并由多個線程組成一個線程塊(Block),多個線程塊又組織成網(wǎng)格(Grid);另外,每32個線程組成一個束(warp)。CUDA編程中常用到的優(yōu)化技術有合理的網(wǎng)格配置,每個SM上有足夠多的warp可隱藏訪問延遲,并進行全局存儲器的合并訪問,共享存儲器的使用,紋理存儲器和常量存儲器的使用,寄存器的合理使用等等。CUDA并行程序需要執(zhí)行成千上萬個線程,比CPU串行程序開發(fā)要復雜,設計不當會導致結果的錯誤和性能下降。
[0005]可見,為實現(xiàn)CUDA并行程序開發(fā)的需求,需要一種快速、有效地實現(xiàn)CUDA并行程序開發(fā)的方法。
【發(fā)明內容】
[0006]本發(fā)明的技術任務是解決現(xiàn)有技術的不足,提供一種快速開發(fā)CUDA并行程序的方法。
[0007]本發(fā)明的技術方案是按以下方式實現(xiàn)的,該一種快速開發(fā)CUDA并行程序的方法,其具體操作過程為:
步驟一、CPU串行程序修改,即按CUDA程序格式要求對CPU串行程序的分析和修改,其
中
1.DCPU串行程序分析具體包括:利用打印時間方式測試串行程序中的熱點模塊;根據(jù)算法特點和數(shù)據(jù)特點分析熱點模塊是否可以并行,是否可以采用CUDA細粒度并行;根據(jù)可并行的模塊,找到CUDA內核將會使用到的數(shù)組,并對數(shù)組結構進行分析;
1.2)仿CUDA格式的CPU串行程序修改,具體包括:原程序算法修改,修改成可并行的代碼;數(shù)組修改,修改成適合CUDA并行程序格式的數(shù)組形式;
步驟二、CUDA并行程序移植,即設計CUDA并行程序把CPU程序移植到GPU平臺,以及CUDA并行程序的優(yōu) 化,其中
2.1)設計CUDA并行程序具體包括:線程塊、網(wǎng)格的設計,用于數(shù)據(jù)的劃分和內核的計算;通信函數(shù)的實現(xiàn),用于進行CPU與GPU之間的數(shù)據(jù)傳遞;內核的設計,實現(xiàn)CUDA并行加速熱點模塊;
2.2)所述優(yōu)化CUDA并行程序,具體包括:將上述CUDA并行程序利用優(yōu)化技術進一步提高并行程序的性能,主要優(yōu)化包括2個方面:通信優(yōu)化和內核優(yōu)化。
[0008]所述步驟1.1)的詳細過程為:
熱點測試是指根據(jù)時間的測試結果確定熱點函數(shù),作為后面移植的重點代碼模塊;
找出熱點代碼后,需要分析熱點部分的算法、數(shù)據(jù)特點,根據(jù)算法和數(shù)據(jù)的特點分析其是否可以并行,是否可以采用CUDA細粒度并行,確定其并行性;
根據(jù)對串行程序的分析,確定哪些模塊需要移植到GPU平臺上運行,對于需要運行上GI^U平臺上的代碼內的數(shù)據(jù)進行分析,確定數(shù)組在代碼中的什么位置傳遞到CUDA內核中,傳遞的方向是CPUtoGPU還是GPUtoCPU,以及每次傳遞時的數(shù)據(jù)大小等信息。
[0009]所述步驟1.2)的詳細過程為:
對于CPU串行程序,根據(jù)并行算法的要求修改原程序,改成可并行的模式;同時需要重新設計并行算法;
根據(jù)CUDA并行程序對數(shù)組格式的要求對串行程序中的數(shù)組進行修改,進而將對原CPU程序修改成一個仿CUDA格式的CPU串行程序。
[0010]所述步驟2.1)的詳細過程為:
GI^U數(shù)組設計、并行模型設計:設計GPU端數(shù)組,設計數(shù)組大小、類型;設計CUDA程序的線程并行模型:block和grid ;
根據(jù)對原程序數(shù)組的分析,把CPU串行程序移植到GPU平臺,根據(jù)熱點模塊的算法和代碼實現(xiàn)CUDA內核代碼。
[0011]所述步驟2.2)的詳細過程為:
CPU與GPU通信優(yōu)化,利用異步技術減少CPU和GPU之間通信的時間;CUDA內核優(yōu)化,利用全局存儲器合并訪問、共享存儲器、常量存儲器、紋理存儲器手段提高訪存速度,利用指令流提高計算手段優(yōu)化CUDA內核。
[0012]本發(fā)明與現(xiàn)有技術相比所產生的有益效果是:
本發(fā)明的一種快速開發(fā)CUDA并行程序的方法可以快速、有效地實現(xiàn)CPU串行程序移植到GPU平臺上,降低CUDA并行程序開發(fā)的周期和難度,減少bug的調試時間,提高CUDA并行程序開發(fā)效率,降低CUDA并行程序開發(fā)周期,該方法按照逐步修改的原則,即先修改CPU串行程序后移植到GPU平臺的原理,把需要在GPU上做的工作盡量先在CPU平臺上修改,實用性強,易于推廣?!緦@綀D】
【附圖說明】
[0013]附圖1是本發(fā)明的CUDA并行程序移植流程圖。
【具體實施方式】
[0014]下面結合附圖對本發(fā)明的一種快速開發(fā)CUDA并行程序的方法作以下詳細說明。
[0015]如附圖1所示,本發(fā)明提供的一種快速開發(fā)CUDA并行程序的方法是按照CUDA并行程序格式要求修改原CPU串行程序,得到新版本的CPU串行程序;然后設計CUDA并行程序,把CPU串行程序移植到GPU平臺上并進行進一步的優(yōu)化。本發(fā)明利用先修改CPU串行程序后移植到GPU平臺的方法,充分利用CPU和GPU上的資源,快速、有效地實現(xiàn)基于GPU平臺進行程序并行化的方法。其具體操作過程為:
1、CPU串行程序分析。
[0016]對于CPU串行程序,首先需要測試串行程序中的熱點函數(shù),以及分析熱點函數(shù)的并行性。
[0017]熱點測試:根據(jù)時間的測試結果確定熱點函數(shù),作為后面移植的重點代碼模塊。
[0018]并行性分析:找出熱點代碼后,需要分析熱點部分的算法、數(shù)據(jù)特點,根據(jù)算法和數(shù)據(jù)的特點分析其是否可以并行,是否可以采用CUDA細粒度并行,確定其并行性。
[0019]確定CUDA內核使用的數(shù)組:根據(jù)對串行程序的分析,確定哪些模塊需要移植到GPU平臺上運行,對于需要運行上GPU平臺上的代碼內的數(shù)據(jù)進行分析,確定數(shù)組在代碼中的什么位置傳遞到CUDA內核中,傳遞的方向是CPUtoGPU還是GPUtoCPU,以及每次傳遞時的數(shù)據(jù)大小等信息,然后設計這些數(shù)組的定義方式和大小。
[0020]2、仿CUDA格式的CPU串行程序
CUDA程序相對CPU程序比較復雜,當出現(xiàn)bug時,調試的難度也要比CPU程序大很多,為了降低CUDA程序開發(fā)難度和周期,可以把一些GPU上的移植工作提前在CPU平臺上實現(xiàn),具體涉及下面幾個方面:
修改成可并行算法:對于CPU串行程序,有些代碼理論上可以并行,但經(jīng)過CPU版本的優(yōu)化之后導致代碼不能直接并行化,這時需要根據(jù)并行算法的要求修改原程序,改成可并行的模式;有些模塊理論上是可以并行的,但串行算法無法直接并行化,需要重新設計并行算法。
[0021]數(shù)組修改:CPU串行程序中使用的數(shù)組定義的形式有可能無法在CUDA內核中直接使用,這時需要對數(shù)組的定義進行修改,如C語言程序,結構體中的指針需要改變成單獨的指針/數(shù)組,才能進行CPU與GPU之間的數(shù)據(jù)傳遞。另外,考慮到全局存儲器合并訪問的問題,有時還需要對數(shù)組的訪問方向進行修改,從而也需要改變數(shù)組的定義形式(如做行列變換)??傊鶕?jù)CUDA對數(shù)組使用和CPU串行程序之間的區(qū)別,提前把數(shù)組修改,方便程序的調試。
[0022]根據(jù)前面幾條的修改方式,對原CPU程序修改成一個仿CUDA格式的CPU串行程序,為后面的移植工作做大量的準備,有利于后面CUDA程序的移植。
[0023]3、GPU數(shù)組設計、并行模型設計。
[0024]GPU數(shù)組設計:設計GPU數(shù)組大小、類型、維度等信息;
設計CPU與GPU之間的數(shù)組通信方式;并行模型設計:block和grid的設計滿足算法的數(shù)據(jù)特點。
[0025]4、CUDA并行程序基本版本。
[0026]根據(jù)對原程序數(shù)組的分析,把CPU串行程序移植到GPU平臺,根據(jù)熱點模塊的算法和代碼實現(xiàn)CUDA內核代碼。
[0027]設計調用語句:
Kernel〈〈〈grid, block,...>>>(...);
設計CUDA內核。
[0028]根據(jù)算法的并行性分析,設計內核,劃分每個線程的計算任務,利用同步語句滿足內核程序的邏輯正確性。
[0029]5、CUDA并行程序優(yōu)化版本。
[0030]根據(jù)步驟4實現(xiàn)的基本版本的CUDA并行程序,利用CUDA的優(yōu)化技術進一步提高并行程序的性能,主要優(yōu)化包括2個方面:通信優(yōu)化和內核優(yōu)化。
[0031]GPU通信優(yōu)化:GPU計算需要CPU與GPU之間進行數(shù)據(jù)的傳遞,合理的利用通信優(yōu)化技術有利用提高CUDA并行程序的性能,如異步。
[0032]CUDA內核優(yōu)化:CUDA內核的優(yōu)化對其性能更為重要,主要涉及存儲器訪問優(yōu)化和指令流優(yōu)化,存儲器訪問優(yōu) 化包括:全局存儲器合并訪問,利用共享存儲器、常量存儲器、紋理存儲器替換全局存儲器的訪問,提高訪問速度;指令流優(yōu)化是指利用高效的指令代替低效的指令,如CUDA中的快速函數(shù)。
[0033]由本發(fā)明的技術方案可見,本發(fā)明該方法按照先修改CPU串行程序后移植到GPU平臺的原理,把需要在GPU上做的工作盡量先在CPU平臺上修改,降低了程序的開發(fā)難度,同時有利用bug的調試。通過實現(xiàn)一種快速、有效地⑶DA并行程序開發(fā)的方法,提高CUDA并行程序開發(fā)效率,降低CUDA并行程序開發(fā)周期和難度。
[0034]以上所述僅為本發(fā)明的實施例而已,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
【權利要求】
1.一種快速開發(fā)CUDA并行程序的方法,其特征在于其具體操作過程為: 步驟一、CPU串行程序修改,即按CUDA程序格式要求對CPU串行程序的分析和修改,其中 . 1.1) CPU串行程序分析具體包括:利用打印時間方式測試串行程序中的熱點模塊;根據(jù)算法特點和數(shù)據(jù)特點分析熱點模塊是否可以并行,是否可以采用CUDA細粒度并行;根據(jù)可并行的模塊,找到CUDA內核將會使用到的數(shù)組,并對數(shù)組結構進行分析; . 1.2)仿CUDA格式的CPU串行程序修改,具體包括:原程序算法修改,修改成可并行的代碼;數(shù)組修改,修改成適合CUDA并行程序格式的數(shù)組形式; 步驟二、CUDA并行程序移植,即設計CUDA并行程序把CPU程序移植到GPU平臺,以及CUDA并行程序的優(yōu)化,其中 . 2.1)設計CUDA并行程序具體包括:線程塊、網(wǎng)格的設計,用于數(shù)據(jù)的劃分和內核的計算;通信函數(shù)的實現(xiàn),用于進行CPU與GPU之間的數(shù)據(jù)傳遞;內核的設計,實現(xiàn)CUDA并行加速熱點模塊; . 2.2)所述優(yōu)化CUDA并行程序,具體包括:將上述CUDA并行程序利用優(yōu)化技術進一步提高并行程序的性能,主要優(yōu)化包括2個方面:通信優(yōu)化和內核優(yōu)化。
2.根據(jù)權利要求1所述的一種快速開發(fā)CUDA并行程序的方法,其特征在于:所述步驟.1.1)的詳細過程為: 熱點測試是指根據(jù)時間的測試結果確定熱點函數(shù),作為后面移植的重點代碼模塊; 找出熱點代碼后,需要分析熱點部分的算法、數(shù)據(jù)特點,根據(jù)算法和數(shù)據(jù)的特點分析其是否可以并行,是否可以采用CUDA細粒度并行,確定其并行性; 根據(jù)對串行程序的分析,確定哪些模塊需要移植到GPU平臺上運行,對于需要運行上GI^U平臺上的代碼內的數(shù)據(jù)進行分析,確定數(shù)組在代碼中的什么位置傳遞到CUDA內核中,傳遞的方向是CPUtoGPU還是GPUtoCPU,以及每次傳遞時的數(shù)據(jù)大小等信息。
3.根據(jù)權利要求1或2所述的一種快速開發(fā)CUDA并行程序的方法,其特征在于:所述步驟1.2)的詳細過程為: 對于CPU串行程序,根據(jù)并行算法的要求修改原程序,改成可并行的模式;同時需要重新設計并行算法; 根據(jù)CUDA并行程序對數(shù)組格式的要求對串行程序中的數(shù)組進行修改,進而將對原CPU程序修改成一個仿CUDA格式的CPU串行程序。
4.根據(jù)權利要求3所述的一種快速開發(fā)CUDA并行程序的方法,其特征在于:所述步驟.2.1)的詳細過程為: GI^U數(shù)組設計、并行模型設計:設計GPU端數(shù)組,設計數(shù)組大小、類型;設計CUDA程序的線程并行模型:block和grid ; 根據(jù)對原程序數(shù)組的分析,把CPU串行程序移植到GPU平臺,根據(jù)熱點模塊的算法和代碼實現(xiàn)CUDA內核代碼。
5.根據(jù)權利要求4所述的一種快速開發(fā)CUDA并行程序的方法,其特征在于:所述步驟.2.2)的詳細過程為: CPU與GPU通信優(yōu)化,利用異步技術減少CPU和GPU之間通信的時間;CUDA內核優(yōu)化,利用全局存儲器合并訪問、共享存儲器、常量存儲器、紋理存儲器手段提高訪存速度,利用指令流提高計算手段優(yōu)化C`UDA內核。
【文檔編號】G06F11/36GK103729180SQ201310725876
【公開日】2014年4月16日 申請日期:2013年12月25日 優(yōu)先權日:2013年12月25日
【發(fā)明者】張廣勇, 盧曉偉, 沈鉑, 吳韶華, 張清 申請人:浪潮電子信息產業(yè)股份有限公司