2009-10-10 30 views
0

CUDA有一個選項可以在仿真模式下編譯代碼,這在他們提供的.rules文件中受支持。在VS2008中調試從.NET代碼調用的CUDA內核,仿真模式

我有一個調用本機DLL,使用的DllImport, 天然dll是使用NVCC經由VS2008編譯和它的功能是從內存和CUDA轉移以及調用CUDA內核C#的.NET 3.5 SP1代碼。

當CUDA內核正確時,一切運行良好,但是當出現錯誤時,我只能插入代碼,直到內核的標題並查看它們接收的參數。 (我啓用調試的啓動項目的調試選項本地代碼。)

我試圖與仿真模式下進行編譯,但是我得到的CUDA錯誤「混合設備執行」調用CUDA存儲器複製主機時 - >設備。 我試着用等效的非CUDA版本 切換alloc + dealloc + memcopy,但是當調用內核時發生同樣的錯誤。

我在嘗試使用調試仿真模式時做了什麼錯誤?

P.S.我在Vista x64 SP1 + VS2008上嘗試了這一點,在x86和x64中都使用相同的解決方案,既不能在仿真模式下工作,也不能在非仿真模式下工作。

回答

0

的問題是由缺少生成事件複製的SDK仿真DLLS引起的(只有TOOLKIT DLL文件被複制)和幾個常規庫而不是仿真庫。

1

從CUDA編程指南P44:

在此模式下編譯應用程序(使用-deviceemu選項),設備代碼是 編譯並運行在主機上,允許程序員使用主機的原生 調試支持調試應用程序,就像它是一個主機應用程序一樣。在此模式下定義了 預處理器宏DEVICE_EMULATION。對於應用程序(包括使用的任何庫)的所有代碼 必須一致編譯爲 以進行設備仿真或設備執行。將爲設備 仿真編譯的代碼與爲設備執行編譯的代碼鏈接起來會導致在初始化時返回以下運行時 錯誤:cudaErrorMixedDeviceExecution。

你是否只有一個DLL,你已經爲EMU重新編譯過,或者是否有其他的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 
+0

我有一個項目充滿C#dll只有一個本機/ CUDA DLL。 – 2009-10-17 00:39:30

+0

這就是我所擁有的。將C#應用程序調用到C++/CLI DLL中,後者又調用一些CUDA代碼。您在CUDA構建規則中設置了哪些編譯選項?例如優化被禁用? – 2009-10-17 06:28:51

+0

我在調試模式下使用標準的CUDA 2.3 .rules文件選項(無優化)。我做的唯一更改是將編譯器/鏈接器路由到x86和x64中的不同CUDA Toolkit/SDK文件夾,以便我可以在兩者中進行編譯。 – 2009-10-17 16:06:59