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 は、N 行 N 列の REAL*8 データ型の行列です。また
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
エラーの理由は何ですか?