windows10+visual studio2019配置cud

2022-05-21  本文已影响0人  glider312

1. 可以下载Geforce Experience,将显卡驱动更新到上面最新

2. 桌面右键-->Nvidia控制面板->帮助->系统信息->组件

查看驱动支持的最高cuda版本:


image.png

可以看到我的是11.6.134,所以我可以安装这个版本以下的cuda

3. https://developer.nvidia.com/cuda-11-6-1-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_local

image.png

下载,如果想下其他版本,


image.png

点击第二个 "Archive of Previous CUDA Release"

注意:这个文件不用下载到C盘

4. 双击下载好的文件进行安装,注意安装的时候选择自定义,然后取消驱动那一项(好像是第二个),特征是他会显示安装某个版本驱动,当前版本驱动是xx, 此时把这一项取消勾选,继续安装。建议装到默认的C盘吧,其实也不是很大。

5.安装CUDNN

https://developer.nvidia.cn/rdp/cudnn-archive

image.png
点进对应的,我的就是第一个,选择下载带windows的,是一个zip文件,这个不用下载到C盘
解压该文件,提取其中的文件夹bin,lib,include,分别复制其中内容到“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.x”中的bin,lib/x64,include中.

6.添加环境变量:

CUDA安装的时候是自动添加的但是CUDNN不是,
我的电脑右键->属性->高级系统设置->高级->环境变量

image.png

编辑,添加下面三个(最好先打开C盘,或者自己装的路径,找到这几个地址,如果找不到,就下载一个everything软件,用关键字在everything里搜索一下,找到路径了再粘贴过去):


image.png

确定->确定(直接关界面会不生效)

验证是否安装成功:

1.win+r -> 输入cmd进入命令行模式,依次输入(第二行依然建议先找到这个地址粘贴过来):

nvidia-smi
cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\extras\demo_suite
deviceQuery.exe
bandwidthTest.exe
image.png

说明cuda安装完成

image.png image.png

有result=pass 说明cudnn成功

7.配置vs:

打开一个空的c++控制台


image.png image.png

换成x64,这个不改好像也没事

项目名右键->生成依赖项->生成自定义
勾选CUDA


image.png

项目名右键->属性->

image.png

第一行填写
$(CUDA_PATH)
确定

参考https://www.cnblogs.com/wansuiwht/p/15811478.html
在工程名上点击右键,选择添加——新建项。在新建项对话框中选择CUDA11.x,在右侧选择CUDA 11.x C/C++ File 文件名修改为main

image.png
复制下代码到main.cu,运行
#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;
}

如果成功,会显示


image.png
上一篇 下一篇

猜你喜欢

热点阅读