Не удалось использовать cuda-gdb для запуска программы с вызовами CUPTI
У меня такая странная проблема: у меня есть программа, которая использует CUPTI callbackAPI для мониторинга ядер в программе. Хорошо работает, когда запускается напрямую; но когда я поместил его в cuda-gdb и запустил, произошел сбой со следующей ошибкой:
ошибка: функция cuptiSubscribe(&subscriber, CUpti_CallbackFunc)my_callback, NULL) завершилась ошибкой CUPTI_ERROR_NOT_INITIALIZED
Я перепробовал все примеры в CUPTI/samples и пришел к выводу, что программы, использующие callbackAPI и activityAPI, потерпят неудачу в cuda-gdb. (Они все хорошо ведут себя без cuda-gdb) Но причина сбоя отличается: если у меня есть вызовы из ActivityAPI, то однажды запустив его под cuda-gdb, он будет зависать на минуту, а затем завершится с ошибкой
Драйвер CUDA обнаружил внутреннюю ошибку. Код ошибки: 0x100ff00000001c Дальнейшее выполнение или отладка ненадежны. Пожалуйста, убедитесь, что ваш временный каталог подключен с правами записи и exec.
Если у меня есть вызовы из callbackAPI, подобные моей собственной программе, то она будет намного быстрее с той же ошибкой:
CUPTI_ERROR_NOT_INITIALIZED
Есть опыт по этому вопросу? Я правда ценю это!
1 ответ
Согласно сообщениям на форуме NVIDIA, а также упоминаемым здесь, "инструменты" CUDA должны использоваться уникальным образом. Эти инструменты включают в себя:
- CUPTI
- любой профилировщик
- CUDA-MemCheck
- отладчик
Только один из них может быть "использован" в коде одновременно. Разработчикам должно быть довольно легко использовать профилировщик или cuda-memcheck
или отладчик независимо, но возможный вывод для тех, кто использует CUPTI, которые также хотят иметь возможность использовать другой "инструмент" CUDA в том же коде, - это предоставить метод кодирования, позволяющий отключить использование CUPTI в их приложении., когда они хотят использовать другой инструмент.