All-to-all data exchange, rank-2 arrays, equal sizes
Note
see mp_alltoall_r
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=real_4), | intent(in), | CONTIGUOUS | :: | sb(:,:) | ||
real(kind=real_4), | intent(out), | CONTIGUOUS | :: | rb(:,:) | ||
integer, | intent(in) | :: | count | |||
type(mp_comm_type), | intent(in) | :: | group |
SUBROUTINE mp_alltoall_r22(sb, rb, count, group) !! All-to-all data exchange, rank-2 arrays, equal sizes !! @note see mp_alltoall_r REAL(kind=real_4), CONTIGUOUS, INTENT(IN) :: sb(:, :) REAL(kind=real_4), CONTIGUOUS, INTENT(OUT) :: rb(:, :) INTEGER, INTENT(IN) :: count TYPE(mp_comm_type), INTENT(IN) :: group CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_r22' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, np #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) CALL mpi_alltoall(sb, count, MPI_REAL, & rb, count, MPI_REAL, group%handle, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_alltoall @ "//routineN) CALL mpi_comm_size(group%handle, np, ierr) IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN) msglen = 2*SIZE(sb)*np CALL add_perf(perf_id=6, msg_size=msglen*real_4_size) #else MARK_USED(count) MARK_USED(group) rb = sb #endif CALL timestop(handle) END SUBROUTINE mp_alltoall_r22