C++使用CUDA的“.cu”文件注意事项

VS中的C++工程使用CUDA“.cu”文件踩坑(20200805)

最近实习的项目中,需要使用英伟达的视频编解码SDK:nvidia-video-codec-sdk进行视频编码的的GPU加速,官方所给的视频编码例程中有一个文件**“crc.cu”**,从文件的类型可以知道,是需要使用CUDA的。

我一开始将官方例程中的源文件直接添加到自己的工程中,也在项目属性里面配置好了各种依赖库,结果编译的时候总是会报错,我一开始还以为是我漏掉了什么文件。

报错如下:

错误LNK2019无法解析的外部符号

“void __cdecl ComputeCRC(unsigned char *,unsigned int *,struct CUstream_st *)” (?ComputeCRC@@YAXPEAEPEAIPEAUCUstream_st@@@Z),该符号在函数 “public: void __cdecl CRC::GetCRC(void *,struct CUstream_st *)” (?GetCRC@CRC@@QEAAXPEAXPEAUCUstream_st@@@Z) 中被引用

在这里插入图片描述

问题分析:

看报错说是无法解析的外部符号,

从报错相关的函数可以知道是有关CUDA部分的东西出错了,所以我一开始在想是不是我CUDA的环境没有配置好,检查了好几遍,发现该设置的好像都设置了(其实是有一个地方没有设置好的,我以前没有使用VS做C++编程的经验,更没有过CUDA编程的经验),对着例程重复创建了一两个工程之后,报错仍然是一样的。

一开始只是百度这个错误关键词,网上说估计是某个lib之类的文件的问题,我弄来弄去也没有问题,后面派出了。

尝试了几次之后,还是挺郁闷的,不知道到底是怎么一回事。

解决办法:

终于在今天,我想到既然是有关CUDA的,我应该找找VS2017配置CUDA跟C++混合编程的教程来参考参考,发现利用CUDA的代码的时候,要设置生成属性,选择上CUDA才行。终于让我看到了希望!

参考这一篇博文就够了,主要是两个地方设置了一下:

右键项目 → 生成依赖项 → 生成自定义 → 勾选“CUDA 9.0XXX”

右键 “xxx.cu" 源文件 → 属性 → 配置属性 → 常规 → 项类型 → 设置为“CUDA C/C++”

个人博客地址:http://www.ranw.top/
CSDN地址:https://blog.csdn.net/weixin_42651184

在Visual Studio中创建CUDA C程序,首先你需要安装CUDA工具包,它通常包含了一个名为CUDA C++的项目模板。以下是步骤: 1. **设置环境**: - 打开Visual Studio,选择"创建新项目",然后在"Visual C++"类别下找到"CUDA C/C++"项。 - 选择"空白项目"或"CUDA Console Application",并输入项目名称。 2. **添加kernel.cu文件**: - 在项目资源管理器中右键点击项目,选择"添加">>"新建项",然后在CUDA C++文件夹下,添加一个名为"kernel.cu"的新Cuda文件。 3. **编写CUDA kernel**: - 在`kernel.cu`中,使用CUDA编程模型编写CUDA函数,即kernel(内核),这通常是计算密集型的函数,用于执行在GPU上并行处理的任务。例如: ```c++ __global__ void myKernel(float* d_out, float* d_in, int size) { int index = threadIdx.x + blockIdx.x * blockDim.x; if (index < size) d_out[index] = d_in[index] * 2.0f; } ``` 4. **链接和运行**: - 在主机代码中,你需要将内核函数加载到设备,并指定数据传输以及执行任务的规模: ```c++ dim3 threadsPerBlock(512); dim3 numBlocks((size + threadsPerBlock.x - 1) / threadsPerBlock.x); cudaMalloc(&d_out, size * sizeof(float)); cudaMemcpy(d_out, in, size * sizeof(float), cudaMemcpyHostToDevice); myKernel<<<numBlocks, threadsPerBlock>>>(d_out, d_in, size); cudaMemcpy(out, d_out, size * sizeof(float), cudaMemcpyDeviceToHost); ``` 5. **构建和调试**: - 点击菜单栏的"Build" -> "Build Solution" 或者按F7键,编译CUDA代码。如果一切顺利,会在解决方案资源管理器的Debug目录下生成可执行文件。 - 运行这个可执行文件,查看输出结果,检查是否达到预期的效果。 6. **注意事项**: - 使用CUDA需要对GPU内存管理和错误处理有深入理解。 - Visual Studio可能会有一些CUDA特定的配置步骤,如添加CUDA Toolkit路径等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值