Трассировка nvprof gpu в метрическом режиме не дает подробностей для каждого вызова
Я реализовал SVD с помощью функции PyTorch SVD GPU, и я использую nvprof для профилирования.
--print-gpu-trace дает мне отдельные вызовы ядра, отсортированные в хронологическом порядке, которые я использую для определения сетки и размера блока. Это дает мне полный список вызовов.
nvprof --print-gpu-summary svd.py
--print-gpu trace в режиме метрики для конкретного ядра дает мне метрику для вызова ядра. Например (ядро slaset_full_kernel)
nvprof --print-gpu-summary --kernels slaset_full_kernel --metrics warp_execution_efficiency svd.py
Для ядра "slaset_full_kernel" в общем списке вызовов я вижу около 12 вызовов с разными размерами сетки для "slaset_full_kernel".
Но когда я получаю трассировку GPU в метрическом режиме для вышеупомянутого ядра, я получаю результаты только для 6 вызовов следующим образом.
Device Context Stream Kernel warp_execution_efficiency %`
Tesla K80 (0) 1 16 slaset_full_kernel(i 100.00
Tesla K80 (0) 1 16 slaset_full_kernel(i 100.00
Tesla K80 (0) 1 16 slaset_full_kernel(i 99.85
Tesla K80 (0) 1 16 slaset_full_kernel(i 100.00
Tesla K80 (0) 1 16 slaset_full_kernel(i 99.86
Tesla K80 (0) 1 16 slaset_full_kernel(i 99.86
Это одинаково для всех ядер при профилировании в метрическом режиме. Существует только сводка метрик для половины вызовов. Почему это происходит? Как создать сопоставление между вызовом ядра и сводкой метрик, если я не получаю метрики для всех вызовов ядра? Правильно ли я понял это?