MPI不在FORTRAN代码中并行运行

时间:2017-11-21 16:22:32

标签: parallel-processing mpi openmpi

我正在尝试在我的Ubuntu(14.04)计算机上安装OpenMPI,我认为我已成功,因为我可以使用 mpirun 运行代码,但最近我注意到了它并非真正并行运行。

我使用以下选项安装了openmpi

./configure CXX=g++ CC=gcc F77=gfortran \
                           F90=gfortran  \
                            FC=gfortran   \
         --enable-mpi-f77 \
         --enable-mpi-f90  \
         --prefix=/opt/openmpi-1.6.5
make all
sudo make install

正如我所说的,我运行了一个代码(不是我自己编写的),它似乎并行工作,因为我检查了top并且它在几个节点中运行。

但现在我写了一个简单的FORTRAN代码:

PROGRAM hello_MPI
  INCLUDE "mpif.h"
  INTEGER :: err, size, rank
  CALL MPI_INIT(err)
  IF (err /= MPI_SUCCESS) STOP 'Init failed'
  CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, err)
  CALL MPI_COMM_SIZE(MPI_COMM_WORLD, size, err)
  PRINT*, "Hello world from process ", rank, " of ", size, " processes"
  CALL MPI_FINALIZE(err)
END PROGRAM

但是当我用

运行它时
mpirun -n 4 ./hello_MPI

我得到相同的输出4次,表明它只是在4个不同的处理器中运行相同的单个进程

 Hello world from process            0  of            1  processes
 Hello world from process            0  of            1  processes
 Hello world from process            0  of            1  processes
 Hello world from process            0  of            1  processes

我在不同的机器上运行了相同的代码,得到了预期的输出:

 Hello world from process            0  of            4  processes
 Hello world from process            1  of            4  processes
 Hello world from process            2  of            4  processes
 Hello world from process            3  of            4  processes

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。说实话,这很愚蠢。出于某种原因,我没有使用正确的OpenMPI安装(我不知道它使用的是什么)。我使用右mpif90重新编译并使用右mpirun运行它,现在我得到了预期的结果。 对不起,我很陌生,但我对此很陌生。谢谢你的帮助!