Пытаюсь понять показатели nvprof, sm_efficiency и warp_execution_efficiency ноль

#cuda

#cuda

Вопрос:

Я пытаюсь понять метрики nvprof. Я новичок в CUDA и поэтому пытаюсь понять, какие показатели важны для производительности.

Я написал ядро для вычисления суммы абсолютной разности между матрицами.

При запуске на Tegra X1 он составляет в среднем около 47 мс, с 1584 блоками и 1024 потоками на блок.

Запустив nvprof, я получаю эти показатели:

 achieved_occupancy         Achieved Occupancy         0.982284    0.982284    0.982284
warp_execution_efficiency  Warp Execution Efficiency  0.00%       0.00%       0.00%
sm_efficiency              Multiprocessor Activity    0.11%       0.11%       0.11%
branch_efficiency          Branch Efficiency          100.00%     100.00%     100.00%
ipc                        Executed IPC               3.600738    3.600738    3.600738
  

Почему Warp Execution Efficiency и Multiprocessor Activity такие низкие, когда другие показатели такие хорошие? Это правильные показатели, на которые следует обращать внимание при профилировании общей производительности ядра, верно?

Комментарии:

1. Я не думаю, что warp_execution_efficiency и sm_efficiency являются правильными. достигнутая_занятость составляет почти 100% (что соответствует ожиданиям, что вы сможете разместить полные 2048 = 64 деформации на SM. Я не могу вспомнить, соответствует ли ipc для SM или для GPU. Давайте предположим, что это для каждого графического процессора. Maxwell SM имеет устойчивый IPC 6,0 * 2 SMs = 12. Минимальная sm_efficiency должна составлять 3,6 / 12 = 30%. Я бы рекомендовал собрать метрики во второй раз. Пожалуйста, опубликуйте результаты и ядро.

Ответ №1:

Хороший ответ здесь, вероятно, включал бы в себя длинное руководство по эффективности выполнения CUDA, методам и целям оптимизации, а также механике nvprof . Поскольку вы вообще не предоставили никакого кода, он должен быть полностью абстрактным и спекулятивным.

Если вы испытываете трудности с nvprof концепциями оптимизации CUDA, вам может быть полезнее поэкспериментировать с nvvp визуальным профилировщиком, который включает в себя множество управляемых аналитических, пояснительных, справочных и экспертных систем.

Для начала рассмотрим только один из ваших вопросов, sm_efficiency относится к проценту времени, в течение которого SM имеет одно или несколько активных искажений. Поскольку ваш sm_efficiency уровень довольно низок, может показаться, что большую часть времени SM (ы) в целом находится в состоянии ожидания — он не выдает инструкции. Если мы сравним это с заполняемостью, например, это почти ортогональные понятия. Заполняемость относится, грубо говоря, к тому, сколько деформаций находится в SM. Если SM имеет «полный набор» искажений, то заполняемость будет высокой.

Что касается вашего вопроса о том, являются ли они «правильными показателями», «правильные показатели» должны следовать одной из 2 траекторий:

  1. убедитесь, что основные цели оптимизации были достигнуты. Для CUDA самые основные из них связаны с наличием достаточного параллелизма и эффективным использованием подсистем памяти. Например, ни одна из выбранных вами метрик не связана с эффективным использованием памяти.

  2. траектория оптимизации, основанная на анализе, то есть такая, которая направлена на установление ограничений производительности. Существуют различные презентации, которые охватывают эти идеи, которые вы можете поискать. Если вы выполните поиск в Google по «gtc cuda optimization», вы найдете презентации, которые хорошо раскрывают основные методы оптимизации CUDA, измерения производительности и оптимизации на основе анализа.

Помечаю это как CW — другие могут пожелать добавить свои мысли или лучшие практики.