CUDA10.1配置VS2017
目錄
一 ?CUDA 安裝
二? CUDA環境變量配置
三? CUDA配置VS2017
一 ?CUDA 安裝
? ?1.1 CUDA下載
? ? ?網址:https://developer.nvidia.com/cuda-toolkit-archive
?
可以根據需要下載不同版本的CUDA安裝包。
?
1.2 CUDA安裝
? ?1.2.1?雙擊下載的.exe文件安裝
? 1.2.2 點擊‘OK’
?1.2.3 上一步解壓完成后,會自動跳到下圖,點擊‘同意并繼續’即可,由于我已經安裝過了,下圖是我在網上找的一個圖,各版? ? ? ? ? ? ?本都一樣
?
二? CUDA環境變量配置
? ? 2.1 右擊此電腦→屬性→高級系統設置→環境變量
?
?
2.2 系統變量里添加:
? ? ? CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.1
? ? ? CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
? ? ? CUDA_BIN_PATH = %CUDA_PATH%\bin
? ? ? CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
? ? ? CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
注意:CUDA _PATH與CUDA _PATH_V10_1是CUDA安裝時自動添加的;
? ? ? ? ? CUDA _PATH_V10_1中的10_1是你安裝CUDA的版本號
?
2.3 添加以下到系統變量path中,添加完點確定
? ? ? %CUDA_LIB_PATH%
? ? ? %CUDA_BIN_PAHT%
? ? ?%CUDA_SDK_BIN_PAHT%
? ? ? %CUDA_SDK_LIB_PATH%
?
?
2.4 重啟電腦,然后打開cmd,輸入: set cuda?? 即可看到下圖
?
2.5 檢查cuda是否安裝好, 打開cmd,
? ? ? 2.5.1? 輸入:cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite
? ? ? ? ? ? ? ? ?輸入之后,注意是否為自己安裝的目錄,然后按‘Enter’鍵
? ? ?2.5.2 找到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite目錄下的deviceQuery.exe,在? ? ? ? ? ? ? ? ?cmd里輸入:deviceQuery.exe
上圖中Result=PASS,表示安裝好,否則Result=Fail重裝或更換cuda版本吧。
?
2.5.3 找到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite目錄下的bandwidthTest.exe,在? ? ? ? ? ? ? ? cmd里輸入:bandwidthTest.exe
上圖中Result=PASS,表示安裝好,否則Result=Fail重裝或更換cuda版本吧。
?
三? CUDA配置VS2017
3.1? 打開VS2017新建工程
?
3.2 右擊源文件→添加→新建項→CUDA C/C++ File;創建一個.cu文件
?
?
?
3.3 右擊項目名稱test_cuda2→生成依賴項→生成自定義,→選擇CUDA10.1→確定
?
?
3.4 右擊cuda_test.cu文件→屬性→配置屬性→常規→項類型→CUDA C/C++
?
?
3.5 右擊test_cuda2→屬性
?
3.5.1→VC++目錄。在包含目錄中添加C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include;在庫目錄中添加? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64。
注意:要根據自己的CUDA安裝添加正確的目錄
?
?
3.5.2 →鏈接器→輸入→附加依賴項。再附加依賴項中添加相應的.lib文件名稱
?? 我這里加的比較多cublas.lib
cublasLt.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufft.lib
cufftw.lib
curand.lib
cusolver.lib
cusparse.lib
nppc.lib
nppial.lib
nppicc.lib
nppicom.lib
nppidei.lib
nppif.lib
nppig.lib
nppim.lib
nppist.lib
nppisu.lib
nppitc.lib
npps.lib
nvblas.lib
nvgraph.lib
nvml.lib
nvrtc.lib
OpenCL.lib
?
?
3.6? 配置成功后,這里附帶一個測試程序:
// CUDA runtime 庫 + CUBLAS 庫 #include "cuda_runtime.h" #include "cublas_v2.h" #include <time.h> #include <iostream> using namespace std;// 定義測試矩陣的維度 int const M = 5; int const N = 10;int main() {// 定義狀態變量 cublasStatus_t status;// 在 內存 中為將要計算的矩陣開辟空間 float *h_A = (float*)malloc(N*M * sizeof(float));float *h_B = (float*)malloc(N*M * sizeof(float));// 在 內存 中為將要存放運算結果的矩陣開辟空間 float *h_C = (float*)malloc(M*M * sizeof(float));// 為待運算矩陣的元素賦予 0-10 范圍內的隨機數 for (int i = 0; i < N*M; i++) {h_A[i] = (float)(rand() % 10 + 1);h_B[i] = (float)(rand() % 10 + 1);}// 打印待測試的矩陣 cout << "矩陣 A :" << endl;for (int i = 0; i < N*M; i++) {cout << h_A[i] << " ";if ((i + 1) % N == 0) cout << endl;}cout << endl;cout << "矩陣 B :" << endl;for (int i = 0; i < N*M; i++) {cout << h_B[i] << " ";if ((i + 1) % M == 0) cout << endl;}cout << endl;/*** GPU 計算矩陣相乘*/// 創建并初始化 CUBLAS 庫對象 cublasHandle_t handle;status = cublasCreate(&handle);if (status != CUBLAS_STATUS_SUCCESS){if (status == CUBLAS_STATUS_NOT_INITIALIZED) {cout << "CUBLAS 對象實例化出錯" << endl;}getchar();return EXIT_FAILURE;}float *d_A, *d_B, *d_C;// 在 顯存 中為將要計算的矩陣開辟空間 cudaMalloc((void**)&d_A, // 指向開辟的空間的指針 N*M * sizeof(float) // 需要開辟空間的字節數 );cudaMalloc((void**)&d_B,N*M * sizeof(float));// 在 顯存 中為將要存放運算結果的矩陣開辟空間 cudaMalloc((void**)&d_C,M*M * sizeof(float));// 將矩陣數據傳遞進 顯存 中已經開辟好了的空間 cublasSetVector(N*M, // 要存入顯存的元素個數 sizeof(float), // 每個元素大小 h_A, // 主機端起始地址 1, // 連續元素之間的存儲間隔 d_A, // GPU 端起始地址 1 // 連續元素之間的存儲間隔 );cublasSetVector(N*M,sizeof(float),h_B,1,d_B,1);// 同步函數 cudaThreadSynchronize();// 傳遞進矩陣相乘函數中的參數,具體含義請參考函數手冊。 float a = 1; float b = 0;// 矩陣相乘。該函數必然將數組解析成列優先數組 cublasSgemm(handle, // blas 庫對象 CUBLAS_OP_T, // 矩陣 A 屬性參數 CUBLAS_OP_T, // 矩陣 B 屬性參數 M, // A, C 的行數 M, // B, C 的列數 N, // A 的列數和 B 的行數 &a, // 運算式的 α 值 d_A, // A 在顯存中的地址 N, // lda d_B, // B 在顯存中的地址 M, // ldb &b, // 運算式的 β 值 d_C, // C 在顯存中的地址(結果矩陣) M // ldc );// 同步函數 cudaThreadSynchronize();// 從 顯存 中取出運算結果至 內存中去 cublasGetVector(M*M, // 要取出元素的個數 sizeof(float), // 每個元素大小 d_C, // GPU 端起始地址 1, // 連續元素之間的存儲間隔 h_C, // 主機端起始地址 1 // 連續元素之間的存儲間隔 );// 打印運算結果 cout << "計算結果的轉置 ( (A*B)的轉置 ):" << endl;for (int i = 0; i < M*M; i++) {cout << h_C[i] << " ";if ((i + 1) % M == 0) cout << endl;}// 清理掉使用過的內存 free(h_A);free(h_B);free(h_C);cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);// 釋放 CUBLAS 庫對象 cublasDestroy(handle);getchar();return 0; }?
程序運行結果:
?
總結
以上是生活随笔為你收集整理的CUDA10.1配置VS2017的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划,背包问题
- 下一篇: Qt配置VS2017