@@ -54,6 +54,7 @@ mca_coll_base_alltoallv_intra_basic_inplace(const void *rbuf, const int *rcounts
54
54
mca_coll_base_module_t * module )
55
55
{
56
56
int i , size , rank , left , right , err = MPI_SUCCESS , line ;
57
+ ptrdiff_t extent ;
57
58
ompi_request_t * req ;
58
59
char * tmp_buffer ;
59
60
size_t packed_size = 0 , max_size ;
@@ -89,6 +90,8 @@ mca_coll_base_alltoallv_intra_basic_inplace(const void *rbuf, const int *rcounts
89
90
}
90
91
#endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT */
91
92
93
+ ompi_datatype_type_extent (rdtype , & extent );
94
+
92
95
/* Allocate a temporary buffer */
93
96
tmp_buffer = calloc (max_size , 1 );
94
97
if ( NULL == tmp_buffer ) { err = OMPI_ERR_OUT_OF_RESOURCE ; line = __LINE__ ; goto error_hndl ; }
@@ -104,20 +107,20 @@ mca_coll_base_alltoallv_intra_basic_inplace(const void *rbuf, const int *rcounts
104
107
ompi_proc_t * right_proc = ompi_comm_peer_lookup (comm , right );
105
108
opal_convertor_clone (right_proc -> super .proc_convertor , & convertor , 0 );
106
109
opal_convertor_prepare_for_send (& convertor , & rdtype -> super , rcounts [right ],
107
- (char * ) rbuf + rdisps [right ]);
110
+ (char * ) rbuf + rdisps [right ] * extent );
108
111
packed_size = max_size ;
109
112
err = opal_convertor_pack (& convertor , & iov , & iov_count , & packed_size );
110
113
if (1 != err ) { goto error_hndl ; }
111
114
112
115
/* Receive data from the right */
113
- err = MCA_PML_CALL (irecv ((char * ) rbuf + rdisps [right ], rcounts [right ], rdtype ,
116
+ err = MCA_PML_CALL (irecv ((char * ) rbuf + rdisps [right ] * extent , rcounts [right ], rdtype ,
114
117
right , MCA_COLL_BASE_TAG_ALLTOALLV , comm , & req ));
115
118
if (MPI_SUCCESS != err ) { goto error_hndl ; }
116
119
}
117
120
118
121
if ( (left != right ) && (0 != rcounts [left ]) ) {
119
122
/* Send data to the left */
120
- err = MCA_PML_CALL (send ((char * ) rbuf + rdisps [left ], rcounts [left ], rdtype ,
123
+ err = MCA_PML_CALL (send ((char * ) rbuf + rdisps [left ] * extent , rcounts [left ], rdtype ,
121
124
left , MCA_COLL_BASE_TAG_ALLTOALLV , MCA_PML_BASE_SEND_STANDARD ,
122
125
comm ));
123
126
if (MPI_SUCCESS != err ) { goto error_hndl ; }
@@ -126,7 +129,7 @@ mca_coll_base_alltoallv_intra_basic_inplace(const void *rbuf, const int *rcounts
126
129
if (MPI_SUCCESS != err ) { goto error_hndl ; }
127
130
128
131
/* Receive data from the left */
129
- err = MCA_PML_CALL (irecv ((char * ) rbuf + rdisps [left ], rcounts [left ], rdtype ,
132
+ err = MCA_PML_CALL (irecv ((char * ) rbuf + rdisps [left ] * extent , rcounts [left ], rdtype ,
130
133
left , MCA_COLL_BASE_TAG_ALLTOALLV , comm , & req ));
131
134
if (MPI_SUCCESS != err ) { goto error_hndl ; }
132
135
}
0 commit comments