Enviando matrices 2D en Fortran con MPI_Gather
Quiero enviar 2d trozos de datos usandoMPI_GATHER
. Por ejemplo: tengo matrices de 2x3 en cada nodo y quiero una matriz de 8x3 en la raíz, si tengo 4 nodos. Para matrices 1d,MPI_GATHER
ordena los datos de acuerdo con los rangos de MPI, pero para los datos en 2D se crea un desastre!
¿Cuál es la forma limpia de poner los pedazos en orden?
Esperaba la salida de este código:
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
para ser algo como esto:
1 1 1
1 1 1
5 5 5
5 5 5
pero se parece a esto:
1 1 5
1 1 5
1 5 5
1 5 5