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 125304f7bd5c1cf48d6df8e6a0a2a0d25196907e (commit) via 910b30b04f503afc9d0be88bc8b91886d51c7514 (commit) from 4b688bf23ab0a7f2f776e5229def7d65bbddfedd (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/125304f7bd5c1cf48d6df8e6a0a2a0d251... commit 125304f7bd5c1cf48d6df8e6a0a2a0d25196907e Author: Xin Zhao <[email protected]> Date: Wed Jun 10 15:47:34 2015 -0500 Fix in Nemesis: assign sreq to shm_active_send when headers are sent. In Nemesis, MPIDI_CH3I_shm_active_send stores the request pointer that is currently involved in active sending, which means the headers are already sent out, but the data is not sent out yet. MPIDI_CH3I_Shm_send_progress() function will go over the request queue and make progress when either (1) MPIDI_CH3I_shm_active_send is not NULL or (2) queue head is not NULL. For (1), API that only sends the data is called, otherwise, API that sends both headers and data is called. Originally in MPIDI_CH3I_iSendv(), MPIDI_CH3I_shm_active_send is set even though headers are not sent out, which is not correct since MPIDI_CH3I_Shm_send_progress() function will trigger the API that only tries to send the data. This patch fixes this issue. Signed-off-by: Pavan Balaji <[email protected]> diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c b/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c index 26125c5..50cb7af 100644 --- a/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c +++ b/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c @@ -110,7 +110,12 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPID_IOV *iov, int n_i sreq->ch.vc = vc; MPIDI_CH3I_Sendq_enqueue(&MPIDI_CH3I_shm_sendq, sreq); MPIU_Assert (MPIDI_CH3I_shm_active_send == NULL); - MPIDI_CH3I_shm_active_send = sreq; + + if (remaining_iov != iov) { + /* headers are sent, mark current sreq as active_send req */ + MPIDI_CH3I_shm_active_send = sreq; + } + MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, " enqueued"); } else http://git.mpich.org/mpich.git/commitdiff/910b30b04f503afc9d0be88bc8b91886d5... commit 910b30b04f503afc9d0be88bc8b91886d51c7514 Author: Xin Zhao <[email protected]> Date: Wed Jun 10 08:41:40 2015 -0500 Add a test for large ACC operations working with MPI_Win_flush_local. Signed-off-by: Pavan Balaji <[email protected]> diff --git a/test/mpi/rma/Makefile.am b/test/mpi/rma/Makefile.am index 5c6de78..f27e3be 100644 --- a/test/mpi/rma/Makefile.am +++ b/test/mpi/rma/Makefile.am @@ -146,7 +146,8 @@ noinst_PROGRAMS = \ atomic_rmw_gacc \ acc-pairtype \ manyget \ - derived-acc-flush_local + derived-acc-flush_local\ + large-acc-flush_local if BUILD_MPIX_TESTS noinst_PROGRAMS += aint diff --git a/test/mpi/rma/large-acc-flush_local.c b/test/mpi/rma/large-acc-flush_local.c new file mode 100644 index 0000000..fd0a4fa --- /dev/null +++ b/test/mpi/rma/large-acc-flush_local.c @@ -0,0 +1,73 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */ +/* + * (C) 2015 by Argonne National Laboratory. + * See COPYRIGHT in top-level directory. + */ + +/* This code tests the case when origin process issues 10 ACC + * operations for each data size to the target process, and each + * operation is followed by a MPI_Win_flush_local. */ + +/* FIXME: we should merge this into a comprehensive test for RMA + * operations + MPI_Win_flush_local. */ + +#include "mpi.h" +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + +#define MIN_DATA_SIZE (262144) +#define MAX_DATA_SIZE (8 * 262144) +#define OPS_NUM 10 +#define LOOP 500 + +int main(int argc, char *argv[]) +{ + int rank, nproc, i, j; + MPI_Win win; + int *tar_buf = NULL; + int *orig_buf = NULL; + int data_size; + + MPI_Init(&argc, &argv); + + MPI_Comm_size(MPI_COMM_WORLD, &nproc); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + MPI_Alloc_mem(MAX_DATA_SIZE, MPI_INFO_NULL, &orig_buf); + MPI_Alloc_mem(MAX_DATA_SIZE, MPI_INFO_NULL, &tar_buf); + + /* run this test for LOOP times */ + + for (j = 0; j < LOOP; j++) { + + MPI_Win_create(tar_buf, MAX_DATA_SIZE, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); + + MPI_Win_lock_all(0, win); + + if (rank != 0) { + for (data_size = MIN_DATA_SIZE; data_size <= MAX_DATA_SIZE; data_size *= 2) { + for (i = 0; i < OPS_NUM; i++) { + MPI_Accumulate(orig_buf, data_size, MPI_BYTE, + 0, 0, data_size, MPI_BYTE, MPI_SUM, win); + MPI_Win_flush_local(0, win); + } + MPI_Win_flush(0, win); + } + } + + MPI_Win_unlock_all(win); + + MPI_Win_free(&win); + } + + if (rank == 0) + printf(" No Errors\n"); + + MPI_Free_mem(orig_buf); + MPI_Free_mem(tar_buf); + + MPI_Finalize(); + + return 0; +} diff --git a/test/mpi/rma/testlist.in b/test/mpi/rma/testlist.in index 9e680e6..e0f994b 100644 --- a/test/mpi/rma/testlist.in +++ b/test/mpi/rma/testlist.in @@ -135,6 +135,7 @@ aint 2 mpiversion=3.1 acc-pairtype 2 manyget 2 derived-acc-flush_local 3 mpiversion=3.0 +large-acc-flush_local 3 mpiversion=3.0 ## This test is not strictly correct. This was meant to test out the ## case when MPI_Test is not nonblocking. However, we ended up ----------------------------------------------------------------------- Summary of changes: src/mpid/ch3/channels/nemesis/src/ch3_isendv.c | 7 ++- test/mpi/rma/Makefile.am | 3 +- test/mpi/rma/large-acc-flush_local.c | 73 ++++++++++++++++++++++++ test/mpi/rma/testlist.in | 1 + 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 test/mpi/rma/large-acc-flush_local.c hooks/post-receive -- MPICH primary repository