[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.1rc2-109-g0bc9871
mysql vizuser
noreply at mpich.org
Wed Dec 25 11:18:56 CST 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 0bc9871d9318a6b53c68a58648868de797685cb2 (commit)
from 870585656310bffa1704f326e8e3aa27f3de478f (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/0bc9871d9318a6b53c68a58648868de797685cb2
commit 0bc9871d9318a6b53c68a58648868de797685cb2
Author: Pavan Balaji <balaji at mcs.anl.gov>
Date: Sun Dec 22 16:18:25 2013 +0800
Added a new comm_idup_overlap test.
This patch tests the code when we are duping overlapping communicators
(with two processes each) essentially forming a ring that should
deadlock with blocking Comm_dup. With Comm_idup, this should work
correctly as per the MPI standard.
diff --git a/test/mpi/comm/Makefile.am b/test/mpi/comm/Makefile.am
index b46859a..5602828 100644
--- a/test/mpi/comm/Makefile.am
+++ b/test/mpi/comm/Makefile.am
@@ -36,4 +36,5 @@ noinst_PROGRAMS = \
probe-intercomm \
comm_idup \
comm_idup_mul \
+ comm_idup_overlap \
comm_info
diff --git a/test/mpi/comm/comm_idup_overlap.c b/test/mpi/comm/comm_idup_overlap.c
new file mode 100644
index 0000000..a535743
--- /dev/null
+++ b/test/mpi/comm/comm_idup_overlap.c
@@ -0,0 +1,52 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2013 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <mpi.h>
+
+int main(int argc, char **argv)
+{
+ int i, rank, size, color;
+ MPI_Group group;
+ MPI_Comm primary[2], secondary[2], tmp;
+ MPI_Request req[2];
+
+ MPI_Init(&argc, &argv);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+ /* Each pair of processes creates a communicator */
+ for (i = 0; i < size; i++) {
+ if (rank == i)
+ MPI_Comm_split(MPI_COMM_WORLD, 0, 0, &primary[0]);
+ else if (rank == (i + 1) % size)
+ MPI_Comm_split(MPI_COMM_WORLD, 0, 0, &secondary[0]);
+ else {
+ MPI_Comm_split(MPI_COMM_WORLD, 1, 0, &tmp);
+ MPI_Comm_free(&tmp);
+ }
+ MPI_Barrier(MPI_COMM_WORLD);
+ }
+
+ /* Each pair dups the communicator such that the dups are
+ * overlapping. If this were done with MPI_Comm_dup, this should
+ * deadlock. */
+ MPI_Comm_idup(primary[0], &primary[1], &req[0]);
+ MPI_Comm_idup(secondary[0], &secondary[1], &req[1]);
+ MPI_Waitall(2, req, MPI_STATUSES_IGNORE);
+
+ for (i = 0; i < 2; i++) {
+ MPI_Comm_free(&primary[i]);
+ MPI_Comm_free(&secondary[i]);
+ }
+
+ if (rank == 0)
+ printf(" No Errors\n");
+
+ MPI_Finalize();
+
+ return 0;
+}
diff --git a/test/mpi/comm/testlist b/test/mpi/comm/testlist
index 568bf2b..c5ed8d8 100644
--- a/test/mpi/comm/testlist
+++ b/test/mpi/comm/testlist
@@ -28,6 +28,7 @@ comm_idup 2 mpiversion=3.0
comm_idup 4 mpiversion=3.0
comm_idup 9 mpiversion=3.0
comm_idup_mul 2 mpiversion=3.0 xfail=ticket1935
+comm_idup_overlap 2 mpiversion=3.0 xfail=ticket1935
dup_with_info 2 mpiversion=3.0
dup_with_info 4 mpiversion=3.0
dup_with_info 9 mpiversion=3.0
-----------------------------------------------------------------------
Summary of changes:
test/mpi/comm/Makefile.am | 1 +
test/mpi/comm/comm_idup_overlap.c | 52 +++++++++++++++++++++++++++++++++++++
test/mpi/comm/testlist | 1 +
3 files changed, 54 insertions(+), 0 deletions(-)
create mode 100644 test/mpi/comm/comm_idup_overlap.c
hooks/post-receive
--
MPICH primary repository
More information about the commits
mailing list