static int split_type(MPID_Comm * comm_ptr, int stype, int key, MPID_Info *info_ptr, MPID_Comm ** newcomm_ptr) { MPID_Node_id_t id; MPIDI_Rank_t nid; int mpi_errno = MPI_SUCCESS; if (MPIDI_CH3I_Shm_supported()) { mpi_errno = MPID_Get_node_id(comm_ptr, comm_ptr->rank, &id); if (mpi_errno) MPIR_ERR_POP(mpi_errno); } else id = comm_ptr->rank; nid = (stype == MPI_COMM_TYPE_SHARED) ? id : MPI_UNDEFINED; mpi_errno = MPIR_Comm_split_impl(comm_ptr, nid, key, newcomm_ptr); if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: return mpi_errno; /* --BEGIN ERROR HANDLING-- */ fn_fail: goto fn_exit; /* --END ERROR HANDLING-- */ }
int MPIDI_CH3_Win_hooks_init(MPIDI_CH3U_Win_hooks_t * win_hooks) { int mpi_errno = MPI_SUCCESS; MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT); MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT); if (MPIDI_CH3I_Shm_supported()) { win_hooks->win_init = MPIDI_CH3I_Win_init; win_hooks->win_free = MPIDI_CH3_SHM_Win_free; } MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_WIN_HOOKS_INIT); return mpi_errno; }
int MPIDI_CH3_Win_fns_init(MPIDI_CH3U_Win_fns_t * win_fns) { int mpi_errno = MPI_SUCCESS; MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT); MPIR_FUNC_VERBOSE_RMA_ENTER(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT); if (MPIDI_CH3I_Shm_supported()) { win_fns->allocate_shm = MPIDI_CH3I_Win_allocate_shm; win_fns->detect_shm = MPIDI_CH3I_Win_detect_shm; win_fns->gather_info = MPIDI_CH3I_Win_gather_info; win_fns->shared_query = MPIDI_CH3_SHM_Win_shared_query; } MPIR_FUNC_VERBOSE_RMA_EXIT(MPID_STATE_MPIDI_CH3_WIN_FNS_INIT); return mpi_errno; }
static int split_type(MPIR_Comm * user_comm_ptr, int stype, int key, MPIR_Info *info_ptr, MPIR_Comm ** newcomm_ptr) { MPIR_Comm *comm_ptr = NULL; int mpi_errno = MPI_SUCCESS; mpi_errno = MPIR_Comm_split_impl(user_comm_ptr, stype == MPI_UNDEFINED ? MPI_UNDEFINED : 0, key, &comm_ptr); if (mpi_errno) MPIR_ERR_POP(mpi_errno); if (stype == MPI_UNDEFINED) { *newcomm_ptr = NULL; goto fn_exit; } if (stype == MPI_COMM_TYPE_SHARED) { if (MPIDI_CH3I_Shm_supported()) { mpi_errno = MPIR_Comm_split_type_node_topo(comm_ptr, stype, key, info_ptr, newcomm_ptr); } else { mpi_errno = MPIR_Comm_split_type_self(comm_ptr, stype, key, newcomm_ptr); } } else if (stype == MPIX_COMM_TYPE_NEIGHBORHOOD) { mpi_errno = MPIR_Comm_split_type_neighborhood(comm_ptr, stype, key, info_ptr, newcomm_ptr); } else { /* we don't know how to handle other split types; hand it back * to the upper layer */ mpi_errno = MPIR_Comm_split_type(comm_ptr, stype, key, info_ptr, newcomm_ptr); } if (mpi_errno) MPIR_ERR_POP(mpi_errno); fn_exit: if (comm_ptr) MPIR_Comm_free_impl(comm_ptr); return mpi_errno; /* --BEGIN ERROR HANDLING-- */ fn_fail: goto fn_exit; /* --END ERROR HANDLING-- */ }