文章目录
前言
因为我自己的 C++ 项目需要用到CUDA加速计算,但是又从来从来没有尝试过,所以这里记录一下整个过程。
一、CUDA环境配置
1. GPU名称
我本台电脑的GPU如下图。
你也可以通过命令行输入:nvidia-smi
查看显卡类型(图中圈出来的是显存大小)
2. 安装CUDA
这一步需要根据你自己的显卡驱动来确定需要安装的CUDA版本。具体操作如下:
-
打开 NVIDIA Control Panel (右键该图标,打开 NVIDIA控制面板)
-
点击左下角的系统信息;
-
选择 组件 ,查看NVCUDA64.DLL 后面的数字,就是你可以安装的CUDA最高版本(这里是12.0.139)。安装只要不高于它就行。
-
确定版本后,就可以去CUDA下载官网进行下载。
-
下载完成后,双击exe,然后无脑下一步就行。
-
安装完成后,打开命令行,输入
nvcc -V
,如果能显示版本就说明安装成功了。如果没有出来的话,就要看一下系统环境是否添加了。
注意:
由于我是用VS2022进行开发的,所以在你安装CUDA的时候,要把VS2022关掉,然后再进行安装,这样才能正确创建CUDA项目模板!
另外,一定要先安装VS,再安装CUDA,不然也不能正确创建模板!
二、测试CUDA
1. 创建控制台项目
打开VS2022,点击 “创建新项目”,选择控制台应用 ,然后创建项目。(现在,你也应该可以看到有 “CUDA 12.0 Runtime” 模板,这也说明我们的CUDA安装成功了。但是我们现在要模拟的是在现有的C++项目中添加CUDA应用,所以就不选择这个。)。
2. 设置生成依赖项
右键 项目名称 -> “生成依赖项” -> “生成自定义”,勾选 "CUDA 12.0 "。
3. 添加cuh和cu文件
右键 头文件 -> 添加 -> 新建项 -> 选择 “CUDA 12.0 C/C++ Header”,即为cuh文件。选择"CUDA 12.0 C/C++ File" 即为cu文件。分别对应C++ 的.h文件和.cpp文件。
4. 配置CUDA库
1) 找到你所安装的CUDA路径,我的是在:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0
2) 将目录下的lib和include文件复制到你的项目路径下:
3) 右键 项目名 -> 属性 ->配置属性 -> C/C++ -> 常规 -> 附加包含目录
,添加 include文件夹
路径;
4)右键 项目名 -> 属性 ->配置属性 -> 链接器 -> 常规 -> 附加库目录
,添加 lib文件夹
路径;
5)右键 项目名 -> 属性 ->配置属性 -> 链接器 -> 输入 -> 附加依赖项
,添加 cudart.lib
。
5. 测试代码
// CUDAHeader.cuh
#ifndef CUDA_COMMON_H
#define CUDA_COMMON_H
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
extern "C" cudaError_t ExtentGPUPrinter();
#endif
// CUDAHeader.cu
#include "CudaHeader.cuh"
#include <stdio.h>
__global__ void GPU_Printer()
{
if (threadIdx.x == 1023 && blockIdx.x == 255)
{
printf("GPU Printer1\n");
}
}
cudaError_t ExtentGPUPrinter()
{
GPU_Printer<<<256, 1024>>>();
return cudaSuccess;
}
// CudaTestDemo.cpp
#include <iostream>
#include "CudaHeader.cuh"
extern "C" cudaError_t ExtentGPUPrinter();
int main()
{
ExtentGPUPrinter();
cudaDeviceSynchronize(); // 同步
}
编译运行即可。
三、踩坑
- 一定要在设置了 生成依赖项 之后才可以添加cuh和cu文件,不然会一直报链接错误。
- 不要在cpp文件中直接include .cu文件,这样也会链接错误。
- 对于<<< >>>这种下划线提示错误,但是编译却能通过的问题,不用管它。是编译器无法识别cuda函数和c++函数的语法差异,能编译通过就行。
四、总结
希望对大家有帮助!