diff --git a/ompi/mca/coll/base/coll_base_comm_select.c b/ompi/mca/coll/base/coll_base_comm_select.c index 8e35b11c44..42454258b9 100644 --- a/ompi/mca/coll/base/coll_base_comm_select.c +++ b/ompi/mca/coll/base/coll_base_comm_select.c @@ -20,6 +20,7 @@ * Copyright (c) 2014 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016-2017 IBM Corporation. All rights reserved. + * Copyright (c) 2017 FUJITSU LIMITED. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -190,6 +191,24 @@ 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, allgather_init); + COPY(avail->ac_module, comm, allgatherv_init); + COPY(avail->ac_module, comm, allreduce_init); + COPY(avail->ac_module, comm, alltoall_init); + COPY(avail->ac_module, comm, alltoallv_init); + COPY(avail->ac_module, comm, alltoallw_init); + COPY(avail->ac_module, comm, barrier_init); + COPY(avail->ac_module, comm, bcast_init); + COPY(avail->ac_module, comm, exscan_init); + COPY(avail->ac_module, comm, gather_init); + COPY(avail->ac_module, comm, gatherv_init); + COPY(avail->ac_module, comm, reduce_init); + COPY(avail->ac_module, comm, reduce_scatter_block_init); + COPY(avail->ac_module, comm, reduce_scatter_init); + COPY(avail->ac_module, comm, scan_init); + COPY(avail->ac_module, comm, scatter_init); + COPY(avail->ac_module, comm, scatterv_init); + /* We can not reliably check if this comm has a topology * at this time. The flags are set *after* coll_select */ COPY(avail->ac_module, comm, neighbor_allgather); @@ -204,6 +223,12 @@ int mca_coll_base_comm_select(ompi_communicator_t * comm) COPY(avail->ac_module, comm, ineighbor_alltoallv); COPY(avail->ac_module, comm, ineighbor_alltoallw); + COPY(avail->ac_module, comm, neighbor_allgather_init); + COPY(avail->ac_module, comm, neighbor_allgatherv_init); + COPY(avail->ac_module, comm, neighbor_alltoall_init); + COPY(avail->ac_module, comm, neighbor_alltoallv_init); + COPY(avail->ac_module, comm, neighbor_alltoallw_init); + COPY(avail->ac_module, comm, reduce_local); } /* release the original module reference and the list item */ @@ -250,6 +275,9 @@ int mca_coll_base_comm_select(ompi_communicator_t * comm) CHECK_NULL(which_func, comm, iscatter) || CHECK_NULL(which_func, comm, iscatterv) || CHECK_NULL(which_func, comm, reduce_local) ) { + /* TODO -- Once the persistent collective communication request + * function is implemented then check if persistent collectives have + * been set. */ /* TODO -- Once the topology flags are set before coll_select then * check if neighborhood collectives have been set. */ diff --git a/ompi/mca/coll/base/coll_base_comm_unselect.c b/ompi/mca/coll/base/coll_base_comm_unselect.c index 665110407b..fea0a53ec7 100644 --- a/ompi/mca/coll/base/coll_base_comm_unselect.c +++ b/ompi/mca/coll/base/coll_base_comm_unselect.c @@ -15,6 +15,7 @@ * Copyright (c) 2014 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2017 IBM Corporation. All rights reserved. + * Copyright (c) 2017 FUJITSU LIMITED. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -85,6 +86,24 @@ int mca_coll_base_comm_unselect(ompi_communicator_t * comm) CLOSE(comm, iscatter); CLOSE(comm, iscatterv); + CLOSE(comm, allgather_init); + CLOSE(comm, allgatherv_init); + CLOSE(comm, allreduce_init); + CLOSE(comm, alltoall_init); + CLOSE(comm, alltoallv_init); + CLOSE(comm, alltoallw_init); + CLOSE(comm, barrier_init); + CLOSE(comm, bcast_init); + CLOSE(comm, exscan_init); + CLOSE(comm, gather_init); + CLOSE(comm, gatherv_init); + CLOSE(comm, reduce_init); + CLOSE(comm, reduce_scatter_block_init); + CLOSE(comm, reduce_scatter_init); + CLOSE(comm, scan_init); + CLOSE(comm, scatter_init); + CLOSE(comm, scatterv_init); + CLOSE(comm, neighbor_allgather); CLOSE(comm, neighbor_allgatherv); CLOSE(comm, neighbor_alltoall); @@ -97,6 +116,12 @@ int mca_coll_base_comm_unselect(ompi_communicator_t * comm) CLOSE(comm, ineighbor_alltoallv); CLOSE(comm, ineighbor_alltoallw); + CLOSE(comm, neighbor_allgather_init); + CLOSE(comm, neighbor_allgatherv_init); + CLOSE(comm, neighbor_alltoall_init); + CLOSE(comm, neighbor_alltoallv_init); + CLOSE(comm, neighbor_alltoallw_init); + CLOSE(comm, reduce_local); free(comm->c_coll); diff --git a/ompi/mca/coll/base/coll_base_functions.h b/ompi/mca/coll/base/coll_base_functions.h index 00efecf705..de4de235ab 100644 --- a/ompi/mca/coll/base/coll_base_functions.h +++ b/ompi/mca/coll/base/coll_base_functions.h @@ -33,6 +33,7 @@ #include "ompi/mca/coll/base/base.h" #include "ompi/mca/mca.h" #include "ompi/mca/coll/coll.h" +#include "ompi/info/info.h" #include "ompi/request/request.h" /* need to include our own topo prototypes so we can malloc data on the comm correctly */ @@ -135,6 +136,29 @@ typedef enum COLLTYPE { #define INEIGHBOR_ALLTOALLV_ARGS NEIGHBOR_ALLTOALLV_BASE_ARGS, ompi_request_t **request, mca_coll_base_module_t *module #define INEIGHBOR_ALLTOALLW_ARGS NEIGHBOR_ALLTOALLW_BASE_ARGS, ompi_request_t **request, mca_coll_base_module_t *module +#define ALLGATHER_INIT_ARGS ALLGATHER_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define ALLGATHERV_INIT_ARGS ALLGATHERV_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define ALLREDUCE_INIT_ARGS ALLREDUCE_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define ALLTOALL_INIT_ARGS ALLTOALL_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define ALLTOALLV_INIT_ARGS ALLTOALLV_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define ALLTOALLW_INIT_ARGS ALLTOALLW_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define BARRIER_INIT_ARGS BARRIER_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define BCAST_INIT_ARGS BCAST_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define EXSCAN_INIT_ARGS EXSCAN_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define GATHER_INIT_ARGS GATHER_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define GATHERV_INIT_ARGS GATHERV_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define REDUCE_INIT_ARGS REDUCE_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define REDUCESCATTER_INIT_ARGS REDUCESCATTER_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define REDUCESCATTERBLOCK_INIT_ARGS REDUCESCATTERBLOCK_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define SCAN_INIT_ARGS SCAN_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define SCATTER_INIT_ARGS SCATTER_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define SCATTERV_INIT_ARGS SCATTERV_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define NEIGHBOR_ALLGATHER_INIT_ARGS NEIGHBOR_ALLGATHER_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define NEIGHBOR_ALLGATHERV_INIT_ARGS NEIGHBOR_ALLGATHERV_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define NEIGHBOR_ALLTOALL_INIT_ARGS NEIGHBOR_ALLTOALL_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define NEIGHBOR_ALLTOALLV_INIT_ARGS NEIGHBOR_ALLTOALLV_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module +#define NEIGHBOR_ALLTOALLW_INIT_ARGS NEIGHBOR_ALLTOALLW_BASE_ARGS, ompi_info_t *info, ompi_request_t **request, mca_coll_base_module_t *module + #define ALLGATHER_BASE_ARG_NAMES sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm #define ALLGATHERV_BASE_ARG_NAMES sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm #define ALLREDUCE_BASE_ARG_NAMES sendbuf, recvbuf, count, datatype, op, comm diff --git a/ompi/mca/coll/coll.h b/ompi/mca/coll/coll.h index 5e640e5f98..d8b47bcd31 100644 --- a/ompi/mca/coll/coll.h +++ b/ompi/mca/coll/coll.h @@ -18,6 +18,7 @@ * Copyright (c) 2014-2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2016-2017 IBM Corporation. All rights reserved. + * Copyright (c) 2017 FUJITSU LIMITED. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -195,7 +196,7 @@ typedef int (*mca_coll_base_module_disable_1_2_0_fn_t)(struct mca_coll_base_module_2_2_0_t* module, struct ompi_communicator_t *comm); - +/* blocking collectives */ typedef int (*mca_coll_base_module_allgather_fn_t) (const void *sbuf, int scount, struct ompi_datatype_t *sdtype, void *rbuf, int rcount, struct ompi_datatype_t *rdtype, @@ -334,6 +335,84 @@ typedef int (*mca_coll_base_module_iscatterv_fn_t) int root, struct ompi_communicator_t *comm, ompi_request_t ** request, struct mca_coll_base_module_2_2_0_t *module); +/* persistent collectives */ +typedef int (*mca_coll_base_module_allgather_init_fn_t) + (const void *sbuf, int scount, struct ompi_datatype_t *sdtype, + void *rbuf, int rcount, struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_allgatherv_init_fn_t) + (const void *sbuf, int scount, struct ompi_datatype_t *sdtype, + void * rbuf, const int *rcounts, const int *disps, struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_allreduce_init_fn_t) + (const void *sbuf, void *rbuf, int count, struct ompi_datatype_t *dtype, + struct ompi_op_t *op, struct ompi_communicator_t *comm, struct ompi_info_t *info, + ompi_request_t ** request, struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_alltoall_init_fn_t) + (const void *sbuf, int scount, struct ompi_datatype_t *sdtype, + void* rbuf, int rcount, struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_alltoallv_init_fn_t) + (const void *sbuf, const int *scounts, const int *sdisps, struct ompi_datatype_t *sdtype, + void *rbuf, const int *rcounts, const int *rdisps, struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_alltoallw_init_fn_t) + (const void *sbuf, const int *scounts, const int *sdisps, struct ompi_datatype_t * const *sdtypes, + void *rbuf, const int *rcounts, const int *rdisps, struct ompi_datatype_t * const *rdtypes, + struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_barrier_init_fn_t) + (struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_bcast_init_fn_t) + (void *buff, int count, struct ompi_datatype_t *datatype, int root, + struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_exscan_init_fn_t) + (const void *sbuf, void *rbuf, int count, struct ompi_datatype_t *dtype, + struct ompi_op_t *op, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_gather_init_fn_t) + (const void *sbuf, int scount, struct ompi_datatype_t *sdtype, + void *rbuf, int rcount, struct ompi_datatype_t *rdtype, + int root, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_gatherv_init_fn_t) + (const void *sbuf, int scount, struct ompi_datatype_t *sdtype, + void *rbuf, const int *rcounts, const int *disps, struct ompi_datatype_t *rdtype, + int root, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_reduce_init_fn_t) + (const void *sbuf, void* rbuf, int count, struct ompi_datatype_t *dtype, + struct ompi_op_t *op, int root, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_reduce_scatter_init_fn_t) + (const void *sbuf, void *rbuf, const int *rcounts, struct ompi_datatype_t *dtype, + struct ompi_op_t *op, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_reduce_scatter_block_init_fn_t) + (const void *sbuf, void *rbuf, int rcount, struct ompi_datatype_t *dtype, + struct ompi_op_t *op, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_scan_init_fn_t) + (const void *sbuf, void *rbuf, int count, struct ompi_datatype_t *dtype, + struct ompi_op_t *op, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_scatter_init_fn_t) + (const void *sbuf, int scount, struct ompi_datatype_t *sdtype, + void *rbuf, int rcount, struct ompi_datatype_t *rdtype, + int root, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_scatterv_init_fn_t) + (const void *sbuf, const int *scounts, const int *disps, struct ompi_datatype_t *sdtype, + void* rbuf, int rcount, struct ompi_datatype_t *rdtype, + int root, struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); + /* * The signature of the neighborhood alltoallw differs from alltoallw */ @@ -346,6 +425,11 @@ typedef int (*mca_coll_base_module_ineighbor_alltoallw_fn_t) void *rbuf, const int *rcounts, const MPI_Aint *rdisps, struct ompi_datatype_t * const *rdtypes, struct ompi_communicator_t *comm, ompi_request_t ** request, struct mca_coll_base_module_2_2_0_t *module); +typedef int (*mca_coll_base_module_neighbor_alltoallw_init_fn_t) + (const void *sbuf, const int *scounts, const MPI_Aint *sdisps, struct ompi_datatype_t * const *sdtypes, + void *rbuf, const int *rcounts, const MPI_Aint *rdisps, struct ompi_datatype_t * const *rdtypes, + struct ompi_communicator_t *comm, struct ompi_info_t *info, ompi_request_t ** request, + struct mca_coll_base_module_2_2_0_t *module); /* * reduce_local @@ -426,6 +510,7 @@ struct mca_coll_base_module_2_2_0_t { mca_coll_base_module_enable_1_1_0_fn_t coll_module_enable; /* Collective function pointers */ + /* blocking functions */ mca_coll_base_module_allgather_fn_t coll_allgather; mca_coll_base_module_allgatherv_fn_t coll_allgatherv; @@ -444,6 +529,7 @@ struct mca_coll_base_module_2_2_0_t { mca_coll_base_module_scan_fn_t coll_scan; mca_coll_base_module_scatter_fn_t coll_scatter; mca_coll_base_module_scatterv_fn_t coll_scatterv; + /* nonblocking functions */ mca_coll_base_module_iallgather_fn_t coll_iallgather; mca_coll_base_module_iallgatherv_fn_t coll_iallgatherv; @@ -463,6 +549,25 @@ struct mca_coll_base_module_2_2_0_t { mca_coll_base_module_iscatter_fn_t coll_iscatter; mca_coll_base_module_iscatterv_fn_t coll_iscatterv; + /* persistent functions */ + mca_coll_base_module_allgather_init_fn_t coll_allgather_init; + mca_coll_base_module_allgatherv_init_fn_t coll_allgatherv_init; + mca_coll_base_module_allreduce_init_fn_t coll_allreduce_init; + mca_coll_base_module_alltoall_init_fn_t coll_alltoall_init; + mca_coll_base_module_alltoallv_init_fn_t coll_alltoallv_init; + mca_coll_base_module_alltoallw_init_fn_t coll_alltoallw_init; + mca_coll_base_module_barrier_init_fn_t coll_barrier_init; + mca_coll_base_module_bcast_init_fn_t coll_bcast_init; + mca_coll_base_module_exscan_init_fn_t coll_exscan_init; + mca_coll_base_module_gather_init_fn_t coll_gather_init; + mca_coll_base_module_gatherv_init_fn_t coll_gatherv_init; + mca_coll_base_module_reduce_init_fn_t coll_reduce_init; + mca_coll_base_module_reduce_scatter_init_fn_t coll_reduce_scatter_init; + mca_coll_base_module_reduce_scatter_block_init_fn_t coll_reduce_scatter_block_init; + mca_coll_base_module_scan_init_fn_t coll_scan_init; + mca_coll_base_module_scatter_init_fn_t coll_scatter_init; + mca_coll_base_module_scatterv_init_fn_t coll_scatterv_init; + /* neighborhood functions */ mca_coll_base_module_allgather_fn_t coll_neighbor_allgather; mca_coll_base_module_allgatherv_fn_t coll_neighbor_allgatherv; @@ -470,12 +575,20 @@ struct mca_coll_base_module_2_2_0_t { mca_coll_base_module_alltoallv_fn_t coll_neighbor_alltoallv; mca_coll_base_module_neighbor_alltoallw_fn_t coll_neighbor_alltoallw; + /* nonblocking neighborhood functions */ mca_coll_base_module_iallgather_fn_t coll_ineighbor_allgather; mca_coll_base_module_iallgatherv_fn_t coll_ineighbor_allgatherv; mca_coll_base_module_ialltoall_fn_t coll_ineighbor_alltoall; mca_coll_base_module_ialltoallv_fn_t coll_ineighbor_alltoallv; mca_coll_base_module_ineighbor_alltoallw_fn_t coll_ineighbor_alltoallw; + /* persistent neighborhood functions */ + mca_coll_base_module_allgather_init_fn_t coll_neighbor_allgather_init; + mca_coll_base_module_allgatherv_init_fn_t coll_neighbor_allgatherv_init; + mca_coll_base_module_alltoall_init_fn_t coll_neighbor_alltoall_init; + mca_coll_base_module_alltoallv_init_fn_t coll_neighbor_alltoallv_init; + mca_coll_base_module_neighbor_alltoallw_init_fn_t coll_neighbor_alltoallw_init; + /** Fault tolerance event trigger function */ mca_coll_base_module_ft_event_fn_t ft_event; @@ -507,6 +620,8 @@ OMPI_DECLSPEC OBJ_CLASS_DECLARATION(mca_coll_base_module_t); * component. */ struct mca_coll_base_comm_coll_t { + + /* blocking collectives */ mca_coll_base_module_allgather_fn_t coll_allgather; mca_coll_base_module_2_2_0_t *coll_allgather_module; mca_coll_base_module_allgatherv_fn_t coll_allgatherv; @@ -541,6 +656,7 @@ struct mca_coll_base_comm_coll_t { mca_coll_base_module_2_2_0_t *coll_scatter_module; mca_coll_base_module_scatterv_fn_t coll_scatterv; mca_coll_base_module_2_2_0_t *coll_scatterv_module; + /* nonblocking collectives */ mca_coll_base_module_iallgather_fn_t coll_iallgather; mca_coll_base_module_2_2_0_t *coll_iallgather_module; @@ -577,7 +693,43 @@ struct mca_coll_base_comm_coll_t { mca_coll_base_module_iscatterv_fn_t coll_iscatterv; mca_coll_base_module_2_2_0_t *coll_iscatterv_module; - /* neighborhood collectives */ + /* persistent collectives */ + mca_coll_base_module_allgather_init_fn_t coll_allgather_init; + mca_coll_base_module_2_2_0_t *coll_allgather_init_module; + mca_coll_base_module_allgatherv_init_fn_t coll_allgatherv_init; + mca_coll_base_module_2_2_0_t *coll_allgatherv_init_module; + mca_coll_base_module_allreduce_init_fn_t coll_allreduce_init; + mca_coll_base_module_2_2_0_t *coll_allreduce_init_module; + mca_coll_base_module_alltoall_init_fn_t coll_alltoall_init; + mca_coll_base_module_2_2_0_t *coll_alltoall_init_module; + mca_coll_base_module_alltoallv_init_fn_t coll_alltoallv_init; + mca_coll_base_module_2_2_0_t *coll_alltoallv_init_module; + mca_coll_base_module_alltoallw_init_fn_t coll_alltoallw_init; + mca_coll_base_module_2_2_0_t *coll_alltoallw_init_module; + mca_coll_base_module_barrier_init_fn_t coll_barrier_init; + mca_coll_base_module_2_2_0_t *coll_barrier_init_module; + mca_coll_base_module_bcast_init_fn_t coll_bcast_init; + mca_coll_base_module_2_2_0_t *coll_bcast_init_module; + mca_coll_base_module_exscan_init_fn_t coll_exscan_init; + mca_coll_base_module_2_2_0_t *coll_exscan_init_module; + mca_coll_base_module_gather_init_fn_t coll_gather_init; + mca_coll_base_module_2_2_0_t *coll_gather_init_module; + mca_coll_base_module_gatherv_init_fn_t coll_gatherv_init; + mca_coll_base_module_2_2_0_t *coll_gatherv_init_module; + mca_coll_base_module_reduce_init_fn_t coll_reduce_init; + mca_coll_base_module_2_2_0_t *coll_reduce_init_module; + mca_coll_base_module_reduce_scatter_init_fn_t coll_reduce_scatter_init; + mca_coll_base_module_2_2_0_t *coll_reduce_scatter_init_module; + mca_coll_base_module_reduce_scatter_block_init_fn_t coll_reduce_scatter_block_init; + mca_coll_base_module_2_2_0_t *coll_reduce_scatter_block_init_module; + mca_coll_base_module_scan_init_fn_t coll_scan_init; + mca_coll_base_module_2_2_0_t *coll_scan_init_module; + mca_coll_base_module_scatter_init_fn_t coll_scatter_init; + mca_coll_base_module_2_2_0_t *coll_scatter_init_module; + mca_coll_base_module_scatterv_init_fn_t coll_scatterv_init; + mca_coll_base_module_2_2_0_t *coll_scatterv_init_module; + + /* blocking neighborhood collectives */ mca_coll_base_module_allgather_fn_t coll_neighbor_allgather; mca_coll_base_module_2_2_0_t *coll_neighbor_allgather_module; mca_coll_base_module_allgatherv_fn_t coll_neighbor_allgatherv; @@ -589,6 +741,7 @@ struct mca_coll_base_comm_coll_t { mca_coll_base_module_neighbor_alltoallw_fn_t coll_neighbor_alltoallw; mca_coll_base_module_2_2_0_t *coll_neighbor_alltoallw_module; + /* nonblocking neighborhood collectives */ mca_coll_base_module_iallgather_fn_t coll_ineighbor_allgather; mca_coll_base_module_2_2_0_t *coll_ineighbor_allgather_module; mca_coll_base_module_iallgatherv_fn_t coll_ineighbor_allgatherv; @@ -600,6 +753,18 @@ struct mca_coll_base_comm_coll_t { mca_coll_base_module_ineighbor_alltoallw_fn_t coll_ineighbor_alltoallw; mca_coll_base_module_2_2_0_t *coll_ineighbor_alltoallw_module; + /* persistent neighborhood collectives */ + mca_coll_base_module_allgather_init_fn_t coll_neighbor_allgather_init; + mca_coll_base_module_2_2_0_t *coll_neighbor_allgather_init_module; + mca_coll_base_module_allgatherv_init_fn_t coll_neighbor_allgatherv_init; + mca_coll_base_module_2_2_0_t *coll_neighbor_allgatherv_init_module; + mca_coll_base_module_alltoall_init_fn_t coll_neighbor_alltoall_init; + mca_coll_base_module_2_2_0_t *coll_neighbor_alltoall_init_module; + mca_coll_base_module_alltoallv_init_fn_t coll_neighbor_alltoallv_init; + mca_coll_base_module_2_2_0_t *coll_neighbor_alltoallv_init_module; + mca_coll_base_module_neighbor_alltoallw_init_fn_t coll_neighbor_alltoallw_init; + mca_coll_base_module_2_2_0_t *coll_neighbor_alltoallw_init_module; + mca_coll_base_module_reduce_local_fn_t coll_reduce_local; mca_coll_base_module_2_2_0_t *coll_reduce_local_module; }; diff --git a/ompi/mpi/c/start.c b/ompi/mpi/c/start.c index 3f1b3658e3..0e5478ffc6 100644 --- a/ompi/mpi/c/start.c +++ b/ompi/mpi/c/start.c @@ -12,6 +12,7 @@ * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 FUJITSU LIMITED. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -66,6 +67,7 @@ int MPI_Start(MPI_Request *request) switch((*request)->req_type) { case OMPI_REQUEST_PML: + case OMPI_REQUEST_COLL: OPAL_CR_ENTER_LIBRARY(); ret = (*request)->req_start(1, request); diff --git a/ompi/mpi/c/startall.c b/ompi/mpi/c/startall.c index 14452f68de..733257d3b4 100644 --- a/ompi/mpi/c/startall.c +++ b/ompi/mpi/c/startall.c @@ -15,6 +15,7 @@ * reserved. * Copyright (c) 2014-2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 FUJITSU LIMITED. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -64,7 +65,8 @@ int MPI_Startall(int count, MPI_Request requests[]) } else { for (i = 0; i < count; ++i) { if (NULL == requests[i] || - (OMPI_REQUEST_PML != requests[i]->req_type && + (OMPI_REQUEST_PML != requests[i]->req_type && + OMPI_REQUEST_COLL != requests[i]->req_type && OMPI_REQUEST_NOOP != requests[i]->req_type)) { rc = MPI_ERR_REQUEST; break;