#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;
/* 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;
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);
}
}
+ 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);
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);
}
}
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);