Я хочу написать сценарий для профилирования моего приложения cuda, используя только командный инструмент nvprof
. В настоящее время я сосредотачиваюсь на двух показателях: использование GPU и GPU flops32 (FP32).
Использование графического процессора - это часть времени, в течение которого графический процессор активен. Активное время графического процессора можно легко получить с помощью nvprof --print-gpu-trace
, в то время как затраченное время (без накладных расходов) приложения мне не ясно. Я использую визуальный профилировщик nvvp
для визуализации результатов профилирования и расчета использования графического процессора. Похоже, что прошедшее время - это интервал между первым и последним вызовом API, включая время накладных расходов.
GPU flops32 - это количество инструкций FP32, которые графический процессор выполняет в секунду, пока он активен. Я следую предложению Грега Смита (Как рассчитать гигафлопс ядра) и обнаружили, что nvprof
очень медленно генерирует flop_count_sp_*
метрики.
Итак, я хочу задать два вопроса:
- Как рассчитать затраченное время (без накладных расходов) приложения CUDA с помощью nvprof?
- Есть ли более быстрый способ получить gpu flops32?
Любое предложение будет оценено.
================ Обновление =======================
Что касается первого вопроса выше, прошедшее время без накладных расходов, которое я имел в виду, на самом деле является временем сеанса - накладные расходы, показанное в результатах nvvp: