我有一个包含主机和设备代码的 .cu 文件:
// device code
__global__ void
myKernel() { ... }
// host code
#include <boost/thread/mutex.hpp>
boost::mutex myMutex;
int main() { ... }
如您所见,我包含了 boost 的互斥锁功能。当我编译文件时,由于以下警告而出现错误:
warning C4005: 'BOOST_COMPILER': Macro-Redefinition c:\boost\include\boost-1_49_0\boost\config\compiler\visualc.hpp
所以我假设 nvcc 处理设备代码和主机代码的所有预处理。我是对的,如果是的话,我怎样才能避免这种情况并将预处理传递给 cl.exe(MSVC 2010,Win7)?
我已经尝试将主机代码放在单独的 hpp/cpp 文件中,并将该文件包含在 cu 文件中 - 同样的问题。在主机代码中,我定义了一个将在设备代码中使用的表面参考。所以这就是我需要在 cu 文件和主机代码中包含设备代码分别知道的原因。