を使用してデータの 2D チャンクを送信したいMPI_GATHER
。例: 各ノードに 2x3 アレイがあり、4 つのノードがある場合、ルートに 8x3 アレイが必要です。1 次元配列の場合、MPI_GATHER
MPI ランクに従ってデータを並べ替えますが、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