if (local_rank == 0) {
/* Node leader, allocate tmp_buffer */
- tmp_buf = xbt_malloc(nbytes * local_size);
+ tmp_buf = smpi_get_tmp_sendbuffer(nbytes * local_size);
}
leader_comm = smpi_comm_get_leaders_comm(comm);
&& (leader_of_root == rank)) {
/* The root of the scatter operation is not the node leader. Recv
* data from the node leader */
- leader_scatter_buf = xbt_malloc(nbytes * comm_size);
+ leader_scatter_buf = smpi_get_tmp_sendbuffer(nbytes * comm_size);
smpi_mpi_recv(leader_scatter_buf, nbytes * comm_size, MPI_BYTE,
root, COLL_TAG_SCATTER, comm, &status);
/* check if multiple threads are calling this collective function */
if (comm_size != local_size && local_rank == 0) {
- xbt_free(tmp_buf);
+ smpi_free_tmp_buffer(tmp_buf);
if (leader_of_root == rank && root != rank) {
- xbt_free(leader_scatter_buf);
+ smpi_free_tmp_buffer(leader_scatter_buf);
}
}
return (mpi_errno);
if (local_rank == 0) {
/* Node leader, allocate tmp_buffer */
- tmp_buf = xbt_malloc(nbytes * local_size);
+ tmp_buf = smpi_get_tmp_sendbuffer(nbytes * local_size);
}
leader_comm = smpi_comm_get_leaders_comm(comm);
int* leaders_map = smpi_comm_get_leaders_map(comm);
&& (leader_of_root == rank)) {
/* The root of the scatter operation is not the node leader. Recv
* data from the node leader */
- leader_scatter_buf = xbt_malloc(nbytes * comm_size);
+ leader_scatter_buf = smpi_get_tmp_sendbuffer(nbytes * comm_size);
smpi_mpi_recv(leader_scatter_buf, nbytes * comm_size, MPI_BYTE,
root, COLL_TAG_SCATTER, comm, &status);
}
/* check if multiple threads are calling this collective function */
if (comm_size != local_size && local_rank == 0) {
- xbt_free(tmp_buf);
+ smpi_free_tmp_buffer(tmp_buf);
if (leader_of_root == rank && root != rank) {
- xbt_free(leader_scatter_buf);
+ smpi_free_tmp_buffer(leader_scatter_buf);
}
}