11

を使用してデータの 2D チャンクを送信したいMPI_GATHER。例: 各ノードに 2x3 アレイがあり、4 つのノードがある場合、ルートに 8x3 アレイが必要です。1 次元配列の場合、MPI_GATHERMPI ランクに従ってデータを並べ替えますが、2 次元データの場合はめちゃくちゃになります!

チャンクをきれいに並べる方法は何ですか?

私はこのコードの出力を期待していました:

program testmpi
  use mpi
  implicit none
  integer :: send (2,3)
  integer :: rec (4,3)
  integer :: ierror,my_rank,i,j

  call MPI_Init(ierror)
  MPI_DATA_TYPE type_col
  ! find out process rank
  call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierror)
  if (my_rank==0) then
    send=1
    do i=1,2
      print*,(send(i,j),j=1,3)
    enddo
  endif
  if (my_rank==1) then
    send=5
    ! do 1,2
    !   print*,(send(i,j),j=1,3)
    ! enddo
  endif
  call MPI_GATHER(send,6,MPI_INTEGER,rec,6,MPI_INTEGER,0,MPI_COMM_WORLD,ierror)
  if (my_rank==0) then
    print*,'<><><><><>rec'
    do i=1,4
      print*,(rec(i,j),j=1,3)
    enddo
  endif
  call MPI_Finalize(ierror)
end program testmpi

このようなものになる:

   1           1           1
   1           1           1
   5           5           5
   5           5           5

しかし、それは次のようになります:

   1           1           5
   1           1           5
   1           5           5
   1           5           5
4

1 に答える 1