X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/12c0f182635ed71b370d608b5b9a614153765cd4..56b8ebe99bfcd666e373069b2072291ab5e04ee8:/src/smpi/colls/reduce-ompi.c diff --git a/src/smpi/colls/reduce-ompi.c b/src/smpi/colls/reduce-ompi.c index c5d767ce7d..0b71d60ea3 100644 --- a/src/smpi/colls/reduce-ompi.c +++ b/src/smpi/colls/reduce-ompi.c @@ -18,7 +18,6 @@ #include "colls_private.h" #include "coll_tuned_topo.h" -#define MCA_COLL_BASE_TAG_REDUCE 555 @@ -92,8 +91,8 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi 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; @@ -151,7 +150,7 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi 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. @@ -195,7 +194,7 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi /* send combined/accumulated data to parent */ smpi_mpi_send( accumulator, prevcount, datatype, tree->tree_prev, - MCA_COLL_BASE_TAG_REDUCE, + COLL_TAG_REDUCE, comm); } @@ -242,7 +241,7 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi 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; @@ -270,7 +269,7 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi segindex * segment_increment, count_by_segment, datatype, tree->tree_prev, - MCA_COLL_BASE_TAG_REDUCE, + COLL_TAG_REDUCE, comm); original_count -= count_by_segment; } @@ -288,7 +287,7 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi 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++; @@ -303,6 +302,7 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi free(sreq); } } + free(tree); return MPI_SUCCESS; error_hndl: /* error handler */ @@ -521,8 +521,8 @@ int smpi_coll_tuned_reduce_ompi_in_order_binary( void *sendbuf, void *recvbuf, 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); @@ -545,7 +545,7 @@ int smpi_coll_tuned_reduce_ompi_in_order_binary( void *sendbuf, void *recvbuf, 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); @@ -554,7 +554,7 @@ int smpi_coll_tuned_reduce_ompi_in_order_binary( void *sendbuf, void *recvbuf, } 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); } @@ -610,7 +610,7 @@ smpi_coll_tuned_reduce_ompi_basic_linear(void *sbuf, void *rbuf, int count, if (rank != root) { smpi_mpi_send(sbuf, count, dtype, root, - MCA_COLL_BASE_TAG_REDUCE, + COLL_TAG_REDUCE, comm); return -1; } @@ -639,11 +639,10 @@ smpi_coll_tuned_reduce_ompi_basic_linear(void *sbuf, void *rbuf, int count, /* 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); } @@ -654,7 +653,7 @@ smpi_coll_tuned_reduce_ompi_basic_linear(void *sbuf, void *rbuf, int count, 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; } @@ -664,8 +663,8 @@ smpi_coll_tuned_reduce_ompi_basic_linear(void *sbuf, void *rbuf, int count, } 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) {