X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f35db13138682b1be530a509d1eeadeafff84ca7..13fb4af932a02ea0bd4293d1e55ac071de326f80:/src/smpi/colls/reduce/reduce-mvapich-knomial.cpp diff --git a/src/smpi/colls/reduce/reduce-mvapich-knomial.cpp b/src/smpi/colls/reduce/reduce-mvapich-knomial.cpp index 47bc0f28d6..2ab0774f80 100644 --- a/src/smpi/colls/reduce/reduce-mvapich-knomial.cpp +++ b/src/smpi/colls/reduce/reduce-mvapich-knomial.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2014. The SimGrid Team. +/* Copyright (c) 2013-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ * copyright file COPYRIGHT in the top level MVAPICH2 directory. * */ - + #include "../colls_private.h" extern int mv2_reduce_intra_knomial_factor; extern int mv2_reduce_inter_knomial_factor; @@ -45,15 +45,15 @@ extern int mv2_reduce_inter_knomial_factor; #define SMPI_DEFAULT_KNOMIAL_FACTOR 4 // int mv2_reduce_knomial_factor = 2; - - - -static int MPIR_Reduce_knomial_trace(int root, int reduce_knomial_factor, + + + +static int MPIR_Reduce_knomial_trace(int root, int reduce_knomial_factor, MPI_Comm comm, int *dst, int *expected_send_count, int *expected_recv_count, int **src_array) { int mask=0x1, k, comm_size, src, rank, relative_rank, lroot=0; - int orig_mask=0x1; + int orig_mask=0x1; int recv_iter=0, send_iter=0; int *knomial_reduce_src_array=NULL; comm_size = comm->size(); @@ -62,7 +62,7 @@ static int MPIR_Reduce_knomial_trace(int root, int reduce_knomial_factor, lroot = root; relative_rank = (rank - lroot + comm_size) % comm_size; - /* First compute to whom we need to send data */ + /* First compute to whom we need to send data */ while (mask < comm_size) { if (relative_rank % (reduce_knomial_factor*mask)) { *dst = relative_rank/(reduce_knomial_factor*mask)* @@ -77,8 +77,8 @@ static int MPIR_Reduce_knomial_trace(int root, int reduce_knomial_factor, } mask /= reduce_knomial_factor; - /* Now compute how many children we have in the knomial-tree */ - orig_mask = mask; + /* Now compute how many children we have in the knomial-tree */ + orig_mask = mask; while (mask > 0) { for(k=1;k 0) { + /* Finally, fill up the src array */ + if(recv_iter > 0) { knomial_reduce_src_array = static_cast(smpi_get_tmp_sendbuffer(sizeof(int)*recv_iter)); - } + } - mask = orig_mask; - recv_iter=0; + mask = orig_mask; + recv_iter=0; while (mask > 0) { for(k=1;k 0 ) { @@ -208,9 +208,9 @@ int Coll_reduce_mvapich2_knomial::reduce ( xbt_free(requests); } - if(src_array != NULL) { + if(src_array != NULL) { xbt_free(src_array); - } + } if(rank != root) { send_request=Request::isend(recvbuf,count, datatype, dst,