Есть ли способ профилировать программу MPI с подробной информацией об эффективности кэша / процессора?
ОС: Ubuntu 18.04 Вопрос: Как профилировать многопроцессорную программу?
Обычно я использую инструмент GNU perf для профилирования программы следующим образом:
perf stat -d ./main [args]
, и эта команда вернет подробный счетчик производительности следующим образом:
47,455.09 msec task-clock # 8.602 CPUs utilized
129,199 context-switches # 0.003 M/sec
92 cpu-migrations # 0.002 K/sec
16,228 page-faults # 0.342 K/sec
117,757,409,457 cycles # 2.481 GHz (49.84%)
236,496,093,412 instructions # 2.01 insn per cycle (62.31%)
1,454,901,353 branches # 30.658 M/sec (62.18%)
6,168,091 branch-misses # 0.42% of all branches (62.30%)
183,462,410,176 L1-dcache-loads # 3866.021 M/sec (62.55%)
189,736,991 L1-dcache-load-misses # 0.10% of all L1-dcache hits (62.75%)
8,330,520 LLC-loads # 0.176 M/sec (50.14%)
628,142 LLC-load-misses # 7.54% of all LL-cache hits (50.25%)
5.516529249 seconds time elapsed
46.947476000 seconds user
0.989185000 seconds sys
Я сосредотачиваюсь на эффективности ЦП (строка 1), IPC (строка 6), L1 и пропускной способности LLC (строки 9 и 11).
Но теперь мне нужно профилировать каждый процесс программы MPI, предположим, что у нас есть 3 процесса, выполнив
mpiexec -np 3 ./main [args]
, как я могу получить информацию об эффективности ЦП, IPC, L1 и LLC для каждого процесса соответственно?(Используя perf stat -d, я получаю только общую информацию, содержащую 3 процесса, чего мне сейчас недостаточно)
Я хочу получить такой результат:
PID: 1
LLC Band.: xxx
PID: 2
LLC Band.: xxx
PID: 3
LLC Band.: xxx
Как я могу это сделать? (Интересно, может ли GNU
gperf
сделай это? Или есть способ сделать это на C++?)
1 ответ
Базовые профилировщики, такие как gperf или gprof, плохо работают с программами MPI, но существует множество инструментов профилирования, специально разработанных для работы с MPI, которые собирают и предоставляют данные для каждого ранга MPI. Практически все они могут собирать аппаратные счетчики производительности для промахов кеша. Вот несколько вариантов:
- HPCToolkit для профилирования на основе выборки. Работает с немодифицированными двоичными файлами.
- TAU и Score-P обеспечивают инструментальное профилирование. Обычно требует перекомпиляции.
- TiMemory и суппорт позволяют помечать код регионы меры. В TiMemory также есть скрипты для анализа кровли и т. Д.
В приличных центрах высокопроизводительных вычислений обычно установлено один или несколько из них. Обратитесь к руководствам, чтобы узнать, как собирать аппаратные счетчики.