我已经阅读了关于将.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 5.0在visual 2008上编译时,我遇到了问题,错误说
error C3861:'_syncthreads':identifier not found但是,当我用一个包含main.cu和main(){}函数的_host_函数编写projetc时,它的构建没有错误。
我是否可以保持上面描述的项目结构,并且不出错地运行我的项目?请帮帮忙!
发布于 2015-01-17 14:12:16
默认情况下,.cpp文件不能包含任何非普通C/C++语法的内容。库达内核调用kernel<<<...>>>()不能在.cpp文件中,除非您将特殊的开关传递给nvcc。
因此,通常的建议是将使用CUDA的任何文件重命名为具有.cu扩展名而不是.cpp扩展名,并使用nvcc编译该文件。
这同样适用于任何数据自动化系统特定的语法。(请注意,这并不意味着对CUDA (如cudaMalloc )的调用,只要包含cuda_runtime.h并正确链接,就可以在普通的.cpp文件中进行调用。)因此,如果您的__host__函数装饰器在您的main.cpp中,那么它也不能工作(使用默认的编译器设置)。
https://stackoverflow.com/questions/28000235
复制相似问题