我正在优化MPI代码,并且正在使用Gprof。 问题是我获得的结果是完全不合理的。我的工作流程如下:
编译添加-pg
作为编译标志的代码。
运行代码mpirun -np Nproc EXEC.exe arg1 ... argN
。
在可执行文件gprof EXEC.exe
这有什么问题?
答案 0 :(得分:3)
运行gprof
的指令通常假定程序是串行或单进程但多线程的。
要通过MPI程序等多进程程序运行gprof
,您将需要
gprof
。This blog post或these instructions at LLNL是很好的起点:
GMON_OUT_PREFIX
环境变量,例如在bash中,export GMON_OUT_PREFIX=gmon.out-
在运行mpiexec命令之前(然后,根据环境,您可能必须运行mpirun -x GMON_OUT_PREFIX -np Nproc EXEC.exe arg1 ... argN
以确保每个进程都具有环境变量)gprof -s EXEC.exe gmon.out-*
gprof EXEC.exe gmon.sum
(或仅使用gprof EXEC.exe gmon.out-12345
或gprof EXEC.exe gmon.out-*
检查单个文件或一起检查文件)