GPU(CUDA)學習日記(四)----------VS2010 + win7 32位 + CUDA 4.2 環境配置以及一些小問題的解決

原帖地址:http://topic.csdn.net/u/20110615/12/bde220f8-cf7f-49fc-b201-05cc520eb441.html ,感謝之!學習了!~解決了我.cu文件很多波浪的問題。    

基本安裝:

 1. 顯卡驅動,到官網上去找最新的驅動吧~
  
 2. VS2010, VS2010sp1 慢慢裝吧,耐心等待。  
 
 3. VassistX 這個可以以後裝也行。

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

 5. cuda sdk 4.2這個安裝要說明一下,建議不要按缺省路徑安裝,否則文件不好查找。
  我一般指定到如下格式路徑:D:\CUDASDK_42_win32 安裝到D盤,42表示4.2,win32位版,這樣比較容易找到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目錄麻煩。


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也能找到該文件,該文件裏定義的函數就不會有下劃線了,可以使用“轉到定義”,“轉到聲明”,“查找引用”功能定位到了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章