All-to-all data exchange, rank 4 data, equal sizes
see mp_alltoall_l
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int_8), | intent(in), | DIMENSION(:, :, :, :), CONTIGUOUS | :: | sb | ||
integer(kind=int_8), | intent(out), | DIMENSION(:, :, :, :), CONTIGUOUS | :: | rb | ||
integer, | intent(in) | :: | count | |||
integer, | intent(in) | :: | group |
SUBROUTINE mp_alltoall_l44(sb, rb, count, group)
!! All-to-all data exchange, rank 4 data, equal sizes
!! @note see mp_alltoall_l
INTEGER(KIND=int_8), DIMENSION(:, :, :, :), CONTIGUOUS, &
INTENT(IN) :: sb
INTEGER(KIND=int_8), DIMENSION(:, :, :, :), CONTIGUOUS, &
INTENT(OUT) :: rb
INTEGER, INTENT(IN) :: count, group
CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_alltoall_l44'
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_INTEGER8, &
rb, count, MPI_INTEGER8, group, ierr)
IF (ierr /= 0) CALL mp_stop(ierr, "mpi_alltoall @ "//routineN)
CALL mpi_comm_size(group, np, ierr)
IF (ierr /= 0) CALL mp_stop(ierr, "mpi_comm_size @ "//routineN)
msglen = 2*count*np
CALL add_perf(perf_id=6, msg_size=msglen*int_8_size)
#else
MARK_USED(count)
MARK_USED(group)
rb = sb
#endif
CALL timestop(handle)
END SUBROUTINE mp_alltoall_l44