如何在MPI代码上从gprof获得有意义的结果?

时间:2018-12-15 14:23:42

标签: mpi hpc gprof

我正在优化MPI代码,并且正在使用Gprof。 问题是我获得的结果是完全不合理的。我的工作流程如下:

  • 编译添加-pg作为编译标志的代码。

  • 运行代码mpirun -np Nproc EXEC.exe arg1 ... argN

  • 在可执行文件gprof EXEC.exe

  • 上运行gprof

这有什么问题?

1 个答案:

答案 0 :(得分:3)

运行gprof的指令通常假定程序是串行或单进程但多线程的。

要通过MPI程序等多进程程序运行gprof,您将需要

  1. 确保每个进程输出自己的文件
  2. 明确地汇总跨进程的文件
  3. 对结果运行gprof

This blog postthese instructions at 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-12345gprof EXEC.exe gmon.out-*检查单个文件或一起检查文件)