Различная занятость между калькулятором и nvprof

Я использую nvprof для измерения достигнутой занятости, и я нахожу это как

Достигнутая вместимость 0,344031 0,344031 0,344031

но используя калькулятор занятости, я нахожу 75%.

Результаты:

Active Threads per Multiprocessor   1536
Active Warps per Multiprocessor 48
Active Thread Blocks per Multiprocessor 6
Occupancy of each Multiprocessor    75%

Я использую 33 регистра, 144 байта разделяемой памяти, 256 потоков / блок, возможность устройства 3.5.

РЕДАКТИРОВАТЬ:

Кроме того, кое-что я хочу уточнить. В http://docs.nvidia.com/cuda/profiler-users-guide/ говорится о

gld_efficiency

Отношение запрошенной пропускной способности глобальной памяти к требуемой пропускной способности глобальной памяти, выраженное в процентах

Итак, если это 0%, это означает, что у меня нет глобальных передач памяти в ядре?

:

1 ответ

Решение

Вы должны понимать, что калькулятор занятости обеспечивает максимальную теоретическую занятость, которую может достичь данное ядро, основываясь только на ресурсных требованиях этого ядра. Он ничего не говорит (и не может сказать) о том, какую часть теоретического занятия может достичь код.

Инструменты профилирования, с другой стороны, определяют фактическую занятость по измеренным счетчикам профилей. Согласно этому документу, количество занятых, о которых вы спрашиваете, рассчитывается как

(active_warps / active_cycles) / MAX_WARPS_PER_SM

то есть. он проверяет количество активных деформаций на одном или нескольких SM во время запуска ядра и вычисляет фактическую занятость на основе этого

Может быть много причин, почему ядро ​​не достигает своей теоретической загрузки, и (прежде чем вы спросите), нет, я не могу сказать вам, почему ваше ядро ​​не достигает теоретической загрузки. Но Визуальный Профилировщик может. Если это важно для вас, я предлагаю вам взглянуть на функции автоматического анализа производительности, доступные в визуальном профилировщике CUDA 5/6, чтобы лучше понять производительность вашего кода.

Стоит также отметить, что занятость следует рассматривать только как приблизительный показатель потенциальной производительности кода, а высокая теоретическая занятость не всегда приводит к высокой производительности. Стратегии параллелизма на уровне инструкций и минимизации задержки также могут быть очень эффективными при достижении высоких уровней производительности даже при низкой загруженности. Об этом много говорится, в основном, из основополагающей статьи Василия Волкова GTC 2010.

Другие вопросы по тегам