oshmem: Align OSHMEM API with spec v1.3 (Add scoll/alltoall interface)
Этот коммит содержится в:
родитель
84b79dbf59
Коммит
50906b34b3
@ -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;
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user