CUDA/PyCUDA: Диагностика сбоя запуска, который исчезает при cuda-gdb

Кто-нибудь знает вероятные пути расследования сбоев запуска ядра, которые исчезают при запуске под cuda-gdb? Распределение памяти соответствует спецификации, каждый раз запуск одного и того же ядра завершается сбоем, и (пока) в отладчике не было сбоев.

О великие SO-гуру, что теперь?


person Bolster    schedule 20.04.2011    source источник
comment
Еще во времена эму я иногда запускал его через valgrind в режиме эму, чтобы найти ошибки. Я также недавно прибегал к печати ядра, чтобы решить одну из них.   -  person jmilloy    schedule 21.04.2011


Ответы (2)


cuda-gdb сбрасывает всю общую память и регистрируется в локальной памяти. Поэтому, когда что-то работает нормально, созданное для отладки, и дает сбой в противном случае, это обычно означает доступ к общей памяти за пределами границ. cuda-memcheck может помочь, в зависимости от того, какую карту вы используете. Fermi в этом отношении лучше старых карт.

РЕДАКТИРОВАТЬ: возвращаясь к старым недобрым временам, я помню, как у меня был злобный GT9500, который раньше выдавал аналогичные ошибки NV13 и имел случайные сбои кода при запуске ядер с очень интенсивным использованием памяти с большим количеством операций с общей памятью. . Никогда при отладке. Я списал это на плохое оборудование и перешел на GT200, и с тех пор не видел подобной ошибки. Одной из возможностей может быть плохое оборудование. Это G92 (9800GT или аналогичный)?

person talonmies    schedule 20.04.2011
comment
Cuda-memcheck также «исправляет» проблему; примечание: это с импортированным pycuda.debug, и документация ничего не говорит об этом (кроме использования) - person Bolster; 21.04.2011
comment
pycuda.debug на самом деле просто скрипт-оболочка, который устанавливает driver.set_debugging(), заставляя всю компиляцию JIT выполняться с правильными флагами для работы с cuda-gdb. Я не уверен, что cuda-memcheck будет делать на более старой карте с общей памятью. Может не быть аппаратной поддержки для выполнения всей диагностики общей памяти, которую он может выполнять на Fermi. - person talonmies; 21.04.2011
comment
@talonmies, что за ошибка NV13. Поиск в сети ничего полезного не дал. - person Framester; 08.02.2012
comment
@Framester: это класс ошибки драйвера Linux, о которой сообщается в кольцевой буфер ядра. - person talonmies; 08.02.2012

CUDA GDB может сделать некоторые операции cuda синхронными.

  • Вы читаете из памяти после инициализации?
  • вы используете потоки?
  • Вы запускаете более одного ядра?
  • Где и как не получается?
person fabrizioM    schedule 21.04.2011
comment
Более подробный вопрос только для вас @fabrizioM stackoverflow.com/questions/5827219/ - person Bolster; 29.04.2011