У меня есть .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-файл и код хоста, чтобы он был известен кодом устройства соответственно.