From 4f12406436e197e12c37215e3785dcfd5e11647a Mon Sep 17 00:00:00 2001 From: Nathan Hjelm Date: Tue, 1 Oct 2013 19:59:18 +0000 Subject: [PATCH] Don't check for neighborhood collective routines on non-virtual topology communicators This commit was SVN r29319. --- ompi/mca/coll/base/coll_base_comm_select.c | 47 +++++++++++--------- ompi/mca/coll/libnbc/coll_libnbc_component.c | 25 ++++------- 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/ompi/mca/coll/base/coll_base_comm_select.c b/ompi/mca/coll/base/coll_base_comm_select.c index 517b996b20..dc96f48c0a 100644 --- a/ompi/mca/coll/base/coll_base_comm_select.c +++ b/ompi/mca/coll/base/coll_base_comm_select.c @@ -179,17 +179,20 @@ int mca_coll_base_comm_select(ompi_communicator_t * comm) COPY(avail->ac_module, comm, iscatter); COPY(avail->ac_module, comm, iscatterv); - COPY(avail->ac_module, comm, neighbor_allgather); - COPY(avail->ac_module, comm, neighbor_allgatherv); - COPY(avail->ac_module, comm, neighbor_alltoall); - COPY(avail->ac_module, comm, neighbor_alltoallv); - COPY(avail->ac_module, comm, neighbor_alltoallw); + if (OMPI_COMM_IS_GRAPH(comm) || OMPI_COMM_IS_DIST_GRAPH(comm) || + OMPI_COMM_IS_CART(comm)) { + COPY(avail->ac_module, comm, neighbor_allgather); + COPY(avail->ac_module, comm, neighbor_allgatherv); + COPY(avail->ac_module, comm, neighbor_alltoall); + COPY(avail->ac_module, comm, neighbor_alltoallv); + COPY(avail->ac_module, comm, neighbor_alltoallw); - COPY(avail->ac_module, comm, ineighbor_allgather); - COPY(avail->ac_module, comm, ineighbor_allgatherv); - COPY(avail->ac_module, comm, ineighbor_alltoall); - COPY(avail->ac_module, comm, ineighbor_alltoallv); - COPY(avail->ac_module, comm, ineighbor_alltoallw); + COPY(avail->ac_module, comm, ineighbor_allgather); + COPY(avail->ac_module, comm, ineighbor_allgatherv); + COPY(avail->ac_module, comm, ineighbor_alltoall); + COPY(avail->ac_module, comm, ineighbor_alltoallv); + COPY(avail->ac_module, comm, ineighbor_alltoallw); + } /* release the original module reference and the list item */ OBJ_RELEASE(avail->ac_module); @@ -234,16 +237,20 @@ int mca_coll_base_comm_select(ompi_communicator_t * comm) ((OMPI_COMM_IS_INTRA(comm)) && (NULL == comm->c_coll.coll_iscan)) || (NULL == comm->c_coll.coll_iscatter) || (NULL == comm->c_coll.coll_iscatterv) || - (NULL == comm->c_coll.coll_neighbor_allgather) || - (NULL == comm->c_coll.coll_neighbor_allgatherv) || - (NULL == comm->c_coll.coll_neighbor_alltoall) || - (NULL == comm->c_coll.coll_neighbor_alltoallv) || - (NULL == comm->c_coll.coll_neighbor_alltoallw) || - (NULL == comm->c_coll.coll_ineighbor_allgather) || - (NULL == comm->c_coll.coll_ineighbor_allgatherv) || - (NULL == comm->c_coll.coll_ineighbor_alltoall) || - (NULL == comm->c_coll.coll_ineighbor_alltoallv) || - (NULL == comm->c_coll.coll_ineighbor_alltoallw) + /* neighborhood collectives only need to be defined if this + * is a virtual topology communicator */ + ((OMPI_COMM_IS_GRAPH(comm) || OMPI_COMM_IS_DIST_GRAPH(comm) || + OMPI_COMM_IS_CART(comm)) && + ((NULL == comm->c_coll.coll_neighbor_allgather) || + (NULL == comm->c_coll.coll_neighbor_allgatherv) || + (NULL == comm->c_coll.coll_neighbor_alltoall) || + (NULL == comm->c_coll.coll_neighbor_alltoallv) || + (NULL == comm->c_coll.coll_neighbor_alltoallw) || + (NULL == comm->c_coll.coll_ineighbor_allgather) || + (NULL == comm->c_coll.coll_ineighbor_allgatherv) || + (NULL == comm->c_coll.coll_ineighbor_alltoall) || + (NULL == comm->c_coll.coll_ineighbor_alltoallv) || + (NULL == comm->c_coll.coll_ineighbor_alltoallw))) ) { mca_coll_base_comm_unselect(comm); return OMPI_ERR_NOT_FOUND; diff --git a/ompi/mca/coll/libnbc/coll_libnbc_component.c b/ompi/mca/coll/libnbc/coll_libnbc_component.c index 5c84b27ef9..52d4aa6e97 100644 --- a/ompi/mca/coll/libnbc/coll_libnbc_component.c +++ b/ompi/mca/coll/libnbc/coll_libnbc_component.c @@ -151,13 +151,6 @@ libnbc_init_query(bool enable_progress_threads, return OMPI_SUCCESS; } - -static int libnbc_not_implemented (void *arg0, ...) -{ - (void)arg0; - return OMPI_ERR_NOT_IMPLEMENTED; -} - /* * Invoked when there's a new communicator that has been created. * Look at the communicator and decide which set of functions and @@ -193,11 +186,6 @@ libnbc_comm_query(struct ompi_communicator_t *comm, module->super.coll_iscan = NULL; module->super.coll_iscatter = ompi_coll_libnbc_iscatter_inter; module->super.coll_iscatterv = ompi_coll_libnbc_iscatterv_inter; - module->super.coll_ineighbor_allgather = (mca_coll_base_module_allgather_fn_t) libnbc_not_implemented; - module->super.coll_ineighbor_allgatherv = (mca_coll_base_module_allgatherv_fn_t) libnbc_not_implemented; - module->super.coll_ineighbor_alltoall = (mca_coll_base_module_alltoall_fn_t) libnbc_not_implemented; - module->super.coll_ineighbor_alltoallv = (mca_coll_base_module_alltoallv_fn_t) libnbc_not_implemented; - module->super.coll_ineighbor_alltoallw = (mca_coll_base_module_alltoallw_fn_t) libnbc_not_implemented; } else { module->super.coll_iallgather = ompi_coll_libnbc_iallgather; module->super.coll_iallgatherv = ompi_coll_libnbc_iallgatherv; @@ -216,11 +204,14 @@ libnbc_comm_query(struct ompi_communicator_t *comm, module->super.coll_iscan = ompi_coll_libnbc_iscan; module->super.coll_iscatter = ompi_coll_libnbc_iscatter; module->super.coll_iscatterv = ompi_coll_libnbc_iscatterv; - module->super.coll_ineighbor_allgather = ompi_coll_libnbc_ineighbor_allgather; - module->super.coll_ineighbor_allgatherv = ompi_coll_libnbc_ineighbor_allgatherv; - module->super.coll_ineighbor_alltoall = ompi_coll_libnbc_ineighbor_alltoall; - module->super.coll_ineighbor_alltoallv = ompi_coll_libnbc_ineighbor_alltoallv; - module->super.coll_ineighbor_alltoallw = ompi_coll_libnbc_ineighbor_alltoallw; + + if (OMPI_COMM_IS_GRAPH(comm) || OMPI_COMM_IS_DIST_GRAPH(comm) || OMPI_COMM_IS_CART(comm)) { + module->super.coll_ineighbor_allgather = ompi_coll_libnbc_ineighbor_allgather; + module->super.coll_ineighbor_allgatherv = ompi_coll_libnbc_ineighbor_allgatherv; + module->super.coll_ineighbor_alltoall = ompi_coll_libnbc_ineighbor_alltoall; + module->super.coll_ineighbor_alltoallv = ompi_coll_libnbc_ineighbor_alltoallv; + module->super.coll_ineighbor_alltoallw = ompi_coll_libnbc_ineighbor_alltoallw; + } } module->super.ft_event = NULL;