在C++项目中集成CUDA程序加速(从环境配置讲起)


前言

因为我自己的 C++ 项目需要用到CUDA加速计算,但是又从来从来没有尝试过,所以这里记录一下整个过程。


一、CUDA环境配置

1. GPU名称

我本台电脑的GPU如下图。
在这里插入图片描述
你也可以通过命令行输入:nvidia-smi 查看显卡类型(图中圈出来的是显存大小)
在这里插入图片描述

2. 安装CUDA

这一步需要根据你自己的显卡驱动来确定需要安装的CUDA版本。具体操作如下:

  1. 打开 NVIDIA Control Panel (右键该图标,打开 NVIDIA控制面板)
    在这里插入图片描述

  2. 点击左下角的系统信息;
    在这里插入图片描述

  3. 选择 组件 ,查看NVCUDA64.DLL 后面的数字,就是你可以安装的CUDA最高版本(这里是12.0.139)。安装只要不高于它就行。
    在这里插入图片描述

  4. 确定版本后,就可以去CUDA下载官网进行下载。
    在这里插入图片描述

  5. 下载完成后,双击exe,然后无脑下一步就行。

  6. 安装完成后,打开命令行,输入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(); // 同步
}

编译运行即可。

三、踩坑

  1. 一定要在设置了 生成依赖项 之后才可以添加cuh和cu文件,不然会一直报链接错误。
  2. 不要在cpp文件中直接include .cu文件,这样也会链接错误。
  3. 对于<<< >>>这种下划线提示错误,但是编译却能通过的问题,不用管它。是编译器无法识别cuda函数和c++函数的语法差异,能编译通过就行。
    在这里插入图片描述

四、总结

希望对大家有帮助!

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值