gpt4 book ai didi

mpi - Fortran 90 和 MPI 错误

转载 作者:行者123 更新时间:2023-12-02 13:37:09 26 4
gpt4 key购买 nike

我正在编写一个非常小的程序来理解 MPI(MPICH 实现)和 Fortran 90。不幸的是,当使用“-np 2”执行时,代码无法正常运行。

这是代码:

PROGRAM main
USE MPI
IMPLICIT none

INTEGER :: ierr, npe, mynpe
INTEGER :: istatus(MPI_STATUS_SIZE)
REAL :: aa

CALL MPI_INIT(ierr)
CALL MPI_Comm_size(MPI_COMM_WORLD, npe, ierr)
CALL MPI_Comm_rank(MPI_COMM_WORLD, mynpe, ierr)

IF (mynpe == 0) THEN
READ(*,*) aa
CALL MPI_Send(aa, 1, MPI_REAL, 1, 99, MPI_COMM_WORLD, ierr)
ELSE IF (mynpe == 1) THEN
CALL MPI_Recv(aa, 1, MPI_REAL, 0, 99, MPI_COMM_WORLD, istatus, ierr)
WRITE(*,*) "Ho ricevuto il numero ", aa
END IF

CALL MPI_FINALIZE(ierr)
END PROGRAM

我使用mpif90 mpi_2.f90 -o输出编译它,当我使用mpirun -np 2输出执行它时,我收到以下错误:

At line 14 of file mpi_2.f90 (unit = 5, file = 'stdin')
Fortran runtime error: End of file

shell 仍然等待输入,如果我插入一个数字(例如 11),我会得到以下输出:

11
Fatal error in MPI_Send: Invalid rank, error stack:
MPI_Send(173): MPI_Send(buf=0xbff4783c, count=1, MPI_REAL, dest=1, tag=99, MPI_COMM_WORLD) failed
MPI_Send(98).: Invalid rank has value 1 but must be nonnegative and less than 1
--------------------------------------------------------------------------
mpirun noticed that the job aborted, but has no info as to the process
that caused that situation.
--------------------------------------------------------------------------

感谢您的帮助!

最佳答案

两种不同的 MPI 实现在您的情况下混合在一起。运行时 MPI 环境来自于用于编译程序的不同实现,因此两个进程都表现为 MPI 单例,即每个进程都形成一个单独的 MPI_COMM_WORLD沟通者并成为排名0在里面。结果,条件的第一个分支在两个进程中都执行。另一边mpirun仅当所有其他进程关闭其标准输入或连接到 /dev/null 时,才执行到第一个进程的输入重定向。 。 MPI_SEND由于同样的原因失败 - 在每个 MPI 进程的单例宇宙中没有排名 1 .

造成此类行为的最常见原因是 mpirunmpif90来自不同的 MPI 库。在您的情况下,您将 MPICH 与 Open MPI 混合在一起。确实,出现以下错误消息:

MPI_Send(173): MPI_Send(buf=0xbff4783c, count=1, MPI_REAL, dest=1, tag=99, MPI_COMM_WORLD) failed
MPI_Send(98).: Invalid rank has value 1 but must be nonnegative and less than 1

是MPICH的错误格式。因此mpif90来自MPICH。

但是下一个错误消息:

--------------------------------------------------------------------------
mpirun noticed that the job aborted, but has no info as to the process
that caused that situation.
--------------------------------------------------------------------------

采用Open MPI的OpenRTE框架使用的错误格式。因此mpirun来自 Open MPI,而不是来自 MPICH。

如果您安装了 MPICH 的开发包,则可能会发生这种情况,以便它提供 mpicc , mpif90等等,但是您已经安装了 Open MPI 的运行时包。确保您只安装了一种 MPI 的软件包。如果您从源代码编译了 MPICH,请确保其二进制文件的路径是 $PATH 的第一个元素。 .

关于mpi - Fortran 90 和 MPI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com