CUDA dispose d'une option pour compiler le code en mode d'émulation, qui est supporté dans le fichier .rules qu'ils fournissent.Débogage des noyaux CUDA appelés du code .NET dans VS2008, mode d'émulation
J'ai code C# .NET 3.5 SP1 qui appelle une DLL native, en utilisant DllImport, le dll natif compilé à partir VS2008 à l'aide nvcc et sa fonction est de transférer la mémoire de et vers CUDA et pour appeler les noyaux CUDA. Quand les noyaux CUDA sont corrects, tout fonctionne bien, mais quand il y a un bogue, je peux seulement entrer dans le code jusqu'au titre des noyaux et voir les paramètres qu'ils reçoivent. (j'ai activé le débogage du code natif dans les options de débogage de démarrage-projet.)
J'ai essayé de compiler avec le mode d'émulation, mais je reçois l'erreur CUDA « d'exécution du dispositif mixte » lorsque vous appelez l'hôte memcopy CUDA -> appareil. J'ai essayé de commuter alloc + dealloc + memcopy avec leurs versions équivalentes non-CUDA, mais la même erreur se produit lors de l'invocation des noyaux.
Qu'est-ce que j'ai fait de mal dans ma tentative d'utiliser le mode d'émulation de débogage?
P.S. J'ai essayé cela sur Vista x64 SP1 + VS2008, avec la même solution à la fois dans x86 et x64, ni travaillé en mode d'émulation, les deux travaillé en mode non-émulation.
J'ai un projet plein de dll C# avec une seule DLL native/CUDA. –
C'est ce que j'ai aussi. Application C# appelant dans une DLL C++/CLI qui à son tour appelle du code CUDA. Quelles options de compilation avez-vous définies dans les règles de construction CUDA? Par exemple, l'optimisation est-elle désactivée? –
J'utilise les options du fichier CUDA 2.3 .rules standard, en mode débogage (pas d'optimisation). Le seul changement que j'ai fait a été le routage du compilateur/éditeur de liens vers différents dossiers CUDA Toolkit/SDK en x86 et en x64 afin que je puisse compiler dans les deux. –