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

Service Account noreply at mpich.org
Tue Jul 28 17:01:38 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  24bb936af9c34cc7a7230bb0b41387bdd4ec99df (commit)
       via  7b0084a18b0d168a46e2202af74dbabd39357eb1 (commit)
      from  22a77dceda11da45d939e82f1c60618fd1439bea (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/24bb936af9c34cc7a7230bb0b41387bdd4ec99df

commit 24bb936af9c34cc7a7230bb0b41387bdd4ec99df
Author: Huiwei Lu <huiweilu at mcs.anl.gov>
Date:   Tue Jul 28 14:27:24 2015 -0500

    Fixes counters in multithreaded MPIR_Get_contextid_sparse_group
    
    The counter of idup_next_seqnum of the parent communicator need to be
    increased accordingly when allocating context id finishes so that the
    counters for multiple runs of MPI_Comm_idup and MPI_Comm_dup are set
    correctly.
    
    Refs #2291, #2286
    
    Signed-off-by: Lena Oden <loden at anl.gov>

diff --git a/src/mpi/comm/commutil.c b/src/mpi/comm/commutil.c
index 8248dfc..58b0522 100644
--- a/src/mpi/comm/commutil.c
+++ b/src/mpi/comm/commutil.c
@@ -1106,7 +1106,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;
+    int seqnum = 0;
     MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GET_CONTEXTID);
 
     MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GET_CONTEXTID);
@@ -1332,6 +1332,8 @@ 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:

http://git.mpich.org/mpich.git/commitdiff/7b0084a18b0d168a46e2202af74dbabd39357eb1

commit 7b0084a18b0d168a46e2202af74dbabd39357eb1
Author: Huiwei Lu <huiweilu at mcs.anl.gov>
Date:   Mon Jul 27 17:18:09 2015 -0500

    Fix single-threaded MPIR_Get_contextid_sparse_group
    
    The single-threaded case of MPIR_Get_contextid_sparse_group does not
    consider the mixing use of MPI_Comm_dup (and similar communicator
    duplication functions) and MPI_Comm_idup, which will cause the
    MPI_Comm_dup to fail.
    
    The fix is similar to #2286. It will use a sequence number to order
    different MPI_Comm_dup's and MPI_Comm_idup's when they are duplicating
    from the same parent communicator.
    
    Fixes #2291
    
    Signed-off-by: Lena Oden <loden at anl.gov>

