CUDA11.6+Windows10+Visual Studio 2019环境安装配置
一.下载
打开官网下载下载页面,点击立即下载。Operating System(操作系统)选择windows,Architecture(架构)x86_64,Version(版本)选择10.Installer Type安装类型选择 exe(local),即可展开下载连接按钮,点击下载。
二.安装
点这里查看官方安装文档
安装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;
}
运行,如果没有错误应显示以下页面。