Как я могу получить значения синхронизации из вывода 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
- данные о копиях памяти P2PCUPTI_ACTIVITY_KIND_MEMSET
- данные о memsetsCUPTI_ACTIVITY_KIND_RUNTIME
- данные о вызовах CUDA Runtime APICUPTI_ACTIVITY_KIND_DRIVER
- данные о вызовах API CUDA DriverCUPTI_ACTIVITY_KIND_MARKER
- данные о маркерах NVTX. Он имеет немного другую форму, чем другие таблицы, потому что он не имеетstart
а такжеend
поля. Вместо этого, начало и конец маркера - это 2 записи (конец имеетname=0
)
Вы можете соотнести вызовы API с ядрами / memcopies / memsets, используя correlationId
поле.