Big datatype commit. Remove all unused features of the datatype engine. As the memory
allocation logic is completely done outside the data-type engine (in the PML) there is no need for any special case inside the data-type engine. There is less arguments for the ompi_convertor_pack and ompi_convertor_unpack as well (the last field free_after is not required anymore as there is no memory allocated in the engine itself). This change affect all components using datatypes. I test most of them, but it might happens that I miss some ... If it's the case please let me know (don't shoot the pianist!!). This commit was SVN r12331.
Этот коммит содержится в:
родитель
a1a4f7c422
Коммит
126a68dc9a
@ -224,7 +224,7 @@ ompi_convertor_t* ompi_convertor_create( int32_t remote_arch, int32_t mode )
|
||||
*/
|
||||
int32_t ompi_convertor_pack( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
OMPI_CONVERTOR_SET_STATUS_BEFORE_PACK_UNPACK( pConv, iov, out_size, max_data );
|
||||
|
||||
@ -265,12 +265,12 @@ int32_t ompi_convertor_pack( ompi_convertor_t* pConv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
return pConv->fAdvance( pConv, iov, out_size, max_data, freeAfter );
|
||||
return pConv->fAdvance( pConv, iov, out_size, max_data );
|
||||
}
|
||||
|
||||
int32_t ompi_convertor_unpack( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
OMPI_CONVERTOR_SET_STATUS_BEFORE_PACK_UNPACK( pConv, iov, out_size, max_data );
|
||||
|
||||
@ -311,7 +311,7 @@ int32_t ompi_convertor_unpack( ompi_convertor_t* pConv,
|
||||
return 1;
|
||||
}
|
||||
|
||||
return pConv->fAdvance( pConv, iov, out_size, max_data, freeAfter );
|
||||
return pConv->fAdvance( pConv, iov, out_size, max_data );
|
||||
}
|
||||
|
||||
static inline
|
||||
@ -500,7 +500,6 @@ ompi_convertor_prepare_for_recv( ompi_convertor_t* convertor,
|
||||
/* Here I should check that the data is not overlapping */
|
||||
|
||||
convertor->flags |= CONVERTOR_RECV;
|
||||
convertor->memAlloc_fn = NULL;
|
||||
|
||||
OMPI_CONVERTOR_PREPARE( convertor, datatype, count, pUserBuf );
|
||||
|
||||
@ -537,7 +536,6 @@ ompi_convertor_prepare_for_send( ompi_convertor_t* convertor,
|
||||
const void* pUserBuf )
|
||||
{
|
||||
convertor->flags |= CONVERTOR_SEND;
|
||||
convertor->memAlloc_fn = NULL;
|
||||
|
||||
OMPI_CONVERTOR_PREPARE( convertor, datatype, count, pUserBuf );
|
||||
|
||||
@ -586,8 +584,6 @@ int ompi_convertor_clone( const ompi_convertor_t* source,
|
||||
destination->count = source->count;
|
||||
destination->pBaseBuf = source->pBaseBuf;
|
||||
destination->fAdvance = source->fAdvance;
|
||||
destination->memAlloc_fn = source->memAlloc_fn;
|
||||
destination->memAlloc_userdata = source->memAlloc_userdata;
|
||||
destination->master = source->master;
|
||||
destination->local_size = source->local_size;
|
||||
destination->remote_size = source->remote_size;
|
||||
|
@ -56,8 +56,7 @@ typedef struct ompi_convertor_t ompi_convertor_t;
|
||||
typedef int32_t (*convertor_advance_fct_t)( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov,
|
||||
uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
typedef void*(*memalloc_fct_t)( size_t* pLength, void* userdata );
|
||||
|
||||
/* The master convertor struct (defined in convertor_internal.h) */
|
||||
@ -89,8 +88,6 @@ struct ompi_convertor_t {
|
||||
dt_stack_t* pStack; /**< the local stack for the actual conversion */
|
||||
uint32_t stack_size; /**< size of the allocated stack */
|
||||
convertor_advance_fct_t fAdvance; /**< pointer to the pack/unpack functions */
|
||||
memalloc_fct_t memAlloc_fn; /**< pointer to the memory allocation function */
|
||||
void* memAlloc_userdata; /**< user data for the malloc function */
|
||||
struct ompi_convertor_master_t* master; /* the master convertor */
|
||||
/* All others fields get modified for every call to pack/unpack functions */
|
||||
uint32_t stack_pos; /**< the actual position on the stack */
|
||||
@ -124,8 +121,7 @@ OMPI_DECLSPEC int32_t
|
||||
ompi_convertor_pack( ompi_convertor_t* pConv,
|
||||
struct iovec* iov,
|
||||
uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
|
||||
/*
|
||||
*
|
||||
@ -134,8 +130,7 @@ OMPI_DECLSPEC int32_t
|
||||
ompi_convertor_unpack( ompi_convertor_t* pConv,
|
||||
struct iovec* iov,
|
||||
uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
|
||||
/*
|
||||
*
|
||||
@ -280,12 +275,9 @@ ompi_convertor_set_position( ompi_convertor_t* convertor,
|
||||
*/
|
||||
static inline int32_t
|
||||
ompi_convertor_personalize( ompi_convertor_t* convertor, uint32_t flags,
|
||||
size_t* position,
|
||||
memalloc_fct_t allocfn, void* userdata )
|
||||
size_t* position )
|
||||
{
|
||||
convertor->flags |= flags;
|
||||
convertor->memAlloc_fn = allocfn;
|
||||
convertor->memAlloc_userdata = userdata;
|
||||
|
||||
if( NULL == position )
|
||||
return OMPI_SUCCESS;
|
||||
|
@ -53,8 +53,7 @@ int32_t
|
||||
ompi_pack_homogeneous_contig_function( ompi_convertor_t* pConv,
|
||||
struct iovec* iov,
|
||||
uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
dt_stack_t* pStack = pConv->pStack;
|
||||
char *source_base = NULL;
|
||||
@ -62,7 +61,6 @@ ompi_pack_homogeneous_contig_function( ompi_convertor_t* pConv,
|
||||
size_t length = pConv->local_size - pConv->bConverted, initial_amount = pConv->bConverted;
|
||||
ptrdiff_t initial_displ = pConv->use_desc->desc[pConv->use_desc->used].end_loop.first_elem_disp;
|
||||
|
||||
*freeAfter = 0;
|
||||
source_base = (pConv->pBaseBuf + initial_displ + pStack[0].disp + pStack[1].disp);
|
||||
|
||||
/* There are some optimizations that can be done if the upper level
|
||||
@ -101,8 +99,7 @@ int32_t
|
||||
ompi_pack_homogeneous_contig_with_gaps_function( ompi_convertor_t* pConv,
|
||||
struct iovec* iov,
|
||||
uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
const ompi_datatype_t* pData = pConv->pDesc;
|
||||
dt_stack_t* pStack = pConv->pStack;
|
||||
@ -122,7 +119,6 @@ ompi_pack_homogeneous_contig_with_gaps_function( ompi_convertor_t* pConv,
|
||||
|
||||
i = (uint32_t)(pConv->bConverted / pData->size); /* how many we already pack */
|
||||
|
||||
*freeAfter = 0;
|
||||
/* There are some optimizations that can be done if the upper level
|
||||
* does not provide a buffer.
|
||||
*/
|
||||
@ -189,17 +185,6 @@ ompi_pack_homogeneous_contig_with_gaps_function( ompi_convertor_t* pConv,
|
||||
uint32_t counter;
|
||||
size_t done;
|
||||
|
||||
if( iov[iov_count].iov_base == NULL ) {
|
||||
size_t length = iov[iov_count].iov_len;
|
||||
if( 0 == length ) length = max_allowed;
|
||||
iov[iov_count].iov_base = (IOVBASE_TYPE*)pConv->memAlloc_fn( &length, pConv->memAlloc_userdata );
|
||||
iov[iov_count].iov_len = length;
|
||||
(*freeAfter) |= (1 << 0);
|
||||
if( max_allowed < (size_t)iov[iov_count].iov_len )
|
||||
iov[iov_count].iov_len = max_allowed;
|
||||
else
|
||||
max_allowed = iov[iov_count].iov_len;
|
||||
}
|
||||
packed_buffer = iov[iov_count].iov_base;
|
||||
done = pConv->bConverted - i * pData->size; /* how much data left last time */
|
||||
user_memory += done;
|
||||
@ -254,8 +239,7 @@ ompi_pack_homogeneous_contig_with_gaps_function( ompi_convertor_t* pConv,
|
||||
int32_t
|
||||
ompi_generic_simple_pack_function( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int32_t* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
dt_stack_t* pStack; /* pointer to the position on the stack */
|
||||
uint32_t pos_desc; /* actual position in the description of the derived datatype */
|
||||
@ -293,20 +277,6 @@ ompi_generic_simple_pack_function( ompi_convertor_t* pConvertor,
|
||||
pConvertor->stack_pos, pStack->index, pStack->count, pStack->disp ); );
|
||||
|
||||
for( iov_count = 0; iov_count < (*out_size); iov_count++ ) {
|
||||
if( iov[iov_count].iov_base == NULL ) {
|
||||
/*
|
||||
* ALLOCATE SOME MEMORY ...
|
||||
*/
|
||||
size_t length = iov[iov_count].iov_len;
|
||||
if( length <= 0 )
|
||||
length = pConvertor->local_size - pConvertor->bConverted;
|
||||
if( ((*max_data) - total_packed) < length )
|
||||
length = (*max_data) - total_packed;
|
||||
assert( 0 < length );
|
||||
iov[iov_count].iov_base = (IOVBASE_TYPE*)pConvertor->memAlloc_fn( &length, pConvertor->memAlloc_userdata );
|
||||
iov[iov_count].iov_len = length;
|
||||
*freeAfter = (*freeAfter) | (1 << iov_count);
|
||||
}
|
||||
destination = iov[iov_count].iov_base;
|
||||
iov_len_local = iov[iov_count].iov_len;
|
||||
while( 1 ) {
|
||||
|
@ -18,50 +18,50 @@
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_pack_homogeneous_contig( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_pack_homogeneous_contig_checksum( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_pack_homogeneous_contig_with_gaps( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_pack_homogeneous_contig_with_gaps_checksum( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_generic_simple_pack( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_generic_simple_pack_checksum( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_unpack_general( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_unpack_general_checksum( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_unpack_homogeneous_contig( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_unpack_homogeneous_contig_checksum( ompi_convertor_t* pConv,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_generic_simple_unpack( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
OMPI_DECLSPEC int32_t
|
||||
ompi_generic_simple_unpack_checksum( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data, int32_t* freeAfter );
|
||||
size_t* max_data );
|
||||
|
||||
#endif /* DATATYPE_PROTOTYPES_H_HAS_BEEN_INCLUDED */
|
||||
|
@ -58,8 +58,7 @@ int32_t
|
||||
ompi_unpack_general_function( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov,
|
||||
uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int32_t* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
dt_stack_t* pStack; /* pointer to the position on the stack */
|
||||
uint32_t pos_desc; /* actual position in the description of the derived datatype */
|
||||
@ -184,8 +183,7 @@ int32_t
|
||||
ompi_unpack_homogeneous_contig_function( ompi_convertor_t* pConv,
|
||||
struct iovec* iov,
|
||||
uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int32_t* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
const ompi_datatype_t *pData = pConv->pDesc;
|
||||
char *user_memory, *packed_buffer;
|
||||
@ -345,8 +343,7 @@ ompi_unpack_partial_datatype( ompi_convertor_t* pConvertor, dt_elem_desc_t* pEle
|
||||
int32_t
|
||||
ompi_generic_simple_unpack_function( ompi_convertor_t* pConvertor,
|
||||
struct iovec* iov, uint32_t* out_size,
|
||||
size_t* max_data,
|
||||
int32_t* freeAfter )
|
||||
size_t* max_data )
|
||||
{
|
||||
dt_stack_t* pStack; /* pointer to the position on the stack */
|
||||
uint32_t pos_desc; /* actual position in the description of the derived datatype */
|
||||
|
@ -46,7 +46,6 @@ int32_t ompi_ddt_sndrcv( void *sbuf, int32_t scount, const ompi_datatype_t* sdty
|
||||
int length, completed;
|
||||
uint32_t iov_count;
|
||||
size_t max_data;
|
||||
int32_t freeAfter;
|
||||
|
||||
/* First check if we really have something to do */
|
||||
if (0 == rcount) {
|
||||
@ -68,14 +67,14 @@ int32_t ompi_ddt_sndrcv( void *sbuf, int32_t scount, const ompi_datatype_t* sdty
|
||||
if (rdtype == MPI_PACKED) {
|
||||
send_convertor = OBJ_NEW(ompi_convertor_t);
|
||||
ompi_convertor_prepare_for_send( send_convertor, sdtype, scount, sbuf );
|
||||
ompi_convertor_personalize( send_convertor, 0, 0, NULL, NULL );
|
||||
ompi_convertor_personalize( send_convertor, 0, 0 );
|
||||
|
||||
iov_count = 1;
|
||||
iov.iov_len = rcount;
|
||||
iov.iov_base = (IOVBASE_TYPE*)rbuf;
|
||||
max_data = ( (size_t)iov.iov_len > (scount * sdtype->size) ? (scount * sdtype->size) : iov.iov_len );
|
||||
|
||||
err = ompi_convertor_pack( send_convertor, &iov, &iov_count, &max_data, &freeAfter );
|
||||
err = ompi_convertor_pack( send_convertor, &iov, &iov_count, &max_data );
|
||||
OBJ_RELEASE( send_convertor );
|
||||
return ((max_data < (uint32_t)rcount) ? MPI_ERR_TRUNCATE : MPI_SUCCESS);
|
||||
}
|
||||
@ -90,7 +89,7 @@ int32_t ompi_ddt_sndrcv( void *sbuf, int32_t scount, const ompi_datatype_t* sdty
|
||||
iov.iov_base = (IOVBASE_TYPE*)sbuf;
|
||||
max_data = ( (size_t)iov.iov_len < (rcount * rdtype->size) ? iov.iov_len : (rcount * rdtype->size) );
|
||||
|
||||
err = ompi_convertor_unpack( recv_convertor, &iov, &iov_count, &max_data, &freeAfter );
|
||||
err = ompi_convertor_unpack( recv_convertor, &iov, &iov_count, &max_data );
|
||||
if( scount > (int32_t)(rcount * rdtype->size) )
|
||||
err = MPI_ERR_TRUNCATE;
|
||||
OBJ_RELEASE( recv_convertor );
|
||||
@ -110,8 +109,8 @@ int32_t ompi_ddt_sndrcv( void *sbuf, int32_t scount, const ompi_datatype_t* sdty
|
||||
iov.iov_len = length;
|
||||
iov_count = 1;
|
||||
max_data = length;
|
||||
completed |= ompi_convertor_pack( send_convertor, &iov, &iov_count, &max_data, &freeAfter );
|
||||
completed |= ompi_convertor_unpack( recv_convertor, &iov, &iov_count, &max_data, &freeAfter );
|
||||
completed |= ompi_convertor_pack( send_convertor, &iov, &iov_count, &max_data );
|
||||
completed |= ompi_convertor_unpack( recv_convertor, &iov, &iov_count, &max_data );
|
||||
}
|
||||
free( iov.iov_base );
|
||||
OBJ_RELEASE( send_convertor );
|
||||
|
@ -271,7 +271,6 @@ mca_btl_base_descriptor_t* mca_btl_gm_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
#if (OMPI_MCA_BTL_GM_HAVE_RDMA_GET || OMPI_MCA_BTL_GM_HAVE_RDMA_PUT)
|
||||
@ -293,7 +292,7 @@ mca_btl_base_descriptor_t* mca_btl_gm_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
frag->segment.seg_len = max_data;
|
||||
frag->segment.seg_addr.pval = iov.iov_base;
|
||||
@ -330,7 +329,7 @@ mca_btl_base_descriptor_t* mca_btl_gm_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
frag->segment.seg_len = max_data;
|
||||
frag->segment.seg_addr.pval = iov.iov_base;
|
||||
@ -363,7 +362,7 @@ mca_btl_base_descriptor_t* mca_btl_gm_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*) frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
if( rc < 0 ) {
|
||||
MCA_BTL_GM_FRAG_RETURN(btl, frag);
|
||||
@ -389,7 +388,7 @@ mca_btl_base_descriptor_t* mca_btl_gm_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*) frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
|
||||
if( rc < 0 ) {
|
||||
|
@ -272,7 +272,6 @@ mca_btl_base_descriptor_t* mca_btl_mvapi_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
|
||||
@ -290,7 +289,7 @@ mca_btl_base_descriptor_t* mca_btl_mvapi_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
|
||||
frag->segment.seg_len = max_data;
|
||||
@ -333,7 +332,7 @@ mca_btl_base_descriptor_t* mca_btl_mvapi_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
|
||||
frag->segment.seg_len = max_data;
|
||||
@ -378,7 +377,7 @@ mca_btl_base_descriptor_t* mca_btl_mvapi_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*)frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
if( rc < 0 ) {
|
||||
MCA_BTL_IB_FRAG_RETURN(btl, frag);
|
||||
@ -407,7 +406,7 @@ mca_btl_base_descriptor_t* mca_btl_mvapi_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*)frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
|
||||
if( rc < 0 ) {
|
||||
|
@ -253,7 +253,6 @@ mca_btl_base_descriptor_t* mca_btl_mx_prepare_src( struct mca_btl_base_module_t*
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
|
||||
@ -291,7 +290,7 @@ mca_btl_base_descriptor_t* mca_btl_mx_prepare_src( struct mca_btl_base_module_t*
|
||||
frag->base.des_src_cnt = 1;
|
||||
}
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
if( rc < 0 ) {
|
||||
MCA_BTL_MX_FRAG_RETURN( mx_btl, frag );
|
||||
|
@ -341,7 +341,6 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
openib_btl = (mca_btl_openib_module_t*) btl;
|
||||
@ -361,7 +360,7 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
frag->segment.seg_len = max_data;
|
||||
frag->segment.seg_addr.pval = iov.iov_base;
|
||||
@ -399,7 +398,7 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
frag->segment.seg_len = max_data;
|
||||
frag->segment.seg_addr.pval = iov.iov_base;
|
||||
@ -447,7 +446,7 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*)frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
if( rc < 0 ) {
|
||||
MCA_BTL_IB_FRAG_RETURN(openib_btl, frag);
|
||||
@ -476,7 +475,7 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*)frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
|
||||
if( rc < 0 ) {
|
||||
|
@ -304,7 +304,6 @@ mca_btl_portals_prepare_src(struct mca_btl_base_module_t* btl_base,
|
||||
size_t max_data = *size;
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
int ret;
|
||||
|
||||
assert(&mca_btl_portals_module == (mca_btl_portals_module_t*) btl_base);
|
||||
@ -323,7 +322,7 @@ mca_btl_portals_prepare_src(struct mca_btl_base_module_t* btl_base,
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*) frag->segments[0].seg_addr.pval + reserve;
|
||||
ret = ompi_convertor_pack(convertor, &iov, &iov_count,
|
||||
&max_data, &free_after);
|
||||
&max_data );
|
||||
*size = max_data;
|
||||
if ( ret < 0 ) {
|
||||
return NULL;
|
||||
@ -352,8 +351,7 @@ mca_btl_portals_prepare_src(struct mca_btl_base_module_t* btl_base,
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data,
|
||||
&free_after);
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
frag->segments[0].seg_len = max_data;
|
||||
frag->segments[0].seg_addr.pval = iov.iov_base;
|
||||
|
@ -64,35 +64,35 @@ mca_btl_base_module_t mca_btl_self = {
|
||||
mca_btl_self_prepare_dst,
|
||||
mca_btl_self_send,
|
||||
mca_btl_self_rdma, /* put */
|
||||
mca_btl_self_rdma,
|
||||
mca_btl_self_rdma, /* get */
|
||||
mca_btl_base_dump,
|
||||
NULL, /* mpool */
|
||||
NULL /* register error cb */
|
||||
};
|
||||
|
||||
|
||||
int mca_btl_self_add_procs(
|
||||
struct mca_btl_base_module_t* btl,
|
||||
size_t nprocs,
|
||||
struct ompi_proc_t **procs,
|
||||
struct mca_btl_base_endpoint_t **peers,
|
||||
ompi_bitmap_t* reachability)
|
||||
int mca_btl_self_add_procs( struct mca_btl_base_module_t* btl,
|
||||
size_t nprocs,
|
||||
struct ompi_proc_t **procs,
|
||||
struct mca_btl_base_endpoint_t **peers,
|
||||
ompi_bitmap_t* reachability )
|
||||
{
|
||||
size_t i;
|
||||
for(i=0; i<nprocs; i++) {
|
||||
if(procs[i] == ompi_proc_local_proc) {
|
||||
ompi_bitmap_set_bit(reachability, i);
|
||||
|
||||
for( i = 0; i < nprocs; i++ ) {
|
||||
if( procs[i] == ompi_proc_local_proc ) {
|
||||
ompi_bitmap_set_bit( reachability, i );
|
||||
break; /* there will always be only one ... */
|
||||
}
|
||||
}
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int mca_btl_self_del_procs(
|
||||
struct mca_btl_base_module_t* btl,
|
||||
size_t nprocs,
|
||||
struct ompi_proc_t **procs,
|
||||
struct mca_btl_base_endpoint_t **peers)
|
||||
int mca_btl_self_del_procs( struct mca_btl_base_module_t* btl,
|
||||
size_t nprocs,
|
||||
struct ompi_proc_t **procs,
|
||||
struct mca_btl_base_endpoint_t **peers )
|
||||
{
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
@ -129,11 +129,10 @@ int mca_btl_self_finalize(struct mca_btl_base_module_t* btl)
|
||||
* resources associated with the peer.
|
||||
*/
|
||||
|
||||
int mca_btl_self_register(
|
||||
struct mca_btl_base_module_t* btl,
|
||||
mca_btl_base_tag_t tag,
|
||||
mca_btl_base_module_recv_cb_fn_t cbfunc,
|
||||
void* cbdata)
|
||||
int mca_btl_self_register( struct mca_btl_base_module_t* btl,
|
||||
mca_btl_base_tag_t tag,
|
||||
mca_btl_base_module_recv_cb_fn_t cbfunc,
|
||||
void* cbdata )
|
||||
{
|
||||
mca_btl_self_component.self_reg[tag].cbfunc = cbfunc;
|
||||
mca_btl_self_component.self_reg[tag].cbdata = cbdata;
|
||||
@ -147,9 +146,8 @@ int mca_btl_self_register(
|
||||
* @param btl (IN) BTL module
|
||||
* @param size (IN) Request segment size.
|
||||
*/
|
||||
extern mca_btl_base_descriptor_t* mca_btl_self_alloc(
|
||||
struct mca_btl_base_module_t* btl,
|
||||
size_t size)
|
||||
mca_btl_base_descriptor_t* mca_btl_self_alloc( struct mca_btl_base_module_t* btl,
|
||||
size_t size )
|
||||
{
|
||||
mca_btl_self_frag_t* frag;
|
||||
int rc;
|
||||
@ -163,7 +161,9 @@ extern mca_btl_base_descriptor_t* mca_btl_self_alloc(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
frag->base.des_flags = 0;
|
||||
frag->base.des_flags = 0;
|
||||
frag->base.des_src = &(frag->segment);
|
||||
frag->base.des_src_cnt = 1;
|
||||
return (mca_btl_base_descriptor_t*)frag;
|
||||
}
|
||||
|
||||
@ -173,11 +173,16 @@ extern mca_btl_base_descriptor_t* mca_btl_self_alloc(
|
||||
* @param btl (IN) BTL module
|
||||
* @param segment (IN) Allocated segment.
|
||||
*/
|
||||
extern int mca_btl_self_free(
|
||||
struct mca_btl_base_module_t* btl,
|
||||
mca_btl_base_descriptor_t* des)
|
||||
int mca_btl_self_free( struct mca_btl_base_module_t* btl,
|
||||
mca_btl_base_descriptor_t* des )
|
||||
{
|
||||
mca_btl_self_frag_t* frag = (mca_btl_self_frag_t*)des;
|
||||
|
||||
frag->base.des_src = NULL;
|
||||
frag->base.des_src_cnt = 0;
|
||||
frag->base.des_dst = NULL;
|
||||
frag->base.des_dst_cnt = 0;
|
||||
|
||||
if(frag->size == mca_btl_self.btl_eager_limit) {
|
||||
MCA_BTL_SELF_FRAG_RETURN_EAGER(frag);
|
||||
} else if (frag->size == mca_btl_self.btl_max_send_size) {
|
||||
@ -206,11 +211,13 @@ struct mca_btl_base_descriptor_t* mca_btl_self_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
/* non-contigous data */
|
||||
if(ompi_convertor_need_buffers(convertor) || max_data < mca_btl_self.btl_max_send_size || reserve != 0) {
|
||||
if( ompi_convertor_need_buffers(convertor) ||
|
||||
max_data < mca_btl_self.btl_max_send_size ||
|
||||
reserve != 0 ) {
|
||||
|
||||
MCA_BTL_SELF_FRAG_ALLOC_SEND(frag, rc);
|
||||
if(NULL == frag) {
|
||||
return NULL;
|
||||
@ -222,7 +229,7 @@ struct mca_btl_base_descriptor_t* mca_btl_self_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (IOVBASE_TYPE*)((unsigned char*)(frag+1) + reserve);
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
if(rc < 0) {
|
||||
MCA_BTL_SELF_FRAG_RETURN_SEND(frag);
|
||||
return NULL;
|
||||
@ -240,20 +247,19 @@ struct mca_btl_base_descriptor_t* mca_btl_self_prepare_src(
|
||||
iov.iov_base = NULL;
|
||||
|
||||
/* convertor should return offset into users buffer */
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
if(rc < 0) {
|
||||
MCA_BTL_SELF_FRAG_RETURN_RDMA(frag);
|
||||
return NULL;
|
||||
}
|
||||
frag->segment.seg_addr.pval = iov.iov_base;
|
||||
frag->segment.seg_len = max_data;
|
||||
frag->base.des_src = &frag->segment;
|
||||
frag->base.des_src_cnt = 1;
|
||||
frag->base.des_dst = NULL;
|
||||
frag->base.des_dst_cnt = 0;
|
||||
frag->base.des_flags = 0;
|
||||
*size = max_data;
|
||||
}
|
||||
frag->base.des_src = &frag->segment;
|
||||
frag->base.des_src_cnt = 1;
|
||||
frag->segment.seg_key.key64 = (uint64_t)(intptr_t)convertor;
|
||||
return &frag->base;
|
||||
}
|
||||
|
||||
@ -282,15 +288,12 @@ struct mca_btl_base_descriptor_t* mca_btl_self_prepare_dst(
|
||||
ompi_ddt_type_lb( convertor->pDesc, &lb );
|
||||
frag->segment.seg_addr.pval = (unsigned char*)convertor->pBaseBuf + lb + convertor->bConverted;
|
||||
frag->segment.seg_len = reserve + max_data;
|
||||
frag->base.des_src = NULL;
|
||||
frag->base.des_src_cnt = 0;
|
||||
frag->segment.seg_key.key64 = (uint64_t)(intptr_t)convertor;
|
||||
frag->base.des_dst = &frag->segment;
|
||||
frag->base.des_dst_cnt = 1;
|
||||
frag->base.des_flags = 0;
|
||||
return &frag->base;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Initiate a send to the peer.
|
||||
@ -299,11 +302,10 @@ struct mca_btl_base_descriptor_t* mca_btl_self_prepare_dst(
|
||||
* @param peer (IN) BTL peer addressing
|
||||
*/
|
||||
|
||||
int mca_btl_self_send(
|
||||
struct mca_btl_base_module_t* btl,
|
||||
struct mca_btl_base_endpoint_t* endpoint,
|
||||
struct mca_btl_base_descriptor_t* des,
|
||||
mca_btl_base_tag_t tag)
|
||||
int mca_btl_self_send( struct mca_btl_base_module_t* btl,
|
||||
struct mca_btl_base_endpoint_t* endpoint,
|
||||
struct mca_btl_base_descriptor_t* des,
|
||||
mca_btl_base_tag_t tag )
|
||||
{
|
||||
/**
|
||||
* We have to set the dst before the call to the function and reset them
|
||||
@ -327,10 +329,9 @@ int mca_btl_self_send(
|
||||
* @param peer (IN) BTL peer addressing
|
||||
*/
|
||||
|
||||
extern int mca_btl_self_rdma(
|
||||
struct mca_btl_base_module_t* btl,
|
||||
struct mca_btl_base_endpoint_t* endpoint,
|
||||
struct mca_btl_base_descriptor_t* des)
|
||||
int mca_btl_self_rdma( struct mca_btl_base_module_t* btl,
|
||||
struct mca_btl_base_endpoint_t* endpoint,
|
||||
struct mca_btl_base_descriptor_t* des )
|
||||
{
|
||||
mca_btl_base_segment_t* src = des->des_src;
|
||||
mca_btl_base_segment_t* dst = des->des_dst;
|
||||
@ -398,5 +399,3 @@ extern int mca_btl_self_rdma(
|
||||
des->des_cbfunc(btl,endpoint,des,OMPI_SUCCESS);
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
@ -827,7 +827,6 @@ struct mca_btl_base_descriptor_t* mca_btl_sm_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
MCA_BTL_SM_FRAG_ALLOC2(frag, rc);
|
||||
@ -841,7 +840,7 @@ struct mca_btl_base_descriptor_t* mca_btl_sm_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (IOVBASE_TYPE*)(((unsigned char*)(frag+1)) + reserve);
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
if(rc < 0) {
|
||||
MCA_BTL_SM_FRAG_RETURN(frag);
|
||||
return NULL;
|
||||
|
@ -240,7 +240,6 @@ mca_btl_base_descriptor_t* mca_btl_tcp_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
/*
|
||||
@ -277,7 +276,7 @@ mca_btl_base_descriptor_t* mca_btl_tcp_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (IOVBASE_TYPE*)(((unsigned char*)(frag+1)) + reserve);
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
if( rc < 0 ) {
|
||||
mca_btl_tcp_free(btl, &frag->base);
|
||||
return NULL;
|
||||
@ -292,7 +291,7 @@ mca_btl_base_descriptor_t* mca_btl_tcp_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = NULL;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
if( rc < 0 ) {
|
||||
mca_btl_tcp_free(btl, &frag->base);
|
||||
return NULL;
|
||||
|
@ -222,7 +222,6 @@ mca_btl_base_descriptor_t* mca_btl_template_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
|
||||
@ -240,7 +239,7 @@ mca_btl_base_descriptor_t* mca_btl_template_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*) frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
if( rc < 0 ) {
|
||||
MCA_BTL_TEMPLATE_FRAG_RETURN_EAGER(btl, frag);
|
||||
@ -265,7 +264,7 @@ mca_btl_base_descriptor_t* mca_btl_template_prepare_src(
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (unsigned char*) frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
rc = ompi_convertor_pack(convertor, &iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
|
||||
if( rc < 0 ) {
|
||||
|
@ -410,7 +410,6 @@ mca_btl_base_descriptor_t* mca_btl_udapl_prepare_src(
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
size_t max_data = *size;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
#if 0
|
||||
@ -431,7 +430,7 @@ mca_btl_base_descriptor_t* mca_btl_udapl_prepare_src(
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov,
|
||||
&iov_count, &max_data, &free_after);
|
||||
&iov_count, &max_data );
|
||||
|
||||
frag->segment.seg_len = max_data;
|
||||
frag->segment.seg_addr.pval = iov.iov_base;
|
||||
@ -470,7 +469,7 @@ mca_btl_base_descriptor_t* mca_btl_udapl_prepare_src(
|
||||
iov.iov_base = NULL;
|
||||
|
||||
ompi_convertor_pack(convertor, &iov,
|
||||
&iov_count, &max_data, &free_after);
|
||||
&iov_count, &max_data );
|
||||
|
||||
|
||||
rc = mpool->mpool_register(
|
||||
@ -511,7 +510,7 @@ mca_btl_base_descriptor_t* mca_btl_udapl_prepare_src(
|
||||
iov.iov_base = (char *) frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor,
|
||||
&iov, &iov_count, &max_data, &free_after);
|
||||
&iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
if(rc < 0) {
|
||||
MCA_BTL_UDAPL_FRAG_RETURN_EAGER(btl, frag);
|
||||
@ -537,7 +536,7 @@ mca_btl_base_descriptor_t* mca_btl_udapl_prepare_src(
|
||||
iov.iov_base = (char *) frag->segment.seg_addr.pval + reserve;
|
||||
|
||||
rc = ompi_convertor_pack(convertor,
|
||||
&iov, &iov_count, &max_data, &free_after);
|
||||
&iov, &iov_count, &max_data );
|
||||
*size = max_data;
|
||||
|
||||
if(rc < 0) {
|
||||
|
@ -439,7 +439,6 @@ extern "C" {
|
||||
* these are thread safe)
|
||||
*/
|
||||
extern uint32_t mca_coll_sm_iov_size;
|
||||
extern int32_t mca_coll_sm_bogus_free_after;
|
||||
|
||||
|
||||
/**
|
||||
@ -487,7 +486,7 @@ extern int32_t mca_coll_sm_bogus_free_after;
|
||||
((rank) * mca_coll_sm_component.sm_fragment_size); \
|
||||
(max_data) = (iov).iov_len = mca_coll_sm_component.sm_fragment_size; \
|
||||
ompi_convertor_pack(&(convertor), &(iov), &mca_coll_sm_iov_size, \
|
||||
&(max_data), &mca_coll_sm_bogus_free_after)
|
||||
&(max_data) )
|
||||
|
||||
/**
|
||||
* Macro to copy a single segment out from a shared segment to a user
|
||||
@ -497,7 +496,7 @@ extern int32_t mca_coll_sm_bogus_free_after;
|
||||
(iov).iov_base = (((char*) (index)->mcbmi_data) + \
|
||||
((src_rank) * mca_coll_sm_component.sm_fragment_size)); \
|
||||
ompi_convertor_unpack(&(convertor), &(iov), &mca_coll_sm_iov_size, \
|
||||
&(max_data), &mca_coll_sm_bogus_free_after)
|
||||
&(max_data) )
|
||||
|
||||
/**
|
||||
* Macro to memcpy a fragment between one shared segment and another
|
||||
|
@ -57,7 +57,6 @@
|
||||
* Global variables
|
||||
*/
|
||||
uint32_t mca_coll_sm_iov_size = 1;
|
||||
int32_t mca_coll_sm_bogus_free_after = 0;
|
||||
|
||||
|
||||
/*
|
||||
|
@ -32,7 +32,6 @@ ompi_mtl_datatype_pack(struct ompi_convertor_t *convertor,
|
||||
{
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
size_t max_data;
|
||||
|
||||
ompi_convertor_get_packed_size(convertor, &max_data);
|
||||
@ -48,8 +47,7 @@ ompi_mtl_datatype_pack(struct ompi_convertor_t *convertor,
|
||||
*freeAfter = false;
|
||||
}
|
||||
|
||||
ompi_convertor_pack(convertor, &iov, &iov_count, &max_data,
|
||||
&free_after);
|
||||
ompi_convertor_pack( convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
*buffer = iov.iov_base;
|
||||
*buffer_len = iov.iov_len;
|
||||
@ -91,7 +89,6 @@ ompi_mtl_datatype_unpack(struct ompi_convertor_t *convertor,
|
||||
{
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
size_t max_data;
|
||||
|
||||
iov.iov_len = buffer_len;
|
||||
@ -100,8 +97,7 @@ ompi_mtl_datatype_unpack(struct ompi_convertor_t *convertor,
|
||||
|
||||
|
||||
if (max_data > 0 && ompi_convertor_need_buffers(convertor)) {
|
||||
ompi_convertor_unpack(convertor, &iov, &iov_count,
|
||||
&max_data, &free_after);
|
||||
ompi_convertor_unpack(convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
free(buffer);
|
||||
}
|
||||
|
@ -50,8 +50,7 @@ ompi_mtl_mx_send(struct mca_mtl_base_module_t* mtl,
|
||||
|
||||
ret = ompi_mtl_datatype_pack(convertor,
|
||||
&mtl_mx_request.mx_segment[0].segment_ptr,
|
||||
&length,
|
||||
&mtl_mx_request.free_after);
|
||||
&length);
|
||||
|
||||
|
||||
mtl_mx_request.mx_segment[0].segment_length = length;
|
||||
@ -147,8 +146,7 @@ ompi_mtl_mx_isend(struct mca_mtl_base_module_t* mtl,
|
||||
|
||||
ret = ompi_mtl_datatype_pack(convertor,
|
||||
&mtl_mx_request->mx_segment[0].segment_ptr,
|
||||
&length,
|
||||
&mtl_mx_request->free_after);
|
||||
&length);
|
||||
mtl_mx_request->mx_segment[0].segment_length = length;
|
||||
mtl_mx_request->convertor = convertor;
|
||||
mtl_mx_request->type = OMPI_MTL_MX_ISEND;
|
||||
|
@ -103,7 +103,6 @@ ompi_mtl_portals_get_data(ompi_mtl_portals_event_t *recv_event,
|
||||
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
size_t max_data;
|
||||
|
||||
ompi_mtl_portals_recv_short_block_t *block =
|
||||
@ -123,7 +122,7 @@ ompi_mtl_portals_get_data(ompi_mtl_portals_event_t *recv_event,
|
||||
/* pull out the data */
|
||||
if (iov.iov_len > 0) {
|
||||
ompi_convertor_unpack(convertor, &iov, &iov_count,
|
||||
&max_data, &free_after);
|
||||
&max_data );
|
||||
}
|
||||
|
||||
/* if synchronous, return an ack */
|
||||
|
@ -228,14 +228,13 @@ ompi_osc_pt2pt_sendreq_send(ompi_osc_pt2pt_module_t *module,
|
||||
written_data + sendreq->req_origin_bytes_packed) {
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
size_t max_data = sendreq->req_origin_bytes_packed;
|
||||
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (IOVBASE_TYPE*)((unsigned char*) buffer->payload + written_data);
|
||||
|
||||
ret = ompi_convertor_pack(&sendreq->req_origin_convertor, &iov, &iov_count,
|
||||
&max_data, &free_after);
|
||||
&max_data );
|
||||
if (ret < 0) {
|
||||
ret = OMPI_ERR_FATAL;
|
||||
goto cleanup;
|
||||
@ -404,14 +403,13 @@ ompi_osc_pt2pt_replyreq_send(ompi_osc_pt2pt_module_t *module,
|
||||
written_data + replyreq->rep_target_bytes_packed) {
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
size_t max_data = replyreq->rep_target_bytes_packed;
|
||||
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (IOVBASE_TYPE*)((unsigned char*) buffer->payload + written_data);
|
||||
|
||||
ret = ompi_convertor_pack(&replyreq->rep_target_convertor, &iov, &iov_count,
|
||||
&max_data, &free_after);
|
||||
&max_data );
|
||||
if (ret < 0) {
|
||||
ret = OMPI_ERR_FATAL;
|
||||
goto cleanup;
|
||||
@ -496,7 +494,6 @@ ompi_osc_pt2pt_sendreq_recv_put(ompi_osc_pt2pt_module_t *module,
|
||||
ompi_convertor_t convertor;
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after = 0;
|
||||
size_t max_data;
|
||||
ompi_proc_t *proc;
|
||||
|
||||
@ -517,8 +514,7 @@ ompi_osc_pt2pt_sendreq_recv_put(ompi_osc_pt2pt_module_t *module,
|
||||
ompi_convertor_unpack(&convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after);
|
||||
&max_data );
|
||||
OBJ_DESTRUCT(&convertor);
|
||||
OBJ_RELEASE(datatype);
|
||||
OPAL_THREAD_ADD32(&(module->p2p_num_pending_in), -1);
|
||||
@ -720,7 +716,6 @@ ompi_osc_pt2pt_replyreq_recv(ompi_osc_pt2pt_module_t *module,
|
||||
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after = 0;
|
||||
size_t max_data;
|
||||
|
||||
iov.iov_len = header->hdr_msg_length;
|
||||
@ -729,8 +724,7 @@ ompi_osc_pt2pt_replyreq_recv(ompi_osc_pt2pt_module_t *module,
|
||||
ompi_convertor_unpack(&sendreq->req_origin_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after);
|
||||
&max_data );
|
||||
|
||||
OPAL_THREAD_ADD32(&(sendreq->req_module->p2p_num_pending_out), -1);
|
||||
ompi_osc_pt2pt_sendreq_free(sendreq);
|
||||
|
@ -48,7 +48,6 @@ ompi_osc_pt2pt_process_op(ompi_osc_pt2pt_module_t *module,
|
||||
ompi_convertor_t convertor;
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after = 0;
|
||||
size_t max_data;
|
||||
ompi_proc_t *proc;
|
||||
|
||||
@ -76,8 +75,7 @@ ompi_osc_pt2pt_process_op(ompi_osc_pt2pt_module_t *module,
|
||||
ompi_convertor_unpack(&convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after);
|
||||
&max_data);
|
||||
OBJ_DESTRUCT(&convertor);
|
||||
} else {
|
||||
/* reductions other than MPI_REPLACE. Since user-defined
|
||||
|
@ -244,14 +244,13 @@ ompi_osc_rdma_sendreq_send(ompi_osc_rdma_module_t *module,
|
||||
written_data + sendreq->req_origin_bytes_packed) {
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
size_t max_data = sendreq->req_origin_bytes_packed;
|
||||
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (IOVBASE_TYPE*)((unsigned char*) descriptor->des_src[0].seg_addr.pval + written_data);
|
||||
|
||||
ret = ompi_convertor_pack(&sendreq->req_origin_convertor, &iov, &iov_count,
|
||||
&max_data, &free_after);
|
||||
&max_data );
|
||||
if (ret < 0) {
|
||||
ret = OMPI_ERR_FATAL;
|
||||
goto cleanup;
|
||||
@ -424,14 +423,13 @@ ompi_osc_rdma_replyreq_send(ompi_osc_rdma_module_t *module,
|
||||
written_data + replyreq->rep_target_bytes_packed) {
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after;
|
||||
size_t max_data = replyreq->rep_target_bytes_packed;
|
||||
|
||||
iov.iov_len = max_data;
|
||||
iov.iov_base = (IOVBASE_TYPE*)((unsigned char*) descriptor->des_src[0].seg_addr.pval + written_data);
|
||||
|
||||
ret = ompi_convertor_pack(&replyreq->rep_target_convertor, &iov, &iov_count,
|
||||
&max_data, &free_after);
|
||||
&max_data );
|
||||
if (ret < 0) {
|
||||
ret = OMPI_ERR_FATAL;
|
||||
goto cleanup;
|
||||
@ -504,7 +502,6 @@ ompi_osc_rdma_sendreq_recv_put(ompi_osc_rdma_module_t *module,
|
||||
ompi_convertor_t convertor;
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after = 0;
|
||||
size_t max_data;
|
||||
ompi_proc_t *proc;
|
||||
|
||||
@ -525,8 +522,7 @@ ompi_osc_rdma_sendreq_recv_put(ompi_osc_rdma_module_t *module,
|
||||
ompi_convertor_unpack(&convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after);
|
||||
&max_data );
|
||||
OBJ_DESTRUCT(&convertor);
|
||||
OBJ_RELEASE(datatype);
|
||||
OPAL_THREAD_ADD32(&(module->p2p_num_pending_in), -1);
|
||||
@ -728,7 +724,6 @@ ompi_osc_rdma_replyreq_recv(ompi_osc_rdma_module_t *module,
|
||||
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after = 0;
|
||||
size_t max_data;
|
||||
|
||||
iov.iov_len = header->hdr_msg_length;
|
||||
@ -737,8 +732,7 @@ ompi_osc_rdma_replyreq_recv(ompi_osc_rdma_module_t *module,
|
||||
ompi_convertor_unpack(&sendreq->req_origin_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after);
|
||||
&max_data );
|
||||
|
||||
OPAL_THREAD_ADD32(&(sendreq->req_module->p2p_num_pending_out), -1);
|
||||
ompi_osc_rdma_sendreq_free(sendreq);
|
||||
|
@ -48,7 +48,6 @@ ompi_osc_rdma_process_op(ompi_osc_rdma_module_t *module,
|
||||
ompi_convertor_t convertor;
|
||||
struct iovec iov;
|
||||
uint32_t iov_count = 1;
|
||||
int32_t free_after = 0;
|
||||
size_t max_data;
|
||||
ompi_proc_t *proc;
|
||||
|
||||
@ -76,8 +75,7 @@ ompi_osc_rdma_process_op(ompi_osc_rdma_module_t *module,
|
||||
ompi_convertor_unpack(&convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after);
|
||||
&max_data);
|
||||
OBJ_DESTRUCT(&convertor);
|
||||
} else {
|
||||
/* reductions other than MPI_REPLACE. Since user-defined
|
||||
|
@ -199,7 +199,7 @@ int mca_pml_base_bsend_request_start(ompi_request_t* request)
|
||||
struct iovec iov;
|
||||
unsigned int iov_count;
|
||||
size_t max_data;
|
||||
int rc, freeAfter;
|
||||
int rc;
|
||||
|
||||
if(sendreq->req_bytes_packed > 0) {
|
||||
|
||||
@ -233,7 +233,7 @@ int mca_pml_base_bsend_request_start(ompi_request_t* request)
|
||||
if((rc = ompi_convertor_pack( &sendreq->req_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data, &freeAfter )) < 0) {
|
||||
&max_data )) < 0) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
|
||||
|
@ -227,7 +227,6 @@ do { \
|
||||
struct iovec iov; \
|
||||
unsigned int iov_count; \
|
||||
size_t max_data; \
|
||||
int freeAfter; \
|
||||
\
|
||||
if(sendreq->req_count > 0) { \
|
||||
sendreq->req_buff = \
|
||||
@ -241,7 +240,7 @@ do { \
|
||||
ompi_convertor_pack( &sendreq->req_send.req_base.req_convertor, \
|
||||
&iov, \
|
||||
&iov_count, \
|
||||
&max_data, &freeAfter); \
|
||||
&max_data ); \
|
||||
ompi_convertor_prepare_for_send( &sendreq->req_send.req_base.req_convertor, MPI_PACKED, \
|
||||
max_data, sendreq->req_buff ); \
|
||||
} \
|
||||
|
@ -276,7 +276,6 @@ do {
|
||||
struct iovec iov[MCA_BTL_DES_MAX_SEGMENTS]; \
|
||||
uint32_t iov_count = 0; \
|
||||
size_t max_data = bytes_received; \
|
||||
int32_t free_after = 0; \
|
||||
size_t n, offset = seg_offset; \
|
||||
bool do_csum = mca_pml_dr.enable_csum && \
|
||||
(request->req_endpoint->bml_endpoint->btl_flags_or & MCA_BTL_FLAGS_NEED_CSUM); \
|
||||
@ -300,8 +299,7 @@ do {
|
||||
&(request)->req_recv.req_convertor, \
|
||||
iov, \
|
||||
&iov_count, \
|
||||
&max_data, \
|
||||
&free_after); \
|
||||
&max_data); \
|
||||
bytes_delivered = max_data; \
|
||||
if(bytes_received && !bytes_delivered) assert(0); \
|
||||
csum = (do_csum ? \
|
||||
|
@ -375,7 +375,6 @@ int mca_pml_dr_send_request_start_buffered(
|
||||
struct iovec iov;
|
||||
unsigned int iov_count;
|
||||
size_t max_data;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
uint32_t csum;
|
||||
bool do_csum = mca_pml_dr.enable_csum &&
|
||||
@ -399,8 +398,7 @@ int mca_pml_dr_send_request_start_buffered(
|
||||
&sendreq->req_send.req_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after)) < 0) {
|
||||
&max_data)) < 0) {
|
||||
mca_bml_base_free(bml_btl, descriptor);
|
||||
return rc;
|
||||
}
|
||||
@ -432,8 +430,7 @@ int mca_pml_dr_send_request_start_buffered(
|
||||
&sendreq->req_send.req_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after)) < 0) {
|
||||
&max_data)) < 0) {
|
||||
mca_bml_base_free(bml_btl, descriptor);
|
||||
return rc;
|
||||
}
|
||||
@ -493,7 +490,6 @@ int mca_pml_dr_send_request_start_copy(
|
||||
struct iovec iov;
|
||||
unsigned int iov_count;
|
||||
size_t max_data;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
bool do_csum = mca_pml_dr.enable_csum &&
|
||||
(bml_btl->btl_flags & MCA_BTL_FLAGS_NEED_CSUM);
|
||||
@ -516,8 +512,7 @@ int mca_pml_dr_send_request_start_copy(
|
||||
&sendreq->req_send.req_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after)) < 0) {
|
||||
&max_data)) < 0) {
|
||||
mca_bml_base_free(bml_btl, descriptor);
|
||||
return rc;
|
||||
}
|
||||
|
@ -284,7 +284,6 @@ do {
|
||||
struct iovec iov[MCA_BTL_DES_MAX_SEGMENTS]; \
|
||||
uint32_t iov_count = 0; \
|
||||
size_t max_data = bytes_received; \
|
||||
int32_t free_after = 0; \
|
||||
size_t n, offset = seg_offset; \
|
||||
mca_btl_base_segment_t* segment = segments; \
|
||||
\
|
||||
@ -305,8 +304,7 @@ do {
|
||||
ompi_convertor_unpack( &(request)->req_recv.req_convertor, \
|
||||
iov, \
|
||||
&iov_count, \
|
||||
&max_data, \
|
||||
&free_after); \
|
||||
&max_data ); \
|
||||
bytes_delivered = max_data; \
|
||||
} \
|
||||
} while (0)
|
||||
|
@ -360,7 +360,6 @@ int mca_pml_ob1_send_request_start_buffered(
|
||||
struct iovec iov;
|
||||
unsigned int iov_count;
|
||||
size_t max_data;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
/* allocate descriptor */
|
||||
@ -380,8 +379,7 @@ int mca_pml_ob1_send_request_start_buffered(
|
||||
&sendreq->req_send.req_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after)) < 0) {
|
||||
&max_data)) < 0) {
|
||||
mca_bml_base_free(bml_btl, descriptor);
|
||||
return rc;
|
||||
}
|
||||
@ -432,8 +430,7 @@ int mca_pml_ob1_send_request_start_buffered(
|
||||
if((rc = ompi_convertor_pack( &sendreq->req_send.req_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after)) < 0) {
|
||||
&max_data)) < 0) {
|
||||
mca_bml_base_free(bml_btl, descriptor);
|
||||
return rc;
|
||||
}
|
||||
@ -474,7 +471,6 @@ int mca_pml_ob1_send_request_start_copy(
|
||||
struct iovec iov;
|
||||
unsigned int iov_count;
|
||||
size_t max_data;
|
||||
int32_t free_after;
|
||||
int rc;
|
||||
|
||||
/* allocate descriptor */
|
||||
@ -499,8 +495,7 @@ int mca_pml_ob1_send_request_start_copy(
|
||||
&sendreq->req_send.req_convertor,
|
||||
&iov,
|
||||
&iov_count,
|
||||
&max_data,
|
||||
&free_after)) < 0) {
|
||||
&max_data)) < 0) {
|
||||
mca_bml_base_free(bml_btl, descriptor);
|
||||
return rc;
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ static const char FUNC_NAME[] = "MPI_Pack";
|
||||
int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype,
|
||||
void *outbuf, int outsize, int *position, MPI_Comm comm)
|
||||
{
|
||||
int rc, freeAfter;
|
||||
int rc;
|
||||
ompi_convertor_t local_convertor;
|
||||
struct iovec invec;
|
||||
unsigned int iov_count;
|
||||
@ -77,7 +77,7 @@ int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype,
|
||||
|
||||
/* Do the actual packing */
|
||||
iov_count = 1;
|
||||
rc = ompi_convertor_pack( &local_convertor, &invec, &iov_count, &size, &freeAfter );
|
||||
rc = ompi_convertor_pack( &local_convertor, &invec, &iov_count, &size );
|
||||
*position += size;
|
||||
OBJ_DESTRUCT( &local_convertor );
|
||||
|
||||
|
@ -37,7 +37,7 @@ int MPI_Pack_external(char *datarep, void *inbuf, int incount,
|
||||
MPI_Datatype datatype, void *outbuf,
|
||||
MPI_Aint outsize, MPI_Aint *position)
|
||||
{
|
||||
int rc, freeAfter;
|
||||
int rc;
|
||||
ompi_convertor_t local_convertor;
|
||||
struct iovec invec;
|
||||
unsigned int iov_count;
|
||||
@ -69,7 +69,7 @@ int MPI_Pack_external(char *datarep, void *inbuf, int incount,
|
||||
|
||||
/* Check for truncation */
|
||||
ompi_convertor_get_packed_size( &local_convertor, &size );
|
||||
if( (*position + size) > (unsigned int)outsize ) { /* we can cast as we already checked for < 0 */
|
||||
if( (*position + size) > (size_t)outsize ) { /* we can cast as we already checked for < 0 */
|
||||
OBJ_DESTRUCT( &local_convertor );
|
||||
return OMPI_ERRHANDLER_INVOKE( MPI_COMM_WORLD, MPI_ERR_TRUNCATE, FUNC_NAME );
|
||||
}
|
||||
@ -80,7 +80,7 @@ int MPI_Pack_external(char *datarep, void *inbuf, int incount,
|
||||
|
||||
/* Do the actual packing */
|
||||
iov_count = 1;
|
||||
rc = ompi_convertor_pack( &local_convertor, &invec, &iov_count, &size, &freeAfter );
|
||||
rc = ompi_convertor_pack( &local_convertor, &invec, &iov_count, &size );
|
||||
*position += size;
|
||||
OBJ_DESTRUCT( &local_convertor );
|
||||
|
||||
|
@ -70,7 +70,6 @@ int MPI_Sendrecv_replace(void * buf, int count, MPI_Datatype datatype,
|
||||
unsigned char recv_data[2048];
|
||||
size_t packed_size, max_data;
|
||||
uint32_t iov_count;
|
||||
int free_after;
|
||||
ompi_status_public_t recv_status;
|
||||
ompi_proc_t* proc = ompi_comm_peer_lookup(comm,dest);
|
||||
if(proc == NULL) {
|
||||
@ -108,7 +107,7 @@ int MPI_Sendrecv_replace(void * buf, int count, MPI_Datatype datatype,
|
||||
iov.iov_len = recv_status._count;
|
||||
iov_count = 1;
|
||||
max_data = recv_status._count;
|
||||
ompi_convertor_unpack(&convertor, &iov, &iov_count, &max_data, &free_after);
|
||||
ompi_convertor_unpack(&convertor, &iov, &iov_count, &max_data );
|
||||
|
||||
/* return status to user */
|
||||
if(status != MPI_STATUS_IGNORE) {
|
||||
|
@ -37,7 +37,7 @@ int MPI_Unpack(void *inbuf, int insize, int *position,
|
||||
void *outbuf, int outcount, MPI_Datatype datatype,
|
||||
MPI_Comm comm)
|
||||
{
|
||||
int rc = 1, freeAfter;
|
||||
int rc = 1;
|
||||
ompi_convertor_t local_convertor;
|
||||
struct iovec outvec;
|
||||
unsigned int iov_count;
|
||||
@ -81,8 +81,7 @@ int MPI_Unpack(void *inbuf, int insize, int *position,
|
||||
|
||||
/* Do the actual unpacking */
|
||||
iov_count = 1;
|
||||
rc = ompi_convertor_unpack( &local_convertor, &outvec, &iov_count,
|
||||
&size, &freeAfter );
|
||||
rc = ompi_convertor_unpack( &local_convertor, &outvec, &iov_count, &size );
|
||||
*position += size;
|
||||
OBJ_DESTRUCT( &local_convertor );
|
||||
|
||||
|
@ -36,7 +36,7 @@ int MPI_Unpack_external (char *datarep, void *inbuf, MPI_Aint insize,
|
||||
MPI_Aint *position, void *outbuf, int outcount,
|
||||
MPI_Datatype datatype)
|
||||
{
|
||||
int rc, freeAfter;
|
||||
int rc;
|
||||
ompi_convertor_t local_convertor;
|
||||
struct iovec outvec;
|
||||
unsigned int iov_count;
|
||||
@ -72,7 +72,7 @@ int MPI_Unpack_external (char *datarep, void *inbuf, MPI_Aint insize,
|
||||
|
||||
/* Do the actual unpacking */
|
||||
iov_count = 1;
|
||||
rc = ompi_convertor_unpack( &local_convertor, &outvec, &iov_count, &size, &freeAfter );
|
||||
rc = ompi_convertor_unpack( &local_convertor, &outvec, &iov_count, &size );
|
||||
*position += size;
|
||||
OBJ_DESTRUCT( &local_convertor );
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user