ooops, need to handle case where extents are not same as type sizes
This commit was SVN r15423.
Этот коммит содержится в:
родитель
1b66a52c50
Коммит
c9ad5d1f24
@ -39,18 +39,30 @@ struct ompi_osc_base_convertor_t {
|
|||||||
typedef struct ompi_osc_base_convertor_t ompi_osc_base_convertor_t;
|
typedef struct ompi_osc_base_convertor_t ompi_osc_base_convertor_t;
|
||||||
static OBJ_CLASS_INSTANCE(ompi_osc_base_convertor_t, ompi_convertor_t, NULL, NULL);
|
static OBJ_CLASS_INSTANCE(ompi_osc_base_convertor_t, ompi_convertor_t, NULL, NULL);
|
||||||
|
|
||||||
#define COPY_TYPE( TYPENAME, TYPE, COUNT ) \
|
#define COPY_TYPE( TYPENAME, TYPE, COUNT ) \
|
||||||
static int copy_##TYPENAME( ompi_convertor_t *pConvertor, uint32_t count, \
|
static int copy_##TYPENAME( ompi_convertor_t *pConvertor, uint32_t count, \
|
||||||
char* from, size_t from_len, ptrdiff_t from_extent, \
|
char* from, size_t from_len, ptrdiff_t from_extent, \
|
||||||
char* to, size_t to_len, ptrdiff_t to_extent, \
|
char* to, size_t to_len, ptrdiff_t to_extent, \
|
||||||
ptrdiff_t *advance) \
|
ptrdiff_t *advance) \
|
||||||
{ \
|
{ \
|
||||||
ompi_osc_base_convertor_t *osc_convertor = \
|
size_t remote_TYPE_size = sizeof(TYPE) * (COUNT); /* TODO */ \
|
||||||
(ompi_osc_base_convertor_t*) pConvertor; \
|
size_t local_TYPE_size = (COUNT) * sizeof(TYPE); \
|
||||||
\
|
ompi_osc_base_convertor_t *osc_convertor = \
|
||||||
ompi_op_reduce(osc_convertor->op, from, to, count, osc_convertor->datatype); \
|
(ompi_osc_base_convertor_t*) pConvertor; \
|
||||||
*advance = count * from_extent; \
|
\
|
||||||
return count; \
|
if( (from_extent == (ptrdiff_t)local_TYPE_size) && \
|
||||||
|
(to_extent == (ptrdiff_t)remote_TYPE_size) ) { \
|
||||||
|
ompi_op_reduce(osc_convertor->op, from, to, count, osc_convertor->datatype); \
|
||||||
|
} else { \
|
||||||
|
uint32_t i; \
|
||||||
|
for( i = 0; i < count; i++ ) { \
|
||||||
|
ompi_op_reduce(osc_convertor->op, from, to, 1, osc_convertor->datatype); \
|
||||||
|
to += to_extent; \
|
||||||
|
from += from_extent; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
*advance = count * from_extent; \
|
||||||
|
return count; \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set up copy functions for the basic C MPI data types */
|
/* set up copy functions for the basic C MPI data types */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user