来自 CUDA 编程指南 p44:
在这种模式下编译应用程序时(使用 -deviceemu 选项),设备代码会为主机编译并在主机上运行,允许程序员使用主机的本机调试支持来调试应用程序,就好像它是主机应用程序一样。预处理器宏DEVICE_EMULATION在此模式下定义。应用程序的所有代码,包括使用的任何库,都必须一致地编译以用于设备仿真或设备执行。将针对设备仿真编译的代码与针对设备执行编译的代码链接会导致在初始化时返回以下运行时错误:cudaErrorMixedDeviceExecution。
您是否只有一个为 EMU 重新编译的 DLL,或者是否有其他 DLL,例如 CUDA utils 库?
这正如我在 Win7 x64 编译 Debug|x86 并启用 EMU 上所期望的那样工作。
这是我正在使用的编译器和链接器设置:
"C:\Program Files\CUDA\bin64\nvcc.exe" -m32 -arch sm_10 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin" -deviceemu -D_DEVICEEMU -Xcompiler "/EHsc /W3 /nologo /Od /Zi /MT " -maxrregcount=32 --compile -o "int\x86\Debug\NBody.DomainModel.Native.cu.obj" "c:\Src\NBody\trunk\NBody.DomainModel.Native\NBody.DomainModel.Native.vcproj"
/VERBOSE /OUT:"c:\Src\NBody\trunk\NBody.DomainModel.Native\bin\x86\Debug\NBody.DomainModel.Native.dll" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Program Files\CUDA\lib64\..\lib" /DLL /MANIFEST /MANIFESTFILE:"int\x86\Debug\NBody.DomainModel.Native.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /NODEFAULTLIB:"libcmt" /DEBUG /ASSEMBLYDEBUG /PDB:"c:\Src\NBody\trunk\NBody.DomainModel.Native\bin\x86\Debug\NBody.DomainModel.Native.pdb" /DYNAMICBASE /FIXED:No /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT cudart.lib