int MPIR_Igather_sched_inter_auto(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Sched_t s) { int mpi_errno = MPI_SUCCESS; MPI_Aint local_size, remote_size; MPI_Aint recvtype_size, sendtype_size, nbytes; if (root == MPI_PROC_NULL) { /* local processes other than root do nothing */ goto fn_exit; } remote_size = comm_ptr->remote_size; local_size = comm_ptr->local_size; if (root == MPI_ROOT) { MPIR_Datatype_get_size_macro(recvtype, recvtype_size); nbytes = recvtype_size * recvcount * remote_size; } else { /* remote side */ MPIR_Datatype_get_size_macro(sendtype, sendtype_size); nbytes = sendtype_size * sendcount * local_size; } if (nbytes < MPIR_CVAR_GATHER_INTER_SHORT_MSG_SIZE) { mpi_errno = MPIR_Igather_sched_inter_short(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); } else { mpi_errno = MPIR_Igather_sched_inter_long(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); } fn_exit: return mpi_errno; }
int MPIR_Igather_sched_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr, MPIR_Sched_t s) { int mpi_errno = MPI_SUCCESS; if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) { /* intracommunicator */ switch (MPIR_CVAR_IGATHER_INTRA_ALGORITHM) { case MPIR_CVAR_IGATHER_INTRA_ALGORITHM_binomial: mpi_errno = MPIR_Igather_sched_intra_binomial(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); break; case MPIR_CVAR_IGATHER_INTRA_ALGORITHM_auto: MPL_FALLTHROUGH; default: mpi_errno = MPIR_Igather_sched_intra_auto(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); break; } } else { /* intercommunicator */ switch (MPIR_CVAR_IGATHER_INTER_ALGORITHM) { case MPIR_CVAR_IGATHER_INTER_ALGORITHM_long: mpi_errno = MPIR_Igather_sched_inter_long(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); break; case MPIR_CVAR_IGATHER_INTER_ALGORITHM_short: mpi_errno = MPIR_Igather_sched_inter_short(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); break; case MPIR_CVAR_IGATHER_INTER_ALGORITHM_auto: MPL_FALLTHROUGH; default: mpi_errno = MPIR_Igather_sched_inter_auto(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); } } return mpi_errno; }