Терминология, используемая в Nsight Compute

#optimization #cuda #nsight-compute

#оптимизация #cuda #nsight-вычислять

Вопрос:

Два вопроса:

  1. Согласно Nsight Compute, мое ядро привязано к вычислениям. Минимальный процент использования по отношению к пиковой производительности составляет 74%, а использование памяти — 47%. Однако, когда я смотрю на процент использования каждого конвейера, загрузка LSU намного выше, чем у других (75% против 10-15%). Не будет ли это признаком того, что мое ядро ограничено памятью? Если использование вычислительных ресурсов и памяти не соответствует использованию конвейера, я не знаю, как интерпретировать эти термины.

  2. Планировщики выдают только каждые 4 цикла, не означает ли это, что мое ядро ограничено задержкой? Люди обычно определяют это с точки зрения использования вычислительных ресурсов и памяти. Какова взаимосвязь между обоими?

Ответ №1:

В Nsight вычисления на графических процессорах CC7.5

SM% определяется sm__пропускной способностью, а% памяти определяется gpu__compute_memory_throughtput

sm_throughput — это максимальное значение из следующих показателей:

  • sm__инструкция_пропускная способность
    • sm__inst_выполнено
    • sm__проблема_активна
    • sm__mio_inst_выдано
    • sm__pipe_alu_cycles_активный
    • sm__inst_executed_pipe_cbu_pred_на_любом
    • sm__pipe_fp64_циклы_активны
    • sm__pipe_тензорный_цикл_активный
    • sm__inst_executed_pipe_xu
    • sm__pipe_fma_циклы_активны
    • sm__inst_executed_pipe_fp16
    • sm__pipe_shared_cycles_активный
    • sm__inst_выполняется_по каналу_единообразно
    • sm__инструкция_пропускная способность_внутренняя_активность
  • sm__память_пропускная способность
    • idc__request_cycles_активен
    • sm__inst_executed_pipe_adu
    • sm__inst_executed_pipe_ipa
    • sm__inst_executed_pipe_lsu
    • sm__inst_executed_pipe_tex
    • sm__mio_pq_read_cycles_активный
    • sm__mio_pq_запись_циклы_активны
    • sm__mio2rf_обратная запись_активна
    • sm__память_пропускная способность_внутренняя_активность

пропускная способность gpu__compute_memory_ является максимальной из следующих показателей:

  • графический процессор__вычисляет_память_доступ_пропускная способность
    • l1tex__data_bank_считывает
    • l1tex__data_bank_записывает
    • l1tex__data_pipe_lsu_волновые фронты
    • l1tex__data_pipe_tex_волновые фронты
    • l1tex__f_волновые фронты
    • lts__d_атомарный_ввод_циклов_активен
    • lts__d_сектора
    • lts__t_секторов
    • запросы lts__t_tag_
    • графический процессор__вычисляет_доступкпамяти_пропускнаяспособность_внутренняя_активность
  • графический процессор__вычисляет_память_доступ_пропускная способность
  • запросы l1tex__lsuin_
    • l1tex__texin_sm2tex_req_cycles_активный
    • l1tex__lsu_обратная запись_активна
    • l1tex__tex_обратная запись_активна
    • l1tex__m_l1tex2xbar_req_cycles_активный
    • l1tex__m_xbar2l1tex_read_сектора
    • lts__lts2xbar_циклы_активны
    • lts__xbar2lts_циклы_активны
    • lts__d_сектора_заполняют_устройство
    • lts__d_sectors_fill_sysmem
    • пропускная способность gpu__dram_
    • графический процессор__вычисляет_память_запрос_пропускнуюспособность_внутреннюю_активность

В вашем случае ограничителем является sm__inst_executed_pipe_lsu, который представляет собой пропускную способность команды. Если вы просмотрите sections/SpeedOfLight.py ограничение задержки определяется как при __ пропускной способности sm__ и__вычислительной_памяти_ gpu__через пропускную способность < 60%.

Некоторые наборы конвейеров команд имеют меньшую пропускную способность, такие как fp64, xu и lsu (зависит от чипа). Использование конвейера является частью пропускной способности sm__. Для повышения производительности возможны следующие варианты:

  1. Сократить инструкции до конвейера с избыточной подпиской или
  2. Выдавать инструкции другого типа для использования пустых циклов выдачи.

ГЕНЕРАЦИЯ РАЗБИВКИ

Начиная с Nsight Compute 2020.1, не существует простой командной строки для генерации списка без запуска сеанса профилирования. На данный момент вы можете собрать один показатель пропускной способности с помощью breakdown:<throughput metric>avg.pct_of_peak_sustained.elapsed и проанализировать выходные данные, чтобы получить имена подметрик.

Например:

 ncu.exe --csv --metrics breakdown:sm__throughput.avg.pct_of_peak_sustained_elapsed --details-all -c 1 cuda_application.exe
  

генерирует:

 "ID","Process ID","Process Name","Host Name","Kernel Name","Kernel Time","Context","Stream","Section Name","Metric Name","Metric Unit","Metric Value"
"0","33396","cuda_application.exe","127.0.0.1","kernel()","2020-Aug-20 13:26:26","1","7","Command line profiler metrics","gpu__dram_throughput.avg.pct_of_peak_sustained_elapsed","%","0.38"
"0","33396","cuda_application.exe","127.0.0.1","kernel()","2020-Aug-20 13:26:26","1","7","Command line profiler metrics","l1tex__data_bank_reads.avg.pct_of_peak_sustained_elapsed","%","0.05"
"0","33396","cuda_application.exe","127.0.0.1","kernel()","2020-Aug-20 13:26:26","1","7","Command line profiler metrics","l1tex__data_bank_writes.avg.pct_of_peak_sustained_elapsed","%","0.05"
...
  

Ключевое слово breakdown может использоваться в файлах раздела Nsight Compute для расширения показателя пропускной способности. Это используется в SpeedOfLight.section.

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

1. Мне трудно найти определения, которые вы дали для sm_throughput и gpu__compute_memory_throughput в документации Nsight. Есть ли ресурс, где это определено?

2. Я обновил ответ, чтобы показать, как генерировать разбивку с помощью командной строки, и попросил команду Nsight Compute добавить автономную командную строку для генерации информации.