C++ 文件中的 cuda 集成

cuda integration in a C++ file

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

我在项目的 C++ 文件中包含文件时遇到问题。 我的项目结构如下:main.cppcompute.hcompute.cppkernel.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 headers 中。但是我在使用 cuda 5.0 在 visual studio 2008 上编译时遇到问题,错误显示

error C3861:'_syncthreads':identifier not found

但是当我使用包含 main(){} 和我的 _host_ 函数的单个 main.cu 编写项目时,它构建时没有错误。

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

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

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

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