cuda安裝配置VS2013


1.1 安裝cuda

首先官網下載安裝包,這個就不細說了 ,我下的是這個版本cuda_8.0.61_win10.exe,,注意win7win10版本要對應,千萬別弄錯了 之后雙擊會出現如下截圖,


解壓完以后一直點下一步如下圖

 

出現這個等半個小時左右就好了

安裝結束后開始配置系統環境變量

win10可以這么操作win+s 搜索環境,自動匹配出系統環境變量


1.2 配置環境變量

打開環境變量后如下圖:


如圖中點擊環境變量的就是了打開后,如下圖設置:


點擊新建會出現:

 

CUDA_PATH = C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v8.0
CUDA_PATH_V7_5 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0
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

將上面的變量名和變量值依次填入:

比如:

依次填入后,找到path如圖:

 

依次點擊新建, %CUDA_LIB_PATH%%CUDA_BIN_PATH%%CUDA_SDK_BIN_PATH%%CUDA_SDK_LIB_PATH%;依次填入,填入后效果如上圖所示。全部安裝好后一定要記得重啟!,這里就將cuda win10中如何配置的完成了

 

1.4 VS2013 + CUDA7.5配置(其他版本VSCUDA都類似)

·         1. 打開 vs2013 並創建一個空 win32 程序 , 創建一個 cuda_samples 的解決方案和 cuda_test1 項目:

 

·        2.右鍵源文件–>添加–>新建項,如下圖所示:

·        3.選擇NIVIDIA CUDA7.5 CUDA C/C++file,並在名稱那填上cuda_main

·        4.選擇cuda_test1,點擊右鍵–>項目依賴項–>自定義生成

·        5.選擇CUDA7.5

·        6.點擊cuda_main.cu的屬性

·         

1.  在配置屬性–>常規–>項類型–>選擇“CUDA C/C++”


1.5 項目配置

1.5.1 x64

1.5.1.1 包含目錄配置

·        1.右鍵點擊項目屬性–>屬性–>配置屬性–>VC++目錄–>包含目錄

·        2.添加包含目錄: 
$(CUDA_PATH)\include

1.5.1.2 庫目錄配置

·        1.VC++目錄–>庫目錄

·        2.添加庫目錄: 
$(CUDA_PATH)\lib\x64

1.5.1.3 依賴項

·         

1.  配置屬性–>連接器–>輸入–>附加依賴項

·         

1.  添加庫文件: 
cublas.lib 
cuda.lib 
cudadevrt.lib 
cudart.lib 
cudart_static.lib 
nvcuvid.lib 
OpenCL.lib`

注意:添加nvcuvenc.lib庫文件,編譯時,報找不到該文件的錯誤。去掉后,程序也能運行

1.5.2 x86(win32)

1.5.2.1 包含目錄配置

·         

1.  右鍵點擊項目屬性–>屬性–>配置屬性–>VC++目錄–>包含目錄

·         

1.  添加包含目錄: 
$(CUDA_PATH)\include

1.5.2.2 庫目錄配置

·        1.VC++目錄–>庫目錄

·        2.添加庫目錄: 
$(CUDA_PATH)\lib\Win32

1.5.2.3 依賴項

·         

1.  配置屬性–>連接器–>輸入–>附加依賴項

·         

1.  添加庫文件: 
cuda.lib 
cudadevrt.lib 
cudart.lib 
cudart_static.lib 
nvcuvid.lib 
OpenCL.lib`

備注: win32x64位的lib庫有差別,配置時需注意,除了上述添加的lib文件外,x64還有其他的lib庫文件,如cublas.lib,如運行1.6的樣例時,要添加這個庫,不然會編譯失敗。

1.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 //

    );

// 同步函數

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;

}

運行結果如下圖所示:


 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com