如何在OpenMPI中使用gprof编译Fortran代码进行性能分析?

问题描述 投票:1回答:1

我可以使用gfortran编译器编译我的Openmpi代码。我给出的编译语法是:

mpif90 -o mycode.exe mycode.f90

mpirun -np 4 ./mycode.exe

有用。现在我想用Gprof来描述我的代码。我知道我应该添加-pg标志,但是如果我把它放在mpif90之后就崩溃了。我应该把旗子放在哪里?

parallel-processing fortran gfortran openmpi gprof
1个回答
2
投票

你可以尝试一下,看看它是如何产生的。假设您使用的是openmpi。创建以下名为mywrapper.sh的脚本

#!/bin/bash
prefix="gmon_${OMPI_COMM_WORLD_RANK}.out"
GMON_OUT_PREFIX=$prefix $*

并运行您的代码

mpif90 -o mycode.exe -pg mycode.f90
mpirun -np 4 mywrapper.sh ./mycode.exe

测试代码的MPI代码(我正在使用C,但FORTRAN应该没有区别):

//file x.c
#include <mpi.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
    int rank=9;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    printf("Hello from rank=%d!\n", rank);
    MPI_Finalize();
    return 0;
}

用于编译和运行测试的命令

#!/bin/bash
mpicc -pg x.c
mpirun --hostfile hostfile mywrapper.sh ./a.out

为简化测试,hostfile仅使用本地主机。命令输出:

Hello from rank=1!
Hello from rank=2!
Hello from rank=0!

然后你得到那些gprof文件,如果不能,必须是mpi配置问题。

.
├── a.out
├── gmon_0.out.2690
├── gmon_1.out.2692
├── gmon_2.out.2693
© www.soinside.com 2019 - 2024. All rights reserved.