int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm *comm_ptr, MPIR_Request **request) { int mpi_errno = MPI_SUCCESS; int tag = -1; MPIR_Sched_t s = MPIR_SCHED_NULL; *request = NULL; mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag); if (mpi_errno) MPIR_ERR_POP(mpi_errno); mpi_errno = MPIR_Sched_create(&s); if (mpi_errno) MPIR_ERR_POP(mpi_errno); mpi_errno = MPIR_Igather_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); if (mpi_errno) MPIR_ERR_POP(mpi_errno); mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, request); if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: return mpi_errno; fn_fail: goto fn_exit; }
int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPIR_Comm * comm_ptr, MPIR_Request ** request) { int mpi_errno = MPI_SUCCESS; int tag = -1; MPIR_Sched_t s = MPIR_SCHED_NULL; *request = NULL; /* If the user picks one of the transport-enabled algorithms, branch there * before going down to the MPIR_Sched-based algorithms. */ /* TODO - Eventually the intention is to replace all of the * MPIR_Sched-based algorithms with transport-enabled algorithms, but that * will require sufficient performance testing and replacement algorithms. */ if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) { /* intracommunicator */ switch (MPIR_CVAR_IGATHER_INTRA_ALGORITHM) { case MPIR_CVAR_IGATHER_INTRA_ALGORITHM_gentran_tree: mpi_errno = MPIR_Igather_intra_gentran_tree(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, request); if (mpi_errno) MPIR_ERR_POP(mpi_errno); goto fn_exit; break; default: /* go down to the MPIR_Sched-based algorithms */ break; } } mpi_errno = MPIR_Sched_next_tag(comm_ptr, &tag); if (mpi_errno) MPIR_ERR_POP(mpi_errno); mpi_errno = MPIR_Sched_create(&s); if (mpi_errno) MPIR_ERR_POP(mpi_errno); mpi_errno = MPIR_Igather_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s); if (mpi_errno) MPIR_ERR_POP(mpi_errno); mpi_errno = MPIR_Sched_start(&s, comm_ptr, tag, request); if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: return mpi_errno; fn_fail: goto fn_exit; }