0

CUDAには、エミュレーションモードでコードをコンパイルするオプションがあります。これは、提供される.rulesファイルでサポートされています。

DllImportを使用してネイティブdllを呼び出すC#.NET 3.5 SP1コードがあります。ネイティブdllはnvccを使用してVS2008経由でコンパイルされ、その機能はCUDAとの間でメモリを転送し、CUDAカーネルを呼び出すことです。

CUDAカーネルが正しい場合、すべてが正常に実行されますが、バグがある場合は、カーネルのタイトルまでコードにステップインして、カーネルが受け取るパラメーターを確認することしかできません。(startup-projectのデバッグオプションでネイティブコードのデバッグを有効にしました。)

エミュレーションモードでコンパイルしようとしましたが、CUDA memcopy host-> deviceを呼び出すと、CUDAエラー「mixeddeviceexecution」が発生します。alloc + dealloc + memcopyを同等の非CUDAバージョンに切り替えてみましたが、カーネルを呼び出すときに同じエラーが発生します。

デバッグエミュレーションモードを使用しようとしたときに何を間違えましたか?

PS私はこれをVistax64SP1 + VS2008で試しましたが、同じソリューションがx86とx64の両方に準拠しており、どちらもエミュレーションモードでは機能せず、どちらも非エミュレーションモードで機能しました。

4

2 に答える 2

1

CUDAプログラミングガイドp44から:

このモードでアプリケーションをコンパイルする場合(-deviceemuオプションを使用)、デバイスコードはホスト用にコンパイルされて実行されるため、プログラマーはホストのネイティブデバッグサポートを使用して、アプリケーションをホストアプリケーションであるかのようにデバッグできます。プリプロセッサマクロDEVICE_EMULATIONは、このモードで定義されます。使用するライブラリを含むアプリケーションのすべてのコードは、デバイスエミュレーションまたはデバイス実行のいずれかのために一貫してコンパイルする必要があります。デバイスエミュレーション用にコンパイルされたコードをデバイス実行用にコンパイルされたコードにリンクすると、初期化時に次のランタイムエラーが返されます:cudaErrorMixedDeviceExecution。

EMU用に再コンパイルした単一のDLLがありますか、それともCUDA utilsライブラリなどではない他のDLLがありますか?

これは、EMUを有効にしてDebug|x86をコンパイルするWin7x64で期待どおりに機能します。

私が使用しているコンパイラとリンカの設定は次のとおりです。

 "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
于 2009-10-15T22:26:28.763 に答える
0

この問題は、SDKエミュレーションDLL(TOOLKIT DLLのみがコピーされた)をコピーするためのビルドイベントの欠落と、エミュレーションライブラリの代わりにいくつかの通常のライブラリが原因で発生しました。

于 2010-05-29T13:14:22.683 に答える