標籤:style blog http color 使用 os strong io
原文 : http://blog.csdn.net/augusdi/article/details/12527497
前提安裝:
Visual Studio 2012
Visual Assist X
安裝步驟:
1. Nvidia顯卡驅動,裝275.33版,這是最新版本驅動,初次安裝為了少出錯,最好安裝比較新版本的驅動。
2. Cuda Toolkit 4.0安裝,CUDA 4.0的新特性可以參見其Release Notes,其中包括了本文將要介紹的Thrust庫。
3. GPU Computing SDK 4.0 安裝,預設安裝路徑可能是
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0,記這個路徑為SDK_PATH.
4. Parallel Nsight 2.0 安裝,這個工具可以將GPU通用計算整合進Microsoft Visual Studio,能夠對使用CUDA C,OpenCL, DirectCompute, Direct3D, 和 OpenGL的應用程式進行調試和分析。
5.現在可以用VS開啟CUDA SDK的例子了,在這之前,兩個工具庫可以先產生一下。
a.使用VS2010開啟SDK_PATH \ c\common\cutil vs2010.sln, VS2010 選“Build|Batch Build…”,“Select All”,產生所有配置需要的lib.如果遇到“Can not open source file …”的錯誤,把檔案夾的唯讀屬性去掉。
目的:產生各配置需要的cutilxx[D].lib XX:32 /64 [D]debug模式
lib存放的位置:SDK_PATH \ c\common\lib\(win32|X64)
b.同上方法,開啟SDK_PATH\share\ shrUtils_vs2010.sln 選“Build|Batch Build…”
目的:產生各配置需要的shrUtilxx.lib XX:32 /64 [D]debug模式
lib存放的位置:SDK_PATH\share\lib\(Win32|x64)
注:這個項目編譯時間會提示有兩個.cpp找不到,直接把他們從項目裡移去即可。因為同名的.h檔案裡已經有完整代碼了。
c.測試例子:VS2010 開啟SDK例子:deviceQuery, matrixMul各種配置均可編譯執行成功, CUDA的基本配置就完了。
CUDA C/C++關鍵字和函數高亮顯示:
在上面HelloWorldCuda.cu檔案中發現CUDA C/C++的關鍵字__global__等沒有高亮顯示,而且還有下劃曲線。下面進行CUDA C/C++關鍵字和函數的文法高亮顯示,配置Visual AssistX 函數高亮,代碼提示等功能。
下面是關於代碼高亮的設定。共三個設定
1. .cu檔案中C/C++關鍵字高亮
這個設定是讓VS2010編輯.cu檔案時,把.cu檔案裡的C/C++文法高亮。
設定方法: 在VS2010的菜單 依次點擊:“Tools|Options…|Text Editor|File Extension”,在這個介面裡: “Editor”下拉框選“Microsoft Visual C++”,在“Extension”文字框輸入.cu 點擊“Add”按鈕 ,重複工作把.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的Visual AssistX, 在CUDA 安裝前、後安裝都行。需要兩步實現需要的功能:
a) 讓Visual AssistX支援CUDA函數高亮和程式碼完成。在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) 讓Visual AssistX支援.cu檔案,也就讓Visual AssistX幫我們實現.cu檔案高亮和程式碼完成功能,需要編輯註冊表。首先關閉VS2010,點擊開始菜單輸入regedit開啟註冊表,找到如下位置:HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet11。在右邊找到ExtSource項目,滑鼠右鍵選修改,在原有文字後添加如下文字:.cu;.cuh; 確定後關閉註冊表,重新開啟vs2010,Visual AssistX開始支援.cu及.cuh檔案的文法高亮及程式碼完成。此時.cu檔案的CUDA函數是高亮的,使用函數名符號就會自動提示函數全稱,參數類型等資訊了。
經過上面的安裝,開發程式應該沒問題了,但會發現有如下的問題:
1. VS2010顯示.cu檔案時,有很多CUDA函數下有波浪線
2. 在.cu檔案裡使用VS2010的“Go to definition”功能查無法找到CUDA函數的定義。
這兩個問題的原因是VS2010不認識這些函數,沒有指定它們在那個標頭檔裡包含的。解決方案其實是一樣的,把CUDA tookit 和CUDA SDK的標頭檔路徑加到VS2010的VC++目錄裡面。
建立自己的CUDA項目
1. 建立一個Win32 console application 程式 HelloWorldCuda,選擇空項目,然後添加一個源檔案HelloWorldCuda.cpp, 改名字為HelloWorldCuda.cu。
2. 選擇Project | Build Customizations…菜單,在對話方塊中選擇CUDA 4.0,這會添加對CUDA C/C++檔案(*.cu)的支援
3. 選擇HelloWorldCuda.cu檔案,右擊選擇Property開啟屬性對話方塊,在General屬性頁面下,將Item Type改為”CUDA C/C++”
注意:CUDA C/C++已經在屬性頁面中出現了
4. 開啟“Linker|Input”屬性頁面,在“Additional Dependencies”中添加“cudart.lib;”
5. 向HelloWorldCuda.cu中添加一些代碼。…………
測試程式:
[cpp] view plaincopy
- #include <stdio.h>
- bool InitCUDA()
- {
- int count;
-
- cudaGetDeviceCount(&count);
-
- if(count == 0)
- {
- fprintf(stderr, "There is no device.\n");
- return false;
- }
-
- int i;
-
- for(i = 0; i < count; i++)
- {
- cudaDeviceProp prop;
-
- if(cudaGetDeviceProperties(&prop, i) == cudaSuccess)
- {
- if(prop.major >= 1)
- {
- break;
-
- }
- }
- }
-
- if(i == count)
- {
- fprintf(stderr, "There is no device supporting CUDA 1.x.\n");
- return false;
- }
-
- cudaSetDevice(i);
-
- return true;
- }
-
- int main()
- {
- if(!InitCUDA())
- {
- return 0;
- }
-
- printf("HelloWorld, CUDA has been initialized.\n");
-
- return 0;
- }
用 Ctrl+F5 運行,通過nvcc編譯成功,輸出結果。
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin