@@ -119,7 +119,11 @@ int ompi_coll_tuned_alltoall_intra_dec_fixed(const void *sbuf, int scount,
119119 the University of Tennessee (2GB MX) up to 64 nodes.
120120 Has better performance for messages of intermediate sizes than the old one */
121121 /* 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+ }
123127 block_dsize = dsize * (ptrdiff_t )scount ;
124128
125129 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,
549553 }
550554
551555 /* 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+ }
553561 total_dsize = dsize * (ptrdiff_t )scount * (ptrdiff_t )communicator_size ;
554562
555563 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,
644652 }
645653
646654 /* 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+
648661 total_dsize = 0 ;
649662 for (i = 0 ; i < communicator_size ; i ++ ) {
650663 total_dsize += dsize * (ptrdiff_t )rcounts [i ];
0 commit comments