Как профилировать код CUDA на безголовом узле?
Я работаю над приложением CUDA, которое я хотел бы профилировать. До сих пор я использовал только профилировщик командной строки, nvprof
, который просто отображает обобщенную статистику.
Я думал об использовании профилировщика GUI, NVVP. Проблема в том, что на удаленном узле Linux, на котором я запускаю приложение, нет ничего графического интерфейса (даже X.org). Более того, даже если мне удастся получить какой-нибудь стек X11 на удаленном узле, поддерживать свой ноутбук в течение всего времени профилирования будет, ну, утомительно.
Я попытался собрать всю необходимую информацию следующим образом:
nvprof --analysis-metrics -o application.nvprof ./myapplication
Затем я копирую выходной файл на свой ноутбук и просматриваю его в NVVP. Это имеет три проблемы, хотя.
Прежде всего, я не получаю никакой информации о передаче файла, когда загружаю выходной файл в NVVP. Это вообще не отображается в окне NVVP.
Во-вторых, граф вызовов полностью искажен. Разрывы между запусками ядра по крайней мере в 100 раз превышают длительности ядра, что делает невозможным анализ зависимостей и анализ потоков.
Наконец, мое приложение использует много памяти GPU. Во время профилирования устройство выходит из памяти, чего не происходит во время автономной работы.
Как мне правильно профилировать свое приложение CUDA на безголовом узле?
1 ответ
NVVP поддерживает безголовые узлы как первоклассный гражданин. Удаленное профилирование - главная особенность NVVP.
Это работает так, что NVVP работает на вашем локальном хост-компьютере с графическим интерфейсом и вызывает nvprof на автономной машине, генерирует там необходимые файлы, копирует файлы и открывает их. Все это происходит прозрачно и автоматически. Вы можете запустить дальнейшие анализы из NVVP как обычно, и он будет повторять эти шаги для вас.
Чтобы использовать удаленное профилирование, откройте NVVP, затем File->New Session
, Добавить соединение вместо использования Local
, вводя детали безголового автомата. Нажмите на Manage...
указать NVVP на путь инструментария на удаленной машине. После завершения однократной настройки введите путь к исполняемому файлу и запустите как обычно.
Вы можете прочитать об удаленном профилировании в соответствующей документации.