VS Visual Studio 2017 +cuda环境配置+创建项目
一、使用vs+cuda+cudnn环境配置
配置过程必须先安装VS,在安装cuda和cudnn
1、安装VS 2017-2022 其中一个版本
VS官网下载地址:https://visualstudio.microsoft.com/zh-hans/
2、安装CUDA
首先,在Geforce Experience软件更新驱动到最新版本。
其次,查看当前支持的cuda版本。在cmd中输入nvidia-smi查看,支持最高版本为cuda12.3。
然后,进入cuda官网进行下载https://developer.nvidia.com/cuda-toolkit-archive
选择合适版本的CUDA,这里我们选择版本12.2进行下载,进入下载页面,根据系统版本以及安装方式进行选择,点击Download进行安装包下载。
下载完成后进行双击安装,可以自定义安装路径。
同意安装协议。
选择自定义安装。
默认全部安装,选择下一步。
可以自定义选择安装路径。
直接下一步,cuda开始安装。安装完成之后检查系统环境变量。
path变量里面新增下面几项内容。
在Path变量里面手动增加如下几项,该路径为CUDA的安装路径。
在cmd命令框中查看是否安装成功。输入 nvcc -v 命令进行查看。输入版本信息即为安装成功。
3、配置CUDNN
进入官网进行下载对应版本的cudnn。需要提前注册好nvidia账号,官网地址为:https://developer.nvidia.com/rdp/cudnn-archive
点击下载之后,解压缩包之后,将三个文件夹复制到刚刚cuda的安装目录即可。
环境配置完成之后进行检验。进入刚才的cuda安装目录的extras\demo_suite下的bandwidthTest.exe和deviceQuery.exe检查是否安装成功,收到result=pass则表示安装成功了!
二、使用vs生成cuda项目的两种方法
方法1 直接生成cuda项目
1.直接创建一个CUDA项目
2.项目名右键->属性->CUDA C++ ->第一行填写 $(CUDA_PATH) ->
确定
3.更改Windows SDK : 项目名右键->属性->常规->Windows SDK 版本 选择已安装的版本。
方法2 使用空项目进行配置
1.打开一个空项目
2.项目名右键->生成依赖项->生成自定义->勾选CUDA
2.项目名右键->属性->第一行填写 $(CUDA_PATH) ->
确定
4.在工程名上点击右键,选择添加——新建项。在新建项对话框中选择CUDA12.2,在右侧选择CUDA 12.2 C/C++ File 文件名修改为main
5.复制下代码到main.cu,运行
// A code block
#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;
}
6.编译并执行。
三、cuda项目创建过程中遇到的问题解决
#include <stdio.h>报错
解决办法:重新配置windows sdk,选择本机已经安装的SDK即可。
版权归原作者 qq_41491827 所有, 如有侵权,请联系我们删除。