MPI_SEND对超大阵列不起作用

时间:2019-11-19 13:19:24

标签: fortran mpi

这是一个代码演示。

program main
  use mpi
  implicit none
  real(8) :: a(5,1201,200)
  integer(4) :: ierr,my_id,num_procs,status(MPI_STATUS_SIZE)

  call MPI_INIT(ierr)
  call MPI_COMM_RANK(MPI_COMM_WORLD,my_id,ierr)
  call MPI_COMM_SIZE(MPI_COMM_WORLD,num_procs,ierr)

  a=1.0

  if(my_id<num_procs-1) then
    call MPI_SEND(a(1,1,1),5*1201*2,MPI_DOUBLE_PRECISION,my_id+1,10,MPI_COMM_WORLD,ierr)
  elseif(my_id==num_procs-1) then
    call MPI_SEND(a(1,1,1),5*1201*2,MPI_DOUBLE_PRECISION,      0,10,MPI_COMM_WORLD,ierr)
  endif

  if(my_id>0) then
    call MPI_RECV(a(1,1,1),5*1201*2,MPI_DOUBLE_PRECISION,    my_id-1,10,MPI_COMM_WORLD,status,ierr)
  elseif(my_id==0) then
    call MPI_RECV(a(1,1,1),5*1201*2,MPI_DOUBLE_PRECISION,num_procs-1,10,MPI_COMM_WORLD,status,ierr)
  endif

  call MPI_FINALIZE(ierr)
end program

当我在命令窗口中使用多个处理器运行代码时,它就挂在那里。但是,如果我在代码演示中将所有的“ 1201”更改为“ 601”,它就会通过。有没有一种方法可以使用MPI函数发送大尺寸的数组?

0 个答案:

没有答案