CUDA11.6+Windows10+Visual Studio 2019環境安裝配置


CUDA11.6+Windows10+Visual Studio 2019環境安裝配置

一.下載

打開官網下載下載頁面,點擊立即下載。Operating System(操作系統)選擇windows,Architecture(架構)x86_64,Version(版本)選擇10.Installer Type安裝類型選擇 exe(local),即可展開下載連接按鈕,點擊下載。
Download

二.安裝

點這里查看官方安裝文檔
安裝CUDA前應確保先安裝Visual Studio 2019.這樣在CUDA安裝過程中會自動檢測配置Visual Studio2019插件,省去不必要的麻煩。
安裝過程比較簡單,雙擊運行下載的文件,選擇解壓路徑,解壓后會自動打開安裝程序,安裝程序執行完系統檢查后進入到安裝選項頁面,這里需要注意的是,如果選擇精簡就不能選擇安裝路徑,默認會安裝到C盤。如果選擇自定義則可以選擇安裝路徑,根據自己需要選擇后,一路下一步即可完成安裝。
安裝選項
安裝成功后打開命令提示符輸入 nvcc --version回車,如果顯示以下內容則表示安裝成功。
安裝選項

三.測試

這種方式可用於在已有工程中引入CUDA開發
1.打開visual studio 2019 創建win32空項目。
2.在工程名上點擊右鍵,選擇生成依賴項——生成自定義。在彈出的對話框中勾選CUDA11.6.
安裝選項
3.在工程名上點擊右鍵,選擇屬性,點擊CUDA/C++ —— Common。在CUDA Toolkit custom Dir 后面添加 $(CUDA_PATH),這個是CUDA的環境變量,安裝時安裝程序會將其添加到系統的環境變量中。
安裝選項
3.在工程名上點擊右鍵,選擇添加——新建項。在新建項對話框中選擇CUDA11.6,在右側選擇CUDA 11.6 C/C++ File 文件名修改為main
安裝選項
4.在新創建的文件中輸入以下代碼

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
__global__ void VecAdd(int* A, int* B, int* C)
{
	int i = threadIdx.x;
	C[i] = A[i] + B[i];
}
int main() {
	const int size = 3;
	int a[size] = { 1,2,3 };
	int b[size] = { 10,20,30 };
	int c[size] = { 0 };
	//定義設備變量
	int* dev_a = 0;
	int* dev_b = 0;
	int* dev_c = 0;
	//CUDA狀態
	cudaError_t cudaStatus;
	//選擇GUP
	cudaStatus = cudaSetDevice(0);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "選擇GPU失敗,您的電腦上沒有GPU");
		return 0;
	}
	//分配GUP內存
	cudaStatus = cudaMalloc((void**)&dev_c, size * sizeof(int));
	if (cudaStatus != cudaSuccess)
		fprintf(stderr, "dev_c內存分配失敗");
	cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int));
	if (cudaStatus != cudaSuccess)
		fprintf(stderr, "dev_a內存分配失敗");
	cudaStatus = cudaMalloc((void**)&dev_b, size * sizeof(int));
	if (cudaStatus != cudaSuccess)
		fprintf(stderr, "dev_b內存分配失敗");
	//從主機內存復制數據到GPU內存
	cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "dev_a復制失敗");
	}
	//從主機內存復制數據到GPU內存
	cudaStatus = cudaMemcpy(dev_b, b, size * sizeof(int), cudaMemcpyHostToDevice);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "dev_b復制失敗");
	}
	//調用GPU計算
	VecAdd<<<1,size>>>(dev_a, dev_b, dev_c);
	//獲取錯誤狀態
	cudaStatus = cudaGetLastError();
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "VecAdd 調用失敗: %s\n", cudaGetErrorString(cudaStatus));
	}

	cudaStatus = cudaDeviceSynchronize();
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaDeviceSynchronize 返回錯誤 %d!\n", cudaStatus);
	}
	//將計算結果返回主機
	cudaStatus = cudaMemcpy(c, dev_c, size * sizeof(int), cudaMemcpyDeviceToHost);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "從GPU復制數據失敗!");
	}
	printf("{1,2,3} + {10,20,30} = {%d,%d,%d}\n",
		c[0], c[1], c[2]);
	cudaFree(dev_a);
	cudaFree(dev_b);
	cudaFree(dev_c);
	return 0;
}

運行,如果沒有錯誤應顯示以下頁面。
運行結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM