From: Augustin Degomme Date: Mon, 8 Jul 2013 12:18:56 +0000 (+0200) Subject: Make internal collective flags negative (incorrect in MPI), to avoid confusion with... X-Git-Tag: v3_9_90~195 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/14c4d40b625501275e7ec6eccd6f92f659316f85 Make internal collective flags negative (incorrect in MPI), to avoid confusion with user's messages This was seen when user's code was using MPI_ANY_TAG to receive any message (from the userland code), and lead to confusions. --- diff --git a/src/smpi/colls/bcast-arrival-nb.c b/src/smpi/colls/bcast-arrival-nb.c index 15280f4c0b..e1de48c623 100644 --- a/src/smpi/colls/bcast-arrival-nb.c +++ b/src/smpi/colls/bcast-arrival-nb.c @@ -10,7 +10,7 @@ int smpi_coll_tuned_bcast_arrival_nb(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { - int tag = COLL_TAG_BCAST; + int tag = -COLL_TAG_BCAST; MPI_Status status; MPI_Request request; MPI_Request *send_request_array; diff --git a/src/smpi/colls/bcast-arrival-pattern-aware-wait.c b/src/smpi/colls/bcast-arrival-pattern-aware-wait.c index 285c1637d9..11fb5da936 100644 --- a/src/smpi/colls/bcast-arrival-pattern-aware-wait.c +++ b/src/smpi/colls/bcast-arrival-pattern-aware-wait.c @@ -27,7 +27,7 @@ int smpi_coll_tuned_bcast_arrival_pattern_aware_wait(void *buf, int count, int rank, size; int i, j, k; - int tag = COLL_TAG_BCAST; + int tag = -COLL_TAG_BCAST; int will_send[BCAST_ARRIVAL_PATTERN_AWARE_MAX_NODE]; int sent_count; diff --git a/src/smpi/colls/bcast-arrival-pattern-aware.c b/src/smpi/colls/bcast-arrival-pattern-aware.c index 1e8f95ada0..073f085e58 100644 --- a/src/smpi/colls/bcast-arrival-pattern-aware.c +++ b/src/smpi/colls/bcast-arrival-pattern-aware.c @@ -10,7 +10,7 @@ int smpi_coll_tuned_bcast_arrival_pattern_aware(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { - int tag = COLL_TAG_BCAST; + int tag = -COLL_TAG_BCAST; MPI_Status status; MPI_Request request; MPI_Request *send_request_array; diff --git a/src/smpi/colls/bcast-arrival-scatter.c b/src/smpi/colls/bcast-arrival-scatter.c index 761c15fbaf..2b5609228e 100644 --- a/src/smpi/colls/bcast-arrival-scatter.c +++ b/src/smpi/colls/bcast-arrival-scatter.c @@ -13,7 +13,7 @@ int smpi_coll_tuned_bcast_arrival_scatter(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { - int tag = COLL_TAG_BCAST; + int tag = -COLL_TAG_BCAST;//in order to use ANY_TAG, make this one positive int header_tag = 10; MPI_Status status; diff --git a/src/smpi/colls/reduce-arrival-pattern-aware.c b/src/smpi/colls/reduce-arrival-pattern-aware.c index 4038e7049a..b743323132 100644 --- a/src/smpi/colls/reduce-arrival-pattern-aware.c +++ b/src/smpi/colls/reduce-arrival-pattern-aware.c @@ -21,7 +21,7 @@ int smpi_coll_tuned_reduce_arrival_pattern_aware(void *buf, void *rbuf, int rank; rank = smpi_comm_rank(comm); - int tag = COLL_TAG_REDUCE; + int tag = -COLL_TAG_REDUCE; MPI_Status status; MPI_Request request; MPI_Request *send_request_array; diff --git a/src/smpi/private.h b/src/smpi/private.h index 6c34cd07c8..45cdf61b71 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -48,19 +48,19 @@ typedef struct s_smpi_mpi_datatype{ } s_smpi_mpi_datatype_t; -#define COLL_TAG_REDUCE 111 -#define COLL_TAG_SCATTER 222 -#define COLL_TAG_SCATTERV 333 -#define COLL_TAG_GATHER 444 -#define COLL_TAG_ALLGATHER 555 -#define COLL_TAG_ALLGATHERV 666 -#define COLL_TAG_BARRIER 777 -#define COLL_TAG_REDUCE_SCATTER 888 -#define COLL_TAG_ALLTOALLV 999 -#define COLL_TAG_ALLTOALL 1111 -#define COLL_TAG_GATHERV 2222 -#define COLL_TAG_BCAST 3333 -#define COLL_TAG_ALLREDUCE 4444 +#define COLL_TAG_REDUCE -112 +#define COLL_TAG_SCATTER -223 +#define COLL_TAG_SCATTERV -334 +#define COLL_TAG_GATHER -445 +#define COLL_TAG_ALLGATHER -556 +#define COLL_TAG_ALLGATHERV -667 +#define COLL_TAG_BARRIER -778 +#define COLL_TAG_REDUCE_SCATTER -889 +#define COLL_TAG_ALLTOALLV -1000 +#define COLL_TAG_ALLTOALL -1112 +#define COLL_TAG_GATHERV -2223 +#define COLL_TAG_BCAST -3334 +#define COLL_TAG_ALLREDUCE -4445 //***************************************************************************************** typedef struct s_smpi_mpi_request { diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 17328f3b97..e106bb6d57 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -25,7 +25,7 @@ static int match_recv(void* a, void* b, smx_action_t ignored) { xbt_assert(ref, "Cannot match recv against null reference"); xbt_assert(req, "Cannot match recv against null request"); if((ref->src == MPI_ANY_SOURCE || req->src == ref->src) - && (ref->tag == MPI_ANY_TAG || req->tag == ref->tag)){ + && ((ref->tag == MPI_ANY_TAG && req->tag >=0) || req->tag == ref->tag)){ //we match, we can transfer some values // FIXME : move this to the copy function ? if(ref->src == MPI_ANY_SOURCE)ref->real_src = req->src; @@ -34,6 +34,7 @@ static int match_recv(void* a, void* b, smx_action_t ignored) { if(req->detached==1){ ref->detached_sender=req; //tie the sender to the receiver, as it is detached and has to be freed in the receiver } + XBT_DEBUG("match succeeded"); return 1; }else return 0; } @@ -46,7 +47,7 @@ static int match_send(void* a, void* b,smx_action_t ignored) { xbt_assert(req, "Cannot match send against null request"); if((req->src == MPI_ANY_SOURCE || req->src == ref->src) - && (req->tag == MPI_ANY_TAG || req->tag == ref->tag)) + && ((req->tag == MPI_ANY_TAG && ref->tag >=0)|| req->tag == ref->tag)) { if(req->src == MPI_ANY_SOURCE)req->real_src = ref->src; if(req->tag == MPI_ANY_TAG)req->real_tag = ref->tag; @@ -54,7 +55,7 @@ static int match_send(void* a, void* b,smx_action_t ignored) { if(ref->detached==1){ req->detached_sender=ref; //tie the sender to the receiver, as it is detached and has to be freed in the receiver } - + XBT_DEBUG("match succeeded"); return 1; } else return 0; } diff --git a/src/smpi/smpi_coll.c b/src/smpi/smpi_coll.c index 172ddb167c..a2b573c178 100644 --- a/src/smpi/smpi_coll.c +++ b/src/smpi/smpi_coll.c @@ -243,7 +243,7 @@ static void build_tree(int root, int rank, int size, proc_tree_t * tree) static void tree_bcast(void *buf, int count, MPI_Datatype datatype, MPI_Comm comm, proc_tree_t tree) { - int system_tag = 999; // used negative int but smpi_create_request() declares this illegal (to be checked) + int system_tag = COLL_TAG_BCAST; int rank, i; MPI_Request *requests; @@ -281,7 +281,7 @@ static void tree_bcast(void *buf, int count, MPI_Datatype datatype, static void tree_antibcast(void *buf, int count, MPI_Datatype datatype, MPI_Comm comm, proc_tree_t tree) { - int system_tag = 999; // used negative int but smpi_create_request() declares this illegal (to be checked) + int system_tag = COLL_TAG_BCAST; int rank, i; MPI_Request *requests;