一種提高計算機并行計算編程自動化程度的方法
【專利摘要】本發(fā)明公開了一種提高計算機并行計算編程自動化程度的方法,步驟(1),用cmake腳本尋找cuda環(huán)境,確認計算機上已安裝cuda環(huán)境;步驟(2),用cmake腳本尋找項目中的cuda文件,即尋找所有擴展名為.cu和.cuh的文件;步驟(3),生成cuda庫;步驟(4),用cmake腳本鏈接cuda庫到主工程文件。本發(fā)明避免了現(xiàn)有技術(shù)中配置cuda的編程環(huán)境的繁瑣步驟和人工配置,通過cmake腳本語句自動控制cuda并行計算軟件開發(fā)環(huán)境的配置,使得生成的工程文件具有“一次配置,跨平臺編譯”的靈活性,提高了并行計算軟件的開發(fā)效率。
【專利說明】一種提高計算機并行計算編程自動化程度的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件編程【技術(shù)領(lǐng)域】,尤其是涉及一種提高計算機并行計算編程自動化程度的方法。
【背景技術(shù)】
[0002]是一種高級的計算機軟件編譯配置工具,它具有很強大的跨平臺特性,可以根據(jù)不同平臺、不同編譯器輸出相應(yīng)的makefile或工程文件。Cmake并不直接構(gòu)建出最終的軟件,它只是以一種自動化的方式為軟件產(chǎn)品產(chǎn)生標(biāo)準(zhǔn)構(gòu)建檔,這使得熟悉某個集成開發(fā)環(huán)境(IDE)的開發(fā)者可以用標(biāo)準(zhǔn)的方式構(gòu)建他的軟件。
[0003]cuda技術(shù)是NVIDIA公司開發(fā)的一種顯卡并行計算技術(shù),它的基本思路是將一個計算任務(wù)分解為若干個子任務(wù),用支持cuda技術(shù)的NVIDIA顯卡啟動線程陣列,每個線程陣列包含數(shù)百甚至數(shù)千線程,同時參與運算,這極大地提高了程序的運行速度。
[0004]如果軟件編程人員需要使用cuda技術(shù),就必須配置cuda的編程環(huán)境,雖然在一些公開的資料中給出了在VS工程環(huán)境下,配置CUda環(huán)境的步驟,但步驟十分繁瑣,我們不想在用cmake生成vs2010工程文件后,還要通過手工配置的方法來實現(xiàn)cuda環(huán)境配置,并且這種手工配置編譯環(huán)境的方法不具備跨平臺的特性;也有少許資料示范了如何用cmake編譯一個單獨的程序,但并沒有涉及到cuda和c/c++代碼的混合編譯問題。我們通過實驗,提出一種用cmake工具將cuda文件包含到工程文件中,并與c/c++文件混合編譯的自動化編譯方法。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明的目的在于提供一種提高計算機并行計算編程自動化程度的方法,使用該方法能夠提高現(xiàn)有技術(shù)中計算機并行計算的自動化程度。
[0006]為解決上述技術(shù)問題,本發(fā)明采用以下技術(shù)方案:
一種提高計算機并行計算編程自動化程度的方法,包括如下步驟:
步驟(I),用cmake腳本尋找cuda環(huán)境,確認計算機上已安裝cuda環(huán)境;
步驟(2),用cmake腳本尋找項目中的cuda文件,即尋找所有擴展名為.CU和.cuh的文件;
步驟(3),生成cuda庫;
步驟(4),用cmake腳本鏈接cuda庫到主工程文件。
[0007]作為優(yōu)選,所述步驟(3)生成cuda庫的具體步驟如下:用cmake腳本語句將步驟
(2)找到的并行計算文件定義為一個cuda庫,并作為一個子工程。
[0008]作為優(yōu)選,所述步驟(3)生成cuda庫的具體步驟如下:
步驟A,為cuda文件中的每個cuda核函數(shù)創(chuàng)建一個包裝函數(shù),使之能被普通c++文件識別;
步驟B,用cmake腳本包含所有的cuda文件和普通c++文件,定義為一個單獨的工程文件。
[0009]作為優(yōu)選,為每個cuda核函數(shù)創(chuàng)建能被普通c/c++函數(shù)識別并調(diào)用的包裝函數(shù)。
[0010]作為優(yōu)選,并行計算開發(fā)環(huán)境配置的每一個步驟均為cmake腳本語句自動控制。
[0011]本發(fā)明所提出的方法具有以下有益效果:
本發(fā)明避免了現(xiàn)有技術(shù)中配置cuda的編程環(huán)境的繁瑣步驟和人工配置,通過cmake腳本語句自動控制cuda并行計算軟件開發(fā)環(huán)境的配置,使得生成的工程文件具有“一次配置,跨平臺編譯”的靈活性,提高了并行計算軟件的開發(fā)效率。本發(fā)明可采用將cuda文件和其它c/c++代碼進行混合編譯的方法,不但提高了并行計算編程的自動化程度,而且簡少了軟件項目的模塊數(shù)。
[0012]本發(fā)明的其他優(yōu)點、目標(biāo)和特征在某種程度上將在隨后的說明書中進行闡述,并且在某種程度上,基于對下文的考察研究對本領(lǐng)域技術(shù)人員而言將是顯而易見的,或者可以從本發(fā)明的實踐中得到教導(dǎo)。本發(fā)明的目標(biāo)和其他優(yōu)點可以通過下面的說明書或者附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
【專利附圖】
【附圖說明】
[0013]圖1為本發(fā)明實施例1的方法流程圖;
圖2為本發(fā)明實施例2的方法流程圖。
【具體實施方式】
[0014]本發(fā)明提供了一種提高計算機并行計算編程自動化程度的方法,包括如下步驟: 步驟(I),準(zhǔn)備好cuda文件;
步驟(2),用cmake腳本語句尋找cuda環(huán)境;
步驟(3),如果找到cuda環(huán)境,用cmake腳本尋找項目中的cuda文件,即尋找所有擴展名為.CU和.cuh的文件;
步驟⑷,生成cuda庫;
步驟(5),用cmake腳本鏈接cuda庫到主工程文件。
[0015]其中步驟(4)中,可以是生成新的cuda庫(參見實施例1),也可以是將cuda文件和其它c/c++代碼進行混合編譯,而且無需為工程創(chuàng)建新的cuda庫文件(參見實施例2),本發(fā)明實現(xiàn)有效的解決了現(xiàn)有技術(shù)中出現(xiàn)的問題,提高了計算機并行計算的自動化程度。
[0016]為了使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明的技術(shù)方案,下面結(jié)合附圖和具體實施例對本發(fā)明作進一步的詳細說明。
[0017]實施例1:
參見圖1,本發(fā)明包括如下步驟:
步驟(I ),準(zhǔn)備好CUda文件,源文件一般以*.CU為擴展名,目標(biāo)文件以*.CUh為擴展
名;
步驟(2),尋找cuda環(huán)境,這個步驟與尋找普通軟件包是一樣的,都是通過調(diào)用cmake的FIND_PACKAGE宏實現(xiàn)的;
步驟(3),如果找到cuda環(huán)境,則將cuda文件編譯成一個cuda庫,這一步是通過CUDA_LIBRARIES 宏實現(xiàn);步驟(4)、最后,將S3步生成的cuda庫文件鏈接到總的目標(biāo)文件上。
[0018]下面是該流程的一個具體實施例,在以下實施例中,我們用cmake腳本語言控制環(huán)境配置的所有步驟,我們假設(shè)已經(jīng)準(zhǔn)備好所有的CUDA文件,因此省略步驟I。
[0019]#定義工程名
project (ImageViewerPlugin)
SET(CMAKE.DEBUG.POSTFIX ”d”)
#步驟2:找到工程中的cuda文件 file(GL0B SRC.FILES”*.cpp”) file (GLOB SRC.FILES.C”*.c”) file (GLOB INC.FILES”*.h”) file (GLOB CUDA.FILES”*.cu”)
#步驟2:如果找到了 cuda環(huán)境,則將cuda文件編譯成庫 find_package (cuda) if(CUDA_F0UND)
CUDA_LIBRARIES(MYCUDALIB${CUDA_FILES})
endif(CUDA_F0UND)
#...省略
#步驟4:將cuda庫鏈接到最終的目標(biāo)文件 ADD_LIBRARY ($ {LIB_NAME} # 最終目標(biāo)文件 ${LIB_TYPE}
$ {SRC_FILES}
${SRC_FILES_C}
${CUDA_FILES}
$ {MYCUDALIB} # 被鏈接的 cuda 庫 ${INC_FILES}
${0CS_UI_SRC}
${M0C_GENERATED}
${QM_FILE}
${TRANSLAT1N})
在上述實施例中,cmake通過file宏找到工程中的cuda文件,CUDA_LIBRARIES宏是關(guān)鍵,該宏有兩個參數(shù),第一個參數(shù)是將要編譯的cuda庫的名稱,第二個參數(shù)是工程中的cuda文件,在該例子中MYCUDALIB為我們要得到的cuda庫名稱,變量CUDA_FILES是cmake找到的工程中的cuda文件。最后通過ADD_LIBRARY宏將cuda庫與目標(biāo)文件進行鏈接。
[0020]實施例2:
參見圖2,本實施例中,在同一個工程文件,將cuda文件和其它c/c++代碼進行混合編譯,而且無需為工程創(chuàng)建新的cuda庫文件,具體步驟如下:
步驟(I ),準(zhǔn)備好cuda文件,源文件一般以*.CU為擴展名,目標(biāo)文件以*.cuh為擴展
名;
步驟(2),尋找cuda環(huán)境,這個步驟與尋找普通軟件包是一樣的,都是通過調(diào)用cmake的FIND_PACKAGE宏實現(xiàn)的;
步驟(3),為cuda文件中的每個cuda核函數(shù)創(chuàng)建一個包裝函數(shù),使之能被普通c++文件識別;
步驟(4),用cmake腳本包含所有的cuda文件和普通c++文件,定義為一個單獨的工程文件;
步驟(5),用cmake腳本鏈接cuda庫到主工程文件。
[0021]本實施例的一個關(guān)鍵點是需要對cuda核函數(shù)進行函數(shù)封裝,以便能讓普通c/c++函數(shù)能識別并調(diào)用cuda文件中的并行計算函數(shù)。
[0022]以下是本發(fā)明的一個具體實施例,在以下實施例中,我們用cmake腳本語言控制環(huán)境配置的所有步驟,我們假設(shè)已經(jīng)準(zhǔn)備好所有的CUDA文件,因此省略步驟I。
[0023]#定義工程名
project (ImageViewerPlugin)
SET(CMAKE.DEBUG.POSTFIX ”d”)
#步驟2:找到工程中的cuda文件 file(GL0B SRC.FILES”*.cpp”) file (GLOB SRC.FILES.C”*.c”) file (GLOB INC.FILES”*.h”) file (GLOB CUDA.FILES”*.cu”)
#步驟2:如果找到了 cuda環(huán)境,則將cuda文件編譯obj文件 find_package (cuda) if(CUDA_F0UND)
CUDA_C0MPILE(MYCUDALIB${CUDA_FILES})
endif(CUDA_F0UND)
#...省略
#步驟4:將cuda庫鏈接到最終的目標(biāo)文件 ADD_LIBRARY ($ {LIB_NAME} # 最終目標(biāo)文件 ${LIB_TYPE}
$ {SRC_FILES}
${SRC_FILES_C}
${CUDA_FILES}
$ {MYCUDALIB} # 被鏈接的 cuda 庫 ${INC_FILES}
${0CS_UI_SRC}
${M0C_GENERATED}
${QM_FILE}
${TRANSLAT1N})
在本實施例中,先將*.cu文件編譯為obj 二進制文件,然后再將obj 二進制文件與目標(biāo)鏈接。為了將cuda文件編譯成obj 二進制文件,要用到宏CUDA_C0MPILE,所以,為了將cuda文件編譯成obj文件,需要把所述實施例1中的CUDA_LIBRARIES改成CUDA_C0MPILE。[0024] 最后說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制,本領(lǐng)域普通技術(shù)人員對本發(fā)明的技術(shù)方案所做的其他修改或者等同替換,只要不脫離本發(fā)明技術(shù)方案的精神和范圍,均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
【權(quán)利要求】
1.一種提高計算機并行計算編程自動化程度的方法,其特征在于:包括如下步驟: 步驟(I),用cmake腳本尋找cuda環(huán)境,確認計算機上已安裝cuda環(huán)境; 步驟(2),用cmake腳本尋找項目中的cuda文件,即尋找所有擴展名為.CU和.cuh的文件; 步驟(3),生成cuda庫; 步驟(4),用cmake腳本鏈接cuda庫到主工程文件。
2.根據(jù)權(quán)利要求1所述的一種提高計算機并行計算編程自動化程度的方法,其特征在于:所述步驟(3)生成cuda庫的具體步驟如下: 用cmake腳本語句將步驟(2)找到的并行計算文件定義為一個cuda庫,并作為一個子工程。
3.根據(jù)權(quán)利要求1所述的一種提高計算機并行計算編程自動化程度的方法,其特征在于:所述步驟(3)生成cuda庫的具體步驟如下: 步驟A,為cuda文件中的每個cuda核函數(shù)創(chuàng)建一個包裝函數(shù),使之能被普通c++文件識別;步驟B,用cmake腳本包含所有的cuda文件和普通c++文件,定義為一個單獨的工程文件。
4.根據(jù)權(quán)利要求3所述的一種提高計算機并行計算編程自動化程度的方法,其特征在于:所述的步驟(3),為每個cuda核函數(shù)創(chuàng)建能被普通c/c++函數(shù)識別并調(diào)用的包裝函數(shù)。
5.根據(jù)權(quán)利要求1一 4任一項所述的一種提高計算機并行計算編程自動化程度的方法,其特征在于:并行計算開發(fā)環(huán)境配置的每一個步驟均為cmake腳本語句自動控制。
【文檔編號】G06F9/44GK104035767SQ201410236725
【公開日】2014年9月10日 申請日期:2014年5月30日 優(yōu)先權(quán)日:2014年5月30日
【發(fā)明者】陳長寶, 張玉, 盧志淵, 杜紅民, 謝興, 張俊 申請人:中原智慧城市設(shè)計研究院有限公司