如何从MPI代码的gprof中获得有意义的结果?
我正在优化MPI代码,并与Gprof合作。 问题是我得到的结果完全不合理。我的工作流程如下:如何从MPI代码的gprof中获得有意义的结果?,mpi,hpc,gprof,Mpi,Hpc,Gprof,我正在优化MPI代码,并与Gprof合作。 问题是我得到的结果完全不合理。我的工作流程如下: 编译代码添加-pg作为编译标志 正在运行代码mpirun-np Nproc EXEC.exe arg1。。。argN 在可执行文件上运行gprofgprof EXEC.exe 这有什么不对?运行gprof的说明通常假定程序是串行的,或者是单进程但多线程的 要使用多进程程序(如MPI程序)运行gprof,您需要 确保每个流程输出自己的文件 跨进程显式求和文件 对结果运行gprof 或是良好的起点: 在
- 编译代码添加
作为编译标志-pg
- 正在运行代码
mpirun-np Nproc EXEC.exe arg1。。。argN
- 在可执行文件上运行gprof
gprof EXEC.exe
这有什么不对?运行
gprof
的说明通常假定程序是串行的,或者是单进程但多线程的
要使用多进程程序(如MPI程序)运行gprof
,您需要
gprof
GMON\u OUT\u PREFIX
环境变量,例如在bash中,export GMON\u OUT\u PREFIX=GMON.OUT-
(然后,根据环境的不同,您可能需要运行mpirun-x GMON\u 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-*
)检查单个文件或整体文件)