Skip to content

Commit 0ec5c14

Browse files
committed
Start optimizing the code.
Signed-off-by: George Bosilca <[email protected]>
1 parent 3562d70 commit 0ec5c14

File tree

2 files changed

+24
-28
lines changed

2 files changed

+24
-28
lines changed

opal/datatype/opal_datatype_pack.h

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
4949
/* premptively update the number of COUNT we will return. */
5050
*(COUNT) -= cando_count;
5151

52-
if( 1 == _elem->count ) { /* Everything is contiguous, handle it as a prologue */
52+
if( 1 == _elem->count ) { /* Everything is contiguous, handle it as the last contiguous piece */
5353
goto do_epilog;
5454
}
5555
if( 1 == _elem->blocklen ) { /* Do as many full blocklen as possible */
5656
for(; cando_count > 0; cando_count--) {
5757
OPAL_DATATYPE_SAFEGUARD_POINTER( _memory, blocklen_bytes, (CONVERTOR)->pBaseBuf,
5858
(CONVERTOR)->pDesc, (CONVERTOR)->count );
59-
DO_DEBUG( opal_output( 0, "pack 2. memcpy( %p, %p, %lu ) => space %lu\n",
59+
DO_DEBUG( opal_output( 0, "pack memcpy( %p, %p, %lu ) => space %lu [blen = 1]\n",
6060
(void*)_packed, (void*)_memory, (unsigned long)blocklen_bytes, (unsigned long)(*(SPACE) - (_packed - *(packed))) ); );
6161
MEMCPY_CSUM( _packed, _memory, blocklen_bytes, (CONVERTOR) );
6262
_packed += blocklen_bytes;
@@ -75,23 +75,21 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
7575
* should be manipulated in the current call (this number is instead reflected on the
7676
* SPACE).
7777
*/
78-
do_now = do_now % _elem->blocklen; /* any partial elements ? */
79-
80-
if( 0 != do_now ) {
78+
if( 0 != (do_now = do_now % _elem->blocklen) ) { /* any partial elements ? */
8179
size_t left_in_block = do_now; /* left in the current blocklen */
82-
do_now = (do_now > cando_count ) ? cando_count : do_now;
80+
do_now = (do_now > cando_count) ? cando_count : do_now;
8381
do_now_bytes = do_now * opal_datatype_basicDatatypes[_elem->common.type]->size;
8482

8583
OPAL_DATATYPE_SAFEGUARD_POINTER( _memory, do_now_bytes, (CONVERTOR)->pBaseBuf,
8684
(CONVERTOR)->pDesc, (CONVERTOR)->count );
87-
DO_DEBUG( opal_output( 0, "pack 1. memcpy( %p, %p, %lu ) => space %lu [prolog]\n",
85+
DO_DEBUG( opal_output( 0, "pack memcpy( %p, %p, %lu ) => space %lu [prolog]\n",
8886
_packed, (void*)_memory, (unsigned long)do_now_bytes, (unsigned long)(*(SPACE)) ); );
8987
MEMCPY_CSUM( _packed, _memory, do_now_bytes, (CONVERTOR) );
88+
_packed += do_now_bytes;
9089
_memory += (ptrdiff_t)do_now_bytes;
91-
/* compensate if we just completed a blocklen */
92-
if( do_now == left_in_block )
90+
91+
if( do_now == left_in_block ) /* compensate if completed a blocklen */
9392
_memory += _elem->extent - blocklen_bytes;
94-
_packed += do_now_bytes;
9593
cando_count -= do_now;
9694
}
9795

@@ -111,15 +109,15 @@ pack_predefined_data( opal_convertor_t* CONVERTOR,
111109
/**
112110
* As an epilog do anything left from the last blocklen.
113111
*/
112+
do_epilog:
114113
if( 0 != cando_count ) {
115-
116-
do_epilog:
117-
assert( cando_count < _elem->blocklen );
114+
assert( (cando_count < _elem->blocklen) ||
115+
((1 == _elem->count) && (cando_count <= _elem->blocklen)) );
118116
do_now_bytes = cando_count * opal_datatype_basicDatatypes[_elem->common.type]->size;
119117
OPAL_DATATYPE_SAFEGUARD_POINTER( _memory, do_now_bytes, (CONVERTOR)->pBaseBuf,
120118
(CONVERTOR)->pDesc, (CONVERTOR)->count );
121119
DO_DEBUG( opal_output( 0, "pack 3. memcpy( %p, %p, %lu ) => space %lu [epilog]\n",
122-
(void*)_packed, (void*)_memory, (unsigned long)do_now_bytes, (unsigned long)(*(SPACE)) ); );
120+
(void*)_packed, (void*)_memory, (unsigned long)do_now_bytes, (unsigned long)(*(SPACE) - (_packed - *(packed))) ); );
123121
MEMCPY_CSUM( _packed, _memory, do_now_bytes, (CONVERTOR) );
124122
_memory += do_now_bytes;
125123
_packed += do_now_bytes;

opal/datatype/opal_datatype_unpack.h

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ unpack_predefined_data( opal_convertor_t* CONVERTOR,
4949
/* premptively update the number of COUNT we will return. */
5050
*(COUNT) -= cando_count;
5151

52-
if( 1 == _elem->count ) { /* Everything is contiguous, handle it as a prologue */
52+
if( 1 == _elem->count ) { /* Everything is contiguous, handle it as the last contiguous piece */
5353
goto do_epilog;
5454
}
5555
if( 1 == _elem->blocklen ) { /* Do as many full blocklen as possible */
5656
for(; cando_count > 0; cando_count--) {
5757
OPAL_DATATYPE_SAFEGUARD_POINTER( _memory, blocklen_bytes, (CONVERTOR)->pBaseBuf,
5858
(CONVERTOR)->pDesc, (CONVERTOR)->count );
59-
DO_DEBUG( opal_output( 0, "unpack 2. memcpy( %p, %p, %lu ) => space %lu\n",
59+
DO_DEBUG( opal_output( 0, "unpack memcpy( %p, %p, %lu ) => space %lu [blen = 1]\n",
6060
(void*)_memory, (void*)_packed, (unsigned long)blocklen_bytes, (unsigned long)(*(SPACE) - (_packed - *(packed))) ); );
6161
MEMCPY_CSUM( _memory, _packed, blocklen_bytes, (CONVERTOR) );
6262
_packed += blocklen_bytes;
@@ -76,23 +76,21 @@ unpack_predefined_data( opal_convertor_t* CONVERTOR,
7676
* should be manipulated in the current call (this number is instead reflected on the
7777
* SPACE).
7878
*/
79-
do_now = do_now % _elem->blocklen; /* any partial elements ? */
80-
81-
if( 0 != do_now ) {
79+
if( 0 != (do_now = do_now % _elem->blocklen) ) { /* any partial elements ? */
8280
size_t left_in_block = do_now; /* left in the current blocklen */
83-
do_now = (do_now > cando_count ) ? cando_count : do_now;
81+
do_now = (do_now > cando_count) ? cando_count : do_now;
8482
do_now_bytes = do_now * opal_datatype_basicDatatypes[_elem->common.type]->size;
8583

8684
OPAL_DATATYPE_SAFEGUARD_POINTER( _memory, do_now_bytes, (CONVERTOR)->pBaseBuf,
8785
(CONVERTOR)->pDesc, (CONVERTOR)->count );
88-
DO_DEBUG( opal_output( 0, "unpack 1. memcpy( %p, %p, %lu ) => space %lu [prolog]\n",
86+
DO_DEBUG( opal_output( 0, "unpack memcpy( %p, %p, %lu ) => space %lu [prolog]\n",
8987
(void*)_memory, (void*)_packed, (unsigned long)do_now_bytes, (unsigned long)(*(SPACE)) ); );
9088
MEMCPY_CSUM( _memory, _packed, do_now_bytes, (CONVERTOR) );
91-
_memory += (ptrdiff_t)do_now_bytes;
92-
/* compensate if we just completed a blocklen */
93-
if( do_now == left_in_block )
94-
_memory += _elem->extent - blocklen_bytes;
9589
_packed += do_now_bytes;
90+
_memory += (ptrdiff_t)do_now_bytes;
91+
92+
if( do_now == left_in_block ) /* compensate if completed a blocklen */
93+
_memory += _elem->extent - blocklen_bytes;
9694
cando_count -= do_now;
9795
}
9896

@@ -112,10 +110,10 @@ unpack_predefined_data( opal_convertor_t* CONVERTOR,
112110
/**
113111
* As an epilog do anything left from the last blocklen.
114112
*/
113+
do_epilog:
115114
if( 0 != cando_count ) {
116-
117-
do_epilog:
118-
assert( cando_count < _elem->blocklen );
115+
assert( (cando_count < _elem->blocklen) ||
116+
((1 == _elem->count) && (cando_count <= _elem->blocklen)) );
119117
do_now_bytes = cando_count * opal_datatype_basicDatatypes[_elem->common.type]->size;
120118
OPAL_DATATYPE_SAFEGUARD_POINTER( _memory, do_now_bytes, (CONVERTOR)->pBaseBuf,
121119
(CONVERTOR)->pDesc, (CONVERTOR)->count );

0 commit comments

Comments
 (0)