Fortran 90和MPI错误

股票断裂

我正在编写一个非常小的程序,以了解MPI(MPICH实现)和Fortran90。不幸的是,用“ -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 output当我执行它时,mpirun -np 2 output出现以下错误:

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.
--------------------------------------------------------------------------

谢谢您的帮助!

赫里斯托(Hristo)离开伊利耶夫(Iliev)

在您的情况下,两种不同的MPI实现混在一起。运行时MPI环境来自一种不同的实现方式,该环境用于编译程序,因此两个进程都表现为MPI单例,即,每个进程都形成一个单独的MPI_COMM_WORLD通信器并0在其中排名结果,条件的第一个分支在两个过程中都执行。另一方面,mpirun仅当所有其他输入都关闭或连接到其标准输入时,才将输入重定向到第一个进程/dev/nullMPI_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,所以它提供mpiccmpif90等,但你已经安装了Open MPI的运行时包。确保您仅安装了一种MPI的软件包。如果您从源代码编译了MPICH,请确保其二进制文件的路径是的第一个元素$PATH

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Fortran 90和MPI错误

来自分类Dev

Fortran MPI状态错误

来自分类Dev

使用MPI和Fortran 90发送自定义类型

来自分类Dev

使用MPI和Fortran 90发送自定义类型

来自分类Dev

Fortran MPI运行时错误

来自分类Dev

MPI Fortran编译器优化错误

来自分类Dev

Fortran MPI-乒乓程序段错误

来自分类Dev

MPI Fortran编译器优化错误

来自分类Dev

在FORTRAN 90中使用MPI_Type_Create_Subarray

来自分类Dev

在Fortran中使用MPI_Gather时,无效的指针和分段错误

来自分类Dev

Fortran 90函数返回指针

来自分类Dev

Fortran 90-阅读格式

来自分类Dev

FORTRAN 90奇怪的通话声明

来自分类Dev

接口(#6634)带有对Fortran 90/95的旧代码的错误

来自分类Dev

Fortran 90错误:输入需要太多数据

来自分类Dev

MPI Fortran compiler optimization error

来自分类Dev

Fortran:分段错误

来自分类Dev

数据输入错误Fortran

来自分类Dev

fortran90中dowhile和do while之间的区别

来自分类Dev

带有预编译和模块的Fortran90 Makefile

来自分类Dev

fortran 2003和指针

来自分类Dev

GDB和Fortran模块

来自分类Dev

MPI在Fortran 90中使用指针发送派生数据类型

来自分类Dev

MPI在Fortran 90中使用指针发送派生数据类型

来自分类Dev

make finds fortran 77 files but not fortran 90 files

来自分类Dev

fortran编译blas程序错误

来自分类Dev

Fortran :(错误)匹配动态类型

来自分类Dev

Fortran中的填充矩阵错误

来自分类Dev

Fortran :(错误)匹配动态类型