这是一个代码演示。
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函数发送大尺寸的数组?