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;
}

运行,如果没有错误应显示以下页面。
运行结果

posted on 2022-01-16 22:10  曹操是个好同志  阅读(3886)  评论(0编辑  收藏  举报