天天看點

CUDA4.0 + VS2010 + Win7 64 + VAssistX 安裝經驗

 我的環境:Win7 64旗艦 ,GTX580 + ATI5450,使用雙顯示卡為了單機調試,使用ATI卡為了防止搞不清楚程式在那個卡上跑CUDA。

要安裝的是:CUDA 4.0 64位 + VS2010旗艦

基本安裝:

 1. 顯示卡驅動,ATI裝公版驅動,顯示器在此卡上連接配接,GTX580不連接配接顯示器。

  N卡驅動,裝270.81版,這是CUDA4.0要求的版本,初次安裝為了少出錯,最好安裝指定版本驅動。

 2. VS2010, VS2010sp1 慢慢裝吧,耐心等待。 

 3. VassistX 這個可以以後裝也行。

 4. cuda tool kit 4.0和 cuda tools 4.0依次安裝,比較塊。

 5. cuda sdk 4.0這個安裝要說明一下,建議不要按預設路徑安裝,否則檔案不好查找。

  我一般指定到如下格式路徑:D:\CUDASDK_40_win64 安裝到D盤,40表示4.0,win64位版,這樣比較容易找到sdk。

  下面把文字裡這個路徑用字元串 “SDK_PATH"表示。

6. 工具庫生成:

  現在VS可以打開Cuda SDK的例子試試了,不過在這之前有兩個工具庫最好先生成一下。

  a.使用VS2010打開SDK_PATH \ c\common\cutil vs2010.sln

  VS2010 選“生成->批生成”,全選,生成所有配置需要的lib.

  目的:生成各配置需要的cutilxx[D].lib XX:32 /64 [D]debug模式 

  lib存放的位置:SDK_PATH \ c\common\lib\(win32|X64)

  b.同上方法,打開SDK_PATH\share\ shrUtils_vs2010.sln 選“批生成”

  目的:生成各配置需要的shrUtilxx.lib XX:32 /64 [D]debug模式 

  lib存放的位置:SDK_PATH\share\lib\(Win32|x64)

  注:這個項目編譯時會提示有兩個.cpp找不到,直接把他們從項目裡移去即可。因為同名的.h檔案裡已經有完整代碼了。

7.測試例子:VS2010 打開SDK例子:deviceQuery, matrixMul各種配置均可編譯執行成功, CUDA的基本配置就完了。

8. 開自己的CUDA項目:

  CUDA項目的配置比較麻煩,最好是在原有的例子項目基礎上修改。CUDA SDK 的例子SDK_PATH C\src\template就是給用

  戶提供的開發模闆,可以把該項目在src目錄下複制一份,再改成你需要的項目名字即可。一定還要放在src目錄裡,因為

  項目裡的include和lib目錄使用了相對路徑。不放到src目錄,編譯時會打不開頭檔案。是以,為了使用方面cuda sdk最好

  不要使用預設安裝路徑,否則查找src目錄麻煩。

現在CUDA4.0的基本配置已經完了,下一步是文法高亮,配置VassistX 函數高亮,代碼提示等功能。

下面是關于代碼高亮的設定。共三個設定

1. .cu檔案高亮

  這個設定是讓VS2010編輯.cu檔案時,把.cu檔案裡的C/C++文法高亮。

 設定方法: 在VS2010的菜單 依次點選:工具->選項->文本編輯器->檔案擴充名 ,在這個界面裡: “編輯器(I)”下拉框選microsoft visual ++,在“擴充名”文本框輸入.cu 點選“添加”按鈕 ,重複工作把.cuh 添加為vc++類型,點選确定按鈕。 把全部.cu檔案關閉,再打開,.cu檔案C++關鍵字就高亮了。如果不行就重新VS2010。

 但是CUDA的關鍵字還是黑色的,下一步把CUDA關鍵自高亮顯示

2. CUDA關鍵字高亮

  為了讓CUDA的關鍵字,象 __device__、dim3之類的文字高亮,需要如下步驟:

把SDK_PATH\C\doc\syntax_highlighting\usertype.dat 複制到

X:\Program Files (X86)\Microsoft Visual Studio 10.0\Common7\IDE\ 目錄下 

 這裡 X:是安裝VS2010盤符,這是win7 64位下的路徑。

注意:win7 64系統不要複制到這個目錄裡,複制到這裡是不會CUDA關鍵字高亮的:

 X:\Program Files \Microsoft Visual Studio 10.0\Common7\IDE\

(如果你的win7是32位的,可能正好是上面這個目錄,應該會高亮的,這可能是win7 64位和32位

的差别吧)

再次強調:SDK_PATH要換成你安裝SDK的實際路徑,不要直接使用這個字元串。

VS2010需要重新開機,重新開機後打開.cu檔案,CUDA的關鍵自應該變成藍色了。

3. CUDA 函數高亮,及CUDA函數輸入代碼提示

 實作這個功能就要使用VAssistX了。 首先安裝支援VS2010的VAssistX。這個可以在CUDA 安裝前、後安裝都行。

 需要兩步實作需要的功能:

