赞
踩
配置过程必须先安装VS,在安装cuda和cudnn
VS官网下载地址:https://visualstudio.microsoft.com/zh-hans/
首先,在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 命令进行查看。输入版本信息即为安装成功。
进入官网进行下载对应版本的cudnn。需要提前注册好nvidia账号,官网地址为:https://developer.nvidia.com/rdp/cudnn-archive
点击下载之后,解压缩包之后,将三个文件夹复制到刚刚cuda的安装目录即可。
环境配置完成之后进行检验。进入刚才的cuda安装目录的extras\demo_suite下的bandwidthTest.exe和deviceQuery.exe检查是否安装成功,收到result=pass则表示安装成功了!
1.直接创建一个CUDA项目
2.项目名右键->属性->CUDA C++ ->第一行填写 $(CUDA_PATH) ->
确定
3.更改Windows SDK : 项目名右键->属性->常规->Windows SDK 版本 选择已安装的版本。
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.编译并执行。
#include <stdio.h>报错
解决办法:重新配置windows sdk,选择本机已经安装的SDK即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。