FORTRAN 中关于 MPI_Reduce 的 Comm 参数给出了不寻常的结果

计算科学 正则 mpi
2021-12-07 12:47:39

我正在使用 MPI 在 FORTRAN 中编写一个非常简单的集成程序。我已经用 C 完成了这个,一切都很好。

但是,在我的“MAP_REDUCE”调用中,comm 参数似乎有问题。我尝试了几个不同的值,并且在程序运行时收到了几条错误消息。

注意:程序会编译,但不会运行。

这是程序本身(FORTRAN 90):

  c Fortran example                                                      
  program intega
  implicit none
  include '/opt/apps/intel15/mvapich2/2.1/include/mpif.h'

  integer rank,size,ierror,tag,status(MPI_STATUS_SIZE),i
  real :: integral = 0.00, x = 0.00, total_t = 0.00
  real :: analy,numres,edif


  real, PARAMETER :: x_lower_bound = 0,x_upper_bound = 1
  real, PARAMETER :: nsteps = 10000000
  real, PARAMETER :: dx = (x_upper_bound - x_lower_bound)/nSteps


  integer :: iMin,iMax,ierr=0,comm=0


  call MPI_INIT(ierror)
  call MPI_COMM_SIZE(MPI_COMM_WORLD,size,ierror)
  call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierror)
  do i = 0,(iMax-1)
      x = x_lower_bound + dx*(i+0.5)
      integral = integral + x*x*dx
   end do

   call MPI_REDUCE(integral,total_t,1,MPI_REAL,MPI_SUM,0,rank,ierr)
   analy = ((x_upper_bound**3)-(x_lower_bound**3))/3
   numres = total_t

   if (rank == 0) then
      edif = analy-numres
      print *, numres,analy,edif
   end if


  call MPI_FINALIZE(ierror)
  end

现在错误文件看起来像这样:(不是全部,只是一个示例)

[cli_0]: [cli_1]: aborting job:
Fatal error in PMPI_Reduce:
Invalid communicator, error stack:
PMPI_Reduce(1288): MPI_Reduce(sbuf=0x6ac4a8, rbuf=0x6ac4b4, count=1, MPI_REAL, \
MPI_SUM, root=0, comm=0x1) failed
PMPI_Reduce(1163): Invalid communicator

aborting job:
Fatal error in PMPI_Reduce:
Invalid communicator, error stack:
PMPI_Reduce(1288): MPI_Reduce(sbuf=0x6ac4a8, rbuf=0x6ac4b4, count=1, MPI_REAL, \
MPI_SUM, root=0, comm=0x0) failed
PMPI_Reduce(1163): Invalid communicator

[cli_2]: aborting job:
Fatal error in PMPI_Reduce:
Invalid communicator, error stack:

所以沟通者是麻烦制造者。但不确定我应该在那里放什么。

提前感谢您的任何建议。

1个回答

您的MPI_Reduce呼叫没有指定有效的通讯器。我认为你完全忽略了它。你所拥有的地方rank应该在你所称的任何地方都有相同的价值,它应该是一个沟通者。从您的代码的外观来看,应该是MPI_COMM_WORLD因为每个级别都在进行操作。