rank = comm->rank();
num_procs = comm->size();
- extent = smpi_datatype_get_extent(send_type);
+ extent = send_type->get_extent();
if (!is_3dmesh(num_procs, &X, &Y, &Z))
THROWF(arg_error,0, "allgather_3dmesh algorithm can't be used with this number of processes! ");
// do local allgather/local copy
recv_offset = rank * block_size;
- smpi_datatype_copy(send_buff, send_count, send_type, (char *)recv_buff + recv_offset,
+ Datatype::copy(send_buff, send_count, send_type, (char *)recv_buff + recv_offset,
recv_count, recv_type);
// do rowwise comm
if (src == rank)
continue;
recv_offset = src * block_size;
- *(req_ptr++) = smpi_mpi_irecv((char *)recv_buff + recv_offset, send_count, recv_type, src, tag,
+ *(req_ptr++) = Request::irecv((char *)recv_buff + recv_offset, send_count, recv_type, src, tag,
comm);
}
dst = i + my_row_base;
if (dst == rank)
continue;
- smpi_mpi_send(send_buff, send_count, send_type, dst, tag, comm);
+ Request::send(send_buff, send_count, send_type, dst, tag, comm);
}
- smpi_mpi_waitall(Y - 1, req, MPI_STATUSES_IGNORE);
+ Request::waitall(Y - 1, req, MPI_STATUSES_IGNORE);
req_ptr = req;
// do colwise comm, it does not matter here if i*X or i *Y since X == Y
src_row_base = (src / X) * X;
recv_offset = src_row_base * block_size;
- *(req_ptr++) = smpi_mpi_irecv((char *)recv_buff + recv_offset, recv_count * Y, recv_type, src, tag,
+ *(req_ptr++) = Request::irecv((char *)recv_buff + recv_offset, recv_count * Y, recv_type, src, tag,
comm);
}
dst = (i * Y + my_col_base);
if (dst == rank)
continue;
- smpi_mpi_send((char *)recv_buff + send_offset, send_count * Y, send_type, dst, tag,
+ Request::send((char *)recv_buff + send_offset, send_count * Y, send_type, dst, tag,
comm);
}
- smpi_mpi_waitall(X - 1, req, MPI_STATUSES_IGNORE);
+ Request::waitall(X - 1, req, MPI_STATUSES_IGNORE);
req_ptr = req;
for (i = 1; i < Z; i++) {
recv_offset = (src_z_base * block_size);
- *(req_ptr++) = smpi_mpi_irecv((char *)recv_buff + recv_offset, recv_count * two_dsize, recv_type,
+ *(req_ptr++) = Request::irecv((char *)recv_buff + recv_offset, recv_count * two_dsize, recv_type,
src, tag, comm);
}
for (i = 1; i < Z; i++) {
dst = (rank + i * two_dsize) % num_procs;
send_offset = my_z_base * block_size;
- smpi_mpi_send((char *)recv_buff + send_offset, send_count * two_dsize, send_type,
+ Request::send((char *)recv_buff + send_offset, send_count * two_dsize, send_type,
dst, tag, comm);
}
- smpi_mpi_waitall(Z - 1, req, MPI_STATUSES_IGNORE);
+ Request::waitall(Z - 1, req, MPI_STATUSES_IGNORE);
free(req);