Как получить значимые результаты от gprof для кода MPI? - PullRequest
0 голосов
/ 15 декабря 2018

Я оптимизирую код MPI и работаю с Gprof.Проблема в том, что полученные результаты совершенно необоснованны.Мой рабочий процесс выглядит следующим образом:

  • компиляция кода с добавлением -pg в качестве флага компиляции.

  • с кодом mpirun -np Nproc EXEC.exe arg1 ... argN.

  • с запущенным gprof на исполняемом файле gprof EXEC.exe

Что в этом плохого?

1 Ответ

0 голосов
/ 15 декабря 2018

Инструкции по запуску gprof обычно предполагают, что программа является последовательной или однопроцессной, но многопоточной.

Для запуска gprof с многопроцессорной программой, такой как программа MPI, вам понадобится

  1. убедитесь, что каждый процесс выводит свой собственный файл
  2. , явно суммируйте файлы по процессам
  3. запустите gprof по результатам.

Этот пост в блоге или эти инструкции в LLNL являются хорошими отправными точками:

  1. Установите плохо документированную переменную окружения GMON_OUT_PREFIX, например, в bash, export GMON_OUT_PREFIX=gmon.out- перед запуском команды mpiexec (тогда, в зависимости от среды, вам может потребоваться запустить mpirun -x GMON_OUT_PREFIX -np Nproc EXEC.exe arg1 ... argN, чтобы убедиться, что у каждого процесса есть переменная среды)
  2. Использовать сам gprof для сбора и суммирования результатов, gprof -s EXEC.exe gmon.out-*
  3. gprof EXEC.exe gmon.sum (или просто просмотреть отдельные файлы или файлы вместе, с помощью gprof EXEC.exe gmon.out-12345 или gprof EXEC.exe gmon.out-*)
...