+/* Copyright (c) 2013-2014. The SimGrid Team.
+ * All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
- * $COPYRIGHT$
*
* Additional copyrights may follow
- *
- * $HEADER$
*/
#include "colls_private.h"
#include "coll_tuned_topo.h"
-#define MCA_COLL_BASE_TAG_REDUCE 555
char *accumbuf = NULL, *accumbuf_free = NULL;
char *local_op_buffer = NULL, *sendtmpbuf = NULL;
ptrdiff_t extent, lower_bound, segment_increment;
- size_t typelng;
MPI_Request reqs[2] = {MPI_REQUEST_NULL, MPI_REQUEST_NULL};
int num_segments, line, ret, segindex, i, rank;
int recvcount, prevcount, inbi;
* sent per operation
*/
smpi_datatype_extent( datatype, &lower_bound, &extent);
- typelng = smpi_datatype_size( datatype );
num_segments = (original_count + count_by_segment - 1) / count_by_segment;
segment_increment = count_by_segment * extent;
sendbuf to the accumbuf, in order to simplfy the loops */
if (!smpi_op_is_commute(op)) {
smpi_datatype_copy(
- (char*)accumbuf, original_count, datatype,
- (char*)sendtmpbuf, original_count, datatype);
+ (char*)sendtmpbuf, original_count, datatype,
+ (char*)accumbuf, original_count, datatype);
}
/* Allocate two buffers for incoming segments */
real_segment_size = true_extent + (count_by_segment - 1) * extent;
reqs[inbi]=smpi_mpi_irecv(local_recvbuf, recvcount, datatype,
tree->tree_next[i],
- MCA_COLL_BASE_TAG_REDUCE, comm
+ COLL_TAG_REDUCE, comm
);
}
/* wait for previous req to complete, if any.
/* send combined/accumulated data to parent */
smpi_mpi_send( accumulator, prevcount,
datatype, tree->tree_prev,
- MCA_COLL_BASE_TAG_REDUCE,
+ COLL_TAG_REDUCE,
comm);
}
segindex * segment_increment,
count_by_segment, datatype,
tree->tree_prev,
- MCA_COLL_BASE_TAG_REDUCE,
+ COLL_TAG_REDUCE,
comm) ;
segindex++;
original_count -= count_by_segment;
segindex * segment_increment,
count_by_segment, datatype,
tree->tree_prev,
- MCA_COLL_BASE_TAG_REDUCE,
+ COLL_TAG_REDUCE,
comm);
original_count -= count_by_segment;
}
segindex * segment_increment,
count_by_segment, datatype,
tree->tree_prev,
- MCA_COLL_BASE_TAG_REDUCE,
+ COLL_TAG_REDUCE,
comm );
creq = (creq + 1) % max_outstanding_reqs;
segindex++;
free(sreq);
}
}
+ free(tree);
return MPI_SUCCESS;
error_hndl: /* error handler */
return MPI_ERR_INTERN;
}
smpi_datatype_copy (
- (char*)tmpbuf, count, datatype,
- (char*)recvbuf, count, datatype);
+ (char*)recvbuf, count, datatype,
+ (char*)tmpbuf, count, datatype);
use_this_sendbuf = tmpbuf;
} else if (io_root == rank) {
tmpbuf = (char *) malloc(text + (count - 1) * ext);
if (root == rank) {
/* Receive result from rank io_root to recvbuf */
smpi_mpi_recv(recvbuf, count, datatype, io_root,
- MCA_COLL_BASE_TAG_REDUCE, comm,
+ COLL_TAG_REDUCE, comm,
MPI_STATUS_IGNORE);
if (MPI_IN_PLACE == sendbuf) {
free(use_this_sendbuf);
} else if (io_root == rank) {
/* Send result from use_this_recvbuf to root */
smpi_mpi_send(use_this_recvbuf, count, datatype, root,
- MCA_COLL_BASE_TAG_REDUCE,
+ COLL_TAG_REDUCE,
comm);
free(use_this_recvbuf);
}
if (rank != root) {
smpi_mpi_send(sbuf, count, dtype, root,
- MCA_COLL_BASE_TAG_REDUCE,
+ COLL_TAG_REDUCE,
comm);
return -1;
}
/* Initialize the receive buffer. */
if (rank == (size - 1)) {
- smpi_datatype_copy((char*)rbuf, count, dtype,
- (char*)sbuf, count, dtype);
+ smpi_datatype_copy((char*)sbuf, count, dtype,(char*)rbuf, count, dtype);
} else {
smpi_mpi_recv(rbuf, count, dtype, size - 1,
- MCA_COLL_BASE_TAG_REDUCE, comm,
+ COLL_TAG_REDUCE, comm,
MPI_STATUS_IGNORE);
}
inbuf = (char*)sbuf;
} else {
smpi_mpi_recv(pml_buffer, count, dtype, i,
- MCA_COLL_BASE_TAG_REDUCE, comm,
+ COLL_TAG_REDUCE, comm,
MPI_STATUS_IGNORE);
inbuf = pml_buffer;
}
}
if (NULL != inplace_temp) {
- smpi_datatype_copy((char*)sbuf, count, dtype,
- inplace_temp,count , dtype);
+ smpi_datatype_copy(inplace_temp, count, dtype,(char*)sbuf
+ ,count , dtype);
free(inplace_temp);
}
if (NULL != free_buffer) {