我已经阅读了所有相关主题,包括将.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 studio 2008上编译时遇到了问题,并且错误显示
error C3861:'_syncthreads':identifier not found
但是,当我编写一个包含一个main.cu
包含main(){}
我的_host_
函数的projetc时,它的构建没有错误。
我可以保持如上所述的项目结构,并在没有错误的情况下运行我的项目吗?请帮忙!
默认情况下,.cpp文件不能包含非常规C / C ++语法的任何内容。kernel<<<...>>>()
除非将特殊开关传递给nvcc,否则cuda内核调用不能位于.cpp文件中。
因此,通常的建议是重命名以这种方式使用CUDA的任何文件,以具有.cu扩展名而不是.cpp扩展名,并使用nvcc编译该文件。
对于任何特定于CUDA的语法也是如此。(请注意,这并不意味着调用CUDA API,例如cudaMalloc
,如果您包含cuda_runtime.h并正确链接,则可以在普通的.cpp文件中进行调用。)因此,如果您__host__
的主体中实际上有函数装饰器。 cpp,这也将不起作用(使用默认编译器设置)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句