1

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

エラーの理由は何ですか?

4

0 に答える 0