[mpich] MPICH primary repository branch, master, updated. v3.1.2-66-g658ff0d
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 658ff0d92533793bf453fc079e2b96cf576ac1f4 (commit) via 6b7f60e76177def5f603f04ffe79c17b495f144d (commit) via 2caecaceac3bbe87720e9c1eb4a65bfea64ace32 (commit) via 11314276d9c0cc0aadd199745b99bf063b1e38ed (commit) via 3ac6a32ea03936403111d43956168361ab9ffcdc (commit) from 122dbd96b2df6e517fe1589fac0133d1bc381db6 (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/658ff0d92533793bf453fc079e2b96cf57... commit 658ff0d92533793bf453fc079e2b96cf576ac1f4 Author: Michael Blocksome <[email protected]> Date: Fri Aug 1 13:09:59 2014 -0500 pamid: fix MPI_MODE_NOPRECEDE assertion The user assertion 'MPI_MODE_NOPRECEDE' for MPI_Win_fence() does not require the mpi implementation to abort if the current epoch is not MPID_EPOTYPE_NONE. From the MPI 3.0 standard, page 441: "A fence call usually entails a barrier synchronization: a process completes a call to MPI_WIN_FENCE only after all other processes in the group entered their matching call. However, a call to MPI_WIN_FENCE that is known not to end any epoch (in particular, a call with assert equal to MPI_MODE_NOPRECEDE) does not necessarily act as a barrier." page 452: "MPI_MODE_NOPRECEDE — the fence does not complete any sequence of locally issued RMA calls. If this assertion is given by any process in the window group, then it must be given by all processes in the group" Signed-off-by: Su Huang <[email protected]> diff --git a/src/mpid/pamid/src/onesided/mpid_win_fence.c b/src/mpid/pamid/src/onesided/mpid_win_fence.c index a2245ab..17bb022 100644 --- a/src/mpid/pamid/src/onesided/mpid_win_fence.c +++ b/src/mpid/pamid/src/onesided/mpid_win_fence.c @@ -34,14 +34,6 @@ MPID_Win_fence(int assert, return mpi_errno, "**rmasync"); } - if ((assert & MPI_MODE_NOPRECEDE) && - win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_NONE) { - /* --BEGIN ERROR HANDLING-- */ - MPIU_ERR_SETANDSTMT(mpi_errno, MPI_ERR_RMA_SYNC, - return mpi_errno, "**rmasync"); - /* --END ERROR HANDLING-- */ - } - if (!(assert & MPI_MODE_NOPRECEDE) && win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_FENCE && win->mpid.sync.origin_epoch_type != MPID_EPOTYPE_REFENCE && @@ -69,6 +61,10 @@ MPID_Win_fence(int assert, win->mpid.sync.target_epoch_type = MPID_EPOTYPE_REFENCE; } - mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &mpi_errno); + if (!(assert & MPI_MODE_NOPRECEDE)) + { + mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &mpi_errno); + } + return mpi_errno; } http://git.mpich.org/mpich.git/commitdiff/6b7f60e76177def5f603f04ffe79c17b49... commit 6b7f60e76177def5f603f04ffe79c17b495f144d Author: Michael Blocksome <[email protected]> Date: Fri Aug 1 12:26:40 2014 -0500 pamid: do not create memregions for shared memory windows Signed-off-by: Su Huang <[email protected]> diff --git a/src/mpid/pamid/src/onesided/mpid_win_create.c b/src/mpid/pamid/src/onesided/mpid_win_create.c index 20ce66a..15f5e60 100644 --- a/src/mpid/pamid/src/onesided/mpid_win_create.c +++ b/src/mpid/pamid/src/onesided/mpid_win_create.c @@ -104,41 +104,43 @@ MPIDI_Win_init( MPI_Aint length, int MPIDI_Win_allgather( MPI_Aint size, MPID_Win **win_ptr ) { - int mpi_errno = MPI_SUCCESS; - MPID_Win *win; - int rank; - MPID_Comm *comm_ptr; - size_t length_out = 0; - pami_result_t rc; - MPIDI_Win_info *winfo; - static char FCNAME[] = "MPIDI_Win_allgather"; + int mpi_errno = MPI_SUCCESS; + MPID_Win *win; + int rank; + MPID_Comm *comm_ptr; + size_t length_out = 0; + pami_result_t rc; + MPIDI_Win_info *winfo; + static char FCNAME[] = "MPIDI_Win_allgather"; win = *win_ptr; comm_ptr = win->comm_ptr; rank = comm_ptr->rank; winfo = &win->mpid.info[rank]; - /* --------------------------------------- */ - /* Setup the PAMI sections of the window */ - /* --------------------------------------- */ -#ifdef USE_PAMI_RDMA - if (size != 0) - { - rc = PAMI_Memregion_create(MPIDI_Context[0], win->mpid.info[rank].base_addr, win->mpid.info[rank].base_size, &length_out, &winfo->memregion); - MPIU_ERR_CHKANDJUMP((rc != PAMI_SUCCESS), mpi_errno, MPI_ERR_OTHER, "**nomem"); - MPIU_ERR_CHKANDJUMP((win->size < length_out), mpi_errno, MPI_ERR_OTHER, "**nomem"); - } -#else - if ( (!MPIDI_Process.mp_s_use_pami_get) && (size != 0) ) + if (size != 0 && win->create_flavor != MPI_WIN_FLAVOR_SHARED) { - rc = PAMI_Memregion_create(MPIDI_Context[0], win->mpid.info[rank].base_addr, win->mpid.info[rank].base_size, &length_out, &winfo->memregion); - if(rc == PAMI_SUCCESS) +#ifndef USE_PAMI_RDMA + if (!MPIDI_Process.mp_s_use_pami_get) { - winfo->memregion_used = 1; - MPID_assert(win->size == length_out); +#endif + /* --------------------------------------- */ + /* Setup the PAMI sections of the window */ + /* --------------------------------------- */ + rc = PAMI_Memregion_create(MPIDI_Context[0], win->mpid.info[rank].base_addr, win->mpid.info[rank].base_size, &length_out, &winfo->memregion); +#ifdef USE_PAMI_RDMA + MPIU_ERR_CHKANDJUMP((rc != PAMI_SUCCESS), mpi_errno, MPI_ERR_OTHER, "**nomem"); + MPIU_ERR_CHKANDJUMP((win->size < length_out), mpi_errno, MPI_ERR_OTHER, "**nomem"); +#else + if (rc == PAMI_SUCCESS) + { + winfo->memregion_used = 1; + MPID_assert(win->size == length_out); + } } - } #endif + } + mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, http://git.mpich.org/mpich.git/commitdiff/2caecaceac3bbe87720e9c1eb4a65bfea6... commit 2caecaceac3bbe87720e9c1eb4a65bfea64ace32 Author: Su Huang <[email protected]> Date: Wed Jul 23 12:55:03 2014 -0400 pamid: MPI_Get coredump in __memcpy_power7 when >1 tasks per node (LE) Set the correct base address assignment during the window creation. (ibm) D198762 Signed-off-by: Michael Blocksome <[email protected]> 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 cfd08a7..d521a26 100644 --- a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c +++ b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c @@ -412,17 +412,11 @@ MPID_getSharedSegment(MPI_Aint size, #endif if (mpi_errno) MPIU_ERR_POP(mpi_errno); + /* assign base address here */ /* compute the base addresses of each process within the shared memory segment */ + /* will be done after MPI_Allgather in MID_Win_allocate_shared */ win->base = (void *) ((long) win->mpid.shm->base_addr + (long ) MPIDI_ROUND_UP_PAGESIZE((sizeof(MPIDI_Win_shm_ctrl_t) + ((comm_size+1) * sizeof(void *))),pageSize)); - for (i = 0; i < comm_size; ++i) { - win->mpid.info[i].base_addr = - (void *) ((uintptr_t)win->mpid.info[i].base_addr + (uintptr_t)win->base); - } - - for (i = 0; i < comm_size; ++i) { - if (size_array[i] == 0) win->mpid.info[i].base_addr = NULL; - } MPIU_Free(size_array); @@ -492,7 +486,7 @@ MPID_Win_allocate_shared(MPI_Aint size, int mpi_errno = MPI_SUCCESS; int onNode = 0; MPID_Win *win = NULL; - int rank; + int rank, prev_size; MPIDI_Win_info *winfo; int comm_size,i; @@ -526,6 +520,29 @@ MPID_Win_allocate_shared(MPI_Aint size, if (mpi_errno != MPI_SUCCESS) return mpi_errno; + win->mpid.info[0].base_addr = win->base; + char *cur_base = win->base; + prev_size=win->mpid.info[0].base_size; + for (i = 1; i < comm_size; ++i) { + if (win->mpid.info[i].base_size) { + if (prev_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(prev_size,pageSize)); + } else { + win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base + (MPI_Aint) prev_size); + } + } else + win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base); + prev_size=win->mpid.info[i].base_size; + cur_base = win->mpid.info[i].base_addr; + } else { + win->mpid.info[i].base_addr = NULL; + } + } + + *(void**) base_ptr = (void *) win->mpid.info[rank].base_addr; mpi_errno = MPIR_Barrier_impl(comm_ptr, &mpi_errno); http://git.mpich.org/mpich.git/commitdiff/11314276d9c0cc0aadd199745b99bf063b... commit 11314276d9c0cc0aadd199745b99bf063b1e38ed Author: Su Huang <[email protected]> Date: Wed Jul 23 12:55:03 2014 -0400 pamid: shared memory optimization for put operation A shared window put operation can be completed by the rank that initiates the operation. (ibm) D198762 Signed-off-by: Michael Blocksome <[email protected]> diff --git a/src/mpid/pamid/src/onesided/mpid_win_put.c b/src/mpid/pamid/src/onesided/mpid_win_put.c index d395792..9cbcc05 100644 --- a/src/mpid/pamid/src/onesided/mpid_win_put.c +++ b/src/mpid/pamid/src/onesided/mpid_win_put.c @@ -264,14 +264,18 @@ MPID_Put(const void *origin_addr, } - if (target_rank == win->comm_ptr->rank) + if ((target_rank == win->comm_ptr->rank) || (win->create_flavor == MPI_WIN_FLAVOR_SHARED)) { size_t offset = req->offset; + if (target_rank == win->comm_ptr->rank) + target_addr = win->base + req->offset; + else + target_addr = win->mpid.info[target_rank].base_addr + req->offset; mpi_errno = MPIR_Localcopy(origin_addr, origin_count, origin_datatype, - win->base + offset, + target_addr, target_count, target_datatype); 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 55ca3a0..bfcea9f 100644 --- a/src/mpid/pamid/src/onesided/mpid_win_shared_query.c +++ b/src/mpid/pamid/src/onesided/mpid_win_shared_query.c @@ -52,11 +52,13 @@ MPID_Win_shared_query(MPID_Win *win, int rank, MPI_Aint *size, break; } } + *((void **) base_ptr) = win->base; /* return the begin. address of shared segment */ } else { + *((void **) base_ptr) = win->mpid.info[rank].base_addr; /* return the begin. address of the rank */ *size = win->mpid.info[rank].base_size; *disp_unit = win->mpid.info[rank].disp_unit; } - *((void **) base_ptr) = win->base; /* should return the begin. address of shared segment */ + return mpi_errno; } http://git.mpich.org/mpich.git/commitdiff/3ac6a32ea03936403111d43956168361ab... commit 3ac6a32ea03936403111d43956168361ab9ffcdc Author: Su Huang <[email protected]> Date: Wed Jul 23 12:55:03 2014 -0400 pamid: shared mutex macro updates (ibm) D198762 Signed-off-by: Michael Blocksome <[email protected]> diff --git a/src/mpid/pamid/src/onesided/mpidi_onesided.h b/src/mpid/pamid/src/onesided/mpidi_onesided.h index 0a2e201..0b324cc 100644 --- a/src/mpid/pamid/src/onesided/mpidi_onesided.h +++ b/src/mpid/pamid/src/onesided/mpidi_onesided.h @@ -37,24 +37,24 @@ pami_rmw_t zero_rmw_parms; #define MPIDI_QUICKSLEEP usleep(1); #define MAX_NUM_CTRLSEND 1024 /* no more than 1024 outstanding control sends */ -#define MPIDI_SHM_MUTEX_LOCK(win) \ +#define MPIDI_SHM_MUTEX_LOCK(win) { \ int mpi_errno=0; \ do { \ pthread_mutex_t *shm_mutex = (pthread_mutex_t *) &win->mpid.shm->ctrl->mutex_lock; \ int rval = pthread_mutex_lock(shm_mutex); \ MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_lock", \ "**pthread_lock %s", strerror(rval)); \ - } while (0); + } while (0); } -#define MPIDI_SHM_MUTEX_UNLOCK(win) \ +#define MPIDI_SHM_MUTEX_UNLOCK(win) { \ int mpi_errno=0; \ do { \ pthread_mutex_t *shm_mutex = (pthread_mutex_t *) &win->mpid.shm->ctrl->mutex_lock; \ int rval = pthread_mutex_unlock(shm_mutex); \ MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_unlock", \ "**pthread_unlock %s", strerror(rval)); \ - } while (0); + } while (0); } #define MPIDI_SHM_MUTEX_INIT(win) \ @@ -78,14 +78,14 @@ pami_rmw_t zero_rmw_parms; "**pthread_mutex %s", strerror(rval)); \ } while (0); -#define MPIDI_SHM_MUTEX_DESTROY(win) \ +#define MPIDI_SHM_MUTEX_DESTROY(win) { \ int mpi_errno=0; \ do { \ pthread_mutex_t *shm_mutex = (pthread_mutex_t *) &(win)->mpid.shm->ctrl->mutex_lock;\ int rval = pthread_mutex_destroy(shm_mutex); \ MPIU_ERR_CHKANDJUMP1(rval, mpi_errno, MPI_ERR_OTHER, "**pthread_mutex", \ "**pthread_mutex %s", strerror(rval)); \ - } while (0); + } while (0); } #define MPIDI_ACQUIRE_SHARED_LOCK(win) { \ MPIDI_SHM_MUTEX_LOCK(win); \ ----------------------------------------------------------------------- Summary of changes: .../pamid/src/onesided/mpid_win_allocate_shared.c | 35 ++++++++++--- src/mpid/pamid/src/onesided/mpid_win_create.c | 52 ++++++++++--------- src/mpid/pamid/src/onesided/mpid_win_fence.c | 14 ++--- src/mpid/pamid/src/onesided/mpid_win_put.c | 8 ++- .../pamid/src/onesided/mpid_win_shared_query.c | 4 +- src/mpid/pamid/src/onesided/mpidi_onesided.h | 12 ++-- 6 files changed, 73 insertions(+), 52 deletions(-) hooks/post-receive -- MPICH primary repository
participants (1)
-
noreply@mpich.org