J'ai écrit une application CUDA qui contient des paramètres codés en dur (via #define
s). Tout semblait fonctionner correctement, alors j'ai essayé d'autres paramètres. Maintenant, le programme ne fonctionne plus correctement.CUDA: Déboguer avec -deviceemu et gdb
Donc, je veux le déboguer. Je compile l'application avec -deviceemu -g -O0
options, parce que j'ai lu que je peux alors utiliser gdb pour le déboguer. Dans gdb, j'ai défini un point d'arrêt au démarrage du noyau en utilisant break kernelstart
.
Cependant, gdb, saute au début de mon noyau CUDA, mais je ne peux pas passer à travers, car il ne me laisse pas inspecter les choses dans le noyau. Je pense qu'il est préférable que je donne la sortie de gdb:
Breakpoint 1, kernelstart (__cuda_0=0x100000, __cuda_1=0x101000, __cuda_2=0x102000, __cuda_3=0x102100) at cudatest.cu:287
(gdb) s
__device_stub__Z12kernelstartPjS_S_S_ (__par0=0x100000, __par1=0x101000, __par2=0x102000, __par3=0x102100) at /tmp/tmpxft_000003c4_00000000-1_cudatest.cudafe1.stub.c:7
7 /tmp/tmpxft_000003c4_00000000-1_cudatest.cudafe1.stub.c: No such file or directory.
in /tmp/tmpxft_000003c4_00000000-1_cudatest.cudafe1.stub.c
(gdb) s
cudaLaunch<char> (entry=0x804a98d "U\211\345\203\354\030\213E\024\211D$\f\213E\020\211D$\b\213E\f\211D$\004\213E\b\211\004$\350\r\377\377\377\311\303U\211\345\203\354\070\307\004$\340 \005\b\350\345\341\377\377\243P!\005\b\307\004$x\234\004\b\350\b\001") at /usr/local/cuda/bin/../include/cuda_runtime.h:773
(gdb) s
(gdb) s
cudatest (__cuda_0=0x100000, __cuda_1=0x101000, __cuda_2=0x102000, __cuda_3=0x102100) at cudatest.cu:354
(gdb) s
Après, cela, il saute à ma procédure main
.
Je sais que mes spécifications sont plus que vagues, mais quelqu'un peut-il deviner où est le problème? Est-il possible d'inspecter les noyaux en utilisant gdb?
Je ne pense pas que les informations de "--keep" ne sont pas nécessaires pour un débogueur comme gdb. "--keep" est juste pour garder l'ensemble et le code source original ensemble dans le même fichier. – codetwiddler