diff --git a/src/mpi/comm/commutil.c b/src/mpi/comm/commutil.c
index 978e936..8248dfc 100644
--- a/src/mpi/comm/commutil.c
+++ b/src/mpi/comm/commutil.c
@@ -996,61 +996,63 @@ int MPIR_Get_contextid_sparse_group(MPID_Comm *comm_ptr, MPID_Group *group_ptr,
     int mpi_errno = MPI_SUCCESS;
     uint32_t     local_mask[MPIR_MAX_CONTEXT_MASK];
     mpir_errflag_t errflag = MPIR_ERR_NONE;
+    int seqnum = 0;
+    if (comm_ptr->idup_count)
+        seqnum = comm_ptr->idup_curr_seqnum++;
     MPID_MPI_STATE_DECL(MPID_STATE_MPIR_GET_CONTEXTID);
 
     MPID_MPI_FUNC_ENTER(MPID_STATE_MPIR_GET_CONTEXTID);
 
     *context_id = 0;
 
-    if (initialize_context_mask) {
-	MPIR_Init_contextid();
-    }
+    while (*context_id == 0) {
+        if (initialize_context_mask) {
+            MPIR_Init_contextid();
+        }
 
-    if (ignore_id) {
-        /* We are not participating in the resulting communicator, so our
-         * context ID space doesn't matter.  Set the mask to "all available". */
-        memset(local_mask, 0xff, MPIR_MAX_CONTEXT_MASK * sizeof(int));
-    }
-    else {
-        MPIU_Memcpy( local_mask, context_mask, MPIR_MAX_CONTEXT_MASK * sizeof(int) );
-    }
+        if (ignore_id) {
+            /* We are not participating in the resulting communicator, so our
+             * context ID space doesn't matter.  Set the mask to "all available". */
+            memset(local_mask, 0xff, MPIR_MAX_CONTEXT_MASK * sizeof(int));
+        }
+        else {
+            MPIU_Memcpy(local_mask, context_mask, MPIR_MAX_CONTEXT_MASK * sizeof(int));
+        }
+        if (comm_ptr->idup_count && seqnum != comm_ptr->idup_next_seqnum) {
+            memset(local_mask, 0, MPIR_MAX_CONTEXT_MASK * sizeof(int));
+        }
 
-    /* Note that this is the unthreaded version */
-    /* Comm must be an intracommunicator */
-    if (group_ptr != NULL) {
-        int coll_tag = tag | MPIR_Process.tagged_coll_mask; /* Shift tag into the tagged coll space */
-        mpi_errno = MPIR_Allreduce_group( MPI_IN_PLACE, local_mask, MPIR_MAX_CONTEXT_MASK,
-                                            MPI_INT, MPI_BAND, comm_ptr, group_ptr, coll_tag, &errflag );
-    } else {
-        mpi_errno = MPIR_Allreduce_impl( MPI_IN_PLACE, local_mask, MPIR_MAX_CONTEXT_MASK,
-                                            MPI_INT, MPI_BAND, comm_ptr, &errflag );
-    }
+        /* Note that this is the unthreaded version */
+        /* Comm must be an intracommunicator */
+        if (group_ptr != NULL) {
+            int coll_tag = tag | MPIR_Process.tagged_coll_mask; /* Shift tag into the tagged coll space */
+            mpi_errno = MPIR_Allreduce_group(MPI_IN_PLACE, local_mask, MPIR_MAX_CONTEXT_MASK,
+                                             MPI_INT, MPI_BAND, comm_ptr, group_ptr, coll_tag, &errflag);
+        } else {
+            mpi_errno = MPIR_Allreduce_impl(MPI_IN_PLACE, local_mask, MPIR_MAX_CONTEXT_MASK,
+                                            MPI_INT, MPI_BAND, comm_ptr, &errflag);
+        }
 
-    if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-    MPIU_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
+        if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+        MPIU_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
 
-    if (ignore_id) {
-        *context_id = MPIR_Locate_context_bit(local_mask);
-        if (*context_id == 0) {
-            int nfree = -1;
-            int ntotal = -1;
-            MPIR_ContextMaskStats(&nfree, &ntotal);
-            MPIU_ERR_SETANDJUMP3(mpi_errno, MPI_ERR_OTHER,
-                                 "**toomanycomm", "**toomanycomm %d %d %d",
-                                 nfree, ntotal, ignore_id);
+        if (ignore_id) {
+            *context_id = MPIR_Locate_context_bit(local_mask);
+            if (*context_id == 0) {
+                int nfree = -1;
+                int ntotal = -1;
+                MPIR_ContextMaskStats(&nfree, &ntotal);
+                MPIU_ERR_SETANDJUMP3(mpi_errno, MPI_ERR_OTHER,
+                                     "**toomanycomm", "**toomanycomm %d %d %d",
+                                     nfree, ntotal, ignore_id);
+            }
         }
-    }
-    else {
-        *context_id = MPIR_Find_and_allocate_context_id(local_mask);
-        if (*context_id == 0) {
-            int nfree = -1;
-            int ntotal = -1;
-            MPIR_ContextMaskStats(&nfree, &ntotal);
-            MPIU_ERR_SETANDJUMP3(mpi_errno, MPI_ERR_OTHER,
-                                 "**toomanycomm", "**toomanycomm %d %d %d",
-                                 nfree, ntotal, ignore_id);
+        else {
+            *context_id = MPIR_Find_and_allocate_context_id(local_mask);
         }
     }
+    if (seqnum > 0)
+        comm_ptr->idup_next_seqnum++;
 
 fn_exit:
     if (ignore_id)

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

Summary of changes:
 src/mpi/comm/commutil.c |   90 ++++++++++++++++++++++++----------------------
 1 files changed, 47 insertions(+), 43 deletions(-)


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list