Frage

CUDA hat eine Option Code im Emulationsmodus zu kompilieren, die unterstützt wird, in dem .rules Datei, die sie zur Verfügung stellen.

Ich habe C # .NET 3.5 SP1-Code, der eine native DLL aufruft, mit DllImport, mit nvcc und seine Funktion ist auf Übertragungsspeicher von und nach CUDA und die native DLL wird über VS2008 kompiliert invoke CUDA Kerne.

Wenn die CUDA Kerne korrekt sind, läuft alles gut, aber wenn es ein Fehler ist, kann ich nur bis zum Titel des Kerns in auf den Code Schritt und die Parameter sehen sie erhalten. (I ermöglicht das Debuggen nativen Code in das Startup-Projekt Debug-Optionen.)

Ich habe versucht, mit Emulationsmodus kompilieren, aber ich die CUDA Fehler „Mischgerät Ausführung“ erhalten, wenn die memcopy Host CUDA Aufruf -> Gerät. Ich versuchte Schale die Alloc + dealloc + memcopy mit ihren entsprechenden nicht CUDA Versionen, aber dann der gleiche Fehler tritt auf, wenn die Kerne aufgerufen wird.

Was habe ich falsch gemacht in meinem Versuch, den Debug-Emulationsmodus verwenden?

P. S. Ich habe versucht, dies auf Vista x64 SP1 + VS2008, mit der gleichen Lösung sowohl x86 und x64 erfüllt, weder im Emulationsmodus gearbeitet, sowohl in nicht-Emulationsmodus gearbeitet.

War es hilfreich?

Lösung 2

Das Problem durch ein fehlendes Buildereignis verursacht wurde, um die SDK-Emulation DLLS zu kopieren (nur der TOOLKIT-DLLs kopiert wurde) und ein paar regelmäßigen Libs statt Emulation Libs.

Andere Tipps

Von den CUDA-Programmierleitfaden p44:

In diesem Modus Kompilieren einer Anwendung (die -deviceemu Option), der Gerätecode ist erstellt für und läuft auf dem Host, dem Programmierer ermöglicht die Hosts verwenden nativen Debugging-Unterstützung zum Debuggen der Anwendung, als ob es eine Host-Anwendung war. Das Präprozessormakro DEVICE_EMULATION ist in diesem Modus definiert. Der gesamte Code für eine Anwendung, einschließlich der Bibliotheken verwendet wird, muss konsequent entweder kompiliert werden Gerät für Emulation oder für Geräteausführung. Linking Code kompiliert für Geräte Emulation mit Code für die Geräteausführung kompiliert verursacht die folgenden Laufzeit Fehler zurückgegeben bei der Initialisierung werden. cudaErrorMixedDeviceExecution

Haben Sie nur eine einzige DLL, die Sie für die WWU neu kompiliert haben oder gibt es andere DLLs, die die CUDA utils Bibliothek nicht zum Beispiel sind?

Das funktioniert, wie ich auf Win7 erwarten würde Debug x64 kompilieren |. X86 mit EMU aktiviert

Hier sind die Compiler und Linker-Einstellungen Ich bin mit:

 "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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top