Call the new unpack function from the new_unpack.c
The cleanup of the pack/unpack framework will follow shortly. This commit was SVN r7286.
Этот коммит содержится в:
родитель
35676f0c75
Коммит
41c2dc6a79
@ -39,7 +39,6 @@ int ompi_ddt_dfd = -1;
|
|||||||
0/*lb*/, 0/*ub*/, DT_FLAG_PREDEFINED, TYPE, 1, \
|
0/*lb*/, 0/*ub*/, DT_FLAG_PREDEFINED, TYPE, 1, \
|
||||||
(((unsigned long long)1)<<(TYPE)), EMPTY_DATA(NAME) }
|
(((unsigned long long)1)<<(TYPE)), EMPTY_DATA(NAME) }
|
||||||
|
|
||||||
|
|
||||||
#define INIT_BASIC_DATA( TYPE, ALIGN, NAME, FLAGS ) \
|
#define INIT_BASIC_DATA( TYPE, ALIGN, NAME, FLAGS ) \
|
||||||
{ BASEOBJ_DATA, sizeof(TYPE), ALIGN, 0, sizeof(TYPE), \
|
{ BASEOBJ_DATA, sizeof(TYPE), ALIGN, 0, sizeof(TYPE), \
|
||||||
0, sizeof(TYPE), DT_FLAG_BASIC | (FLAGS), \
|
0, sizeof(TYPE), DT_FLAG_BASIC | (FLAGS), \
|
||||||
|
@ -95,8 +95,10 @@ static int ompi_convertor_unpack_general( ompi_convertor_t* pConvertor,
|
|||||||
while( 1 ) {
|
while( 1 ) {
|
||||||
if( DT_END_LOOP == pElems[pos_desc].elem.common.type ) { /* end of the current loop */
|
if( DT_END_LOOP == pElems[pos_desc].elem.common.type ) { /* end of the current loop */
|
||||||
if( --(pStack->count) == 0 ) { /* end of loop */
|
if( --(pStack->count) == 0 ) { /* end of loop */
|
||||||
if( pConvertor->stack_pos == 0 )
|
if( pConvertor->stack_pos == 0 ) {
|
||||||
|
pConvertor->flags |= CONVERTOR_COMPLETED;
|
||||||
goto save_and_return; /* completed */
|
goto save_and_return; /* completed */
|
||||||
|
}
|
||||||
pConvertor->stack_pos--;
|
pConvertor->stack_pos--;
|
||||||
pStack--;
|
pStack--;
|
||||||
}
|
}
|
||||||
@ -158,13 +160,13 @@ static int ompi_convertor_unpack_general( ompi_convertor_t* pConvertor,
|
|||||||
/* out of the loop: we have complete the data conversion or no more space
|
/* out of the loop: we have complete the data conversion or no more space
|
||||||
* in the buffer.
|
* in the buffer.
|
||||||
*/
|
*/
|
||||||
if( pConvertor->pStack[0].count < 0 ) return 1; /* data succesfully converted */
|
if( pConvertor->flags & CONVERTOR_COMPLETED ) return 1; /* data succesfully converted */
|
||||||
|
|
||||||
/* I complete an element, next step I should go to the next one */
|
/* I complete an element, next step I should go to the next one */
|
||||||
PUSH_STACK( pStack, pConvertor->stack_pos, pos_desc, type,
|
PUSH_STACK( pStack, pConvertor->stack_pos, pos_desc, type,
|
||||||
count_desc, disp_desc, pos_desc );
|
count_desc, disp_desc, pos_desc );
|
||||||
|
|
||||||
return (pConvertor->bConverted == (pConvertor->count * pConvertor->pDesc->size));
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ompi_convertor_unpack_homogeneous( ompi_convertor_t* pConv,
|
static int ompi_convertor_unpack_homogeneous( ompi_convertor_t* pConv,
|
||||||
@ -200,6 +202,7 @@ static int ompi_convertor_unpack_homogeneous( ompi_convertor_t* pConv,
|
|||||||
if( --(pStack->count) == 0 ) { /* end of loop */
|
if( --(pStack->count) == 0 ) { /* end of loop */
|
||||||
if( pConv->stack_pos == 0 ) {
|
if( pConv->stack_pos == 0 ) {
|
||||||
last_blength = 0; /* nothing to copy anymore */
|
last_blength = 0; /* nothing to copy anymore */
|
||||||
|
pConv->flags |= CONVERTOR_COMPLETED;
|
||||||
goto end_loop;
|
goto end_loop;
|
||||||
}
|
}
|
||||||
pStack--;
|
pStack--;
|
||||||
@ -301,16 +304,17 @@ static int ompi_convertor_unpack_homogeneous( ompi_convertor_t* pConv,
|
|||||||
bConverted += last_blength;
|
bConverted += last_blength;
|
||||||
lastDisp += last_blength;
|
lastDisp += last_blength;
|
||||||
}
|
}
|
||||||
if( pos_desc < (uint32_t)pStack->end_loop ) { /* update the stack */
|
|
||||||
PUSH_STACK( pStack, pConv->stack_pos, pos_desc, pElems[pos_desc].elem.common.type,
|
|
||||||
last_count, lastDisp, pos_desc );
|
|
||||||
}
|
|
||||||
|
|
||||||
pConv->bConverted += bConverted; /* update the converted field */
|
pConv->bConverted += bConverted; /* update the converted field */
|
||||||
iov[0].iov_len = bConverted; /* update the iovec length */
|
iov[0].iov_len = bConverted; /* update the iovec length */
|
||||||
*max_data = bConverted;
|
*max_data = bConverted;
|
||||||
|
|
||||||
return (pConv->bConverted == (pConv->count * pData->size));
|
if( pConv->flags & CONVERTOR_COMPLETED ) { /* finish thus do not update the stack */
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
PUSH_STACK( pStack, pConv->stack_pos, pos_desc, pElems[pos_desc].elem.common.type,
|
||||||
|
last_count, lastDisp, pos_desc );
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ompi_convertor_unpack_homogeneous_contig( ompi_convertor_t* pConv,
|
static int ompi_convertor_unpack_homogeneous_contig( ompi_convertor_t* pConv,
|
||||||
@ -372,7 +376,11 @@ static int ompi_convertor_unpack_homogeneous_contig( ompi_convertor_t* pConv,
|
|||||||
}
|
}
|
||||||
*out_size = iov_count;
|
*out_size = iov_count;
|
||||||
*max_data = (pConv->bConverted - initial_bytes_converted);
|
*max_data = (pConv->bConverted - initial_bytes_converted);
|
||||||
return (pConv->bConverted == (pData->size * pConv->count));
|
if( pConv->bConverted == (pData->size * pConv->count) ) {
|
||||||
|
pConv->flags |= CONVERTOR_COMPLETED;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return value:
|
/* Return value:
|
||||||
@ -643,6 +651,7 @@ ompi_convertor_prepare_for_recv( ompi_convertor_t* convertor,
|
|||||||
convertor->memAlloc_fn = NULL;
|
convertor->memAlloc_fn = NULL;
|
||||||
convertor->fAdvance = ompi_convertor_unpack_general; /* TODO: just stop complaining */
|
convertor->fAdvance = ompi_convertor_unpack_general; /* TODO: just stop complaining */
|
||||||
convertor->fAdvance = ompi_convertor_unpack_homogeneous; /* default behaviour */
|
convertor->fAdvance = ompi_convertor_unpack_homogeneous; /* default behaviour */
|
||||||
|
convertor->fAdvance = ompi_convertor_generic_simple_unpack;
|
||||||
|
|
||||||
/* TODO: work only on homogeneous architectures */
|
/* TODO: work only on homogeneous architectures */
|
||||||
if( convertor->pDesc->flags & DT_FLAG_CONTIGUOUS ) {
|
if( convertor->pDesc->flags & DT_FLAG_CONTIGUOUS ) {
|
||||||
@ -813,7 +822,9 @@ int32_t ompi_ddt_copy_content_same_ddt( const ompi_datatype_t* datatype, int32_t
|
|||||||
if( DT_END_LOOP == pElems[pos_desc].elem.common.type ) { /* end of the current loop */
|
if( DT_END_LOOP == pElems[pos_desc].elem.common.type ) { /* end of the current loop */
|
||||||
if( --(pStack->count) == 0 ) { /* end of loop */
|
if( --(pStack->count) == 0 ) { /* end of loop */
|
||||||
pStack--;
|
pStack--;
|
||||||
if( --stack_pos == -1 ) goto end_loop;
|
if( --stack_pos == -1 ) {
|
||||||
|
goto end_loop;
|
||||||
|
}
|
||||||
DDT_DUMP_STACK( pStack, stack_pos, pElems, "loop finish" );
|
DDT_DUMP_STACK( pStack, stack_pos, pElems, "loop finish" );
|
||||||
pos_desc++;
|
pos_desc++;
|
||||||
} else {
|
} else {
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user