http://cuda.it168.com/a2011/0622/1208/000001208129_all.shtml
【IT168 專稿】我正在建立一些新的CUDA原型項目,旨在弄清楚如何最好地使用CUDA 4.0,我把它寫成一個快速教程,教你如何使用Visual Studio 2010中的CUDA和最新的C++0x特性編寫一個簡單的應用程式。
因為目前CUDA SDK要求項目使用v90工具集(Visual Studio 2008)編譯,解決方案需要兩個項目,一個包括CUDA目標v90的DLL項目,一個目標v100(Visual Studio 2010)包含C++代碼的項目。
安裝依賴
確保你安裝了以下依賴軟體包
● Visual Studio 2010和2008 SP1(CUDA需要)
● Parallel NSight 1.51
● CUDA 4.0 RC或3.2,以及Thrust
本文引用的例子全部使用的是CUDA 4.0 RC,如果你沒有安裝CUDA 4.0,它們也可以在3.2環境下工作。
設定解決方案
建立一個包含兩個項目的解決方案,需要兩個項目是因為一個目標是v100(Visual Studio 2010)編譯器,允許使用最新的C++0x語言功能,另一個目標是v90(Visual Studio 2008)編譯器,因為CUDA需要它。
1)建立一個Win32控制台應用程式,取名HelloWorld,在嚮導的所有設定視窗全部保留預設設定,這個項目將包含應用程式的主進入點和所有Windows特定代碼,如管理線程要用到的並行模式庫(Parallel Patterns Library,PPL)。
▲圖 1 建立一個Win32控制台應用程式
2)建立第二個Win32項目,取名HelloWorldCuda,這個DLL將包含你的CUDA代碼,在應用程式設定視窗,應用程式類型選擇DLL,並選中空白項目複選框。
▲圖 2 建立一個Win32項目
▲圖 3 在附加選項中,選中“空白項目”
配置CUDA項目
在HelloWorldCuda項目有很多設定需要配置。
3)配置HelloWorldCuda項目
3.1)選擇“項目”*“產生自訂”菜單選項,在對話方塊中選擇CUDA 4.0項目,這一步會添加對CUDA C/C++檔案的支援,但在項目屬性的產生設定視窗顯示之前,還需要一個.cu規則檔案,如果你沒有CUDA 4.0,那麼請使用3.2規則。
▲圖 4 在產生自訂對話方塊中選擇CUDA 4.0
3.2)添加兩個新檔案到項目中,一個名為Hello.cpp的C++檔案(.cpp)和一個名為Hello.h的標頭檔(.h),將.cpp檔案重新命名為Hello.cu,你的解決方案樹形結構看起來應該像這樣:
▲圖 5 解決方案樹形結構
3.3)選擇Hello.cu檔案,開啟它的屬性視窗,在“常規”選項卡中,將“項目類型”修改為“CUDA C/C++”。
▲圖 6 將項目類型設為CUDA C/C++
3.4)選擇項目,開啟屬性視窗(Alt+斷行符號),在“常規”選項卡,將“平台工具集”欄位設為“v90”,如果你不能這樣設定,可能是因為沒有安裝Visual Studio 2008的緣故,再次提醒,CUDA需要它。
▲圖 7 設定平台工具集
3.5)開啟“連結程式”*“常規”屬性視窗,在“附加庫目錄”欄位添加“$(CUDA_PATH_V4_0)\lib\$(Platform);”。
▲圖 8 設定附加庫目錄
現在應該可以看到CUDA C/C++屬性選項卡了。
3.6)開啟“連結程式”*“輸入”屬性視窗,在“附加依賴”欄位添加“cudart.lib;”。
▲圖 9 設定附加依賴
3.7)確保你的項目總是按正確的順序產生,在HelloWorld項目上點擊右鍵,選擇“項目依賴”,選中旁邊的HelloWorldCuda複選框,這樣會強制HelloWorldCuda項目在HelloWorld之前產生。
4)至此,產生解決方案應該沒有任何警告或錯誤了。
添加一些CUDA/Thrust代碼
現在是時候添加一些代碼了,我們需要在HelloWorldCuda DLL中增加一些CUDA代碼,並輸出它,以便HelloWorld應用程式可以執行它。
5)配置HelloWorld項目,它需要連結HelloWorldCuda,也要能夠訪問與之對應的標頭檔。
5.1)開啟“連結程式”*“常規”屬性視窗,在“附加庫目錄”欄位增加“..\$(Configuration);$(CUDA_PATH_V4_0)\lib\$(Platform);”。
▲圖 10 設定附加庫目錄
5.2)開啟“連結程式”*“輸入”屬性視窗,在“附加依賴”欄位增加“cudart.lib;HelloWorldCuda.lib;”。
▲圖 11 設定附加依賴
5.3)開啟“C/C++”*“常規”屬性視窗,在“附加元件封裝含目錄”欄位增加“..\HelloWorldCuda\; $(CUDA_PATH_V4_0)\Include;”。
▲圖 12 設定附加元件封裝含目錄
5.4)單擊“項目”*“項目依賴”菜單選項,選中HelloWorldCuda複選框,讓CUDA項目成為Win32主應用程式項目的依賴。
▲圖 13 讓HelloWorldCuda成為HelloWorld項目的依賴
6)現在是時候寫一點代碼了。CUDA 4.0引入了Thrust,因此我計劃在給出的例子中使用Thrust,如果你沒有使用4.0,那你需要下載最新的Thrust庫,將其拷貝到CUDA SDK包括檔案“%CUDA_PATH%\include\thrust”下。
我們所舉的例子是一個Hello World應用程式,因此代碼非常簡單,它是Thrust項目首頁上第一個樣本的變種。
添加下面的類聲明到Hello.h檔案中,大多數代碼修複了編譯警告,需要做的是聲明一個使用host_vector構造的類,然後有一些方法執行CUDA代碼並返回結果。