MPI_Datatype dtype, MPI_Op op,
MPI_Comm comm)
{
- int nprocs, rank, type_size, tag = 543;
+ int nprocs, rank, tag = 543;
int mask, dst, pof2, newrank, rem, newdst, i,
send_idx, recv_idx, last_idx, send_cnt, recv_cnt, *cnts, *disps;
MPI_Aint extent;
smpi_mpi_sendrecv(sbuff, count, dtype, rank, tag, rbuff, count, dtype, rank, tag,
comm, &status);
- type_size = smpi_datatype_size(dtype);
-
// find nearest power-of-two less than or equal to comm_size
pof2 = 1;
while (pof2 <= nprocs)
// do the reduction on received data. since the
// ordering is right, it doesn't matter whether
// the operation is commutative or not.
- star_reduction(op, tmp_buf, rbuff, &count, &dtype);
+ smpi_op_apply(op, tmp_buf, rbuff, &count, &dtype);
// change the rank
newrank = rank / 2;
// This algorithm is used only for predefined ops
// and predefined ops are always commutative.
- star_reduction(op, (char *) tmp_buf + disps[recv_idx] * extent,
+ smpi_op_apply(op, (char *) tmp_buf + disps[recv_idx] * extent,
(char *) rbuff + disps[recv_idx] * extent,
&recv_cnt, &dtype);