int MPIR_Bcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag) { int mpi_errno = MPI_SUCCESS; if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) { /* intracommunicator */ switch (MPIR_CVAR_BCAST_INTRA_ALGORITHM) { case MPIR_CVAR_BCAST_INTRA_ALGORITHM_binomial: mpi_errno = MPIR_Bcast_intra_binomial(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_CVAR_BCAST_INTRA_ALGORITHM_scatter_recursive_doubling_allgather: mpi_errno = MPIR_Bcast_intra_scatter_recursive_doubling_allgather(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_CVAR_BCAST_INTRA_ALGORITHM_scatter_ring_allgather: mpi_errno = MPIR_Bcast_intra_scatter_ring_allgather(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_CVAR_BCAST_INTRA_ALGORITHM_nb: mpi_errno = MPIR_Bcast_allcomm_nb(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_CVAR_BCAST_INTRA_ALGORITHM_auto: MPL_FALLTHROUGH; default: mpi_errno = MPIR_Bcast_intra_auto(buffer, count, datatype, root, comm_ptr, errflag); break; } } else { /* intercommunicator */ switch (MPIR_CVAR_BCAST_INTER_ALGORITHM) { case MPIR_CVAR_BCAST_INTER_ALGORITHM_remote_send_local_bcast: mpi_errno = MPIR_Bcast_inter_remote_send_local_bcast(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_CVAR_BCAST_INTER_ALGORITHM_nb: mpi_errno = MPIR_Bcast_allcomm_nb(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_CVAR_BCAST_INTER_ALGORITHM_auto: MPL_FALLTHROUGH; default: mpi_errno = MPIR_Bcast_inter_auto(buffer, count, datatype, root, comm_ptr, errflag); break; } } if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: return mpi_errno; fn_fail: goto fn_exit; }
int MPIR_Bcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPIR_Comm * comm_ptr, MPIR_Errflag_t * errflag) { int mpi_errno = MPI_SUCCESS; if (comm_ptr->comm_kind == MPIR_COMM_KIND__INTRACOMM) { /* intracommunicator */ switch (MPIR_Bcast_intra_algo_choice) { case MPIR_BCAST_INTRA_ALGO_BINOMIAL: mpi_errno = MPIR_Bcast_intra_binomial(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_BCAST_INTRA_ALGO_SCATTER_RECURSIVE_DOUBLING_ALLGATHER: mpi_errno = MPIR_Bcast_intra_scatter_recursive_doubling_allgather(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_BCAST_INTRA_ALGO_SCATTER_RING_ALLGATHER: mpi_errno = MPIR_Bcast_intra_scatter_ring_allgather(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_BCAST_INTRA_ALGO_NB: mpi_errno = MPIR_Bcast_allcomm_nb(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_BCAST_INTRA_ALGO_AUTO: MPL_FALLTHROUGH; default: mpi_errno = MPIR_Bcast_intra_auto(buffer, count, datatype, root, comm_ptr, errflag); break; } } else { /* intercommunicator */ switch (MPIR_Bcast_inter_algo_choice) { case MPIR_BCAST_INTER_ALGO_REMOTE_SEND_LOCAL_BCAST: mpi_errno = MPIR_Bcast_inter_remote_send_local_bcast(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_BCAST_INTER_ALGO_NB: mpi_errno = MPIR_Bcast_allcomm_nb(buffer, count, datatype, root, comm_ptr, errflag); break; case MPIR_BCAST_INTER_ALGO_AUTO: MPL_FALLTHROUGH; default: mpi_errno = MPIR_Bcast_inter_auto(buffer, count, datatype, root, comm_ptr, errflag); break; } } if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: return mpi_errno; fn_fail: goto fn_exit; }