[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.2-341-g702baee
Service Account
noreply at mpich.org
Mon Jul 11 12:35:48 CDT 2016
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 702baeed4b46166aea2b292ac556f0b2589cc8f3 (commit)
from 5662f72d7bdb4fdcad23a98214f76836aac8c15d (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/702baeed4b46166aea2b292ac556f0b2589cc8f3
commit 702baeed4b46166aea2b292ac556f0b2589cc8f3
Author: Lena Oden <loden at anl.gov>
Date: Mon Apr 25 18:02:36 2016 -0500
Fixes intercom_merge temporal context_id usage
This patch fixes a problem in the intecom_merge routine. Intercom_merge
needs a temporaly communicator to find the context_id for the merged
communicator. However, this communicator also needs a context_id,
which is unique on every process and the same on all processes.
The problem with the previous routine is that the context_id of an
inter-communicator may be used by another communicator – which can be
an intra-communicator with a sub-internode communicator. In this case,
the context id is not longer unique. A subcommunicator with ID 3 normally
is not allowed - so it is allways unique. But we have to make sure that
for this communicator, no sub-communicators are created, so we avoid
the creation of sub communicators, if the sub communicator flag is set.
Signed-off-by: Yanfei Guo <yguo at anl.gov>
diff --git a/src/mpi/comm/commutil.c b/src/mpi/comm/commutil.c
index ded0bb4..305fb9c 100644
--- a/src/mpi/comm/commutil.c
+++ b/src/mpi/comm/commutil.c
@@ -549,7 +549,8 @@ int MPIR_Comm_commit(MPIR_Comm * comm)
MPIR_Comm_map_free(comm);
- if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM) {
+ if (comm->comm_kind == MPIR_COMM_KIND__INTRACOMM &&
+ !MPIR_CONTEXT_READ_FIELD(SUBCOMM,comm->context_id)) { /*make sure this is not a subcomm*/
mpi_errno = MPIR_Find_local_and_external(comm,
&num_local, &local_rank, &local_procs,
diff --git a/src/mpi/comm/intercomm_merge.c b/src/mpi/comm/intercomm_merge.c
index 5d01edb..c7283f3 100644
--- a/src/mpi/comm/intercomm_merge.c
+++ b/src/mpi/comm/intercomm_merge.c
@@ -141,14 +141,20 @@ int MPIR_Intercomm_merge_impl(MPIR_Comm *comm_ptr, int high, MPIR_Comm **new_int
new_size = comm_ptr->local_size + comm_ptr->remote_size;
- /* FIXME: For the intracomm, we need a consistent context id.
+ /* For the intracomm, we need a consistent context id.
That means that one of the two groups needs to use
- the recvcontext_id and the other must use the context_id */
+ the recvcontext_id and the other must use the context_id
+ The recvcontext_id is unique on each process, but another
+ communicator may use the context_id. Therefore, we do a small hack.
+ We set both flags indicating a sub-communicator (intra-node and
+ inter-node) to one. This is normally not possible (a communicator
+ is either intra- or inter-node) - which makes this context_id unique. */
+
if (local_high) {
- (*new_intracomm_ptr)->context_id = comm_ptr->recvcontext_id + 2; /* See below */
+ (*new_intracomm_ptr)->context_id = MPIR_CONTEXT_SET_FIELD(SUBCOMM,comm_ptr->recvcontext_id, 3);
}
else {
- (*new_intracomm_ptr)->context_id = comm_ptr->context_id + 2; /* See below */
+ (*new_intracomm_ptr)->context_id = MPIR_CONTEXT_SET_FIELD(SUBCOMM, comm_ptr->context_id, 3);
}
(*new_intracomm_ptr)->recvcontext_id = (*new_intracomm_ptr)->context_id;
(*new_intracomm_ptr)->remote_size = (*new_intracomm_ptr)->local_size = new_size;
-----------------------------------------------------------------------
Summary of changes:
src/mpi/comm/commutil.c | 3 ++-
src/mpi/comm/intercomm_merge.c | 14 ++++++++++----
2 files changed, 12 insertions(+), 5 deletions(-)
hooks/post-receive
--
MPICH primary repository
More information about the commits
mailing list