升级到 v 1.10 后使用 openmpi 进行编译时出现问题

升级到 v 1.10 后使用 openmpi 进行编译时出现问题

我已经使用 openmpi 开发 fortran90 并行应用程序一段时间了。我通常会从存储库中安装面向开发人员的默认 openmpi 版本,它开箱即用。我这样做了,当我第一次在本地计算机上安装 Ubuntu16.04 时,它就正常工作了。

但是我认为 openmpi 已经升级了,我的程序无法再编译了。我在其他使用旧版本(libopenmpi-dev 1.6)的机器上试过了,可以运行。似乎编译器无法识别基本子程序,例如 MPI_RECV(..)。

例如,这段小代码在我的本地机器上编译失败,但在另一台装有 openmpi1.6 的机器上却没有问题。

program main
   use mpi
   implicit none
   integer :: ierr,np,myid,i,rbuf
   integer, dimension(:,:), allocatable :: ista

   CALL MPI_INIT(ierr)

   CALL MPI_COMM_RANK(MPI_COMM_WORLD,myid,ierr) 

   CALL MPI_COMM_SIZE(MPI_COMM_WORLD,np,ierr) 


   allocate(ista(MPI_STATUS_SIZE,np))


   if (myid==0) then
         do i = 1, np-1
            CALL MPI_RECV(rbuf,1,MPI_INTEGER4,i,i,MPI_COMM_WORLD,ista,ierr)
            write(*,"('process ',i2,' sent:',i2)") i,rbuf
         end do
   else
         i=10*myid
         CALL MPI_SEND(i,1,MPI_INTEGER4,0,myid,MPI_COMM_WORLD,ierr)
   end if

   CALL MPI_FINALIZE(ierr)


end program main

使用 mpif90 编译此代码会出现以下错误:

 main.f90:19:75:

             CALL MPI_RECV(rbuf,1,MPI_INTEGER4,i,i,MPI_COMM_WORLD,ista,ierr)
                                                                           1
Error: There is no specific subroutine for the generic ‘mpi_recv’ at (1)

有人知道这是啥吗?

提前非常感谢

相关内容