@@ -119,7 +119,11 @@ int ompi_coll_tuned_alltoall_intra_dec_fixed(const void *sbuf, int scount,
119
119
the University of Tennessee (2GB MX) up to 64 nodes.
120
120
Has better performance for messages of intermediate sizes than the old one */
121
121
/* determine block size */
122
- ompi_datatype_type_size (sdtype , & dsize );
122
+ if (MPI_IN_PLACE != sbuf ) {
123
+ ompi_datatype_type_size (sdtype , & dsize );
124
+ } else {
125
+ ompi_datatype_type_size (rdtype , & dsize );
126
+ }
123
127
block_dsize = dsize * (ptrdiff_t )scount ;
124
128
125
129
if ((block_dsize < (size_t ) ompi_coll_tuned_alltoall_small_msg )
@@ -549,7 +553,11 @@ int ompi_coll_tuned_allgather_intra_dec_fixed(const void *sbuf, int scount,
549
553
}
550
554
551
555
/* Determine complete data size */
552
- ompi_datatype_type_size (sdtype , & dsize );
556
+ if (MPI_IN_PLACE != sbuf ) {
557
+ ompi_datatype_type_size (sdtype , & dsize );
558
+ } else {
559
+ ompi_datatype_type_size (rdtype , & dsize );
560
+ }
553
561
total_dsize = dsize * (ptrdiff_t )scount * (ptrdiff_t )communicator_size ;
554
562
555
563
OPAL_OUTPUT ((ompi_coll_tuned_stream , "ompi_coll_tuned_allgather_intra_dec_fixed"
@@ -644,7 +652,12 @@ int ompi_coll_tuned_allgatherv_intra_dec_fixed(const void *sbuf, int scount,
644
652
}
645
653
646
654
/* Determine complete data size */
647
- ompi_datatype_type_size (sdtype , & dsize );
655
+ if (MPI_IN_PLACE != sbuf ) {
656
+ ompi_datatype_type_size (sdtype , & dsize );
657
+ } else {
658
+ ompi_datatype_type_size (rdtype , & dsize );
659
+ }
660
+
648
661
total_dsize = 0 ;
649
662
for (i = 0 ; i < communicator_size ; i ++ ) {
650
663
total_dsize += dsize * (ptrdiff_t )rcounts [i ];
0 commit comments