CUDA10.1配置VS2017
目錄
一 ?CUDA 安裝
二? CUDA環(huán)境變量配置
三? CUDA配置VS2017
一 ?CUDA 安裝
? ?1.1 CUDA下載
? ? ?網(wǎng)址:https://developer.nvidia.com/cuda-toolkit-archive
?
可以根據(jù)需要下載不同版本的CUDA安裝包。
?
1.2 CUDA安裝
? ?1.2.1?雙擊下載的.exe文件安裝
? 1.2.2 點(diǎn)擊‘OK’
?1.2.3 上一步解壓完成后,會(huì)自動(dòng)跳到下圖,點(diǎn)擊‘同意并繼續(xù)’即可,由于我已經(jīng)安裝過了,下圖是我在網(wǎng)上找的一個(gè)圖,各版? ? ? ? ? ? ?本都一樣
?
二? CUDA環(huán)境變量配置
? ? 2.1 右擊此電腦→屬性→高級(jí)系統(tǒng)設(shè)置→環(huán)境變量
?
?
2.2 系統(tǒng)變量里添加:
? ? ? 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安裝時(shí)自動(dòng)添加的;
? ? ? ? ? CUDA _PATH_V10_1中的10_1是你安裝CUDA的版本號(hào)
?
2.3 添加以下到系統(tǒng)變量path中,添加完點(diǎn)確定
? ? ? %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 右擊源文件→添加→新建項(xiàng)→CUDA C/C++ File;創(chuàng)建一個(gè).cu文件
?
?
?
3.3 右擊項(xiàng)目名稱test_cuda2→生成依賴項(xiàng)→生成自定義,→選擇CUDA10.1→確定
?
?
3.4 右擊cuda_test.cu文件→屬性→配置屬性→常規(guī)→項(xiàng)類型→CUDA C/C++
?
?
3.5 右擊test_cuda2→屬性
?
3.5.1→VC++目錄。在包含目錄中添加C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include;在庫(kù)目錄中添加? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64。
注意:要根據(jù)自己的CUDA安裝添加正確的目錄
?
?
3.5.2 →鏈接器→輸入→附加依賴項(xiàng)。再附加依賴項(xiàng)中添加相應(yīng)的.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? 配置成功后,這里附帶一個(gè)測(cè)試程序:
// CUDA runtime 庫(kù) + CUBLAS 庫(kù) #include "cuda_runtime.h" #include "cublas_v2.h" #include <time.h> #include <iostream> using namespace std;// 定義測(cè)試矩陣的維度 int const M = 5; int const N = 10;int main() {// 定義狀態(tài)變量 cublasStatus_t status;// 在 內(nèi)存 中為將要計(jì)算的矩陣開辟空間 float *h_A = (float*)malloc(N*M * sizeof(float));float *h_B = (float*)malloc(N*M * sizeof(float));// 在 內(nèi)存 中為將要存放運(yùn)算結(jié)果的矩陣開辟空間 float *h_C = (float*)malloc(M*M * sizeof(float));// 為待運(yùn)算矩陣的元素賦予 0-10 范圍內(nèi)的隨機(jī)數(shù) for (int i = 0; i < N*M; i++) {h_A[i] = (float)(rand() % 10 + 1);h_B[i] = (float)(rand() % 10 + 1);}// 打印待測(cè)試的矩陣 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 計(jì)算矩陣相乘*/// 創(chuàng)建并初始化 CUBLAS 庫(kù)對(duì)象 cublasHandle_t handle;status = cublasCreate(&handle);if (status != CUBLAS_STATUS_SUCCESS){if (status == CUBLAS_STATUS_NOT_INITIALIZED) {cout << "CUBLAS 對(duì)象實(shí)例化出錯(cuò)" << endl;}getchar();return EXIT_FAILURE;}float *d_A, *d_B, *d_C;// 在 顯存 中為將要計(jì)算的矩陣開辟空間 cudaMalloc((void**)&d_A, // 指向開辟的空間的指針 N*M * sizeof(float) // 需要開辟空間的字節(jié)數(shù) );cudaMalloc((void**)&d_B,N*M * sizeof(float));// 在 顯存 中為將要存放運(yùn)算結(jié)果的矩陣開辟空間 cudaMalloc((void**)&d_C,M*M * sizeof(float));// 將矩陣數(shù)據(jù)傳遞進(jìn) 顯存 中已經(jīng)開辟好了的空間 cublasSetVector(N*M, // 要存入顯存的元素個(gè)數(shù) sizeof(float), // 每個(gè)元素大小 h_A, // 主機(jī)端起始地址 1, // 連續(xù)元素之間的存儲(chǔ)間隔 d_A, // GPU 端起始地址 1 // 連續(xù)元素之間的存儲(chǔ)間隔 );cublasSetVector(N*M,sizeof(float),h_B,1,d_B,1);// 同步函數(shù) cudaThreadSynchronize();// 傳遞進(jìn)矩陣相乘函數(shù)中的參數(shù),具體含義請(qǐng)參考函數(shù)手冊(cè)。 float a = 1; float b = 0;// 矩陣相乘。該函數(shù)必然將數(shù)組解析成列優(yōu)先數(shù)組 cublasSgemm(handle, // blas 庫(kù)對(duì)象 CUBLAS_OP_T, // 矩陣 A 屬性參數(shù) CUBLAS_OP_T, // 矩陣 B 屬性參數(shù) M, // A, C 的行數(shù) M, // B, C 的列數(shù) N, // A 的列數(shù)和 B 的行數(shù) &a, // 運(yùn)算式的 α 值 d_A, // A 在顯存中的地址 N, // lda d_B, // B 在顯存中的地址 M, // ldb &b, // 運(yùn)算式的 β 值 d_C, // C 在顯存中的地址(結(jié)果矩陣) M // ldc );// 同步函數(shù) cudaThreadSynchronize();// 從 顯存 中取出運(yùn)算結(jié)果至 內(nèi)存中去 cublasGetVector(M*M, // 要取出元素的個(gè)數(shù) sizeof(float), // 每個(gè)元素大小 d_C, // GPU 端起始地址 1, // 連續(xù)元素之間的存儲(chǔ)間隔 h_C, // 主機(jī)端起始地址 1 // 連續(xù)元素之間的存儲(chǔ)間隔 );// 打印運(yùn)算結(jié)果 cout << "計(jì)算結(jié)果的轉(zhuǎn)置 ( (A*B)的轉(zhuǎn)置 ):" << endl;for (int i = 0; i < M*M; i++) {cout << h_C[i] << " ";if ((i + 1) % M == 0) cout << endl;}// 清理掉使用過的內(nèi)存 free(h_A);free(h_B);free(h_C);cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);// 釋放 CUBLAS 庫(kù)對(duì)象 cublasDestroy(handle);getchar();return 0; }?
程序運(yùn)行結(jié)果:
?
總結(jié)
以上是生活随笔為你收集整理的CUDA10.1配置VS2017的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划,背包问题
- 下一篇: Qt配置VS2017