Move the generic part of the convertor initialization in a inlined function.
This commit was SVN r3893.
Этот коммит содержится в:
родитель
f87da25e34
Коммит
8b9b8cec9d
@ -371,6 +371,36 @@ int ompi_convertor_create_stack_at_begining( ompi_convertor_t* pConvertor, const
|
||||
pConvertor->bConverted = 0;
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
static inline void
|
||||
convertor_init_generic( ompi_convertor_t* pConv, const dt_desc_t* datatype, int count,
|
||||
const void* pUserBuf )
|
||||
{
|
||||
uint32_t required_stack_length = datatype->btypes[DT_LOOP] + 3;
|
||||
|
||||
OBJ_RETAIN( datatype );
|
||||
if( pConv->pDesc != datatype ) {
|
||||
pConv->pDesc = (dt_desc_t*)datatype;
|
||||
if( pConv->pStack != NULL ) {
|
||||
if( pConv->stack_size > DT_STATIC_STACK_SIZE )
|
||||
free( pConv->pStack );
|
||||
}
|
||||
pConv->pStack = pConv->static_stack;
|
||||
pConv->stack_size = DT_STATIC_STACK_SIZE;
|
||||
}
|
||||
if( required_stack_length > pConv->stack_size ) {
|
||||
assert( pConv->stack_size > DT_STATIC_STACK_SIZE );
|
||||
pConv->stack_size = required_stack_length;
|
||||
pConv->pStack = (dt_stack_t*)malloc(sizeof(dt_stack_t) * pConv->stack_size );
|
||||
}
|
||||
|
||||
pConv->pBaseBuf = (void*)pUserBuf;
|
||||
pConv->available_space = count * (datatype->ub - datatype->lb);
|
||||
pConv->count = count;
|
||||
pConv->converted = 0;
|
||||
pConv->bConverted = 0;
|
||||
}
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
@ -756,35 +756,11 @@ int ompi_convertor_init_for_send( ompi_convertor_t* pConv,
|
||||
int starting_pos,
|
||||
memalloc_fct_t allocfn )
|
||||
{
|
||||
|
||||
OBJ_RETAIN( datatype );
|
||||
if( pConv->pDesc != datatype ) {
|
||||
pConv->pDesc = (dt_desc_t*)datatype;
|
||||
if( pConv->pStack != NULL ) {
|
||||
if( pConv->stack_size > DT_STATIC_STACK_SIZE )
|
||||
free( pConv->pStack );
|
||||
}
|
||||
pConv->pStack = NULL;
|
||||
}
|
||||
|
||||
if( pConv->pStack == NULL ) {
|
||||
pConv->stack_size = datatype->btypes[DT_LOOP] + 3;
|
||||
if( pConv->stack_size > DT_STATIC_STACK_SIZE ) {
|
||||
pConv->pStack = (dt_stack_t*)malloc(sizeof(dt_stack_t) * pConv->stack_size );
|
||||
} else {
|
||||
pConv->pStack = pConv->static_stack;
|
||||
}
|
||||
pConv->stack_pos = 0; /* just to be sure */
|
||||
}
|
||||
convertor_init_generic( pConv, datatype, count, pUserBuf );
|
||||
|
||||
pConv->flags = CONVERTOR_SEND | CONVERTOR_HOMOGENEOUS; /* by default set to homogeneous */
|
||||
pConv->pBaseBuf = (void*)pUserBuf;
|
||||
pConv->available_space = count * (datatype->ub - datatype->lb);
|
||||
pConv->count = count;
|
||||
pConv->pFunctions = ompi_ddt_copy_functions;
|
||||
pConv->converted = 0;
|
||||
pConv->bConverted = 0;
|
||||
pConv->memAlloc_fn = allocfn;
|
||||
pConv->pFunctions = ompi_ddt_copy_functions;
|
||||
pConv->memAlloc_fn = allocfn;
|
||||
/* Just to avoid complaint from the compiler */
|
||||
pConv->fAdvance = ompi_convertor_pack_general;
|
||||
pConv->fAdvance = ompi_convertor_pack_homogeneous_with_memcpy;
|
||||
|
@ -609,35 +609,12 @@ int ompi_convertor_init_for_recv( ompi_convertor_t* pConv, uint32_t flags,
|
||||
const void* pUserBuf, int starting_point,
|
||||
memalloc_fct_t allocfn )
|
||||
{
|
||||
OBJ_RETAIN( datatype );
|
||||
if( pConv->pDesc != datatype ) {
|
||||
pConv->pDesc = (dt_desc_t*)datatype;
|
||||
pConv->flags = CONVERTOR_RECV;
|
||||
if( pConv->pStack != NULL ) {
|
||||
if( pConv->stack_size > DT_STATIC_STACK_SIZE )
|
||||
free( pConv->pStack );
|
||||
}
|
||||
pConv->pStack = NULL;
|
||||
}
|
||||
if( pConv->pStack == NULL ) {
|
||||
pConv->stack_size = datatype->btypes[DT_LOOP] + 3;
|
||||
if( pConv->stack_size > DT_STATIC_STACK_SIZE ) {
|
||||
pConv->pStack = (dt_stack_t*)malloc(sizeof(dt_stack_t) * pConv->stack_size );
|
||||
} else {
|
||||
pConv->pStack = pConv->static_stack;
|
||||
}
|
||||
pConv->stack_pos = 0; /* just to be sure */
|
||||
}
|
||||
convertor_init_generic( pConv, datatype, count, pUserBuf );
|
||||
|
||||
pConv->flags = CONVERTOR_RECV | CONVERTOR_HOMOGENEOUS;
|
||||
pConv->pBaseBuf = (void*)pUserBuf;
|
||||
pConv->available_space = count * (datatype->ub - datatype->lb);
|
||||
pConv->count = count;
|
||||
pConv->pFunctions = ompi_ddt_copy_functions;
|
||||
pConv->converted = 0;
|
||||
pConv->bConverted = 0;
|
||||
pConv->fAdvance = ompi_convertor_unpack_general; /* TODO: just stop complaining */
|
||||
pConv->fAdvance = ompi_convertor_unpack_homogeneous; /* default behaviour */
|
||||
pConv->pFunctions = ompi_ddt_copy_functions;
|
||||
pConv->fAdvance = ompi_convertor_unpack_general; /* TODO: just stop complaining */
|
||||
pConv->fAdvance = ompi_convertor_unpack_homogeneous; /* default behaviour */
|
||||
pConv->memAlloc_fn = allocfn;
|
||||
|
||||
/* TODO: work only on homogeneous architectures */
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user