2013-06-19 2 views
0

Я пытаюсь получить следы памяти из cuda-gdb. Однако я не могу войти в код ядра. Я использую флаги nvcc -g -G и -keep, но не имеет никакого эффекта. Я могу поставить точку останова на функцию ядра, но когда я пытаюсь получить доступ к следующей команде, она переходит в конец функции ядра. Я пробовал это на примерах sdk, и я наблюдаю за тем же поведением. Я работаю над cuda 5 toolkit. Какие-либо предложения? Спасибо!cuda-gdb не входит в ядра

ответ

1

Такое поведение типично для отказа ядра. Убедитесь, что вы проверяете коды возврата вызовов CUDA. Обратите внимание, что для отладки вы можете добавить дополнительный вызов cudaDeviceSynchronize сразу после вызова ядра и проверить код возврата из этого вызова - это самый точный способ получить причину асинхронного запуска запуска ядра.

Обновление: Код, выполняющийся за пределами отладчика, но не в cuda-gdb, чаще всего вызван попыткой отладки в системе с одним GPU из графической среды. cuda-gdb не может делиться графическим процессором с Xwindows, так как это приведет к зависанию ОС.

Вам необходимо выйти из графической среды (например, выйти из окна X) и отладить с консоли, если ваша система имеет только один графический процессор.

Если у вас есть система с несколькими GPU, вам следует проверить конфигурацию Xwindow (Xorg.conf), чтобы она не использовала GPU, который вы резервируете для отладки.

+0

Да, код работает вне отладчика. Его пример sdk, и он выполняется правильно. –

+0

Обновлен ответ. – Eugene

+0

Да, это именно то, что было проблемой. Я запускал приложение CUDA на том же графическом процессоре, который запускает мое устройство. Благодаря! –

Смежные вопросы