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