Как я могу получить значения синхронизации из вывода nvprof или NVidia Visual Profiler?

Я использую nvprof для профилирования чего-либо (что включает в себя как работу процессора, так и работу с графическим процессором, т.е. я использую маркеры nvprof и т. Д.), И я получаю двоичные файлы, которые производит nvprof. Я могу импортировать их в NVVP (NVidia Visual Profiler; версия для Linux), и с небольшим усилием также сохранить это в XML.

Однако... XML не содержит временных данных о том, что и когда делают мои различные процессоры. Упоминается об их существовании, но не более. Кроме того, конец XML имеет этот двоичный двоичный объект, вероятно, закодированный в Base64 или что-то еще, внутри тега PDM. Мне не ясно, есть ли какая-то помощь там.

1 ответ

Решение

Это довольно старый вопрос, но, возможно, кто-то найдет ответ полезным.

nvprof выходные файлы на самом деле являются базами данных SQLite3, которые вы можете открыть либо с помощью автономной программы sqlite3, либо программно. Информация о временной шкале находится внутри этих таблиц (все временные метки в наносекундах):

  • CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL - данные о ядрах
  • CUPTI_ACTIVITY_KIND_MEMCPY - данные о копиях памяти (не P2P)
  • CUPTI_ACTIVITY_KIND_MEMCPY2 - данные о копиях памяти P2P
  • CUPTI_ACTIVITY_KIND_MEMSET - данные о memsets
  • CUPTI_ACTIVITY_KIND_RUNTIME - данные о вызовах CUDA Runtime API
  • CUPTI_ACTIVITY_KIND_DRIVER - данные о вызовах API CUDA Driver
  • CUPTI_ACTIVITY_KIND_MARKER - данные о маркерах NVTX. Он имеет немного другую форму, чем другие таблицы, потому что он не имеет start а также end поля. Вместо этого, начало и конец маркера - это 2 записи (конец имеет name=0)

Вы можете соотнести вызовы API с ядрами / memcopies / memsets, используя correlationId поле.

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