33 * Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
44 * University Research and Technology
55 * Corporation. All rights reserved.
6- * Copyright (c) 2004-2018 The University of Tennessee and The University
6+ * Copyright (c) 2004-2019 The University of Tennessee and The University
77 * of Tennessee Research Foundation. All rights
88 * reserved.
99 * Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
@@ -324,8 +324,9 @@ int32_t opal_convertor_unpack( opal_convertor_t* pConv,
324324 return pConv -> fAdvance ( pConv , iov , out_size , max_data );
325325}
326326
327- static inline int opal_convertor_create_stack_with_pos_contig ( opal_convertor_t * pConvertor ,
328- size_t starting_point , const size_t * sizes )
327+ static inline int
328+ opal_convertor_create_stack_with_pos_contig ( opal_convertor_t * pConvertor ,
329+ size_t starting_point , const size_t * sizes )
329330{
330331 dt_stack_t * pStack ; /* pointer to the position on the stack */
331332 const opal_datatype_t * pData = pConvertor -> pDesc ;
@@ -349,14 +350,14 @@ static inline int opal_convertor_create_stack_with_pos_contig( opal_convertor_t*
349350 pStack [0 ].disp = count * extent ;
350351
351352 /* now compute the number of pending bytes */
352- count = starting_point - count * pData -> size ;
353+ count = starting_point % pData -> size ;
353354 /**
354355 * We save the current displacement starting from the begining
355356 * of this data.
356357 */
357358 if ( OPAL_LIKELY (0 == count ) ) {
358359 pStack [1 ].type = pElems -> elem .common .type ;
359- pStack [1 ].count = pElems -> elem .count ;
360+ pStack [1 ].count = pElems -> elem .blocklen ;
360361 } else {
361362 pStack [1 ].type = OPAL_DATATYPE_UINT1 ;
362363 pStack [1 ].count = pData -> size - count ;
@@ -370,9 +371,9 @@ static inline int opal_convertor_create_stack_with_pos_contig( opal_convertor_t*
370371 return OPAL_SUCCESS ;
371372}
372373
373- static inline
374- int opal_convertor_create_stack_at_begining ( opal_convertor_t * convertor ,
375- const size_t * sizes )
374+ static inline int
375+ opal_convertor_create_stack_at_begining ( opal_convertor_t * convertor ,
376+ const size_t * sizes )
376377{
377378 dt_stack_t * pStack = convertor -> pStack ;
378379 dt_elem_desc_t * pElems ;
@@ -402,7 +403,7 @@ int opal_convertor_create_stack_at_begining( opal_convertor_t* convertor,
402403 pStack [1 ].count = pElems [0 ].loop .loops ;
403404 pStack [1 ].type = OPAL_DATATYPE_LOOP ;
404405 } else {
405- pStack [1 ].count = pElems [0 ].elem .count ;
406+ pStack [1 ].count = pElems [0 ].elem .count * pElems [ 0 ]. elem . blocklen ;
406407 pStack [1 ].type = pElems [0 ].elem .common .type ;
407408 }
408409 return OPAL_SUCCESS ;
@@ -578,8 +579,9 @@ int32_t opal_convertor_prepare_for_recv( opal_convertor_t* convertor,
578579 assert (! (convertor -> flags & CONVERTOR_SEND ));
579580 OPAL_CONVERTOR_PREPARE ( convertor , datatype , count , pUserBuf );
580581
581- if ( convertor -> flags & CONVERTOR_WITH_CHECKSUM ) {
582- if ( !(convertor -> flags & CONVERTOR_HOMOGENEOUS ) ) {
582+ #if defined(CHECKSUM )
583+ if ( OPAL_UNLIKELY (convertor -> flags & CONVERTOR_WITH_CHECKSUM ) ) {
584+ if ( OPAL_UNLIKELY (!(convertor -> flags & CONVERTOR_HOMOGENEOUS )) ) {
583585 convertor -> fAdvance = opal_unpack_general_checksum ;
584586 } else {
585587 if ( convertor -> pDesc -> flags & OPAL_DATATYPE_FLAG_CONTIGUOUS ) {
@@ -588,8 +590,9 @@ int32_t opal_convertor_prepare_for_recv( opal_convertor_t* convertor,
588590 convertor -> fAdvance = opal_generic_simple_unpack_checksum ;
589591 }
590592 }
591- } else {
592- if ( !(convertor -> flags & CONVERTOR_HOMOGENEOUS ) ) {
593+ } else
594+ #endif /* defined(CHECKSUM) */
595+ if ( OPAL_UNLIKELY (!(convertor -> flags & CONVERTOR_HOMOGENEOUS )) ) {
593596 convertor -> fAdvance = opal_unpack_general ;
594597 } else {
595598 if ( convertor -> pDesc -> flags & OPAL_DATATYPE_FLAG_CONTIGUOUS ) {
@@ -598,7 +601,6 @@ int32_t opal_convertor_prepare_for_recv( opal_convertor_t* convertor,
598601 convertor -> fAdvance = opal_generic_simple_unpack ;
599602 }
600603 }
601- }
602604 return OPAL_SUCCESS ;
603605}
604606
@@ -617,6 +619,7 @@ int32_t opal_convertor_prepare_for_send( opal_convertor_t* convertor,
617619
618620 OPAL_CONVERTOR_PREPARE ( convertor , datatype , count , pUserBuf );
619621
622+ #if defined(CHECKSUM )
620623 if ( convertor -> flags & CONVERTOR_WITH_CHECKSUM ) {
621624 if ( CONVERTOR_SEND_CONVERSION == (convertor -> flags & (CONVERTOR_SEND_CONVERSION |CONVERTOR_HOMOGENEOUS )) ) {
622625 convertor -> fAdvance = opal_pack_general_checksum ;
@@ -631,7 +634,8 @@ int32_t opal_convertor_prepare_for_send( opal_convertor_t* convertor,
631634 convertor -> fAdvance = opal_generic_simple_pack_checksum ;
632635 }
633636 }
634- } else {
637+ } else
638+ #endif /* defined(CHECKSUM) */
635639 if ( CONVERTOR_SEND_CONVERSION == (convertor -> flags & (CONVERTOR_SEND_CONVERSION |CONVERTOR_HOMOGENEOUS )) ) {
636640 convertor -> fAdvance = opal_pack_general ;
637641 } else {
@@ -645,7 +649,6 @@ int32_t opal_convertor_prepare_for_send( opal_convertor_t* convertor,
645649 convertor -> fAdvance = opal_generic_simple_pack ;
646650 }
647651 }
648- }
649652 return OPAL_SUCCESS ;
650653}
651654
0 commit comments