a) 讓VAssistX支援CUDA函數高亮和代碼完成

 這個在VAssistX的菜單裡設定完成:在Vs2010菜單裡依次點選:

 VassistX->Visual assist X Options->Projects->C/C++Directories

 在這個界面的 “Platform”下拉框選 Custom,在“Show Directories for..“下拉框選 Other include files,

 然後在下面的輸入框裡,建立、添加三個路徑,點選确定,三個路徑分别如下

 SDK_PATH的\c\common\inc

 SDK_PATH的\shared\inc

 X:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include

 再次強調:這裡SDK_PATH要用你安裝的SDK路徑代替,X:是你的CUDA toolkit安裝盤符。

這樣分别在這三個目錄裡面的.h檔案定義的函數和類型VAssistX會幫我們在編輯檔案時候實作高亮和完成代碼

如果少包含一個路徑,這個目錄裡的.h定義的函數和類型就不會高亮和提示了。

b)讓VAssistX支援.cu檔案,也就是編輯.cu檔案是VAssistX幫我們實作高亮和代碼完成功能。這個需要編輯系統資料庫了。

 首先關閉VS2010,使用regedit打開系統資料庫,找到如下位置:

  HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet10

 在右邊找到ExtSource項目,滑鼠右鍵選修改,在原有文字後添加如下文字:.cu;.cuh; 确定後

 關閉系統資料庫,重新打開vs2010,VAssistX開始支援.cu及.cuh檔案的文法高亮及代碼完成。

 此時.cu檔案了的CUDA函數是高亮的,使用函數名符号就會自動提示函數全稱,參數類型等資訊了。

1. VS2010顯示.cu檔案時,有很多CUDA函數下有波浪線的問題

2. 在.cu檔案裡使用VS2010的“轉到定義”功能查無法找到CUDA函數的定義

--------------------------------

這兩個問題的解決方法其實是一樣的,原因是VS2010不認識這些函數,不指定它們在那個頭檔案裡包含的,

解決的方法很簡單,把CUDA tookit 和CUDA SDK的頭檔案路徑加到VS2010的VC++目錄裡面。

在VS2008裡面使用工具->選項對話框裡面可以設定,但是VS2010的這個對話框裡顯示“工具">"選項"中的VC++目标編輯功能已被否決。  

經過網上搜尋發現此工作已經變成了項目屬性裡的選項。

修改方法是:使用”視圖”->其它視窗->屬性視窗,打開屬性管理器視圖。

屬性管理器顯示是項目所有的配置資訊:如Debug|win32 Debug|X64,Release|32 Relase|x64 ,對32位和64位配置需要單獨,同一平台的Debug和Relase隻要修改一個就形了,如修改了Debug|Win32 ,則Release|win32就無需修改了。

具體方法,假設修改Debug|win32,滑鼠點選展開Debug|win32項目,可以看到第一個子項目是“microsoft .Cpp.Win32.user" ,輕按兩下該項目,出現“microsoft .Cpp.Win32.user”對話框,

對話框裡面有VC++目錄選項, 在右邊的“包含目錄”選項裡,單擊滑鼠,選編輯,添加CUDA toolkit 的include目錄,CUDA SDK目錄下的\C\common\inc 和 \share\inc 目錄資訊,這三個目錄也就是添加到VAssistX裡的頭檔案目錄,目的是讓VC2010知道這些頭檔案裡定義的函數,重新開機VS2010,打開CUDA工程

VS2010就不會在CUDA函數下顯示紅色波浪線了,而且可以使用“轉到定義”,“轉到聲明”功能定位到CUDA函數和類型定義的檔案。

最後一個小問題:經過如上的設定,基本上不會再有波浪線出現,個别符号例外,有波浪線也可以轉到定義。

但是發現一些小問題,如sdk例子template項目和MatrixMul項目,打開後發現在xxxx_kernel.cu裡定義的函數,在其它.cu裡還是有波浪線,也不能使用“轉到定義”功能,如matrixMul.cu裡無法查找在matrixMul_kernel.cu裡定義的函數matrixMul() ,檢視matrixMul.cu檔案發現該檔案采用如下形式包含matrixMul_kernel.cu檔案:include<matrixMul_kernel.cu>  

 這是告訴VS2010要到VS2010系統定義的include目錄裡面查找包含檔案,實際上該檔案是在目前項目的目錄裡。CUDA的編譯器可以找到該檔案(有點怪),VS2010找不到該檔案,該檔案裡定義的函數VS2010也不認識,解決方法很簡單,改成include“matrixMul_kernel.cu“,這樣CDUA編譯器能找到該檔案,VS也能找到該檔案,該檔案裡定義的函數就不會有下劃線了,可以使用“轉到定義”,“轉到聲明”,“查找引用”功能定位到了。

繼續閱讀