Отметка времени в графическом процессоре

Я ищу, чтобы собрать след событий, которые происходят на уровне устройства на GPU.

Фон / аналогия на процессоре:

На процессоре, когда процесс A запущен, он может быть прерван другим процессом B уровня пользователя, процессами системы / ядра, различными видами прерываний, такими как аппаратные прерывания, сетевые прерывания, прерывания, связанные с гипервизором, и т. Д. Чтобы измерить их, В идеале мне нужно было бы сделать патч для ядра, который бы фиксировал время начала и окончания всех процессов и прерываний в планировщике и лотке прерываний. Сделайте эти структуры данных ядра видимыми для уровня пользователя, а затем повторно считывайте их из программы уровня пользователя.

Я хочу сделать что-то подобное для GPU. Как мне зафиксировать временные метки этих прерываний и фоновых процессов? В литературе я видел, что nvidia-smi может быть использован для сбора меток времени, но я очень не уверен, как на самом деле инструмент GPU, чтобы получить то, что мне нужно.

Кто-нибудь может указать ссылки или подсказать, как использовать графический процессор для получения меток времени? Или конкретно использовать nvprof, cuda-memcheck для той же цели?

1 ответ

Вы можете получить временные метки, используя функции clock() или clock64(). Вы можете использовать их, например, для захвата времени начала и конца блоков и узнать, как работает планировщик блоков.

Вы также можете использовать свой код для определения времени определенных частей ваших ядер. Это может быть использовано для получения удивительного понимания внутренней работы графического процессора.

В первые дни CUDA я много использовал это при настройке кода. Однако в настоящее время профилировщик nvvp настолько хорош, что ручное инструментарий кода редко требуется.

Однако обратите внимание, что SM не имеют прерываний так же, как процессоры. Более новые графические процессоры способны приостанавливать долго работающие ядра, чтобы позволить графическому интерфейсу оставаться интерактивным, особенно во время сеансов отладчика. Но нет никаких прерываний для обработки ввода-вывода или для планирования, потому что все оборудование ввода-вывода управляется хостом, а планирование выполняется полностью на аппаратном уровне. Точно так же нет фоновых процессов, потому что такие задачи намного лучше обрабатываются процессором.

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