[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.2b4-135-g487ec8e

Service Account noreply at mpich.org
Tue Aug 18 10:32:47 CDT 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".

The branch, master has been updated
       via  487ec8e3d2bed615f979f39db81832e83ec682c0 (commit)
      from  d23e33d49fd9af8eecff8f7bb582cd2e09a807ed (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/487ec8e3d2bed615f979f39db81832e83ec682c0

commit 487ec8e3d2bed615f979f39db81832e83ec682c0
Author: Lena Oden <loden at anl.gov>
Date:   Mon Aug 17 13:10:52 2015 -0500

    Fix overlapping comm_idup and comm_group_create
    
    This patch adds a tag for correctly ordering comm_idup and other
    blocking context id allocation functions such as comm_dup and
    comm_create_group. The tag of comm_idup is always higher than the tag of
    all blocking operations on the same communicator. Therefore, on the same
    communicator, all blocking context id allocation functions will have
    higher priorities than idup if they are called at the same time.
    
    Signed-off-by: Huiwei Lu <huiweilu at mcs.anl.gov>

diff --git a/src/mpi/comm/contextid.c b/src/mpi/comm/contextid.c
index 87d10fd..c9a6cf8 100644
--- a/src/mpi/comm/contextid.c
+++ b/src/mpi/comm/contextid.c
@@ -331,7 +331,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
     int own_eager_mask = 0;
     MPIR_Errflag_t errflag = MPIR_ERR_NONE;
     int first_iter = 1;
-    int seqnum = 0;
+
     MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GET_CONTEXTID);
 
     MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GET_CONTEXTID);
@@ -379,10 +379,6 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
         else if (first_iter) {
             memset(local_mask, 0, MPIR_MAX_CONTEXT_MASK * sizeof(int));
             own_eager_mask = 0;
-            if (comm_ptr->idup_count)
-                seqnum = comm_ptr->idup_curr_seqnum++;
-
-
             /* Attempt to reserve the eager mask segment */
             if (!eager_in_use && eager_nelem > 0) {
                 int i;
@@ -403,8 +399,7 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
                 lowest_tag = tag;
             }
 
-            if (mask_in_use || !(comm_ptr->context_id == lowest_context_id && tag == lowest_tag) ||
-                (comm_ptr->idup_count && seqnum != comm_ptr->idup_next_seqnum)) {
+            if (mask_in_use || !(comm_ptr->context_id == lowest_context_id && tag == lowest_tag)){
                 memset(local_mask, 0, MPIR_MAX_CONTEXT_MASK * sizeof(int));
                 own_mask = 0;
                 MPIU_DBG_MSG_D(COMM, VERBOSE, "In in-use, set lowest_context_id to %d",
@@ -412,7 +407,6 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
             }
             else {
                 int i;
-
                 /* Copy safe mask segment to local_mask */
                 for (i = 0; i < eager_nelem; i++)
                     local_mask[i] = 0;
@@ -501,7 +495,6 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
                     lowest_tag = -1;
                     /* Else leave it alone; there is another thread waiting */
                 }
-                comm_ptr->idup_curr_seqnum++;
             }
             else {
                 /* else we did not find a context id. Give up the mask in case
@@ -577,9 +570,6 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm * comm_ptr, MPID_Group * group_ptr
 
         first_iter = 0;
     }
-    if (seqnum > 0)
-        comm_ptr->idup_next_seqnum++;
-
 
   fn_exit:
     if (ignore_id)
@@ -606,6 +596,7 @@ struct gcn_state {
     int own_eager_mask;
     int first_iter;
     int seqnum;
+    int tag;
     MPID_Comm *comm_ptr;
     MPID_Comm *comm_ptr_inter;
     MPID_Sched_t s;
@@ -779,8 +770,9 @@ static int sched_cb_gcn_copy_mask(MPID_Comm * comm, int tag, void *state)
 
     }
     else {
-        if (st->comm_ptr->context_id < lowest_context_id) {
+        if (st->comm_ptr->context_id < lowest_context_id ) {
             lowest_context_id = st->comm_ptr->context_id;
+            lowest_tag = st->tag;
         }
 
         /* If one of the following conditions happens, set local_mask to zero
@@ -790,7 +782,7 @@ static int sched_cb_gcn_copy_mask(MPID_Comm * comm, int tag, void *state)
          * 3. for the case that multiple communicators duplicating from the
          *    same communicator at the same time, the sequence number of the
          *    current MPI_COMM_IDUP operation is not the smallest. */
-        if (mask_in_use || (st->comm_ptr->context_id != lowest_context_id)
+        if (mask_in_use || (st->comm_ptr->context_id != lowest_context_id) || ( st->comm_ptr->context_id == lowest_context_id && lowest_tag < st->tag)
             || (st->comm_ptr->idup_count > 1 && st->seqnum != st->comm_ptr->idup_next_seqnum)) {
             memset(st->local_mask, 0, MPIR_MAX_CONTEXT_MASK * sizeof(int));
             st->own_mask = 0;
@@ -882,6 +874,8 @@ static int sched_get_cid_nonblock(MPID_Comm * comm_ptr, MPID_Comm * newcomm,
     MPIU_CHKPMEM_MALLOC(st, struct gcn_state *, sizeof(struct gcn_state), mpi_errno, "gcn_state");
     st->ctx0 = ctx0;
     st->ctx1 = ctx1;
+    /* since the tag is only used for odering, it can be higher than tag_ub*/
+    st->tag =  MPIR_Process.attrs.tag_ub+1;
     if (gcn_cid_kind == MPID_INTRACOMM) {
         st->comm_ptr = comm_ptr;
         st->comm_ptr_inter = NULL;

-----------------------------------------------------------------------

Summary of changes:
 src/mpi/comm/contextid.c |   22 ++++++++--------------
 1 files changed, 8 insertions(+), 14 deletions(-)


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list