Не удалось использовать 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 в их приложении., когда они хотят использовать другой инструмент.

Другие вопросы по тегам