1
1

oshmem: Align OSHMEM API with spec v1.3 (Add scoll/alltoall interface)

Этот коммит содержится в:
Igor Ivanov 2016-03-15 18:21:39 +02:00
родитель 84b79dbf59
Коммит 50906b34b3
11 изменённых файлов: 102 добавлений и 13 удалений

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

@ -101,6 +101,7 @@ enum shmem_wait_ops {
#define _SHMEM_BCAST_SYNC_SIZE (1 + _SHMEM_BARRIER_SYNC_SIZE) #define _SHMEM_BCAST_SYNC_SIZE (1 + _SHMEM_BARRIER_SYNC_SIZE)
#define _SHMEM_COLLECT_SYNC_SIZE (1 + _SHMEM_BCAST_SYNC_SIZE) #define _SHMEM_COLLECT_SYNC_SIZE (1 + _SHMEM_BCAST_SYNC_SIZE)
#define _SHMEM_REDUCE_SYNC_SIZE (1 + _SHMEM_BCAST_SYNC_SIZE) #define _SHMEM_REDUCE_SYNC_SIZE (1 + _SHMEM_BCAST_SYNC_SIZE)
#define _SHMEM_ALLTOALL_SYNC_SIZE (1)
#define _SHMEM_REDUCE_MIN_WRKDATA_SIZE (1) #define _SHMEM_REDUCE_MIN_WRKDATA_SIZE (1)
#define _SHMEM_SYNC_VALUE (-1) #define _SHMEM_SYNC_VALUE (-1)
@ -108,6 +109,7 @@ enum shmem_wait_ops {
#define SHMEM_BCAST_SYNC_SIZE _SHMEM_BCAST_SYNC_SIZE #define SHMEM_BCAST_SYNC_SIZE _SHMEM_BCAST_SYNC_SIZE
#define SHMEM_COLLECT_SYNC_SIZE _SHMEM_COLLECT_SYNC_SIZE #define SHMEM_COLLECT_SYNC_SIZE _SHMEM_COLLECT_SYNC_SIZE
#define SHMEM_REDUCE_SYNC_SIZE _SHMEM_REDUCE_SYNC_SIZE #define SHMEM_REDUCE_SYNC_SIZE _SHMEM_REDUCE_SYNC_SIZE
#define SHMEM_ALLTOALL_SYNC_SIZE _SHMEM_ALLTOALL_SYNC_SIZE
#define SHMEM_REDUCE_MIN_WRKDATA_SIZE _SHMEM_REDUCE_MIN_WRKDATA_SIZE #define SHMEM_REDUCE_MIN_WRKDATA_SIZE _SHMEM_REDUCE_MIN_WRKDATA_SIZE
#define SHMEM_SYNC_VALUE _SHMEM_SYNC_VALUE #define SHMEM_SYNC_VALUE _SHMEM_SYNC_VALUE
@ -191,6 +193,24 @@ OSHMEM_DECLSPEC void shmem_iput32(void* target, const void* source, ptrdiff_t ts
OSHMEM_DECLSPEC void shmem_iput64(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe); OSHMEM_DECLSPEC void shmem_iput64(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
OSHMEM_DECLSPEC void shmem_iput128(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe); OSHMEM_DECLSPEC void shmem_iput128(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
/*
* Nonblocking put routines
*/
OSHMEM_DECLSPEC void shmem_putmem_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_char_put_nbi(char *target, const char *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_short_put_nbi(short *target, const short *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_int_put_nbi(int* target, const int* source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_long_put_nbi(long *target, const long *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_longlong_put_nbi(long long *target, const long long *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_float_put_nbi(float *target, const float *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_double_put_nbi(double *target, const double *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_longdouble_put_nbi(long double *target, const long double *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_put8_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_put16_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_put32_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_put64_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_put128_nbi(void *target, const void *source, size_t len, int pe);
/* /*
* Elemental get routines * Elemental get routines
*/ */
@ -232,6 +252,24 @@ OSHMEM_DECLSPEC void shmem_iget32(void* target, const void* source, ptrdiff_t ts
OSHMEM_DECLSPEC void shmem_iget64(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe); OSHMEM_DECLSPEC void shmem_iget64(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
OSHMEM_DECLSPEC void shmem_iget128(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe); OSHMEM_DECLSPEC void shmem_iget128(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
/*
* Nonblocking data get routines
*/
OSHMEM_DECLSPEC void shmem_getmem_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_char_get_nbi(char *target, const char *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_short_get_nbi(short *target, const short *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_int_get_nbi(int *target, const int *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_long_get_nbi(long *target, const long *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_longlong_get_nbi(long long *target, const long long *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_float_get_nbi(float *target, const float *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_double_get_nbi(double *target, const double *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_longdouble_get_nbi(long double *target, const long double *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_get8_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_get16_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_get32_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_get64_nbi(void *target, const void *source, size_t len, int pe);
OSHMEM_DECLSPEC void shmem_get128_nbi(void *target, const void *source, size_t len, int pe);
/* /*
* Atomic operations * Atomic operations
*/ */

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

@ -46,6 +46,7 @@ static void scoll_base_module_construct(mca_scoll_base_module_t *m)
m->scoll_broadcast = NULL; m->scoll_broadcast = NULL;
m->scoll_collect = NULL; m->scoll_collect = NULL;
m->scoll_reduce = NULL; m->scoll_reduce = NULL;
m->scoll_alltoall = NULL;
m->scoll_module_enable = NULL; m->scoll_module_enable = NULL;
} }

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

@ -118,6 +118,22 @@ static int scoll_null_reduce(struct oshmem_group_t *group,
return OSHMEM_SUCCESS; return OSHMEM_SUCCESS;
} }
static int scoll_null_alltoall(struct oshmem_group_t *group,
void *target,
const void *source,
ptrdiff_t dst, ptrdiff_t sst,
size_t nlong,
long *pSync,
int alg)
{
if (oshmem_proc_group_is_member(group)) {
SCOLL_ERROR("internal error");
oshmem_shmem_abort(-1);
return OSHMEM_ERROR;
}
return OSHMEM_SUCCESS;
}
/* /*
* Stuff for the OBJ interface * Stuff for the OBJ interface
*/ */
@ -160,6 +176,7 @@ int mca_scoll_base_group_unselect(struct oshmem_group_t * group)
CLOSE(group, broadcast); CLOSE(group, broadcast);
CLOSE(group, collect); CLOSE(group, collect);
CLOSE(group, reduce); CLOSE(group, reduce);
CLOSE(group, alltoall);
/* All done */ /* All done */
return OSHMEM_SUCCESS; return OSHMEM_SUCCESS;
@ -184,6 +201,7 @@ int mca_scoll_base_select(struct oshmem_group_t *group)
group->g_scoll.scoll_broadcast = scoll_null_broadcast; group->g_scoll.scoll_broadcast = scoll_null_broadcast;
group->g_scoll.scoll_collect = scoll_null_collect; group->g_scoll.scoll_collect = scoll_null_collect;
group->g_scoll.scoll_reduce = scoll_null_reduce; group->g_scoll.scoll_reduce = scoll_null_reduce;
group->g_scoll.scoll_alltoall = scoll_null_alltoall;
return OSHMEM_SUCCESS; return OSHMEM_SUCCESS;
} }
SCOLL_VERBOSE(10, SCOLL_VERBOSE(10,
@ -206,10 +224,11 @@ int mca_scoll_base_select(struct oshmem_group_t *group)
if (OSHMEM_SUCCESS != ret) { if (OSHMEM_SUCCESS != ret) {
mca_scoll_base_group_unselect(group); mca_scoll_base_group_unselect(group);
} else { } else {
COPY(avail->ac_module, group, barrier);
COPY(avail->ac_module, group, broadcast); COPY(avail->ac_module, group, broadcast);
COPY(avail->ac_module, group, collect); COPY(avail->ac_module, group, collect);
COPY(avail->ac_module, group, reduce); COPY(avail->ac_module, group, reduce);
COPY(avail->ac_module, group, barrier); COPY(avail->ac_module, group, alltoall);
} }
OBJ_RELEASE(avail->ac_module); OBJ_RELEASE(avail->ac_module);
OBJ_RELEASE(avail); OBJ_RELEASE(avail);
@ -220,7 +239,8 @@ int mca_scoll_base_select(struct oshmem_group_t *group)
if ((NULL == group->g_scoll.scoll_barrier) if ((NULL == group->g_scoll.scoll_barrier)
|| (NULL == group->g_scoll.scoll_broadcast) || (NULL == group->g_scoll.scoll_broadcast)
|| (NULL == group->g_scoll.scoll_collect) || (NULL == group->g_scoll.scoll_collect)
|| (NULL == group->g_scoll.scoll_reduce)) { || (NULL == group->g_scoll.scoll_reduce)
|| (NULL == group->g_scoll.scoll_alltoall)) {
mca_scoll_base_group_unselect(group); mca_scoll_base_group_unselect(group);
return OSHMEM_ERR_NOT_FOUND; return OSHMEM_ERR_NOT_FOUND;
} }
@ -228,8 +248,8 @@ int mca_scoll_base_select(struct oshmem_group_t *group)
return OSHMEM_SUCCESS; return OSHMEM_SUCCESS;
} }
static int avail_coll_compare (opal_list_item_t **a, static int avail_coll_compare(opal_list_item_t **a,
opal_list_item_t **b) opal_list_item_t **b)
{ {
avail_com_t *acom = (avail_com_t *) *a; avail_com_t *acom = (avail_com_t *) *a;
avail_com_t *bcom = (avail_com_t *) *b; avail_com_t *bcom = (avail_com_t *) *b;

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

@ -1,5 +1,5 @@
# #
# Copyright (c) 2013 Mellanox Technologies, Inc. # Copyright (c) 2013-2016 Mellanox Technologies, Inc.
# All rights reserved. # All rights reserved.
# $COPYRIGHT$ # $COPYRIGHT$
# #
@ -15,7 +15,8 @@ sources = \
scoll_basic_barrier.c \ scoll_basic_barrier.c \
scoll_basic_broadcast.c \ scoll_basic_broadcast.c \
scoll_basic_collect.c \ scoll_basic_collect.c \
scoll_basic_reduce.c scoll_basic_reduce.c \
scoll_basic_alltoall.c
# Make the output library in this directory, and name it either # Make the output library in this directory, and name it either

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

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013 Mellanox Technologies, Inc. * Copyright (c) 2013-2016 Mellanox Technologies, Inc.
* All rights reserved. * All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -77,6 +77,13 @@ int mca_scoll_basic_reduce(struct oshmem_group_t *group,
long *pSync, long *pSync,
void *pWrk, void *pWrk,
int alg); int alg);
int mca_scoll_basic_alltoall(struct oshmem_group_t *group,
void *target,
const void *source,
ptrdiff_t dst, ptrdiff_t sst,
size_t nlong,
long *pSync,
int alg);
static inline unsigned int scoll_log2(unsigned long val) static inline unsigned int scoll_log2(unsigned long val)
{ {

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

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013 Mellanox Technologies, Inc. * Copyright (c) 2013-2016 Mellanox Technologies, Inc.
* All rights reserved. * All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -52,9 +52,10 @@ mca_scoll_basic_query(struct oshmem_group_t *group, int *priority)
module->super.scoll_broadcast = mca_scoll_basic_broadcast; module->super.scoll_broadcast = mca_scoll_basic_broadcast;
module->super.scoll_collect = mca_scoll_basic_collect; module->super.scoll_collect = mca_scoll_basic_collect;
module->super.scoll_reduce = mca_scoll_basic_reduce; module->super.scoll_reduce = mca_scoll_basic_reduce;
module->super.scoll_alltoall = mca_scoll_basic_alltoall;
module->super.scoll_module_enable = mca_scoll_basic_enable; module->super.scoll_module_enable = mca_scoll_basic_enable;
return &(module->super); return &(module->super);
} }
return NULL ; return NULL;
} }

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

@ -93,6 +93,8 @@ struct mca_scoll_fca_module_t {
mca_scoll_base_module_t *previous_collect_module; mca_scoll_base_module_t *previous_collect_module;
mca_scoll_base_module_reduce_fn_t previous_reduce; mca_scoll_base_module_reduce_fn_t previous_reduce;
mca_scoll_base_module_t *previous_reduce_module; mca_scoll_base_module_t *previous_reduce_module;
mca_scoll_base_module_alltoall_fn_t previous_alltoall;
mca_scoll_base_module_t *previous_alltoall_module;
}; };
typedef struct mca_scoll_fca_module_t mca_scoll_fca_module_t; typedef struct mca_scoll_fca_module_t mca_scoll_fca_module_t;
OBJ_CLASS_DECLARATION(mca_scoll_fca_module_t); OBJ_CLASS_DECLARATION(mca_scoll_fca_module_t);

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

@ -391,6 +391,7 @@ static int _save_coll_handlers(mca_scoll_fca_module_t *fca_module)
FCA_SAVE_PREV_SCOLL_API(broadcast); FCA_SAVE_PREV_SCOLL_API(broadcast);
FCA_SAVE_PREV_SCOLL_API(collect); FCA_SAVE_PREV_SCOLL_API(collect);
FCA_SAVE_PREV_SCOLL_API(reduce); FCA_SAVE_PREV_SCOLL_API(reduce);
FCA_SAVE_PREV_SCOLL_API(alltoall);
return OSHMEM_SUCCESS; return OSHMEM_SUCCESS;
} }
@ -450,6 +451,7 @@ static void mca_scoll_fca_module_clear(mca_scoll_fca_module_t *fca_module)
fca_module->previous_broadcast = NULL; fca_module->previous_broadcast = NULL;
fca_module->previous_collect = NULL; fca_module->previous_collect = NULL;
fca_module->previous_reduce = NULL; fca_module->previous_reduce = NULL;
fca_module->previous_alltoall = NULL;
} }
static void mca_scoll_fca_module_construct(mca_scoll_fca_module_t *fca_module) static void mca_scoll_fca_module_construct(mca_scoll_fca_module_t *fca_module)
@ -465,6 +467,7 @@ static void mca_scoll_fca_module_destruct(mca_scoll_fca_module_t *fca_module)
OBJ_RELEASE(fca_module->previous_broadcast_module); OBJ_RELEASE(fca_module->previous_broadcast_module);
OBJ_RELEASE(fca_module->previous_collect_module); OBJ_RELEASE(fca_module->previous_collect_module);
OBJ_RELEASE(fca_module->previous_reduce_module); OBJ_RELEASE(fca_module->previous_reduce_module);
OBJ_RELEASE(fca_module->previous_alltoall_module);
if (fca_module->fca_comm) if (fca_module->fca_comm)
_destroy_fca_comm(fca_module); _destroy_fca_comm(fca_module);
free(fca_module->local_ranks); free(fca_module->local_ranks);
@ -541,6 +544,7 @@ mca_scoll_fca_comm_query(struct oshmem_group_t *comm, int *priority)
fca_module->super.scoll_broadcast = fca_module->super.scoll_broadcast =
mca_scoll_fca_component.fca_enable_bcast ? mca_scoll_fca_broadcast : mca_scoll_fca_component.fca_enable_bcast ? mca_scoll_fca_broadcast :
NULL; NULL;
fca_module->super.scoll_alltoall = NULL;
*priority = mca_scoll_fca_component.fca_priority; *priority = mca_scoll_fca_component.fca_priority;
module = &fca_module->super; module = &fca_module->super;

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

@ -69,6 +69,8 @@ struct mca_scoll_mpi_module_t {
mca_scoll_base_module_t *previous_barrier_module; mca_scoll_base_module_t *previous_barrier_module;
mca_scoll_base_module_collect_fn_t previous_collect; mca_scoll_base_module_collect_fn_t previous_collect;
mca_scoll_base_module_t *previous_collect_module; mca_scoll_base_module_t *previous_collect_module;
mca_scoll_base_module_alltoall_fn_t previous_alltoall;
mca_scoll_base_module_t *previous_alltoall_module;
}; };
typedef struct mca_scoll_mpi_module_t mca_scoll_mpi_module_t; typedef struct mca_scoll_mpi_module_t mca_scoll_mpi_module_t;

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

@ -29,6 +29,7 @@ static void mca_scoll_mpi_module_clear(mca_scoll_mpi_module_t *mpi_module)
mpi_module->previous_broadcast = NULL; mpi_module->previous_broadcast = NULL;
mpi_module->previous_reduce = NULL; mpi_module->previous_reduce = NULL;
mpi_module->previous_collect = NULL; mpi_module->previous_collect = NULL;
mpi_module->previous_alltoall = NULL;
} }
static void mca_scoll_mpi_module_construct(mca_scoll_mpi_module_t *mpi_module) static void mca_scoll_mpi_module_construct(mca_scoll_mpi_module_t *mpi_module)
@ -43,6 +44,7 @@ static void mca_scoll_mpi_module_destruct(mca_scoll_mpi_module_t *mpi_module)
OBJ_RELEASE(mpi_module->previous_broadcast_module); OBJ_RELEASE(mpi_module->previous_broadcast_module);
OBJ_RELEASE(mpi_module->previous_reduce_module); OBJ_RELEASE(mpi_module->previous_reduce_module);
OBJ_RELEASE(mpi_module->previous_collect_module); OBJ_RELEASE(mpi_module->previous_collect_module);
OBJ_RELEASE(mpi_module->previous_alltoall_module);
mca_scoll_mpi_module_clear(mpi_module); mca_scoll_mpi_module_clear(mpi_module);
/* Free ompi_comm */ /* Free ompi_comm */
@ -68,6 +70,7 @@ static int mca_scoll_mpi_save_coll_handlers(mca_scoll_base_module_t *module, osh
MPI_SAVE_PREV_SCOLL_API(broadcast); MPI_SAVE_PREV_SCOLL_API(broadcast);
MPI_SAVE_PREV_SCOLL_API(reduce); MPI_SAVE_PREV_SCOLL_API(reduce);
MPI_SAVE_PREV_SCOLL_API(collect); MPI_SAVE_PREV_SCOLL_API(collect);
MPI_SAVE_PREV_SCOLL_API(alltoall);
return OSHMEM_SUCCESS; return OSHMEM_SUCCESS;
} }
@ -173,6 +176,7 @@ mca_scoll_mpi_comm_query(oshmem_group_t *osh_group, int *priority)
mpi_module->super.scoll_broadcast = mca_scoll_mpi_broadcast; mpi_module->super.scoll_broadcast = mca_scoll_mpi_broadcast;
mpi_module->super.scoll_reduce = mca_scoll_mpi_reduce; mpi_module->super.scoll_reduce = mca_scoll_mpi_reduce;
mpi_module->super.scoll_collect = mca_scoll_mpi_collect; mpi_module->super.scoll_collect = mca_scoll_mpi_collect;
mpi_module->super.scoll_alltoall = NULL;
*priority = cm->mpi_priority; *priority = cm->mpi_priority;
module = &mpi_module->super; module = &mpi_module->super;

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

@ -89,7 +89,6 @@ typedef struct mca_scoll_base_component_1_0_0_t mca_scoll_base_component_t;
typedef int typedef int
(*mca_scoll_base_module_enable_1_0_0_fn_t)(struct mca_scoll_base_module_1_0_0_t* module, (*mca_scoll_base_module_enable_1_0_0_fn_t)(struct mca_scoll_base_module_1_0_0_t* module,
struct oshmem_group_t *comm); struct oshmem_group_t *comm);
typedef int (*mca_scoll_base_module_ft_event_fn_t)(int state);
#define SCOLL_DEFAULT_ALG (-1) #define SCOLL_DEFAULT_ALG (-1)
@ -139,6 +138,13 @@ typedef int (*mca_scoll_base_module_reduce_fn_t)(struct oshmem_group_t *group,
long *pSync, long *pSync,
void *pWrk, void *pWrk,
int alg); int alg);
typedef int (*mca_scoll_base_module_alltoall_fn_t)(struct oshmem_group_t *group,
void *target,
const void *source,
ptrdiff_t dst, ptrdiff_t sst,
size_t nlong,
long *pSync,
int alg);
struct mca_scoll_base_module_1_0_0_t { struct mca_scoll_base_module_1_0_0_t {
/** Collective modules all inherit from opal_object */ /** Collective modules all inherit from opal_object */
@ -149,13 +155,14 @@ struct mca_scoll_base_module_1_0_0_t {
mca_scoll_base_module_broadcast_fn_t scoll_broadcast; mca_scoll_base_module_broadcast_fn_t scoll_broadcast;
mca_scoll_base_module_collect_fn_t scoll_collect; mca_scoll_base_module_collect_fn_t scoll_collect;
mca_scoll_base_module_reduce_fn_t scoll_reduce; mca_scoll_base_module_reduce_fn_t scoll_reduce;
mca_scoll_base_module_alltoall_fn_t scoll_alltoall;
mca_scoll_base_module_enable_1_0_0_fn_t scoll_module_enable; mca_scoll_base_module_enable_1_0_0_fn_t scoll_module_enable;
}; };
typedef struct mca_scoll_base_module_1_0_0_t mca_scoll_base_module_1_0_0_t; typedef struct mca_scoll_base_module_1_0_0_t mca_scoll_base_module_1_0_0_t;
/** Per guidence in mca.h, use the unversioned struct name if you just /** Per guidance in mca.h, use the unversioned struct name if you just
want to always keep up with the most recent version of the want to always keep up with the most recent version of the
interace. */ interface. */
typedef struct mca_scoll_base_module_1_0_0_t mca_scoll_base_module_t; typedef struct mca_scoll_base_module_1_0_0_t mca_scoll_base_module_t;
OSHMEM_DECLSPEC OBJ_CLASS_DECLARATION(mca_scoll_base_module_t); OSHMEM_DECLSPEC OBJ_CLASS_DECLARATION(mca_scoll_base_module_t);
@ -171,7 +178,7 @@ OSHMEM_DECLSPEC OBJ_CLASS_DECLARATION(mca_scoll_base_module_t);
/* /*
* Collectives group cache structure * Collectives group cache structure
* *
* Collectives gorup cache structure, used to find functions to * Collectives group cache structure, used to find functions to
* implement collective algorithms and their associated modules. * implement collective algorithms and their associated modules.
*/ */
struct mca_scoll_base_group_scoll_t { struct mca_scoll_base_group_scoll_t {
@ -183,6 +190,8 @@ struct mca_scoll_base_group_scoll_t {
mca_scoll_base_module_1_0_0_t *scoll_collect_module; mca_scoll_base_module_1_0_0_t *scoll_collect_module;
mca_scoll_base_module_reduce_fn_t scoll_reduce; mca_scoll_base_module_reduce_fn_t scoll_reduce;
mca_scoll_base_module_1_0_0_t *scoll_reduce_module; mca_scoll_base_module_1_0_0_t *scoll_reduce_module;
mca_scoll_base_module_alltoall_fn_t scoll_alltoall;
mca_scoll_base_module_1_0_0_t *scoll_alltoall_module;
}; };
typedef struct mca_scoll_base_group_scoll_t mca_scoll_base_group_scoll_t; typedef struct mca_scoll_base_group_scoll_t mca_scoll_base_group_scoll_t;