parallel-processing - 如何编译 Fortran 代码以在 OpenMPI 中使用 gprof 进行分析?
问题描述
我可以使用 gfortran 编译器编译我的 Openmpi 代码。我给出的编译语法是:
mpif90 -o mycode.exe mycode.f90
mpirun -np 4 ./mycode.exe
有用。现在我想使用 Gprof 分析我的代码。我知道我应该添加 -pg 标志,但如果我把它放在 mpif90 之后它会崩溃。我应该把国旗放在哪里?
解决方案
你可以试一试,看看效果如何。假设您使用的是 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
推荐阅读
- javascript - 返回选中和未选中的复选框值
- ios - 在 iPhone X(及更高版本)上启动与键盘大小相同的 UIDatePicker
- c - LTO 模式下用于 ARM 的 GCC 8 正在删除中断处理程序和弱功能 - 如何防止它?
- react-native - ScrollView 在没有 flex 时越过父元素,但不能用 flex 看到
- php - 仅来自 php 服务的 pgsql 服务的 Docker SQLSTATE[08006]
- elasticsearch - elasticsearch赋予不同领域和场景更多的权重
- c# - 什么是更好的做法:存储字符串或使用关系?
- arrays - 在 mongodb 中存储和更新时间序列数据的最佳实践
- javascript - 固定滚动上的行与其他行重叠
- asp.net - 如何在验证摘要上显示文本框标签名称