[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.1b1-66-g833f2e3

mysql vizuser noreply at mpich.org
Thu Sep 26 16:55:13 CDT 2013


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  833f2e3e92c48a25b961ec2c8ebf9b9ca4931ea5 (commit)
       via  242a9356db9389b1c2a310e58b9ca411214c37c7 (commit)
       via  231b2ce59ecaea86bb7cf1ca926e1bcaed92a717 (commit)
       via  d0927f698a4ada598937d84141348d8f31dc71f1 (commit)
       via  2d1616687c5ca9e22146feb0196c148f3819f23b (commit)
       via  8f1b4bd29e5b4cc4a70ea3dd2f79ed5680f1135a (commit)
      from  441d189a37b158c44abeb84c4fd7c505402cfe96 (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/833f2e3e92c48a25b961ec2c8ebf9b9ca4931ea5

commit 833f2e3e92c48a25b961ec2c8ebf9b9ca4931ea5
Author: Xin Zhao <xinzhao3 at illinois.edu>
Date:   Thu Sep 26 15:00:01 2013 -0500

    fix bug:pass info to win_allocate and free info.
    
    Signed-off-by: Pavan Balaji <balaji at mcs.anl.gov>

diff --git a/test/mpi/rma/mcs-mutex.c b/test/mpi/rma/mcs-mutex.c
index 0ef0b9e..52a3bbf 100644
--- a/test/mpi/rma/mcs-mutex.c
+++ b/test/mpi/rma/mcs-mutex.c
@@ -45,14 +45,12 @@ int MCS_Mutex_create(int tail_rank, MPI_Comm comm, MCS_Mutex * hdl_out)
 #ifdef USE_WIN_ALLOC_SHM
     MPI_Info_create(&hdl->win_info);
     MPI_Info_set(hdl->win_info, "alloc_shm", "true");
-    MPI_Win_allocate(2*sizeof(int), sizeof(int), hdl->win_info, hdl->comm,
-                     &hdl->base, &hdl->window);
 #else
     MPI_Info_create(&hdl->win_info);
     MPI_Info_set(hdl->win_info, "alloc_shm", "false");
-    MPI_Win_allocate(2*sizeof(int), sizeof(int), MPI_INFO_NULL, hdl->comm,
-                     &hdl->base, &hdl->window);
 #endif
+    MPI_Win_allocate(2*sizeof(int), sizeof(int), hdl->win_info, hdl->comm,
+                     &hdl->base, &hdl->window);
 #endif
 
     MPI_Win_lock_all(0, hdl->window);
@@ -82,7 +80,7 @@ int MCS_Mutex_free(MCS_Mutex * hdl_ptr)
 
     MPI_Win_free(&hdl->window);
     MPI_Comm_free(&hdl->comm);
-#ifdef USE_WIN_ALLOC_SHM
+#ifndef USE_WIN_SHARED
     MPI_Info_free(&hdl->win_info);
 #endif
 

http://git.mpich.org/mpich.git/commitdiff/242a9356db9389b1c2a310e58b9ca411214c37c7

commit 242a9356db9389b1c2a310e58b9ca411214c37c7
Author: Pavan Balaji <balaji at mcs.anl.gov>
Date:   Thu Sep 26 01:59:11 2013 -0500

    Do a memory barrier at the end of a flushall.
    
    The memory barrier ensures that all load/store operations issued
    directly to shared memory are complete.
    
    Signed-off-by: Xin Zhao <xinzhao3 at illinois.edu>

diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 47487d2..c457350 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -2177,6 +2177,12 @@ int MPIDI_Win_flush_all(MPID_Win *win_ptr)
         }
     }
 
+     /* Ensure that all shared memory operations are flushed out.  The memory
+      * barriers in the flush are not sufficient since we skip calling flush
+      * when all operations are already completed. */
+     if (win_ptr->shm_allocated == TRUE)
+         OPA_read_write_barrier();
+
  fn_exit:
     MPIDI_RMA_FUNC_EXIT(MPIDI_STATE_MPIDI_WIN_FLUSH_ALL);
     return mpi_errno;

http://git.mpich.org/mpich.git/commitdiff/231b2ce59ecaea86bb7cf1ca926e1bcaed92a717

commit 231b2ce59ecaea86bb7cf1ca926e1bcaed92a717
Author: Xin Zhao <xinzhao3 at illinois.edu>
Date:   Thu Sep 26 14:36:48 2013 -0500

    delete exit after do memory barrier.
    
    Because when SHM is allocated, it is possible that orig rank and target rank
    are on different nodes, in such situation operations are not done yet and
    win_flush cannot exit.
    
    Signed-off-by: Pavan Balaji <balaji at mcs.anl.gov>

diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 20e4bf5..47487d2 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -2225,12 +2225,8 @@ int MPIDI_Win_flush(int rank, MPID_Win *win_ptr)
        terms of MPIDI_Win_flush.  When this changes, those operations will also
        need to insert this read/write memory fence for shared memory windows. */
 
