Эффективность управления потоком

Как указано в статистике ветвления руководство, существует две метрики: эффективность ветвления и эффективность потока управления.

У первого есть аппаратный счетчик branch_efficiency. Однако, похоже, что прямого аппаратного противодействия последнему нет. Можно ли найти соотношение выполненных и выданных инструкций потока управления и использовать его в качестве второго показателя эффективности? Или показатель использования потока управления cf_fu_utilization?

Поскольку эффективность потока управления можно интерпретировать как количество потоков, активных для одной инструкции в варпе, я предполагаю, что warp_execution_efficiency также можно использовать, поскольку определение гласит:

Ratio of the average active threads per warp to the maximum number of threads per warp supported on a multiprocessor

Любой комментарий по этому поводу?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

И эффективность ветвления, и эффективность потока управления являются метриками. Эффективность филиала может быть собрана в одном psd и показана в соответствии со значениями SM. Эффективность потока управления составляет smsp__thread_inst_executed / smsp__inst_executed / WARP_SIZE * 100.0. Эти счетчики не могут быть собраны со всех SM за один проход на всем оборудовании, поэтому метрика отображается на диаграмме как среднее значение по всем SM.

При использовании CUPTI/NVPROF аппаратные события:

  • inst_executed: количество инструкций, выполняемых за один варп. ВНИМАНИЕ: В описании указано «на варп». Это должна быть сумма.
  • thread_inst_executed: количество инструкций, выполненных активными потоками. Для каждой инструкции он увеличивается на количество потоков, включая потоки с заданным отключением, которые выполняют инструкцию. Он не включает повторы.
  • not_predicated_off_thread_inst_executed: Количество выполненных инструкций потока, для которых не задано значение off

Эти события можно использовать для расчета либо medium_threads_executed_per_inst_executed, либо medium_threads_executed_not_predicated_off_per_inst_executed. Это можно преобразовать в % на / 32 x 100,0.

Компилятор будет использовать предикацию вместо перехода, если тело условного оператора небольшое (несколько инструкций).

Об эффективности филиала сообщает nvprof. Таким образом, 100% для ядра, которое вызывается 10 раз, означает, что для всех 10 вызовов было активным 32 потока без расходящихся ветвей. Что такое аппаратная метрика для smsp__thread_inst_executed?

mahmood 12.04.2019 10:49

Правильный. Если вы запустите нечетное количество потоков на блок, вы увидите, что значение уменьшается, даже если у вас нет потока управления в ядре. Я обновил ответ аппаратными счетчиками и формулами для nvprof/CUPTI.

Greg Smith 13.04.2019 03:47

Что касается inst_executed, nvprof сообщает число, например. 100 для ядра, которое вызывается 50 раз. Итак, я предполагаю, что это общее количество удаленных инструкций 50 раз из всех потоков. Разве это не так? В противном случае я должен знать, каково количество деформаций в вызовах.

mahmood 13.04.2019 17:09

Я не вижу никакой метрики для второй и третьей пули. Я имею в виду здесь docs.nvidia.com/cuda/profiler-users-guide/…

mahmood 13.04.2019 17:10

В документе перечислены показатели. Он не перечисляет события. Запустите nvprof --query-events, чтобы получить список всех событий. Событие inst_executed возвращает сумму всех инструкций, выполненных (отложенных) на всех SM за 1 запуск сетки. Если вы хотите, чтобы инструкции выполнялись за варп, используйте формулу inst_executed / warps_launched. Пользовательский интерфейс напечатает название события, а затем мин., макс., среднее, общее. Они рассчитываются для всех запусков одного и того же ядра и находятся на уровне сетки/графического процессора для минимального/максимального/среднего значения, а общее количество представляет собой сумму всех запусков.

Greg Smith 16.04.2019 17:46

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