代码之家  ›  专栏  ›  技术社区  ›  Danny Varod

在VS2008仿真模式下调试从.NET代码调用的CUDA内核

  •  0
  • Danny Varod  · 技术社区  · 17 年前

    CUDA有一个在仿真模式下编译代码的选项,它们提供的.rules文件支持这种模式。

    我有C#.NET 3.5 SP1代码,它使用DllImport调用本机dll, 本机dll使用nvcc通过VS2008编译,其功能是将内存从CUDA传输到CUDA,并调用CUDA内核。

    (我在启动项目的调试选项中启用了调试本机代码。)

    我尝试过使用仿真模式进行编译,但是在调用CUDA memcopy主机时出现CUDA错误“混合设备执行”——>装置 我试着用等效的非CUDA版本切换alloc+Dealoc+memcopy, 但是在调用内核时也会发生同样的错误。

    另外,我在Vista x64 SP1+VS2008上尝试了这一点,在x86和x64中使用了相同的解决方案,它们都不在仿真模式下工作,都在非仿真模式下工作。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Ade Miller    17 年前

    从CUDA编程指南第44页:

    在此模式下编译应用程序时(使用-deviceemu选项),设备代码为 为主机编译并在主机上运行,允许程序员使用本机主机 调试支持将应用程序作为主机应用程序进行调试。这个 预处理宏 在该模式下定义。所有代码 对于应用程序(包括使用的任何库),必须一致地编译 使用为设备执行而编译的代码进行仿真会导致以下运行时 初始化时返回的错误:CUDAErrorExedDeviceExecution。

    您是否只有一个为EMU重新编译的DLL,或者是否有其他DLL不是例如CUDA utils库?

    这与我在启用EMU的Win7 x64编译调试x86上所期望的一样有效。

    以下是我正在使用的编译器和链接器设置:

     "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
    
        2
  •  0
  •   Danny Varod    16 年前

    推荐文章