Есть ли какой-либо способ или даже возможность получить общее использование графического процессора в течение определенного периода времени?
Я пытаюсь получить информацию об общем использовании графического процессора (у меня NVIDIA Tesla K20, работающая на Linux) в течение определенного периода времени. Под "общим" я подразумеваю что-то вроде того, сколько потоковых мультипроцессоров запланировано для запуска и сколько ядер GPU запланировано для запуска (я полагаю, если ядро работает, оно будет работать на полной скорости / частоте?). Также было бы хорошо, если бы я мог получить общее использование, измеренное на флопах.
Конечно, прежде чем задавать вопрос здесь, я искал и исследовал несколько существующих инструментов / библиотек, включая NVML (и nvidia-smi, построенные поверх него), CUPTI (и nvprof), PAPI, TAU и Vampir. Однако, похоже (но я пока не уверен), никто из них не смог предоставить мне необходимую информацию. Например, NVML может сообщать о "использовании GPU" в процентах, но согласно его документу / комментарию, это использование "Процент времени за последнюю секунду, в течение которого на GPU выполнялось одно или несколько ядер", что, по-видимому, недостаточно точно., Для nvprof он может сообщать о провалах для отдельного ядра (с очень высокими издержками), но я до сих пор не знаю, насколько хорошо используется графический процессор.
Кажется, что PAPI может получить счетчик команд, но он не может отличаться от операций с плавающей запятой от других. Я еще не пробовал другие два инструмента (TAU и Vampir), но сомневаюсь, что они могут удовлетворить мою потребность.
Поэтому мне интересно, возможно ли вообще получить общую информацию об использовании графического процессора? Если нет, какова лучшая альтернатива для его оценки? Цель, которую я делаю, состоит в том, чтобы найти лучшее расписание для нескольких заданий, работающих поверх графического процессора.
Я не уверен, что достаточно подробно описал свой вопрос, поэтому, пожалуйста, дайте мне знать, могу ли я добавить что-нибудь для лучшего описания.
Большое спасибо!
1 ответ
ПлагинnVidia Nsight для Visual Studio имеет очень приятные графические функции, которые предоставляют необходимую статистику. Но у меня такое ощущение, что у вас Linux-машина, поэтому Nsight не будет работать.
Я предлагаю использовать nVidia Visual Profiler.
Справочник по метрикам довольно полный и может быть найден здесь. Вот как я собираю интересующие вас данные:
Активные модули SMX - посмотрите на sm_efficiency. Это должно быть близко к 100%. Если оно ниже, то некоторые SMX-модули не активны.
Активные ядра / SMX - это зависит. K20 имеет планировщик Quad-Warp с двойной инструкцией. Деформация запускает 32 ядра SM. K20 имеет 192 ядра SP и 64 ядра DP. Вы должны посмотреть на метрику ipc (инструкции на цикл). Если ваша программа DP, а IPC - 2, то вы используете ее на 100% (для выполнения всей рабочей нагрузки). Это означает, что запланированы 2 деформации по расписанию, чтобы все ваши 64 ядра DP были активны в течение всех циклов. Если ваша программа SP, теоретически ваш IPC должен быть 6. Однако на практике это очень трудно получить. IPC, равный 6, означает, что 3 из планировщиков запустили по 2 перекоса каждый и дали работу 3 x 2 x 32 = 192 SP ядрам.
FLOPS - Ну, если ваша программа использует операции с плавающей запятой, то я бы посмотрел на flop_count_sp и разделил бы его на прошедшие секунды.
Что касается частоты, я бы не волновался, но проверять с nvidia-smi не вредно. Если ваша карта имеет достаточное охлаждение, она будет работать с максимальной частотой во время работы.
Проверьте справочник метрик, поскольку он предоставит вам гораздо больше полезной информации.
Я думаю, что NVprof также поддерживает несколько процессов. Проверьте здесь. Вы также можете фильтровать по идентификатору процесса. Таким образом, вы можете собирать эти метрики "мультиконтекст" или "один контекст". В справочной таблице метрик у вас есть столбец, в котором указано, могут ли они быть собраны в обоих случаях.
Примечание. Метрики рассчитываются с использованием счетчиков производительности HW и анализа на уровне драйвера. Если инструменты nvidia не могут предоставить больше, чем другие, маловероятно, что другие инструменты смогут предложить больше. Но я думаю, что правильное объединение метрик может рассказать вам все, что вы хотите о запуске вашего приложения.