CUDA 集成在C++文件中

cuda integration in a C++ file

本文关键字:文件 C++ 集成 CUDA      更新时间:2023-10-16

我已经阅读了所有相关主题,将.cu文件包含在其他人之前编写的.cpp文件中,但没有任何帮助。

我在项目的C++文件中包含文件时遇到问题。我的项目结构如下:main.cpp compute.h compute.cpp kernel.cu

main.cpp不仅仅是我项目的入口 main() 点。几个_host_ cuda 函数,它包括compute.h,因为它调用了 compute.h 中定义的一些函数。

compute.cpp 只有 C++ 个函数,使用 sum<<<1,numbloc>>>(list of parameters) 函数,该函数引用kernel.cu设备代码。然后,我将kernel.cu包含在compute.cpp标题中。但是我在使用 cuda 2008 在 Visual Studio 2008 上编译时遇到了问题 5.0,并且错误说

error C3861:'_syncthreads':identifier not found

但是当我编写一个包含main(){}和我的_host_函数的单个main.cu的 projetc 时,它会毫无错误地构建。

我可以保持上述项目结构,并运行我的项目而没有错误吗?请帮忙!

默认情况下,.cpp文件不能包含任何非普通 C/C++ 语法的内容。 cuda 内核调用kernel<<<...>>>()不能位于.cpp文件中,除非您将特殊开关传递给 nvcc。

因此,通常的建议是以这种方式重命名任何使用 CUDA 的文件,使其具有 .cu 扩展名而不是.cpp扩展名,并使用 nvcc 编译该文件。

这同样适用于任何特定于 CUDA 的语法。 (请注意,这并不意味着调用 CUDA API,例如 cudaMalloc ,如果您包含 cuda_runtime.h 并正确链接,则可以在普通.cpp文件中完成。 因此,如果你实际上在你的 main.cpp 中有 __host__ 函数装饰器,那也不起作用(使用默认编译器设置)。