我正在尝试使用 MPI Scatter 将 DO 循环与矩阵加法并行化,但出现以下错误。我已经初始化了所有 MPI 变量,完成
call MPI_INIT( ierr )
call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr )
call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr )
在程序的开头和最后的 MPI_Finalise(ierr)。但是我仍然在尝试执行 MPI Scatter 时遇到错误
Fatal error in MPI_Scatter: Invalid communicator, error stack:
MPI_Scatter(766): MPI_Scatter(sbuf=0x6ab2a0, scount=0, INVALID DATATYPE,
rbuf=0x7fff39a99398, rcount=0, INVALID DATATYPE, root=0, comm=0x43380000) failed
MPI_Scatter(641): Invalid communicator
我在代码中的任何地方都使用默认的通信器 MPI_COMM_WORLD。我试图通过将矩阵的一部分发送到多个进程来并行化矩阵更新操作。输入矩阵是 x,输出矩阵是 y。X 是一个 REAL*8 数据类型的矩阵,具有 N 行和 N 列。还
nx = N/numberofprocesses
我的 MPI_Scatter 代码如下
if (processid.eq.0) then
call MPI_Scatter(x, nx, MPI_DOUBLE_PRECISION,MPI_IN_PLACE, nx, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
else
call MPI_Scatter(x, nx, MPI_DOUBLE_PRECISION, x, nx, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
end if
我的收集代码是
if (processid.eq.0) then
call MPI_Gather(MPI_IN_PLACE, nx, MPI_DOUBLE_PRECISION, y, nx, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
else
call MPI_Gather(y, nx, MPI_DOUBLE_PRECISION, y, nx, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
end if
错误的原因是什么?