X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a0fcde6efb589d65005c77e7d64b8634cbe277fc..2bcb5dd3317c733c31c288ae79e72fb28863d936:/src/smpi/colls/reduce-mvapich-knomial.c diff --git a/src/smpi/colls/reduce-mvapich-knomial.c b/src/smpi/colls/reduce-mvapich-knomial.c index c5dc90882c..7ec5c64797 100644 --- a/src/smpi/colls/reduce-mvapich-knomial.c +++ b/src/smpi/colls/reduce-mvapich-knomial.c @@ -40,6 +40,10 @@ #include "colls_private.h" extern int mv2_reduce_intra_knomial_factor; +extern int mv2_reduce_inter_knomial_factor; + +#define SMPI_DEFAULT_KNOMIAL_FACTOR 4 + // int mv2_reduce_knomial_factor = 2; @@ -86,7 +90,7 @@ static int MPIR_Reduce_knomial_trace(int root, int reduce_knomial_factor, /* Finally, fill up the src array */ if(recv_iter > 0) { - knomial_reduce_src_array = xbt_malloc(sizeof(int)*recv_iter); + knomial_reduce_src_array = smpi_get_tmp_sendbuffer(sizeof(int)*recv_iter); } mask = orig_mask; @@ -144,7 +148,7 @@ int smpi_coll_tuned_reduce_mvapich2_knomial ( is_commutative = smpi_op_is_commute(op); if (rank != root) { - recvbuf=(void *)xbt_malloc(count*(MAX(extent,true_extent))); + recvbuf=(void *)smpi_get_tmp_recvbuffer(count*(MAX(extent,true_extent))); recvbuf = (void *)((char*)recvbuf - true_lb); } @@ -154,6 +158,15 @@ int smpi_coll_tuned_reduce_mvapich2_knomial ( } + if(mv2_reduce_intra_knomial_factor<0) + { + mv2_reduce_intra_knomial_factor = SMPI_DEFAULT_KNOMIAL_FACTOR; + } + if(mv2_reduce_inter_knomial_factor<0) + { + mv2_reduce_inter_knomial_factor = SMPI_DEFAULT_KNOMIAL_FACTOR; + } + MPIR_Reduce_knomial_trace(root, mv2_reduce_intra_knomial_factor, comm, &dst, &expected_send_count, &expected_recv_count, &src_array); @@ -162,7 +175,7 @@ int smpi_coll_tuned_reduce_mvapich2_knomial ( tmp_buf = xbt_malloc(sizeof(void *)*expected_recv_count); requests = xbt_malloc(sizeof(MPI_Request)*expected_recv_count); for(k=0; k < expected_recv_count; k++ ) { - tmp_buf[k] = xbt_malloc(count*(MAX(extent,true_extent))); + tmp_buf[k] = smpi_get_tmp_sendbuffer(count*(MAX(extent,true_extent))); tmp_buf[k] = (void *)((char*)tmp_buf[k] - true_lb); } @@ -187,7 +200,7 @@ int smpi_coll_tuned_reduce_mvapich2_knomial ( } for(k=0; k < expected_recv_count; k++ ) { - xbt_free(tmp_buf[k]); + smpi_free_tmp_buffer(tmp_buf[k]); } xbt_free(tmp_buf); xbt_free(requests); @@ -202,6 +215,8 @@ int smpi_coll_tuned_reduce_mvapich2_knomial ( COLL_TAG_REDUCE,comm); smpi_mpi_waitall(1, &send_request, &status); + + smpi_free_tmp_buffer((void *)((char*)recvbuf + true_lb)); } /* --END ERROR HANDLING-- */