Parallel processing 如何在OpenMPI中编译用于gprof评测的Fortran代码?

Parallel processing 如何在OpenMPI中编译用于gprof评测的Fortran代码?,parallel-processing,fortran,gfortran,openmpi,gprof,Parallel Processing,Fortran,Gfortran,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_${

我能够使用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应该可以正常工作):

为了简化测试,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

请说明您收到的确切错误消息以及您使用的完整命令行。是的,这就是问题所在。我实际上不知道如何用gprof编译代码。如果我写“mpif90-o-pg mycode.exe mycode.f90”,它不会给我可执行文件,而是创建一个名为“-pg”的文件。尝试将-pg放在-o之前或mycode.exe之后。显然,分析输出都在一个文件中,除非您定义
GMON\u OUT\u前缀
您说它崩溃了。到底发生了什么?你使用了哪些确切的命令?错误消息是什么?它给出了错误:openmpi试图通过“execve”系统调用派生一个新进程,但失败了。OpenMPI在尝试启动子进程之前检查了很多事情,但没有什么是完美的。此错误可能表示目标主机上存在另一个问题,甚至可能是为应用程序指定目录这样愚蠢的问题。您的作业现在将中止。只需再次尝试脚本,编辑打字错误,删除脚本第3行中的“;”即可。如果continue有问题,我可以发布这个例子的完整测试套件。我再试了一次,它仍然给了我相同的错误:“error:Exec format error”。如果你能发布你的测试服,那将是很有帮助的。非常感谢。hostfile具有本地主机名的3倍
Hello from rank=1!
Hello from rank=2!
Hello from rank=0!
.
├── a.out
├── gmon_0.out.2690
├── gmon_1.out.2692
├── gmon_2.out.2693