X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e7c0c67af63b3979a597a66e5e1c8b0435fc6e19..1687df79d61a9418bba830bbd0ab7de16e457090:/src/smpi/colls/bcast-arrival-scatter.c diff --git a/src/smpi/colls/bcast-arrival-scatter.c b/src/smpi/colls/bcast-arrival-scatter.c index 6ad805d6e6..ff7b10bc8e 100644 --- a/src/smpi/colls/bcast-arrival-scatter.c +++ b/src/smpi/colls/bcast-arrival-scatter.c @@ -1,3 +1,9 @@ +/* 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. */ + #include "colls_private.h" #ifndef BCAST_ARRIVAL_PATTERN_AWARE_HEADER_SIZE @@ -13,7 +19,7 @@ int smpi_coll_tuned_bcast_arrival_scatter(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { - int tag = 50; + int tag = -COLL_TAG_BCAST;//in order to use ANY_TAG, make this one positive int header_tag = 10; MPI_Status status; @@ -47,8 +53,8 @@ int smpi_coll_tuned_bcast_arrival_scatter(void *buf, int count, /* source and destination */ int to, from; - rank = smpi_comm_rank(MPI_COMM_WORLD); - size = smpi_comm_size(MPI_COMM_WORLD); + rank = smpi_comm_rank(comm); + size = smpi_comm_size(comm); /* message too small */ if (count < size) { @@ -90,11 +96,11 @@ int smpi_coll_tuned_bcast_arrival_scatter(void *buf, int count, for (k = 0; k < 3; k++) { for (i = 1; i < size; i++) { if ((already_sent[i] == 0) && (will_send[i] == 0)) { - smpi_mpi_iprobe(i, MPI_ANY_TAG, MPI_COMM_WORLD, &flag_array[i], + smpi_mpi_iprobe(i, MPI_ANY_TAG, comm, &flag_array[i], &temp_status_array[i]); if (flag_array[i] == 1) { will_send[i] = 1; - smpi_mpi_recv(&temp_buf[i], 1, MPI_CHAR, i, tag, MPI_COMM_WORLD, + smpi_mpi_recv(&temp_buf[i], 1, MPI_CHAR, i, tag, comm, &status); i = 0; } @@ -186,12 +192,9 @@ int smpi_coll_tuned_bcast_arrival_scatter(void *buf, int count, 0, tag, comm, &status); /* at this point all nodes in this set perform all-gather operation */ - to = header_buf[myordering + 1]; - from = header_buf[myordering - 1]; - if (myordering == 0) - from = header_buf[total_nodes - 1]; - if (myordering == (total_nodes - 1)) - to = header_buf[0]; + + to = (myordering == (total_nodes - 1)) ? header_buf[0] : header_buf[myordering + 1]; + from = (myordering == 0) ? header_buf[total_nodes - 1] : header_buf[myordering - 1]; /* last segment may have a larger size since it also include the remainder */