int leader_comm_rank = -1, leader_comm_size = 0;
MPI_Comm shmem_comm, leader_comm;
int leader_root, leader_of_root;
- void *in_buf = NULL, *out_buf = NULL, *tmp_buf = NULL;
+ const unsigned char* in_buf = nullptr;
+ unsigned char *out_buf = nullptr, *tmp_buf = nullptr;
MPI_Aint true_lb, true_extent, extent;
int is_commutative = 0, stride = 0;
int intra_node_root=0;
if (stride <= MV2_INTRA_SHMEM_REDUCE_MSG &&
is_commutative == 1) {
if (local_rank == 0 ) {
- tmp_buf = (void*)smpi_get_tmp_sendbuffer(count * std::max(extent, true_extent));
- tmp_buf = (void *) ((char *) tmp_buf - true_lb);
+ tmp_buf = smpi_get_tmp_sendbuffer(count * std::max(extent, true_extent));
+ tmp_buf = tmp_buf - true_lb;
}
if (sendbuf != MPI_IN_PLACE) {
- in_buf = (void *)sendbuf;
+ in_buf = static_cast<const unsigned char*>(sendbuf);
} else {
- in_buf = recvbuf;
+ in_buf = static_cast<const unsigned char*>(recvbuf);
}
if (local_rank == 0) {
if( my_rank != root) {
out_buf = tmp_buf;
} else {
- out_buf = recvbuf;
- if(in_buf == out_buf) {
- in_buf = MPI_IN_PLACE;
- out_buf = recvbuf;
+ out_buf = static_cast<unsigned char*>(recvbuf);
+ if (in_buf == out_buf) {
+ in_buf = static_cast<const unsigned char*>(MPI_IN_PLACE);
+ out_buf = static_cast<unsigned char*>(recvbuf);
}
}
} else {
- in_buf = (void *)sendbuf;
- out_buf = NULL;
+ in_buf = static_cast<const unsigned char*>(sendbuf);
+ out_buf = nullptr;
}
if (count * (std::max(extent, true_extent)) < SHMEM_COLL_BLOCK_SIZE) {
root, comm);
}
/* We are done */
- if(tmp_buf!=NULL)
- smpi_free_tmp_buffer((void *) ((char *) tmp_buf + true_lb));
+ if (tmp_buf != nullptr)
+ smpi_free_tmp_buffer(tmp_buf + true_lb);
goto fn_exit;
}
}
leader_comm_size = leader_comm->size();
leader_comm_rank = leader_comm->rank();
- tmp_buf = (void*)smpi_get_tmp_sendbuffer(count * std::max(extent, true_extent));
- tmp_buf = (void *) ((char *) tmp_buf - true_lb);
+ tmp_buf = smpi_get_tmp_sendbuffer(count * std::max(extent, true_extent));
+ tmp_buf = tmp_buf - true_lb;
}
if (sendbuf != MPI_IN_PLACE) {
- in_buf = (void *)sendbuf;
+ in_buf = static_cast<const unsigned char*>(sendbuf);
} else {
- in_buf = recvbuf;
+ in_buf = static_cast<const unsigned char*>(recvbuf);
}
if (local_rank == 0) {
- out_buf = tmp_buf;
+ out_buf = static_cast<unsigned char*>(tmp_buf);
} else {
- out_buf = NULL;
+ out_buf = nullptr;
}
intra_node_root, shmem_comm);
}
} else {
- smpi_free_tmp_buffer((void *) ((char *) tmp_buf + true_lb));
- tmp_buf = in_buf;
+ smpi_free_tmp_buffer(tmp_buf + true_lb);
+ tmp_buf = (unsigned char*)in_buf; // xxx
}
/* Now work on the inter-leader phase. Data is in tmp_buf */
* root of the reduce op. So, I will write the
* final result directly into my recvbuf */
if(tmp_buf != recvbuf) {
- in_buf = tmp_buf;
- out_buf = recvbuf;
+ in_buf = tmp_buf;
+ out_buf = static_cast<unsigned char*>(recvbuf);
} else {
- in_buf = (char *)smpi_get_tmp_sendbuffer(count*
- datatype->get_extent());
- Datatype::copy(tmp_buf, count, datatype,
- in_buf, count, datatype);
- //in_buf = MPI_IN_PLACE;
- out_buf = recvbuf;
+ unsigned char* buf = smpi_get_tmp_sendbuffer(count * datatype->get_extent());
+ Datatype::copy(tmp_buf, count, datatype, buf, count, datatype);
+ // in_buf = MPI_IN_PLACE;
+ in_buf = buf;
+ out_buf = static_cast<unsigned char*>(recvbuf);
}
} else {
- in_buf = (char *)smpi_get_tmp_sendbuffer(count*
- datatype->get_extent());
- Datatype::copy(tmp_buf, count, datatype,
- in_buf, count, datatype);
- //in_buf = MPI_IN_PLACE;
- out_buf = tmp_buf;
+ unsigned char* buf = smpi_get_tmp_sendbuffer(count * datatype->get_extent());
+ Datatype::copy(tmp_buf, count, datatype, buf, count, datatype);
+ // in_buf = MPI_IN_PLACE;
+ in_buf = buf;
+ out_buf = tmp_buf;
}
} else {
in_buf = tmp_buf;
- out_buf = NULL;
+ out_buf = nullptr;
}
/* inter-leader communication */
}
if (local_size > 1) {
- /* Send the message to the root if the leader is not the
- * root of the reduce operation. The reduced data is in tmp_buf */
- if ((local_rank == 0) && (root != my_rank)
- && (leader_root == leader_comm_rank)) {
- Request::send(tmp_buf, count, datatype, root,
- COLL_TAG_REDUCE+1, comm);
- }
- if ((local_rank != 0) && (root == my_rank)) {
- Request::recv(recvbuf, count, datatype,
- leader_of_root,
- COLL_TAG_REDUCE+1, comm,
- MPI_STATUS_IGNORE);
- }
- smpi_free_tmp_buffer((void *) ((char *) tmp_buf + true_lb));
+ /* Send the message to the root if the leader is not the
+ * root of the reduce operation. The reduced data is in tmp_buf */
+ if ((local_rank == 0) && (root != my_rank) && (leader_root == leader_comm_rank)) {
+ Request::send(tmp_buf, count, datatype, root, COLL_TAG_REDUCE + 1, comm);
+ }
+ if ((local_rank != 0) && (root == my_rank)) {
+ Request::recv(recvbuf, count, datatype, leader_of_root, COLL_TAG_REDUCE + 1, comm, MPI_STATUS_IGNORE);
+ }
+ smpi_free_tmp_buffer(tmp_buf + true_lb);
if (leader_comm_rank == leader_root) {
if (my_rank != root || (my_rank == root && tmp_buf == recvbuf)) {