[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.1-285-g725ffc9

Service Account noreply at mpich.org
Thu May 29 08:56:39 CDT 2014


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  725ffc91efbfc7414be7de9b26f5f01bdd6a7cce (commit)
       via  a55f4f42b385aa679eb9970061b2e6bac3974cf1 (commit)
      from  4058ce40d15ef5ce8ba2ce3b90ec0ae3e0568af9 (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/725ffc91efbfc7414be7de9b26f5f01bdd6a7cce

commit 725ffc91efbfc7414be7de9b26f5f01bdd6a7cce
Author: Michael Blocksome <blocksom at us.ibm.com>
Date:   Wed May 28 13:13:19 2014 -0500

    pamid: fix win_shared_query

diff --git a/src/mpid/pamid/include/mpidi_datatypes.h b/src/mpid/pamid/include/mpidi_datatypes.h
index 73cbb3a..de191b1 100644
--- a/src/mpid/pamid/include/mpidi_datatypes.h
+++ b/src/mpid/pamid/include/mpidi_datatypes.h
@@ -441,6 +441,7 @@ typedef struct MPIDI_Win_info
   uint32_t           disp_unit;     /**< Node's exposure window displacement units            */
   pami_memregion_t   memregion;     /**< Memory region descriptor for each node               */
   uint32_t           memregion_used;
+  MPI_Aint           base_size;     /**< Node's exposure window base size in bytes            */
 } MPIDI_Win_info;
 
 typedef pthread_mutex_t MPIDI_SHM_MUTEX;
diff --git a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
index be8e2e5..bdb241f 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
@@ -354,6 +354,7 @@ MPID_getSharedSegment(MPI_Aint     size,
             win->mpid.info[rank].base_addr = NULL;
         }
         win->base = win->mpid.info[rank].base_addr;
+        win->mpid.info[rank].base_size = size;
 
         /* set mutex_lock address and initialize it   */
         win->mpid.shm->mutex_lock = (pthread_mutex_t *) win->mpid.shm->base_addr;
@@ -378,6 +379,7 @@ MPID_getSharedSegment(MPI_Aint     size,
 
         /* calculate total number of bytes needed */
         for (i = 0; i < comm_size; ++i) {
+            win->mpid.info[i].base_size = tmp_buf[i];
             len = tmp_buf[i];
             if (*noncontig)
                 /* Round up to next page size */
@@ -508,20 +510,19 @@ MPID_Win_allocate_shared(MPI_Aint     size,
   if (mpi_errno != MPI_SUCCESS)
       return mpi_errno;
 
-  win->mpid.info[0].base_addr = win->base;
   if (comm_size > 1) {
-     char *cur_base = (*win_ptr)->base;
-     for (i = 1; i < comm_size; ++i) {
-          if (size) {
+      char *cur_base = (*win_ptr)->base;
+      for (i = 0; i < comm_size; ++i) {
+          if (win->mpid.info[i].base_size) {
               if (noncontig)  
                   /* Round up to next page size */
-                   win->mpid.info[i].base_addr =(void *) ((MPI_Aint) cur_base + (MPI_Aint) MPIDI_ROUND_UP_PAGESIZE(size,pageSize));
-                else
-                    win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base + (MPI_Aint) size);
-                cur_base = win->mpid.info[i].base_addr;
-           } else {
-                 win->mpid.info[i].base_addr = NULL; 
-           }
+                  win->mpid.info[i].base_addr =(void *) ((MPI_Aint) cur_base + (MPI_Aint) MPIDI_ROUND_UP_PAGESIZE(size,pageSize));
+              else
+                  win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base + (MPI_Aint) size);
+              cur_base = win->mpid.info[i].base_addr;
+          } else {
+              win->mpid.info[i].base_addr = NULL; 
+          }
       }
   }
 
diff --git a/src/mpid/pamid/src/onesided/mpid_win_shared_query.c b/src/mpid/pamid/src/onesided/mpid_win_shared_query.c
index 21e70fd..aef5458 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_shared_query.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_shared_query.c
@@ -39,13 +39,25 @@ int
 MPID_Win_shared_query(MPID_Win *win, int rank, MPI_Aint *size,
                            int *disp_unit, void *base_ptr)
 {
-    int mpi_errno = MPI_SUCCESS;
+    int i, mpi_errno = MPI_SUCCESS;
     static char FCNAME[] = "MPID_Win_shared_query";
     MPIU_ERR_CHKANDSTMT((win->create_flavor != MPI_WIN_FLAVOR_SHARED), mpi_errno,
                          MPI_ERR_RMA_FLAVOR, return mpi_errno, "**rmaflavor");
-    *((void **) base_ptr) = (void *) win->base;
-    *size             = win->size;
-    *disp_unit        = win->disp_unit;
+
+    if (rank == MPI_PROC_NULL) {
+      for (i=0; i<win->comm_ptr->local_size; ++i) {
+          if (win->mpid.info[i].base_size != 0) {
+              *((void **) base_ptr) = win->mpid.info[i].base_addr;
+              *size                 = win->mpid.info[i].base_size;
+              *disp_unit            = win->mpid.info[i].disp_unit;
+              break;
+          }
+      }
+    } else {
+        *((void **) base_ptr) = win->mpid.info[rank].base_addr;
+        *size                 = win->mpid.info[rank].base_size;
+        *disp_unit            = win->mpid.info[rank].disp_unit;
+    }
 
     return mpi_errno;
 }

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

commit a55f4f42b385aa679eb9970061b2e6bac3974cf1
Author: Michael Blocksome <blocksom at us.ibm.com>
Date:   Wed May 28 12:08:22 2014 -0500

    pamid: fix win_allocate_shared error handling
    
    Fixes #2101

diff --git a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
index c9a93fe..be8e2e5 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
@@ -154,16 +154,15 @@ int GetPageSize(void *addr, ulong *pageSize)
   return 0;
 }
 
-void *
+int
 MPID_getSharedSegment_mmap(MPID_Win * win)
 {
-  void * base_addr;
   int rank, rc, fd;
   int mpi_errno = MPI_SUCCESS;
   int errflag = FALSE;
   int first = 0;
 
-  snprintf (win->mpid.shm->shm_key, 63, "/mpich/comm-%d/win_shared", win->comm_ptr->context_id);
+  snprintf (win->mpid.shm->shm_key, 63, "/mpich.comm-%d.win_shared", win->comm_ptr->context_id);
   rc = shm_open (win->mpid.shm->shm_key, O_RDWR | O_CREAT | O_EXCL, 0600);
   if (0 == rc)
   {
@@ -177,17 +176,13 @@ MPID_getSharedSegment_mmap(MPID_Win * win)
   rc = ftruncate (fd, win->mpid.shm->segment_len);
   MPIU_ERR_CHKANDJUMP((rc == -1), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
 
-
-  base_addr = mmap (NULL, win->mpid.shm->segment_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-  if (base_addr == NULL || base_addr == MAP_FAILED || base_addr == (void *) -1) { /* error */
-    if (0 == rank) shm_unlink (win->mpid.shm->shm_key);
-    MPIU_ERR_CHKANDJUMP((win->mpid.shm->shm_id == -1), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
-  }
+  win->mpid.shm->base_addr = mmap (NULL, win->mpid.shm->segment_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+  MPIU_ERR_CHKANDJUMP((win->mpid.shm->base_addr == MAP_FAILED), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
 
   close (fd); /* no longer needed */
 
   /* set mutex_lock address and initialize it   */
-  win->mpid.shm->mutex_lock = (MPIDI_SHM_MUTEX *) base_addr;
+  win->mpid.shm->mutex_lock = (MPIDI_SHM_MUTEX *) win->mpid.shm->base_addr;
   if (1 == first) {
     MPIDI_SHM_MUTEX_INIT(win);
   }
@@ -198,14 +193,15 @@ MPID_getSharedSegment_mmap(MPID_Win * win)
   win->mpid.shm->allocated = 1;
 
 fn_exit:
-    return base_addr;
+    return mpi_errno;
     /* --BEGIN ERROR HANDLING-- */
 fn_fail:
+    shm_unlink (win->mpid.shm->shm_key);
     goto fn_exit;
     /* --END ERROR HANDLING-- */
 }
 
-void *
+int
 MPID_getSharedSegment_sysv(MPID_Win * win)
 {
     int mpi_errno = MPI_SUCCESS;
@@ -214,7 +210,6 @@ MPID_getSharedSegment_sysv(MPID_Win * win)
     int rank;
     char *cp;
     int shm_flag = IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR;
-    void * base_addr;
 
     shm_key = (uint32_t) -1;
 
@@ -272,11 +267,11 @@ MPID_getSharedSegment_sysv(MPID_Win * win)
         win->mpid.shm->shm_id = shmget(shm_key, win->mpid.shm->segment_len, shm_flag);
         MPIU_ERR_CHKANDJUMP((win->mpid.shm->shm_id == -1), mpi_errno, MPI_ERR_RMA_SHARED, "**rmashared");
 
-        base_addr = (void *) shmat(win->mpid.shm->shm_id,0,0);
-        MPIU_ERR_CHKANDJUMP((base_addr == (void*) -1), mpi_errno,MPI_ERR_BUFFER, "**bufnull");
+        win->mpid.shm->base_addr = (void *) shmat(win->mpid.shm->shm_id,0,0);
+        MPIU_ERR_CHKANDJUMP((win->mpid.shm->base_addr == (void*) -1), mpi_errno,MPI_ERR_BUFFER, "**bufnull");
 
         /* set mutex_lock address and initialize it */
-        win->mpid.shm->mutex_lock = (MPIDI_SHM_MUTEX *) base_addr;
+        win->mpid.shm->mutex_lock = (MPIDI_SHM_MUTEX *) win->mpid.shm->base_addr;
         MPIDI_SHM_MUTEX_INIT(win);
 
         /* successfully created shm segment - shared the key with other tasks */
@@ -288,15 +283,15 @@ MPID_getSharedSegment_sysv(MPID_Win * win)
 
         win->mpid.shm->shm_id = shmget(shm_key, 0, 0);
         if (win->mpid.shm->shm_id != -1) { /* shm segment is available */
-            base_addr = (void *) shmat(win->mpid.shm->shm_id,0,0);
+            win->mpid.shm->base_addr = (void *) shmat(win->mpid.shm->shm_id,0,0);
         }
-        win->mpid.shm->mutex_lock = (MPIDI_SHM_MUTEX *) base_addr;
+        win->mpid.shm->mutex_lock = (MPIDI_SHM_MUTEX *) win->mpid.shm->base_addr;
     }
 
     win->mpid.shm->allocated = 1;
 
 fn_exit:
-    return base_addr;
+    return mpi_errno;
     /* --BEGIN ERROR HANDLING-- */
 fn_fail:
     goto fn_exit;
@@ -401,12 +396,13 @@ MPID_getSharedSegment(MPI_Aint     size,
          * data buffer - possibly padded if non-contiguous.
          */
 #ifdef USE_SYSV_SHM
-        win->mpid.shm->base_addr = MPID_getSharedSegment_sysv(win);
+        mpi_errno = MPID_getSharedSegment_sysv(win);
 #elif  USE_MMAP_SHM
-        win->mpid.shm->base_addr = MPID_getSharedSegment_mmap(win);
+        mpi_errno = MPID_getSharedSegment_mmap(win);
 #else
         MPID_Abort(NULL, MPI_ERR_RMA_SHARED, -1, "RMA shared segment error");
 #endif
+        if (mpi_errno) MPIU_ERR_POP(mpi_errno);
 
         /* increment the shared counter */
         win->mpid.shm->shm_count=(int *)((MPI_Aint) win->mpid.shm->mutex_lock + (MPI_Aint) sizeof(MPIDI_SHM_MUTEX));
@@ -504,7 +500,9 @@ MPID_Win_allocate_shared(MPI_Aint     size,
 
   mpi_errno=CheckSpaceType(win_ptr,info,&noncontig);
   comm_size = (*win_ptr)->comm_ptr->local_size;
-  MPID_getSharedSegment(size, disp_unit,comm_ptr, win_ptr, &pageSize, &noncontig);
+  mpi_errno = MPID_getSharedSegment(size, disp_unit,comm_ptr, win_ptr, &pageSize, &noncontig);
+  if (mpi_errno != MPI_SUCCESS)
+      return mpi_errno;
 
   mpi_errno = MPIDI_Win_allgather(size,win_ptr);
   if (mpi_errno != MPI_SUCCESS)

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

Summary of changes:
 src/mpid/pamid/include/mpidi_datatypes.h           |    1 +
 .../pamid/src/onesided/mpid_win_allocate_shared.c  |   65 ++++++++++----------
 .../pamid/src/onesided/mpid_win_shared_query.c     |   20 +++++-
 3 files changed, 49 insertions(+), 37 deletions(-)


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list