-    /* For shared memory windows, all operations are done immediately, so there
-       is nothing to flush.  Ensure ordering of load/store operations and
-       return. */
     if (win_ptr->shm_allocated == TRUE) {
         OPA_read_write_barrier();
-        goto fn_exit;
     }
 
     rma_op = MPIDI_CH3I_RMA_Ops_head(&win_ptr->targets[rank].rma_ops_list);

http://git.mpich.org/mpich.git/commitdiff/d0927f698a4ada598937d84141348d8f31dc71f1

commit d0927f698a4ada598937d84141348d8f31dc71f1
Author: Xin Zhao <xinzhao3 at illinois.edu>
Date:   Thu Sep 26 14:35:08 2013 -0500

    Change FLAVOR to shared memory checks in win_flush.
    
    Check shm_allocated flag in win_flush to determine if do full
    memory barrier or not.
    
    Signed-off-by: Pavan Balaji <balaji at mcs.anl.gov>

diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index c0c1e78..20e4bf5 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -2228,7 +2228,7 @@ int MPIDI_Win_flush(int rank, MPID_Win *win_ptr)
     /* For shared memory windows, all operations are done immediately, so there
        is nothing to flush.  Ensure ordering of load/store operations and
        return. */
-    if (win_ptr->create_flavor == MPI_WIN_FLAVOR_SHARED) {
+    if (win_ptr->shm_allocated == TRUE) {
         OPA_read_write_barrier();
         goto fn_exit;
     }

http://git.mpich.org/mpich.git/commitdiff/2d1616687c5ca9e22146feb0196c148f3819f23b

commit 2d1616687c5ca9e22146feb0196c148f3819f23b
Author: Xin Zhao <xinzhao3 at illinois.edu>
Date:   Thu Sep 26 14:32:06 2013 -0500

    Update FLAVOR checks with shared memory checks.
    
    Check both shm_allocated flag and VC's node_id for
    req-based operations.
    
    Signed-off-by: Pavan Balaji <balaji at mcs.anl.gov>

diff --git a/src/mpid/ch3/src/ch3u_rma_reqops.c b/src/mpid/ch3/src/ch3u_rma_reqops.c
index 71335b3..e0af215 100644
--- a/src/mpid/ch3/src/ch3u_rma_reqops.c
+++ b/src/mpid/ch3/src/ch3u_rma_reqops.c
@@ -148,6 +148,7 @@ int MPIDI_Rput(const void *origin_addr, int origin_count,
     MPI_Aint dt_true_lb ATTRIBUTE((unused));
     MPIDI_msg_sz_t data_sz;
     MPIDI_CH3I_Rma_req_state_t *req_state;
+    MPIDI_VC_t *orig_vc, *target_vc;
     MPIU_CHKPMEM_DECL(1);
     MPIDI_STATE_DECL(MPID_STATE_MPIDI_RPUT);
 
@@ -178,11 +179,14 @@ int MPIDI_Rput(const void *origin_addr, int origin_count,
         if (mpi_errno != MPI_SUCCESS) { MPIU_ERR_POP(mpi_errno); }
     }
 
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, win_ptr->comm_ptr->rank, &orig_vc);
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, target_rank, &target_vc);
+
     /* If the operation is already complete, return a completed request.
      * Otherwise, generate a grequest. */
     /* FIXME: We still may need to flush or sync for shared memory windows */
     if (target_rank == MPI_PROC_NULL || target_rank == win_ptr->comm_ptr->rank ||
-        win_ptr->create_flavor == MPI_WIN_FLAVOR_SHARED || data_sz == 0)
+        (win_ptr->shm_allocated == TRUE && orig_vc->node_id == target_vc->node_id) || data_sz == 0)
     {
         mpi_errno = MPIR_Grequest_start_impl(MPIDI_CH3I_Rma_req_query,
                                              MPIDI_CH3I_Rma_req_free,
@@ -229,6 +233,7 @@ int MPIDI_Rget(void *origin_addr, int origin_count,
     MPI_Aint dt_true_lb ATTRIBUTE((unused));
     MPIDI_msg_sz_t data_sz;
     MPIDI_CH3I_Rma_req_state_t *req_state;
+    MPIDI_VC_t *orig_vc, *target_vc;
     MPIU_CHKPMEM_DECL(1);
     MPIDI_STATE_DECL(MPID_STATE_MPIDI_RGET);
 
@@ -259,11 +264,14 @@ int MPIDI_Rget(void *origin_addr, int origin_count,
         if (mpi_errno != MPI_SUCCESS) { MPIU_ERR_POP(mpi_errno); }
     }
 
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, win_ptr->comm_ptr->rank, &orig_vc);
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, target_rank, &target_vc);
+
     /* If the operation is already complete, return a completed request.
      * Otherwise, generate a grequest. */
     /* FIXME: We still may need to flush or sync for shared memory windows */
     if (target_rank == MPI_PROC_NULL || target_rank == win_ptr->comm_ptr->rank ||
-        win_ptr->create_flavor == MPI_WIN_FLAVOR_SHARED || data_sz == 0)
+        (win_ptr->shm_allocated == TRUE && orig_vc->node_id == target_vc->node_id) || data_sz == 0)
     {
         mpi_errno = MPIR_Grequest_start_impl(MPIDI_CH3I_Rma_req_query,
                                              MPIDI_CH3I_Rma_req_free,
@@ -310,6 +318,7 @@ int MPIDI_Raccumulate(const void *origin_addr, int origin_count,
     MPI_Aint dt_true_lb ATTRIBUTE((unused));
     MPIDI_msg_sz_t data_sz;
     MPIDI_CH3I_Rma_req_state_t *req_state;
+    MPIDI_VC_t *orig_vc, *target_vc;
     MPIU_CHKPMEM_DECL(1);
     MPIDI_STATE_DECL(MPID_STATE_MPIDI_RACCUMULATE);
 
@@ -339,11 +348,14 @@ int MPIDI_Raccumulate(const void *origin_addr, int origin_count,
         if (mpi_errno != MPI_SUCCESS) { MPIU_ERR_POP(mpi_errno); }
     }
 
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, win_ptr->comm_ptr->rank, &orig_vc);
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, target_rank, &target_vc);
+
     /* If the operation is already complete, return a completed request.
      * Otherwise, generate a grequest. */
     /* FIXME: We still may need to flush or sync for shared memory windows */
     if (target_rank == MPI_PROC_NULL || target_rank == win_ptr->comm_ptr->rank ||
-        win_ptr->create_flavor == MPI_WIN_FLAVOR_SHARED || data_sz == 0)
+        (win_ptr->shm_allocated == TRUE && orig_vc->node_id == target_vc->node_id) || data_sz == 0)
     {
         mpi_errno = MPIR_Grequest_start_impl(MPIDI_CH3I_Rma_req_query,
                                              MPIDI_CH3I_Rma_req_free,
@@ -391,6 +403,7 @@ int MPIDI_Rget_accumulate(const void *origin_addr, int origin_count,
     MPI_Aint dt_true_lb ATTRIBUTE((unused));
     MPIDI_msg_sz_t data_sz, trg_data_sz;
     MPIDI_CH3I_Rma_req_state_t *req_state;
+    MPIDI_VC_t *orig_vc, *target_vc;
     MPIU_CHKPMEM_DECL(1);
     MPIDI_STATE_DECL(MPID_STATE_MPIDI_RGET_ACCUMULATE);
 
@@ -425,11 +438,14 @@ int MPIDI_Rget_accumulate(const void *origin_addr, int origin_count,
         if (mpi_errno != MPI_SUCCESS) { MPIU_ERR_POP(mpi_errno); }
     }
 
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, win_ptr->comm_ptr->rank, &orig_vc);
+    MPIDI_Comm_get_vc(win_ptr->comm_ptr, target_rank, &target_vc);
+
     /* If the operation is already complete, return a completed request.
      * Otherwise, generate a grequest. */
     /* FIXME: We still may need to flush or sync for shared memory windows */
     if (target_rank == MPI_PROC_NULL || target_rank == win_ptr->comm_ptr->rank ||
-        win_ptr->create_flavor == MPI_WIN_FLAVOR_SHARED ||
+        (win_ptr->shm_allocated == TRUE && orig_vc->node_id == target_vc->node_id) ||
         (data_sz == 0 && trg_data_sz == 0))
     {
         mpi_errno = MPIR_Grequest_start_impl(MPIDI_CH3I_Rma_req_query,

http://git.mpich.org/mpich.git/commitdiff/8f1b4bd29e5b4cc4a70ea3dd2f79ed5680f1135a

commit 8f1b4bd29e5b4cc4a70ea3dd2f79ed5680f1135a
Author: Pavan Balaji <balaji at mcs.anl.gov>
Date:   Thu Sep 26 01:46:51 2013 -0500

    Win_flush_all optimization.
    
    During a win_flush_all, if a target does not have any operations to
    flush out, don't call the win_flush function at all.  This reduces the
    number of function calls on large systems where the RMA operations are
    sparsely issued.
    
    Signed-off-by: Xin Zhao <xinzhao3 at illinois.edu>

diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index fbf609f..c0c1e78 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -2169,6 +2169,8 @@ int MPIDI_Win_flush_all(MPID_Win *win_ptr)
      * make asynchronous progress.  Currently this is handled by Win_flush().
      */
      for (i = 0; i < MPIR_Comm_size(win_ptr->comm_ptr); i++) {
+         if (MPIDI_CH3I_RMA_Ops_head(&win_ptr->targets[i].rma_ops_list) == NULL)
+             continue;
         if (win_ptr->targets[i].remote_lock_state != MPIDI_CH3_WIN_LOCK_NONE) {
             mpi_errno = win_ptr->RMAFns.Win_flush(i, win_ptr);
             if (mpi_errno != MPI_SUCCESS) { MPIU_ERR_POP(mpi_errno); }

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

Summary of changes:
 src/mpid/ch3/src/ch3u_rma_reqops.c |   24 ++++++++++++++++++++----
 src/mpid/ch3/src/ch3u_rma_sync.c   |   14 +++++++++-----
 test/mpi/rma/mcs-mutex.c           |    8 +++-----
 3 files changed, 32 insertions(+), 14 deletions(-)


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list