C++文件中的CUDA集成

C++文件中的CUDA集成,c++,c,cuda,C++,C,Cuda,我已经阅读了所有相关的主题,包括一个.cu文件到一个.cpp文件之前写的其他人,但没有任何帮助我 我在我的项目C++文件中包含了一个问题。 我的项目结构如下:main.cpp compute.h compute.cpp kernel.cu main.cpp不仅仅是我的项目的入口要点。几个_host ucuda函数,它包括compute.h,因为它调用了compute.h中定义的一些函数 计算机。CPP只有C++函数,使用参数函数的列表,它引用了Keln.Cu设备代码。然后我将kernel.cu包

我已经阅读了所有相关的主题,包括一个.cu文件到一个.cpp文件之前写的其他人,但没有任何帮助我

<>我在我的项目C++文件中包含了一个问题。 我的项目结构如下:main.cpp compute.h compute.cpp kernel.cu

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

计算机。CPP只有C++函数,使用参数函数的列表,它引用了Keln.Cu设备代码。然后我将kernel.cu包含在compute.cpp头中。但我在使用cuda 5.0在VisualStudio2008上编译时遇到问题,错误是

error C3861:'_syncthreads':identifier not found
但是,当我编写一个包含main{}和my_host\函数的main.cu的项目时,它的构建不会出错


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

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

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


这同样适用于任何CUDA特定语法。请注意,这并不意味着对CUDA API的调用,例如cudaMalloc,如果正确地包含CUDA_runtime.h和link,则可以在普通的.cpp文件中进行调用。因此,如果main.cpp中确实有_host _;函数decorator,那么使用默认编译器设置也不起作用。

谢谢,你说得对。我把所有调用函数都放在了.cu文件中,还有它们相关的_global uu函数。不过,我也放在了同一个.cu文件中,u device uuuu int compute a,int b{…}和int compute a,int b{…}。第一个仅用于设备,第二个是一个_主机_____________________________________。但是我得到了一个错误:函数compute已经被定义了。请告诉我如何解决这个问题?您不能用相同的名称定义两个函数,即使一个是主机,另一个是设备。要么更改这两个函数的名称,使它们不同,要么将它们合并为一个同时具有_u主机______________;和___。如果您需要根据它是在主机上运行还是在设备上运行来执行一些不同的操作,那么这里有一个编译宏。谢谢,我刚刚重命名了我的函数,它工作得很好!非常感谢。nvcc关心源代码文件上使用的扩展名吗?如果您只调用一个.vc++文件,但是命名为.cp,它会尝试将它编译成C++代码吗?