1
1

coll: Add persistent collective communication request feature

Signed-off-by: KAWASHIMA Takahiro <t-kawashima@jp.fujitsu.com>
Этот коммит содержится в:
KAWASHIMA Takahiro 2017-01-16 17:24:42 +09:00
родитель c753e9baff
Коммит a9fdea51aa
6 изменённых файлов: 249 добавлений и 3 удалений

Просмотреть файл

@ -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. */

Просмотреть файл

@ -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);

Просмотреть файл

@ -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

Просмотреть файл

@ -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;
};

Просмотреть файл

@ -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);

Просмотреть файл

@ -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;