3
3
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
4
4
* University Research and Technology
5
5
* 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
7
7
* of Tennessee Research Foundation. All rights
8
8
* reserved.
9
9
* Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
@@ -324,8 +324,9 @@ int32_t opal_convertor_unpack( opal_convertor_t* pConv,
324
324
return pConv -> fAdvance ( pConv , iov , out_size , max_data );
325
325
}
326
326
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 )
329
330
{
330
331
dt_stack_t * pStack ; /* pointer to the position on the stack */
331
332
const opal_datatype_t * pData = pConvertor -> pDesc ;
@@ -349,14 +350,14 @@ static inline int opal_convertor_create_stack_with_pos_contig( opal_convertor_t*
349
350
pStack [0 ].disp = count * extent ;
350
351
351
352
/* now compute the number of pending bytes */
352
- count = starting_point - count * pData -> size ;
353
+ count = starting_point % pData -> size ;
353
354
/**
354
355
* We save the current displacement starting from the begining
355
356
* of this data.
356
357
*/
357
358
if ( OPAL_LIKELY (0 == count ) ) {
358
359
pStack [1 ].type = pElems -> elem .common .type ;
359
- pStack [1 ].count = pElems -> elem .count ;
360
+ pStack [1 ].count = pElems -> elem .blocklen ;
360
361
} else {
361
362
pStack [1 ].type = OPAL_DATATYPE_UINT1 ;
362
363
pStack [1 ].count = pData -> size - count ;
@@ -370,9 +371,9 @@ static inline int opal_convertor_create_stack_with_pos_contig( opal_convertor_t*
370
371
return OPAL_SUCCESS ;
371
372
}
372
373
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 )
376
377
{
377
378
dt_stack_t * pStack = convertor -> pStack ;
378
379
dt_elem_desc_t * pElems ;
@@ -402,7 +403,7 @@ int opal_convertor_create_stack_at_begining( opal_convertor_t* convertor,
402
403
pStack [1 ].count = pElems [0 ].loop .loops ;
403
404
pStack [1 ].type = OPAL_DATATYPE_LOOP ;
404
405
} else {
405
- pStack [1 ].count = pElems [0 ].elem .count ;
406
+ pStack [1 ].count = pElems [0 ].elem .count * pElems [ 0 ]. elem . blocklen ;
406
407
pStack [1 ].type = pElems [0 ].elem .common .type ;
407
408
}
408
409
return OPAL_SUCCESS ;
@@ -578,8 +579,9 @@ int32_t opal_convertor_prepare_for_recv( opal_convertor_t* convertor,
578
579
assert (! (convertor -> flags & CONVERTOR_SEND ));
579
580
OPAL_CONVERTOR_PREPARE ( convertor , datatype , count , pUserBuf );
580
581
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 )) ) {
583
585
convertor -> fAdvance = opal_unpack_general_checksum ;
584
586
} else {
585
587
if ( convertor -> pDesc -> flags & OPAL_DATATYPE_FLAG_CONTIGUOUS ) {
@@ -588,8 +590,9 @@ int32_t opal_convertor_prepare_for_recv( opal_convertor_t* convertor,
588
590
convertor -> fAdvance = opal_generic_simple_unpack_checksum ;
589
591
}
590
592
}
591
- } else {
592
- if ( !(convertor -> flags & CONVERTOR_HOMOGENEOUS ) ) {
593
+ } else
594
+ #endif /* defined(CHECKSUM) */
595
+ if ( OPAL_UNLIKELY (!(convertor -> flags & CONVERTOR_HOMOGENEOUS )) ) {
593
596
convertor -> fAdvance = opal_unpack_general ;
594
597
} else {
595
598
if ( convertor -> pDesc -> flags & OPAL_DATATYPE_FLAG_CONTIGUOUS ) {
@@ -598,7 +601,6 @@ int32_t opal_convertor_prepare_for_recv( opal_convertor_t* convertor,
598
601
convertor -> fAdvance = opal_generic_simple_unpack ;
599
602
}
600
603
}
601
- }
602
604
return OPAL_SUCCESS ;
603
605
}
604
606
@@ -617,6 +619,7 @@ int32_t opal_convertor_prepare_for_send( opal_convertor_t* convertor,
617
619
618
620
OPAL_CONVERTOR_PREPARE ( convertor , datatype , count , pUserBuf );
619
621
622
+ #if defined(CHECKSUM )
620
623
if ( convertor -> flags & CONVERTOR_WITH_CHECKSUM ) {
621
624
if ( CONVERTOR_SEND_CONVERSION == (convertor -> flags & (CONVERTOR_SEND_CONVERSION |CONVERTOR_HOMOGENEOUS )) ) {
622
625
convertor -> fAdvance = opal_pack_general_checksum ;
@@ -631,7 +634,8 @@ int32_t opal_convertor_prepare_for_send( opal_convertor_t* convertor,
631
634
convertor -> fAdvance = opal_generic_simple_pack_checksum ;
632
635
}
633
636
}
634
- } else {
637
+ } else
638
+ #endif /* defined(CHECKSUM) */
635
639
if ( CONVERTOR_SEND_CONVERSION == (convertor -> flags & (CONVERTOR_SEND_CONVERSION |CONVERTOR_HOMOGENEOUS )) ) {
636
640
convertor -> fAdvance = opal_pack_general ;
637
641
} else {
@@ -645,7 +649,6 @@ int32_t opal_convertor_prepare_for_send( opal_convertor_t* convertor,
645
649
convertor -> fAdvance = opal_generic_simple_pack ;
646
650
}
647
651
}
648
- }
649
652
return OPAL_SUCCESS ;
650
653
}
651
654
0 commit comments