commits
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
January 2015
- 1 participants
- 22 discussions
[mpich] MPICH primary repository branch, master, updated. v3.2a2-109-gbb1c9db
by noreply@mpich.org 14 Jan '15
by noreply@mpich.org 14 Jan '15
14 Jan '15
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 bb1c9db61ffb2e8c7a92e4d5d0d965a066480cdf (commit)
from 6f646ca0562951477c6c3023be985544ebd60f90 (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/bb1c9db61ffb2e8c7a92e4d5d0d965a06…
commit bb1c9db61ffb2e8c7a92e4d5d0d965a066480cdf
Author: Charles J Archer <charles.j.archer(a)intel.com>
Date: Wed Jan 14 08:58:12 2015 -0800
Updates to latest OFI pre-1.0 release
Compile time fix required for OFI threading model
No semantic changes
Signed-off-by: Yohann Burette <yohann.burette(a)intel.com>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c
index 182a780..cefa87d 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_init.c
@@ -78,7 +78,7 @@ int MPID_nem_ofi_init(MPIDI_PG_t * pg_p, int pg_rank, char **bc_val_p, int *val_
tx_attr_t tx_attr;
memset(&tx_attr, 0, sizeof(tx_attr));
- domain_attr.threading = FI_THREAD_PROGRESS;
+ domain_attr.threading = FI_THREAD_ENDPOINT;
domain_attr.control_progress = FI_PROGRESS_AUTO;
tx_attr.op_flags = FI_REMOTE_COMPLETE;
hints.domain_attr = &domain_attr;
-----------------------------------------------------------------------
Summary of changes:
.../ch3/channels/nemesis/netmod/ofi/ofi_init.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-108-g6f646ca
by noreply@mpich.org 13 Jan '15
by noreply@mpich.org 13 Jan '15
13 Jan '15
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 6f646ca0562951477c6c3023be985544ebd60f90 (commit)
via d1ab9e681dd0f0dd492efe8dcc4b292231e815c7 (commit)
from 8cbbcae44bde9917f36010a255f7aba5f84d3d82 (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/6f646ca0562951477c6c3023be985544e…
commit 6f646ca0562951477c6c3023be985544ebd60f90
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Jan 12 15:54:48 2015 -0600
Remove ADI breakage introduced earlier
There was an accidental ADI breakage earlier when MPI level codes would
query into the dev part of the MPID request object. This commit removes
that breakage by adding a new macro into the mpiimpl.h file to portably
check whether a request is anysource. For now, in pamid, this macro
always evaluates to 0. This can easily be fixed by overwriting it in the
pamid code, but since pamid doesn't support FT, it won't have any
functional change either.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index 0657f28..c26ca52 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -3415,6 +3415,20 @@ int MPID_Cancel_recv(MPID_Request *);
@*/
int MPID_Comm_AS_enabled(MPID_Comm *);
+/*@
+ MPID_Request_is_anysource - Query whether the request is an anysource receive
+
+ Input Parameter:
+ request - Receive request being queried
+
+ Return Value:
+ 0 - The request is not anysource
+ 1 - The request is anysource
+
+ @*/
+int MPID_Request_is_anysource(MPID_Request *);
+
+/*@
MPID_Aint_add - Returns the sum of base and disp
Input Parameters:
diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index 922bce9..210548c 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -165,7 +165,7 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
if (unlikely(MPIR_CVAR_ENABLE_FT &&
!MPID_Request_is_complete(request_ptr) &&
- request_ptr->dev.match.parts.rank == MPI_ANY_SOURCE &&
+ MPID_Request_is_anysource(request_ptr) &&
!MPID_Comm_AS_enabled(request_ptr->comm))) {
/* --BEGIN ERROR HANDLING-- */
MPID_Cancel_recv(request_ptr);
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index d6d4729..44a2c2a 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -192,7 +192,7 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (unlikely(MPIR_CVAR_ENABLE_FT &&
!MPID_Request_is_complete(rreq) &&
- rreq->dev.match.parts.rank == MPI_ANY_SOURCE &&
+ MPID_Request_is_anysource(rreq) &&
!MPID_Comm_AS_enabled(rreq->comm))) {
/* --BEGIN ERROR HANDLING-- */
MPID_Cancel_recv(rreq);
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index f29e90f..dbecd57 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -68,7 +68,7 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
/* Fall through to the exit */
} else if (unlikely(
MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptr) &&
!MPID_Comm_AS_enabled(request_ptr->comm))) {
MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index fb7fc93..50107d4 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -179,7 +179,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
mpi_errno = MPI_ERR_IN_STATUS;
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
mpi_errno = MPI_ERR_IN_STATUS;
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index a4957c0..a7bfe9e 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -187,7 +187,7 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
n_inactive += 1;
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
last_disabled_anysource = i;
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 76ae264..c157820 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -199,7 +199,7 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
n_inactive += 1;
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
mpi_errno = MPI_ERR_IN_STATUS;
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index f685d2e..6773c82 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -51,7 +51,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
* anysource disabled, convert the call to an MPI_Test instead so we
* don't get stuck in the progress engine. */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptr) &&
!MPID_Comm_AS_enabled(request_ptr->comm))) {
mpi_errno = MPIR_Test_impl(request, &active_flag, status);
goto fn_exit;
@@ -84,7 +84,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
if (unlikely(
MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptr) &&
!MPID_Request_is_complete(request_ptr) &&
!MPID_Comm_AS_enabled(request_ptr->comm))) {
MPID_Progress_end(&progress_state);
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 5da2dec..eda6eaf 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -92,7 +92,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
* disabled such communication, convert this operation to a testall
* instead to prevent getting stuck in the progress engine. */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
disabled_anysource = TRUE;
@@ -134,7 +134,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
if (unlikely(mpi_errno)) {
/* --BEGIN ERROR HANDLING-- */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
MPIU_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
@@ -188,7 +188,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
MPIU_ERR_POP(mpi_errno);
/* --END ERROR HANDLING-- */
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
/* Check for pending failures */
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index ae9b37d..7653f51 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -186,7 +186,7 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
}
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
last_disabled_anysource = i;
}
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index 5f4aeac..d1465f8 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -165,7 +165,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
* disabled such communication, convert this operation to a testall
* instead to prevent getting stuck in the progress engine. */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Request_is_complete(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
disabled_anysource = TRUE;
@@ -240,7 +240,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
n_inactive += 1;
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
- MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ MPID_Request_is_anysource(request_ptrs[i]) &&
!MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
mpi_errno = MPI_ERR_IN_STATUS;
diff --git a/src/mpid/ch3/src/mpid_comm_failure_ack.c b/src/mpid/ch3/src/mpid_comm_failure_ack.c
index e4c1b88..e8d836c 100644
--- a/src/mpid/ch3/src/mpid_comm_failure_ack.c
+++ b/src/mpid/ch3/src/mpid_comm_failure_ack.c
@@ -156,3 +156,11 @@ int MPID_Comm_AS_enabled(MPID_Comm *comm_ptr) {
return comm_ptr->dev.anysource_enabled;
}
+
+#undef FUNCNAME
+#define FUNCNAME MPID_Request_is_anysource
+#undef FCNAME
+#define FCNAME MPIU_QUOTE(FUNCNAME)
+int MPID_Request_is_anysource(MPID_Request *request_ptr) {
+ return request_ptr->dev.match.parts.rank == MPI_ANY_SOURCE;
+}
diff --git a/src/mpid/pamid/src/misc/mpid_unimpl.c b/src/mpid/pamid/src/misc/mpid_unimpl.c
index 154364a..155b700 100644
--- a/src/mpid/pamid/src/misc/mpid_unimpl.c
+++ b/src/mpid/pamid/src/misc/mpid_unimpl.c
@@ -108,3 +108,11 @@ int MPID_Comm_AS_enabled(MPID_Comm *comm_ptr)
* by the implementation. */
return 1;
}
+
+int MPID_Request_is_anysource(MPID_Request *request_ptr)
+{
+ /* This function must not abort in the default case since it is used in many
+ * MPI functions. As long as the device does not implement FT, it doesn't
+ * matter what this function returns. */
+ return 0;
+}
http://git.mpich.org/mpich.git/commitdiff/d1ab9e681dd0f0dd492efe8dcc4b29223…
commit d1ab9e681dd0f0dd492efe8dcc4b292231e815c7
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Jan 12 15:51:16 2015 -0600
Move MPID_Comm_AS_enabled to MPID layer function
It was pointed out that by putting this in a macro and failing silently
when unimplemented, this make things challenging for derivatives which
will implement this function in the future. By moving this to an MPID
level function, it becomes more obvious that the function should be
implemented later.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index 52937f8..0657f28 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -1283,9 +1283,6 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr, int isDisconnect);
do { MPIU_Object_add_ref((_comm)); } while (0)
#define MPIR_Comm_release_ref( _comm, _inuse ) \
do { MPIU_Object_release_ref( _comm, _inuse ); } while (0)
-#ifndef MPID_Comm_AS_enabled
-#define MPID_Comm_AS_enabled(comm) (1)
-#endif
/* Release a reference to a communicator. If there are no pending
@@ -3407,6 +3404,17 @@ int MPID_Cancel_send(MPID_Request *);
int MPID_Cancel_recv(MPID_Request *);
/*@
+ MPID_Comm_AS_enabled - Query whether anysource operations are enabled for a communicator
+
+ Input Parameter:
+ communicator - Communicator being queried
+
+ Return Value:
+ 0 - The communicator will not currently permit anysource operations
+ 1 - The communicator will currently permit anysource operations
+ @*/
+int MPID_Comm_AS_enabled(MPID_Comm *);
+
MPID_Aint_add - Returns the sum of base and disp
Input Parameters:
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 6a7e63b..2bb62b2 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -166,9 +166,6 @@ typedef union {
#define MPID_Dev_comm_create_hook(comm_) MPIDI_CH3I_Comm_create_hook(comm_)
#define MPID_Dev_comm_destroy_hook(comm_) MPIDI_CH3I_Comm_destroy_hook(comm_)
-#undef MPID_Comm_AS_enabled
-#define MPID_Comm_AS_enabled(comm) ((comm)->dev.anysource_enabled)
-
typedef struct MPIDI_CH3I_comm
{
int eager_max_msg_sz; /* comm-wide eager/rendezvous message threshold */
diff --git a/src/mpid/ch3/src/mpid_comm_failure_ack.c b/src/mpid/ch3/src/mpid_comm_failure_ack.c
index e64a7f4..e4c1b88 100644
--- a/src/mpid/ch3/src/mpid_comm_failure_ack.c
+++ b/src/mpid/ch3/src/mpid_comm_failure_ack.c
@@ -148,3 +148,11 @@ int MPID_Comm_failed_bitarray(MPID_Comm *comm_ptr, uint32_t **bitarray, int acke
goto fn_exit;
}
+#undef FUNCNAME
+#define FUNCNAME MPID_Comm_AS_enabled
+#undef FCNAME
+#define FCNAME MPIU_QUOTE(FUNCNAME)
+int MPID_Comm_AS_enabled(MPID_Comm *comm_ptr) {
+ return comm_ptr->dev.anysource_enabled;
+}
+
diff --git a/src/mpid/pamid/src/misc/mpid_unimpl.c b/src/mpid/pamid/src/misc/mpid_unimpl.c
index 41abeee..154364a 100644
--- a/src/mpid/pamid/src/misc/mpid_unimpl.c
+++ b/src/mpid/pamid/src/misc/mpid_unimpl.c
@@ -102,9 +102,9 @@ int MPID_Comm_revoke(MPID_Comm *comm_ptr, int is_remote)
return 0;
}
-int MPID_Request_is_pending_failure(MPID_Request *request_ptr)
+int MPID_Comm_AS_enabled(MPID_Comm *comm_ptr)
{
- /* This function is necessary for MPICH to work correctly so it must always
- * return 0. */
- return 0;
+ /* This function must return 1 in the default case and should not be ignored
+ * by the implementation. */
+ return 1;
}
-----------------------------------------------------------------------
Summary of changes:
src/include/mpiimpl.h | 28 +++++++++++++++++++++++++---
src/mpi/pt2pt/recv.c | 2 +-
src/mpi/pt2pt/sendrecv.c | 2 +-
src/mpi/pt2pt/test.c | 2 +-
src/mpi/pt2pt/testall.c | 2 +-
src/mpi/pt2pt/testany.c | 2 +-
src/mpi/pt2pt/testsome.c | 2 +-
src/mpi/pt2pt/wait.c | 4 ++--
src/mpi/pt2pt/waitall.c | 6 +++---
src/mpi/pt2pt/waitany.c | 2 +-
src/mpi/pt2pt/waitsome.c | 4 ++--
src/mpid/ch3/include/mpidpre.h | 3 ---
src/mpid/ch3/src/mpid_comm_failure_ack.c | 16 ++++++++++++++++
src/mpid/pamid/src/misc/mpid_unimpl.c | 14 +++++++++++---
14 files changed, 66 insertions(+), 23 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-106-g8cbbcae
by noreply@mpich.org 12 Jan '15
by noreply@mpich.org 12 Jan '15
12 Jan '15
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 8cbbcae44bde9917f36010a255f7aba5f84d3d82 (commit)
via 9f2db5530493eaf94e499f734364d12ec7ed53ef (commit)
via 648cd48ca7e8eb835cf0b4d53a0e881228525d3a (commit)
via f6cdb3c8b5f2254704c671287625807c2e19df67 (commit)
via 0418d4956781518528cf3c948d6155f40c41d600 (commit)
via 50d85e51122eefb3dd0d03a7448cfa021a44ad0a (commit)
via 7a785c843eb43fb2dbba995598a0ac811bb56707 (commit)
via a96ac72edde12b9ddfbb2c20b92d51bda71e0840 (commit)
from 47ac6f6b9fa738a06850982a321f9810ab23fff2 (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/8cbbcae44bde9917f36010a255f7aba5f…
commit 8cbbcae44bde9917f36010a255f7aba5f84d3d82
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Dec 15 15:50:46 2014 -0600
Change MPIDI_CH3I_Comm_AS_enabled to be MPID level
This macro was used inside CH3 to determine if the communicator could be
used for anysource communication. With the rewrite of the anysource
fault tolerance logic, it is now necessary to use it at the MPI level.
Because it is a macro and not a function, the macro is defined in
mpiimple.h as (1) and then overwritten in the ch3 device. Future devices
can also overwrite it if desired.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index 52a729e..52937f8 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -1283,6 +1283,9 @@ int MPIR_Comm_delete_internal(MPID_Comm * comm_ptr, int isDisconnect);
do { MPIU_Object_add_ref((_comm)); } while (0)
#define MPIR_Comm_release_ref( _comm, _inuse ) \
do { MPIU_Object_release_ref( _comm, _inuse ); } while (0)
+#ifndef MPID_Comm_AS_enabled
+#define MPID_Comm_AS_enabled(comm) (1)
+#endif
/* Release a reference to a communicator. If there are no pending
diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index 4f6f541..922bce9 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -166,7 +166,7 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
if (unlikely(MPIR_CVAR_ENABLE_FT &&
!MPID_Request_is_complete(request_ptr) &&
request_ptr->dev.match.parts.rank == MPI_ANY_SOURCE &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ !MPID_Comm_AS_enabled(request_ptr->comm))) {
/* --BEGIN ERROR HANDLING-- */
MPID_Cancel_recv(request_ptr);
MPIR_STATUS_SET_CANCEL_BIT(request_ptr->status, FALSE);
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index 5046cb8..d6d4729 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -193,7 +193,7 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (unlikely(MPIR_CVAR_ENABLE_FT &&
!MPID_Request_is_complete(rreq) &&
rreq->dev.match.parts.rank == MPI_ANY_SOURCE &&
- !MPIDI_CH3I_Comm_AS_enabled(rreq->comm))) {
+ !MPID_Comm_AS_enabled(rreq->comm))) {
/* --BEGIN ERROR HANDLING-- */
MPID_Cancel_recv(rreq);
MPIR_STATUS_SET_CANCEL_BIT(rreq->status, FALSE);
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 427ebe8..f29e90f 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -69,7 +69,7 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
} else if (unlikely(
MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ !MPID_Comm_AS_enabled(request_ptr->comm))) {
MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
goto fn_fail;
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index c187fa9..fb7fc93 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -180,7 +180,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
mpi_errno = MPI_ERR_IN_STATUS;
MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 35ad54e..a4957c0 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -188,7 +188,7 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
last_disabled_anysource = i;
}
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 1f3d42e..76ae264 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -200,7 +200,7 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
mpi_errno = MPI_ERR_IN_STATUS;
MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index 985a0c9..f685d2e 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -52,7 +52,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
* don't get stuck in the progress engine. */
if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ !MPID_Comm_AS_enabled(request_ptr->comm))) {
mpi_errno = MPIR_Test_impl(request, &active_flag, status);
goto fn_exit;
}
@@ -86,7 +86,7 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
!MPID_Request_is_complete(request_ptr) &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ !MPID_Comm_AS_enabled(request_ptr->comm))) {
MPID_Progress_end(&progress_state);
MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 0969bf6..5da2dec 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -94,7 +94,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
!MPID_Request_is_complete(request_ptrs[i]) &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
disabled_anysource = TRUE;
}
}
@@ -136,7 +136,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
!MPID_Request_is_complete(request_ptrs[i]) &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
MPIU_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
}
MPID_Progress_end(&progress_state);
@@ -190,7 +190,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
!MPID_Request_is_complete(request_ptrs[i]) &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
/* Check for pending failures */
MPID_Progress_end(&progress_state);
MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index a5e926d..ae9b37d 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -187,7 +187,7 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
last_disabled_anysource = i;
}
}
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index 259b85f..5f4aeac 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -167,7 +167,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
!MPID_Request_is_complete(request_ptrs[i]) &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm))) {
disabled_anysource = TRUE;
}
}
@@ -241,7 +241,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
}
} else if (unlikely(MPIR_CVAR_ENABLE_FT &&
MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
- !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+ !MPID_Comm_AS_enabled(request_ptrs[i]->comm)))
{
mpi_errno = MPI_ERR_IN_STATUS;
MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 85f24d9..6a7e63b 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -166,7 +166,8 @@ typedef union {
#define MPID_Dev_comm_create_hook(comm_) MPIDI_CH3I_Comm_create_hook(comm_)
#define MPID_Dev_comm_destroy_hook(comm_) MPIDI_CH3I_Comm_destroy_hook(comm_)
-#define MPIDI_CH3I_Comm_AS_enabled(comm) ((comm)->dev.anysource_enabled)
+#undef MPID_Comm_AS_enabled
+#define MPID_Comm_AS_enabled(comm) ((comm)->dev.anysource_enabled)
typedef struct MPIDI_CH3I_comm
{
http://git.mpich.org/mpich.git/commitdiff/9f2db5530493eaf94e499f734364d12ec…
commit 9f2db5530493eaf94e499f734364d12ec7ed53ef
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Dec 15 14:34:17 2014 -0600
Handle anysource in blocking recv functions
If a blocking recv function (MPI_Recv and MPI_Sendrecv) includes an
MPI_ANY_SOURCE and there is a failure, handle it by cleaning up the
request and returning MPIX_ERR_PROC_FAILED.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index 41eeff8..4f6f541 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -162,6 +162,19 @@ int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
goto fn_fail;
/* --END ERROR HANDLING-- */
}
+
+ if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ !MPID_Request_is_complete(request_ptr) &&
+ request_ptr->dev.match.parts.rank == MPI_ANY_SOURCE &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ /* --BEGIN ERROR HANDLING-- */
+ MPID_Cancel_recv(request_ptr);
+ MPIR_STATUS_SET_CANCEL_BIT(request_ptr->status, FALSE);
+ MPIU_ERR_SET(request_ptr->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**proc_failed");
+ mpi_errno = request_ptr->status.MPI_ERROR;
+ goto fn_fail;
+ /* --END ERROR HANDLING-- */
+ }
}
MPID_Progress_end(&progress_state);
}
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index bc9c374..5046cb8 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -189,6 +189,23 @@ int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
goto fn_fail;
/* --END ERROR HANDLING-- */
}
+
+ if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ !MPID_Request_is_complete(rreq) &&
+ rreq->dev.match.parts.rank == MPI_ANY_SOURCE &&
+ !MPIDI_CH3I_Comm_AS_enabled(rreq->comm))) {
+ /* --BEGIN ERROR HANDLING-- */
+ MPID_Cancel_recv(rreq);
+ MPIR_STATUS_SET_CANCEL_BIT(rreq->status, FALSE);
+ MPIU_ERR_SET(rreq->status.MPI_ERROR, MPIX_ERR_PROC_FAILED, "**proc_failed");
+ mpi_errno = rreq->status.MPI_ERROR;
+ if (!MPID_Request_is_complete(sreq)) {
+ MPID_Cancel_send(sreq);
+ MPIR_STATUS_SET_CANCEL_BIT(sreq->status, FALSE);
+ }
+ goto fn_fail;
+ /* --END ERROR HANDLING-- */
+ }
}
MPID_Progress_end(&progress_state);
}
http://git.mpich.org/mpich.git/commitdiff/648cd48ca7e8eb835cf0b4d53a0e88122…
commit 648cd48ca7e8eb835cf0b4d53a0e881228525d3a
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Dec 15 14:21:03 2014 -0600
Make anysource test more accurate
Test for the specific error code so it doesn't accidentally catch
MPI_ERR_OTHER.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/test/mpi/ft/anysource.c b/test/mpi/ft/anysource.c
index 650057a..25aee93 100644
--- a/test/mpi/ft/anysource.c
+++ b/test/mpi/ft/anysource.c
@@ -37,8 +37,9 @@ int main(int argc, char **argv)
if (rank == 0) {
char buf[10];
err = MPI_Recv(buf, 10, MPI_CHAR, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
- if (MPI_SUCCESS == err) {
- fprintf(stderr, "Expected a failure for receive from ANY_SOURCE\n");
+ MPI_Error_class(err, &ec);
+ if (MPIX_ERR_PROC_FAILED != ec) {
+ fprintf(stderr, "Expected MPIX_ERR_PROC_FAILED for receive from ANY_SOURCE: %d\n", ec);
MPI_Abort(MPI_COMM_WORLD, 1);
}
@@ -58,7 +59,6 @@ int main(int argc, char **argv)
MPI_Error_class(err, &ec);
if (MPIX_ERR_PROC_FAILED_PENDING != ec) {
fprintf(stderr, "Expected a MPIX_ERR_PROC_FAILED_PENDING (%d) for receive from ANY_SOURCE: %d\n", MPIX_ERR_PROC_FAILED_PENDING, ec);
- fprintf(stderr, "BUF: %s\n", buf);
MPI_Abort(MPI_COMM_WORLD, 1);
}
http://git.mpich.org/mpich.git/commitdiff/f6cdb3c8b5f2254704c671287625807c2…
commit f6cdb3c8b5f2254704c671287625807c2e19df67
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Dec 15 12:45:07 2014 -0600
Allow MPIR_Request_complete to take a NULL request
If the first argument is NULL, don't try to set it to MPI_REQUEST_NULL.
For blocking functions that want to complete the MPID_Request object,
this allows them to reuse the code.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/mpi/pt2pt/mpir_request.c b/src/mpi/pt2pt/mpir_request.c
index 0e20b80..5cf6b97 100644
--- a/src/mpi/pt2pt/mpir_request.c
+++ b/src/mpi/pt2pt/mpir_request.c
@@ -77,7 +77,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
mpi_errno = request_ptr->status.MPI_ERROR;
MPIR_SENDQ_FORGET(request_ptr);
MPID_Request_release(request_ptr);
- *request = MPI_REQUEST_NULL;
+ if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
case MPID_REQUEST_RECV:
@@ -85,7 +85,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
MPIR_Request_extract_status(request_ptr, status);
mpi_errno = request_ptr->status.MPI_ERROR;
MPID_Request_release(request_ptr);
- *request = MPI_REQUEST_NULL;
+ if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
@@ -210,7 +210,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
}
MPID_Request_release(request_ptr);
- *request = MPI_REQUEST_NULL;
+ if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
@@ -220,7 +220,7 @@ int MPIR_Request_complete(MPI_Request * request, MPID_Request * request_ptr,
{
MPIR_Request_extract_status(request_ptr, status);
MPID_Request_release(request_ptr);
- *request = MPI_REQUEST_NULL;
+ if (NULL != request) *request = MPI_REQUEST_NULL;
break;
}
http://git.mpich.org/mpich.git/commitdiff/0418d4956781518528cf3c948d6155f40…
commit 0418d4956781518528cf3c948d6155f40c41d600
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Dec 8 09:00:41 2014 -0800
Handle anysource in the wait* functions
If a wait operation involves an anysource, we need to first check to
make sure that they haven't been disabled. If they have been, convert
the wait* function to a test* function to prevent deadlocking inside the
progress engine.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index b668d0b..985a0c9 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -46,7 +46,17 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
if (!MPID_Request_is_complete(request_ptr))
{
MPID_Progress_state progress_state;
-
+
+ /* If this is an anysource request including a communicator with
+ * anysource disabled, convert the call to an MPI_Test instead so we
+ * don't get stuck in the progress engine. */
+ if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ mpi_errno = MPIR_Test_impl(request, &active_flag, status);
+ goto fn_exit;
+ }
+
MPID_Progress_start(&progress_state);
while (!MPID_Request_is_complete(request_ptr))
{
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 5e7fcf7..0969bf6 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -48,6 +48,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
int rc;
int n_greqs;
int proc_failure = FALSE;
+ int disabled_anysource = FALSE;
const int ignoring_statuses = (array_of_statuses == MPI_STATUSES_IGNORE);
int optimize = ignoring_statuses; /* see NOTE-O1 */
MPIU_CHKLMEM_DECL(1);
@@ -86,6 +87,16 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
if (request_ptrs[i]->kind == MPID_UREQUEST)
++n_greqs;
+
+ /* If one of the requests is an anysource on a communicator that's
+ * disabled such communication, convert this operation to a testall
+ * instead to prevent getting stuck in the progress engine. */
+ if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ disabled_anysource = TRUE;
+ }
}
else
{
@@ -102,6 +113,11 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
goto fn_exit;
}
+ if (unlikely(disabled_anysource)) {
+ mpi_errno = MPI_Testall(count, array_of_requests, &disabled_anysource, array_of_statuses);
+ goto fn_exit;
+ }
+
/* NOTE-O1: high-message-rate optimization. For simple send and recv
* operations and MPI_STATUSES_IGNORE we use a fastpath approach that strips
* out as many unnecessary jumps and error handling as possible.
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index ff4ff85..259b85f 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -96,6 +96,7 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
int n_inactive;
int active_flag;
int rc;
+ int disabled_anysource = FALSE;
int mpi_errno = MPI_SUCCESS;
MPIU_CHKLMEM_DECL(1);
MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAITSOME);
@@ -159,6 +160,16 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
MPID_END_ERROR_CHECKS;
}
# endif
+
+ /* If one of the requests is an anysource on a communicator that's
+ * disabled such communication, convert this operation to a testall
+ * instead to prevent getting stuck in the progress engine. */
+ if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ disabled_anysource = TRUE;
+ }
}
else
{
@@ -172,7 +183,12 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
*outcount = MPI_UNDEFINED;
goto fn_exit;
}
-
+
+ if (unlikely(disabled_anysource)) {
+ mpi_errno = MPI_Testsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
+ goto fn_exit;
+ }
+
/* Bill Gropp says MPI_Waitsome() is expected to try to make
progress even if some requests have already completed;
therefore, we kick the pipes once and then fall into a loop
http://git.mpich.org/mpich.git/commitdiff/50d85e51122eefb3dd0d03a7448cfa021…
commit 50d85e51122eefb3dd0d03a7448cfa021a44ad0a
Author: Wesley Bland <wbland(a)anl.gov>
Date: Fri Dec 5 11:21:33 2014 -0600
Break out of progress for anysource failures
If a failure is detected, even if no request is actually complete, the
completion counter will be incremented now as a way to give control back
to the MPI layer to let it decide whether or not to continue.
This gives the request completion functions a chance to see if they're
waiting on an MPI_ANY_SOURCE request and if so, to return an error
indicating that the completion function has a
MPIX_ERR_PROC_FAILED_PENDING failure that the user needs to acknowledge.
All of these functions should go into the progress engine at least once
as a way to ensure that even if they will be returning an error, they'll
at least give MPI a way to make progress and potentially still complete
the request objects even if the user never acknowledges the failure.
A follow on commit will add the functionality to keep the progress
engine from getting stuck if a failure is discovered before entering the
completion function.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 5b5d325..427ebe8 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -66,8 +66,14 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
*flag = TRUE;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
/* Fall through to the exit */
+ } else if (unlikely(
+ MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+ goto fn_fail;
}
-
fn_exit:
return mpi_errno;
fn_fail:
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index 752276b..c187fa9 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -87,7 +87,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
int n_completed;
int active_flag;
int rc;
- int proc_failure = 0;
+ int proc_failure = FALSE;
int mpi_errno = MPI_SUCCESS;
MPIU_CHKLMEM_DECL(1);
MPID_MPI_STATE_DECL(MPID_STATE_MPI_TESTALL);
@@ -166,18 +166,29 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
&(array_of_statuses[i]));
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (request_ptrs[i] != NULL && (MPID_Request_is_complete(request_ptrs[i]))
- {
- n_completed++;
- rc = MPIR_Request_get_error(request_ptrs[i]);
- if (rc != MPI_SUCCESS)
+ if (request_ptrs[i] != NULL)
+ {
+ if (MPID_Request_is_complete(request_ptrs[i]))
+ {
+ n_completed++;
+ rc = MPIR_Request_get_error(request_ptrs[i]);
+ if (rc != MPI_SUCCESS)
+ {
+ if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(rc) || MPIX_ERR_PROC_FAILED_PENDING == MPIR_ERR_GET_CLASS(rc))
+ proc_failure = TRUE;
+ mpi_errno = MPI_ERR_IN_STATUS;
+ }
+ } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
{
- if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(rc) ||
- MPIX_ERR_PROC_FAILED_PENDING == MPIR_ERR_GET_CLASS(rc))
- proc_failure = 1;
mpi_errno = MPI_ERR_IN_STATUS;
+ MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[i] : MPI_STATUS_IGNORE;
+ if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = rc;
+ proc_failure = TRUE;
}
- }
+ }
}
if (n_completed == count || mpi_errno == MPI_ERR_IN_STATUS)
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 8002cd6..35ad54e 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -73,6 +73,7 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
int i;
int n_inactive;
int active_flag;
+ int last_disabled_anysource = -1;
int mpi_errno = MPI_SUCCESS;
MPIU_CHKLMEM_DECL(1);
MPID_MPI_STATE_DECL(MPID_STATE_MPI_TESTANY);
@@ -168,23 +169,41 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
status);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
- {
- mpi_errno = MPIR_Request_complete(&array_of_requests[i],
- request_ptrs[i],
- status, &active_flag);
- if (active_flag)
- {
- *flag = TRUE;
- *indx = i;
- goto fn_exit;
- }
- else
- {
- n_inactive += 1;
- }
+ if (request_ptrs[i] != NULL)
+ {
+ if (MPID_Request_is_complete(request_ptrs[i]))
+ {
+ mpi_errno = MPIR_Request_complete(&array_of_requests[i],
+ request_ptrs[i],
+ status, &active_flag);
+ if (active_flag)
+ {
+ *flag = TRUE;
+ *indx = i;
+ goto fn_exit;
+ }
+ else
+ {
+ n_inactive += 1;
+ }
+ } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+ {
+ last_disabled_anysource = i;
+ }
}
}
+
+ /* If none of the requests completed, mark the last anysource request as
+ * pending failure. */
+ if (unlikely(last_disabled_anysource != -1))
+ {
+ MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+ *flag = TRUE;
+ goto fn_fail;
+ }
if (n_inactive == count)
{
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 1dc99f8..1f3d42e 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -170,32 +170,43 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
- if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
- rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i],
- status_ptr, &active_flag);
- if (active_flag)
- {
- array_of_indices[n_active] = i;
- n_active += 1;
-
- if (rc == MPI_SUCCESS)
- {
- request_ptrs[i] = NULL;
- }
- else
- {
- mpi_errno = MPI_ERR_IN_STATUS;
- if (status_ptr != MPI_STATUS_IGNORE)
- {
- status_ptr->MPI_ERROR = rc;
- }
- }
- }
- else
- {
- request_ptrs[i] = NULL;
- n_inactive += 1;
- }
+ if (request_ptrs[i] != NULL)
+ {
+ if (MPID_Request_is_complete(request_ptrs[i]))
+ {
+ rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
+ if (active_flag)
+ {
+ array_of_indices[n_active] = i;
+ n_active += 1;
+
+ if (rc == MPI_SUCCESS)
+ {
+ request_ptrs[i] = NULL;
+ }
+ else
+ {
+ mpi_errno = MPI_ERR_IN_STATUS;
+ if (status_ptr != MPI_STATUS_IGNORE)
+ {
+ status_ptr->MPI_ERROR = rc;
+ }
+ }
+ }
+ else
+ {
+ request_ptrs[i] = NULL;
+ n_inactive += 1;
+ }
+ } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+ {
+ mpi_errno = MPI_ERR_IN_STATUS;
+ MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[i] : MPI_STATUS_IGNORE;
+ if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = rc;
+ }
}
}
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index 2d609ac..b668d0b 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -71,6 +71,17 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
MPIU_ERR_POP(mpi_errno);
/* --END ERROR HANDLING-- */
}
+
+ if (unlikely(
+ MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptr->dev.match.parts.rank &&
+ !MPID_Request_is_complete(request_ptr) &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm))) {
+ MPID_Progress_end(&progress_state);
+ MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+ goto fn_fail;
+ }
}
MPID_Progress_end(&progress_state);
}
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 9613093..5e7fcf7 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -47,7 +47,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
int active_flag;
int rc;
int n_greqs;
- int proc_failure = 0;
+ int proc_failure = FALSE;
const int ignoring_statuses = (array_of_statuses == MPI_STATUSES_IGNORE);
int optimize = ignoring_statuses; /* see NOTE-O1 */
MPIU_CHKLMEM_DECL(1);
@@ -117,6 +117,12 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
* OK for the error case to be slower */
if (unlikely(mpi_errno)) {
/* --BEGIN ERROR HANDLING-- */
+ if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ MPIU_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
+ }
MPID_Progress_end(&progress_state);
MPIU_ERR_POP(mpi_errno);
/* --END ERROR HANDLING-- */
@@ -165,6 +171,17 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
MPID_Progress_end(&progress_state);
MPIU_ERR_POP(mpi_errno);
/* --END ERROR HANDLING-- */
+ } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPID_Request_is_complete(request_ptrs[i]) &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ /* Check for pending failures */
+ MPID_Progress_end(&progress_state);
+ MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ status_ptr = (ignoring_statuses) ? MPI_STATUS_IGNORE : &array_of_statuses[i];
+ if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = mpi_errno;
+ proc_failure = TRUE;
+ break;
}
}
@@ -174,7 +191,6 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
}
- }
if (rc == MPI_SUCCESS)
{
request_ptrs[i] = NULL;
@@ -184,11 +200,11 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
else
{
/* req completed with an error */
- mpi_errno = MPI_ERR_IN_STATUS;
+ MPIU_ERR_SET(mpi_errno, MPI_ERR_IN_STATUS, "**instatus");
if (!proc_failure) {
if (MPIX_ERR_PROC_FAILED == MPIR_ERR_GET_CLASS(rc))
- proc_failure = 1;
+ proc_failure = TRUE;
}
if (!ignoring_statuses)
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index ff894b9..a5e926d 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -77,6 +77,7 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
int active_flag;
int init_req_array;
int found_nonnull_req;
+ int last_disabled_anysource = -1;
int mpi_errno = MPI_SUCCESS;
MPIU_CHKLMEM_DECL(1);
MPID_MPI_STATE_DECL(MPID_STATE_MPI_WAITANY);
@@ -184,7 +185,11 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
goto break_l1;
}
}
- }
+ } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm))) {
+ last_disabled_anysource = i;
+ }
}
init_req_array = FALSE;
@@ -197,6 +202,15 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
goto break_l1;
}
+ /* If none of the requests completed, mark the last anysource request
+ * as pending failure and break out. */
+ if (unlikely(last_disabled_anysource != -1))
+ {
+ MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ if (status != MPI_STATUS_IGNORE) status->MPI_ERROR = mpi_errno;
+ goto fn_progress_end_fail;
+ }
+
mpi_errno = MPID_Progress_wait(&progress_state);
if (mpi_errno != MPI_SUCCESS) goto fn_progress_end_fail;
}
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index 3268b94..ff4ff85 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -194,33 +194,44 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
for (i = 0; i < incount; i++)
{
- if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
+ if (request_ptrs[i] != NULL)
{
- status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
- rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
- if (active_flag)
- {
- array_of_indices[n_active] = i;
- n_active += 1;
-
- if (rc == MPI_SUCCESS)
- {
- request_ptrs[i] = NULL;
- }
- else
- {
- mpi_errno = MPI_ERR_IN_STATUS;
- if (status_ptr != MPI_STATUS_IGNORE)
- {
- status_ptr->MPI_ERROR = rc;
- }
- }
- }
- else
- {
- request_ptrs[i] = NULL;
- n_inactive += 1;
- }
+ if (MPID_Request_is_complete(request_ptrs[i]))
+ {
+ status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+ rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
+ if (active_flag)
+ {
+ array_of_indices[n_active] = i;
+ n_active += 1;
+
+ if (rc == MPI_SUCCESS)
+ {
+ request_ptrs[i] = NULL;
+ }
+ else
+ {
+ mpi_errno = MPI_ERR_IN_STATUS;
+ if (status_ptr != MPI_STATUS_IGNORE)
+ {
+ status_ptr->MPI_ERROR = rc;
+ }
+ }
+ }
+ else
+ {
+ request_ptrs[i] = NULL;
+ n_inactive += 1;
+ }
+ } else if (unlikely(MPIR_CVAR_ENABLE_FT &&
+ MPI_ANY_SOURCE == request_ptrs[i]->dev.match.parts.rank &&
+ !MPIDI_CH3I_Comm_AS_enabled(request_ptrs[i]->comm)))
+ {
+ mpi_errno = MPI_ERR_IN_STATUS;
+ MPIU_ERR_SET(rc, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
+ status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+ if (status_ptr != MPI_STATUS_IGNORE) status_ptr->MPI_ERROR = rc;
+ }
}
}
diff --git a/src/mpid/ch3/src/ch3u_comm.c b/src/mpid/ch3/src/ch3u_comm.c
index f9642fb..8d2c524 100644
--- a/src/mpid/ch3/src/ch3u_comm.c
+++ b/src/mpid/ch3/src/ch3u_comm.c
@@ -384,6 +384,10 @@ int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs)
}
}
+ /* Signal that something completed here to allow the progress engine to
+ * break out and return control to the user. */
+ MPIDI_CH3_Progress_signal_completion();
+
fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
return mpi_errno;
http://git.mpich.org/mpich.git/commitdiff/7a785c843eb43fb2dbba995598a0ac811…
commit 7a785c843eb43fb2dbba995598a0ac811bb56707
Author: Wesley Bland <wbland(a)anl.gov>
Date: Wed Dec 3 13:36:25 2014 -0600
Strip out pending ANY_SOURCE request handling
The existing way that we handle non-blocking requests involving wildcard
receive operations is incorrect. We're cancelling request operations and
trying to recreate them later. In the meantime, it's messing with
matching and makes it possible (likely?) that some messages that arrive
will never be matched. A new way of handling this is coming next.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index 09f5b52..52a729e 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -3631,23 +3631,6 @@ void MPID_Request_set_completed(MPID_Request *);
@*/
void MPID_Request_release(MPID_Request *);
-/*@
- MPID_Request_is_pending_failure - Check if a request is pending because of a process failures
-
- Input Parameter:
- request - request to check
-
- Return value:
- 0 - The request is not pending because of a failure
- Non-zero - The request is pending because of a failure
-
- Notes:
- This routine checks to see if the communicator used in the request can
- participate in MPI_ANY_SOURCE operations and if this request is already
- pending due to a process failure.
-@*/
-int MPID_Request_is_pending_failure(MPID_Request *);
-
typedef struct MPID_Grequest_class {
MPIU_OBJECT_HEADER; /* adds handle and ref_count fields */
MPI_Grequest_query_function *query_fn;
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index acf2f2d..5b5d325 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -60,11 +60,7 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
- if (MPID_Request_is_pending_failure(request_ptr)) {
- *flag = TRUE;
- mpi_errno = request_ptr->status.MPI_ERROR;
- goto fn_fail;
- } else if (MPID_Request_is_complete(request_ptr)) {
+ if (MPID_Request_is_complete(request_ptr)) {
mpi_errno = MPIR_Request_complete(request, request_ptr, status,
&active_flag);
*flag = TRUE;
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index 8acc813..752276b 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -166,7 +166,7 @@ int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
&(array_of_statuses[i]));
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (request_ptrs[i] != NULL && (MPID_Request_is_complete(request_ptrs[i]) || MPID_Request_is_pending_failure(request_ptrs[i])))
+ if (request_ptrs[i] != NULL && (MPID_Request_is_complete(request_ptrs[i]))
{
n_completed++;
rc = MPIR_Request_get_error(request_ptrs[i]);
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index fa7cb58..8002cd6 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -168,12 +168,7 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
status);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
- mpi_errno = request_ptrs[i]->status.MPI_ERROR;
- *flag = TRUE;
- *indx = i;
- goto fn_fail;
- } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
+ if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
{
mpi_errno = MPIR_Request_complete(&array_of_requests[i],
request_ptrs[i],
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 0240b76..1dc99f8 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -170,15 +170,7 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
- if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
- mpi_errno = MPI_ERR_IN_STATUS;
- array_of_indices[n_active] = i;
- n_active += 1;
- rc = request_ptrs[i]->status.MPI_ERROR;
- if (status_ptr != MPI_STATUS_IGNORE) {
- status_ptr->MPI_ERROR = rc;
- }
- } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
+ if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i],
status_ptr, &active_flag);
if (active_flag)
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index 219dfd4..2d609ac 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -43,11 +43,6 @@ int MPIR_Wait_impl(MPI_Request *request, MPI_Status *status)
MPID_Request_get_ptr(*request, request_ptr);
- if (MPID_Request_is_pending_failure(request_ptr)) {
- mpi_errno = request_ptr->status.MPI_ERROR;
- goto fn_fail;
- }
-
if (!MPID_Request_is_complete(request_ptr))
{
MPID_Progress_state progress_state;
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index fe7c581..9613093 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -154,7 +154,7 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
}
/* wait for ith request to complete */
- while (!MPID_Request_is_complete(request_ptrs[i]) && !MPID_Request_is_pending_failure(request_ptrs[i]))
+ while (!MPID_Request_is_complete(request_ptrs[i]))
{
/* generalized requests should already be finished */
MPIU_Assert(request_ptrs[i]->kind != MPID_UREQUEST);
@@ -172,11 +172,8 @@ int MPIR_Waitall_impl(int count, MPI_Request array_of_requests[],
/* complete the request and check the status */
status_ptr = (ignoring_statuses) ? MPI_STATUS_IGNORE : &array_of_statuses[i];
rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i], status_ptr, &active_flag);
- } else {
- /* If the request isn't complete, it's because it's pending due
- * to a failure so set the rc accordingly. */
- rc = request_ptrs[i]->status.MPI_ERROR;
- proc_failure = 1;
+ }
+
}
if (rc == MPI_SUCCESS)
{
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index cd48d38..ff894b9 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -156,11 +156,6 @@ int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx,
/* we found at least one non-null request */
found_nonnull_req = TRUE;
- if (MPID_Request_is_pending_failure(request_ptrs[i])) {
- mpi_errno = request_ptrs[i]->status.MPI_ERROR;
- goto fn_progress_end_fail;
- }
-
if (request_ptrs[i]->kind == MPID_UREQUEST && request_ptrs[i]->greq_fns->poll_fn != NULL)
{
/* this is a generalized request; make progress on it */
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index ee8cca3..3268b94 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -221,12 +221,6 @@ int MPI_Waitsome(int incount, MPI_Request array_of_requests[],
request_ptrs[i] = NULL;
n_inactive += 1;
}
- } else if ( request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
- n_active += 1;
- mpi_errno = MPI_ERR_IN_STATUS;
- if (status_ptr != MPI_STATUS_IGNORE) {
- status_ptr->MPI_ERROR = request_ptrs[i]->status.MPI_ERROR;
- }
}
}
diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h
index 233a7eb..1c924be 100644
--- a/src/mpid/ch3/include/mpidimpl.h
+++ b/src/mpid/ch3/include/mpidimpl.h
@@ -1527,7 +1527,6 @@ MPID_Request * MPIDI_CH3U_Recvq_FDP_or_AEU(MPIDI_Message_match * match,
int * found);
int MPIDI_CH3U_Recvq_count_unexp(void);
int MPIDI_CH3U_Complete_posted_with_error(MPIDI_VC_t *vc);
-int MPIDI_CH3U_Complete_disabled_anysources(void);
int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr);
diff --git a/src/mpid/ch3/src/ch3u_comm.c b/src/mpid/ch3/src/ch3u_comm.c
index 46bfe64..f9642fb 100644
--- a/src/mpid/ch3/src/ch3u_comm.c
+++ b/src/mpid/ch3/src/ch3u_comm.c
@@ -384,12 +384,6 @@ int MPIDI_CH3I_Comm_handle_failed_procs(MPID_Group *new_failed_procs)
}
}
- /* Now that we've marked communicators with disable anysource, we
- complete-with-an-error all anysource receives posted on those
- communicators */
- mpi_errno = MPIDI_CH3U_Complete_disabled_anysources();
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_COMM_HANDLE_FAILED_PROCS);
return mpi_errno;
diff --git a/src/mpid/ch3/src/ch3u_recvq.c b/src/mpid/ch3/src/ch3u_recvq.c
index ff769f7..8ac6d89 100644
--- a/src/mpid/ch3/src/ch3u_recvq.c
+++ b/src/mpid/ch3/src/ch3u_recvq.c
@@ -559,12 +559,6 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
if (tag == MPI_ANY_TAG)
match.parts.tag = mask.parts.tag = 0;
if (source == MPI_ANY_SOURCE) {
- if (!MPIDI_CH3I_Comm_AS_enabled(comm)) {
- /* If MPI_ANY_SOURCE is disabled right now, we should
- * just add this request to the posted queue instead and
- * return the appropriate error. */
- continue;
- }
match.parts.rank = mask.parts.rank = 0;
}
do {
@@ -639,17 +633,8 @@ MPID_Request * MPIDI_CH3U_Recvq_FDU_or_AEP(int source, int tag,
MPIDI_CH3U_Request_complete(rreq);
goto lock_exit;
}
- } else if (!MPIDI_CH3I_Comm_AS_enabled(comm)) {
- /* If this receive is for MPI_ANY_SOURCE, we will still add the
- * request to the queue for now, but we will also set the error
- * class to MPIX_ERR_PROC_FAILED_PENDING since the request shouldn't
- * be matched as long as there is a failure pending. This will get
- * checked again later during the completion function to see if the
- * request can be completed at that time. */
- MPIU_ERR_SET(mpi_errno, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
- rreq->status.MPI_ERROR = mpi_errno;
}
-
+
rreq->dev.next = NULL;
if (recvq_posted_tail != NULL) {
recvq_posted_tail->dev.next = rreq;
@@ -1135,46 +1120,6 @@ int MPIDI_CH3U_Clean_recvq(MPID_Comm *comm_ptr)
}
#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3U_Complete_disabled_anysources
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPIDI_CH3U_Complete_disabled_anysources(void)
-{
- int mpi_errno = MPI_SUCCESS;
- MPID_Request *req, *prev_req;
- int error = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3U_COMPLETE_DISABLED_ANYSOURCES);
-
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3U_COMPLETE_DISABLED_ANYSOURCES);
- MPIU_THREAD_CS_ENTER(MSGQUEUE,);
-
- MPIU_ERR_SETSIMPLE(error, MPIX_ERR_PROC_FAILED_PENDING, "**failure_pending");
-
- /* Check each request in the posted queue, and complete-with-error any
- anysource requests posted on communicators that have disabled
- anysources */
- req = recvq_posted_head;
- prev_req = NULL;
- while (req) {
- if (req->dev.match.parts.rank == MPI_ANY_SOURCE && !MPIDI_CH3I_Comm_AS_enabled(req->comm)) {
- dequeue_and_set_error(&req, prev_req, &recvq_posted_head, &recvq_posted_tail, &error, MPI_PROC_NULL); /* we don't know the rank of the failed proc */
- } else {
- prev_req = req;
- req = req->dev.next;
- }
- }
-
- fn_exit:
- MPIU_THREAD_CS_EXIT(MSGQUEUE,);
-
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3U_COMPLETE_DISABLED_ANYSOURCES);
- return mpi_errno;
- fn_fail:
- goto fn_exit;
-}
-
-
-#undef FUNCNAME
#define FUNCNAME MPIDU_Complete_posted_with_error
#undef FCNAME
#define FCNAME MPIU_QUOTE(FUNCNAME)
diff --git a/src/mpid/ch3/src/mpid_comm_failure_ack.c b/src/mpid/ch3/src/mpid_comm_failure_ack.c
index aa6b8ac..e64a7f4 100644
--- a/src/mpid/ch3/src/mpid_comm_failure_ack.c
+++ b/src/mpid/ch3/src/mpid_comm_failure_ack.c
@@ -148,37 +148,3 @@ int MPID_Comm_failed_bitarray(MPID_Comm *comm_ptr, uint32_t **bitarray, int acke
goto fn_exit;
}
-#undef FUNCNAME
-#define FUNCNAME MPID_Request_is_pending_failure
-#undef FCNAME
-#define FCNAME MPIU_QUOTE(FUNCNAME)
-int MPID_Request_is_pending_failure(MPID_Request *request_ptr)
-{
- int ret = 0;
- MPIDI_STATE_DECL(MPID_STATE_REQUEST_IS_PENDING_FAILURE);
- MPIDI_FUNC_ENTER(MPID_STATE_REQUEST_IS_PENDING_FAILURE);
-
- if (NULL == request_ptr || NULL == request_ptr->comm) {
- goto fn_exit;
- }
-
- if (request_ptr->dev.match.parts.rank != MPI_ANY_SOURCE) {
- goto fn_exit;
- }
-
- /* If the request is pending and the communicator has MPI_ANY_SOURCE
- * enabled, then we can mark the request as not pending and let the
- * request continue. */
- if (MPIDI_CH3I_Comm_AS_enabled(request_ptr->comm)) {
- request_ptr->status.MPI_ERROR = MPI_SUCCESS;
- goto fn_exit;
- }
-
- /* Otherwise, the request shouldn't go into the progress engine. */
- ret = 1;
-
-fn_exit:
- MPIU_DBG_MSG_S(CH3_OTHER, VERBOSE, "Request is%spending failure", ret ? " " : " not ");
- MPIDI_FUNC_EXIT(MPID_STATE_REQUEST_IS_PENDING_FAILURE);
- return ret;
-}
diff --git a/src/mpid/ch3/src/mpid_irecv.c b/src/mpid/ch3/src/mpid_irecv.c
index 5f22202..e0cc472 100644
--- a/src/mpid/ch3/src/mpid_irecv.c
+++ b/src/mpid/ch3/src/mpid_irecv.c
@@ -49,10 +49,6 @@ int MPID_Irecv(void * buf, int count, MPI_Datatype datatype, int rank, int tag,
MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomemreq");
}
- if (MPIR_ERR_GET_CLASS(rreq->status.MPI_ERROR) == MPIX_ERR_PROC_FAILED_PENDING) {
- mpi_errno = rreq->status.MPI_ERROR;
- }
-
if (found)
{
MPIDI_VC_t * vc;
http://git.mpich.org/mpich.git/commitdiff/a96ac72edde12b9ddfbb2c20b92d51bda…
commit a96ac72edde12b9ddfbb2c20b92d51bda71e0840
Author: Wesley Bland <wbland(a)anl.gov>
Date: Mon Nov 24 15:13:56 2014 -0500
Don't free a request if it still pending
If we had a failure that caused a request to be pending, we were freeing
the request before calling the error handler. That caused segfaults. Now
we switch the ordering of the two to avoid that.
This also moves the assignment of the status_ptr to be a little earlier
to avoid another segfault.
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 38775bf..acf2f2d 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -60,16 +60,16 @@ int MPIR_Test_impl(MPI_Request *request, int *flag, MPI_Status *status)
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
- if (MPID_Request_is_complete(request_ptr)) {
+ if (MPID_Request_is_pending_failure(request_ptr)) {
+ *flag = TRUE;
+ mpi_errno = request_ptr->status.MPI_ERROR;
+ goto fn_fail;
+ } else if (MPID_Request_is_complete(request_ptr)) {
mpi_errno = MPIR_Request_complete(request, request_ptr, status,
&active_flag);
*flag = TRUE;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
/* Fall through to the exit */
- } else if (MPID_Request_is_pending_failure(request_ptr)) {
- *flag = TRUE;
- mpi_errno = request_ptr->status.MPI_ERROR;
- goto fn_fail;
}
fn_exit:
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 72112fa..fa7cb58 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -168,7 +168,12 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
status);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
+ if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
+ mpi_errno = request_ptrs[i]->status.MPI_ERROR;
+ *flag = TRUE;
+ *indx = i;
+ goto fn_fail;
+ } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
{
mpi_errno = MPIR_Request_complete(&array_of_requests[i],
request_ptrs[i],
@@ -183,11 +188,6 @@ int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx,
{
n_inactive += 1;
}
- } else if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
- mpi_errno = request_ptrs[i]->status.MPI_ERROR;
- *flag = TRUE;
- *indx = i;
- goto fn_fail;
}
}
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index 4f528b3..0240b76 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -169,9 +169,16 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
array_of_statuses);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i]))
- {
- status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+ status_ptr = (array_of_statuses != MPI_STATUSES_IGNORE) ? &array_of_statuses[n_active] : MPI_STATUS_IGNORE;
+ if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
+ mpi_errno = MPI_ERR_IN_STATUS;
+ array_of_indices[n_active] = i;
+ n_active += 1;
+ rc = request_ptrs[i]->status.MPI_ERROR;
+ if (status_ptr != MPI_STATUS_IGNORE) {
+ status_ptr->MPI_ERROR = rc;
+ }
+ } else if (request_ptrs[i] != NULL && MPID_Request_is_complete(request_ptrs[i])) {
rc = MPIR_Request_complete(&array_of_requests[i], request_ptrs[i],
status_ptr, &active_flag);
if (active_flag)
@@ -197,12 +204,6 @@ int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
request_ptrs[i] = NULL;
n_inactive += 1;
}
- } else if (request_ptrs[i] != NULL && MPID_Request_is_pending_failure(request_ptrs[i])) {
- mpi_errno = MPI_ERR_IN_STATUS;
- array_of_indices[n_active] = i;
- n_active += 1;
- rc = request_ptrs[i]->status.MPI_ERROR;
- status_ptr->MPI_ERROR = rc;
}
}
-----------------------------------------------------------------------
Summary of changes:
src/include/mpiimpl.h | 20 +------
src/mpi/pt2pt/mpir_request.c | 8 ++--
src/mpi/pt2pt/recv.c | 13 +++++
src/mpi/pt2pt/sendrecv.c | 17 ++++++
src/mpi/pt2pt/test.c | 10 ++--
src/mpi/pt2pt/testall.c | 31 +++++++----
src/mpi/pt2pt/testany.c | 54 ++++++++++++-------
src/mpi/pt2pt/testsome.c | 72 +++++++++++++------------
src/mpi/pt2pt/wait.c | 28 ++++++++--
src/mpi/pt2pt/waitall.c | 47 +++++++++++++---
src/mpi/pt2pt/waitany.c | 21 +++++--
src/mpi/pt2pt/waitsome.c | 85 ++++++++++++++++++-----------
src/mpid/ch3/include/mpidimpl.h | 1 -
src/mpid/ch3/include/mpidpre.h | 3 +-
src/mpid/ch3/src/ch3u_comm.c | 8 +--
src/mpid/ch3/src/ch3u_recvq.c | 57 +-------------------
src/mpid/ch3/src/mpid_comm_failure_ack.c | 34 ------------
src/mpid/ch3/src/mpid_irecv.c | 4 --
test/mpi/ft/anysource.c | 6 +-
19 files changed, 273 insertions(+), 246 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-98-g47ac6f6
by noreply@mpich.org 12 Jan '15
by noreply@mpich.org 12 Jan '15
12 Jan '15
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 47ac6f6b9fa738a06850982a321f9810ab23fff2 (commit)
from f544cbf9921e1536490129e37294253c2f47a989 (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/47ac6f6b9fa738a06850982a321f9810a…
commit 47ac6f6b9fa738a06850982a321f9810ab23fff2
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Thu Jan 8 13:03:15 2015 -0600
rptls: do not send pause/unpause messages to self
CH3 ensures that self communication does not go through the netmod,
so there is no need for a process to pause/unpause itself.
Signed-off-by: Antonio J. Pena <apenya(a)mcs.anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c
index 6e58e8f..74a39ee 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/rptl.c
@@ -142,7 +142,7 @@ static int poke_progress(void)
/* if we are in a local AWAITING PAUSE ACKS state, see if we
* can send out the unpause message */
if (rptl->local_state == RPTL_LOCAL_STATE_AWAITING_PAUSE_ACKS &&
- rptl->pause_ack_counter == rptl_info.world_size) {
+ rptl->pause_ack_counter == rptl_info.world_size - 1) {
/* if we are over the max count limit, do not send an
* unpause message yet */
if (rptl->data.ob_curr_count > rptl->data.ob_max_count)
@@ -154,6 +154,8 @@ static int poke_progress(void)
rptl->local_state = RPTL_LOCAL_STATE_ACTIVE;
for (i = 0; i < rptl_info.world_size; i++) {
+ if (i == MPIDI_Process.my_pg_rank)
+ continue;
mpi_errno = rptl_info.get_target_info(i, &id, rptl->data.pt, &data_pt, &control_pt);
if (mpi_errno) {
ret = PTL_FAIL;
@@ -182,6 +184,8 @@ static int poke_progress(void)
/* send a pause ack message */
assert(target->rptl);
for (i = 0; i < rptl_info.world_size; i++) {
+ if (i == MPIDI_Process.my_pg_rank)
+ continue;
/* find the target that has this target id and get the
* control portal information for it */
mpi_errno = rptl_info.get_target_info(i, &id, target->rptl->data.pt, &data_pt, &control_pt);
@@ -455,6 +459,8 @@ static int send_pause_messages(struct rptl *rptl)
rptl->data.ob_max_count = rptl->data.ob_curr_count / 2;
for (i = 0; i < rptl_info.world_size; i++) {
+ if (i == MPIDI_Process.my_pg_rank)
+ continue;
mpi_errno = rptl_info.get_target_info(i, &id, rptl->data.pt, &data_pt, &control_pt);
if (mpi_errno) {
ret = PTL_FAIL;
-----------------------------------------------------------------------
Summary of changes:
.../ch3/channels/nemesis/netmod/portals4/rptl.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-97-gf544cbf
by noreply@mpich.org 08 Jan '15
by noreply@mpich.org 08 Jan '15
08 Jan '15
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 f544cbf9921e1536490129e37294253c2f47a989 (commit)
from 96f78a9866a9494a0e9e8d433f3968c5c9f2f917 (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/f544cbf9921e1536490129e37294253c2…
commit f544cbf9921e1536490129e37294253c2f47a989
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Thu Jan 8 12:14:22 2015 -0500
PAMID: misc chnages in pamid to support MPICH 3.2
Signed-off-by: Sameh Sharkawi <sssharka(a)us.ibm.com>
diff --git a/src/mpid/pamid/include/mpidimpl.h b/src/mpid/pamid/include/mpidimpl.h
index ffd1cf7..5135c49 100644
--- a/src/mpid/pamid/include/mpidimpl.h
+++ b/src/mpid/pamid/include/mpidimpl.h
@@ -182,13 +182,6 @@ int
MPIDI_Win_set_info(MPID_Win *win,
MPID_Info *info);
-static inline MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp)
-{
- return MPI_VOID_PTR_CAST_TO_MPI_AINT ((char*)MPI_AINT_CAST_TO_VOID_PTR(base) + disp);
-}
-
-static inline MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
-{
- return MPI_PTR_DISP_CAST_TO_MPI_AINT ((char*)MPI_AINT_CAST_TO_VOID_PTR(addr1) - (char*)MPI_AINT_CAST_TO_VOID_PTR(addr2));
-}
+MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp);
+MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
#endif
diff --git a/src/mpid/pamid/src/Makefile.mk b/src/mpid/pamid/src/Makefile.mk
index 0ec7698..a8d98e1 100644
--- a/src/mpid/pamid/src/Makefile.mk
+++ b/src/mpid/pamid/src/Makefile.mk
@@ -58,6 +58,7 @@ mpi_core_sources += \
src/mpid/pamid/src/mpid_mprobe.c \
src/mpid/pamid/src/mpid_imrecv.c \
src/mpid/pamid/src/mpid_improbe.c \
+ src/mpid/pamid/src/mpid_aint.c \
src/mpid/pamid/src/mpidi_nbc_sched.c
if QUEUE_BINARY_SEARCH_SUPPORT
diff --git a/src/mpid/pamid/src/misc/mpid_unimpl.c b/src/mpid/pamid/src/misc/mpid_unimpl.c
index 0bd954b..41abeee 100644
--- a/src/mpid/pamid/src/misc/mpid_unimpl.c
+++ b/src/mpid/pamid/src/misc/mpid_unimpl.c
@@ -84,7 +84,7 @@ int MPID_Comm_failure_get_acked(MPID_Comm *comm_ptr, MPID_Group **failed_group_p
return 0;
}
-int MPID_Comm_agree(MPID_Comm *comm_ptr, uint32_t *bitarray, int *flag, int new_fail)
+int MPID_Comm_agree(MPID_Comm *comm_ptr, uint32_t *bitarray, int *flag, mpir_errflag_t new_fail)
{
MPID_abort();
return 0;
diff --git a/src/mpid/pamid/src/mpid_aint.c b/src/mpid/pamid/src/mpid_aint.c
new file mode 100644
index 0000000..ca4c00b
--- /dev/null
+++ b/src/mpid/pamid/src/mpid_aint.c
@@ -0,0 +1,61 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include "mpidimpl.h"
+
+/*
+ Input Parameters:
++ base - base address (integer)
+- disp - displacement (integer)
+
+ Return value:
+ A new MPI_Aint value that is equivalent to the sum of the base and disp
+ arguments, where base represents a base address returned by a call
+ to MPI_GET_ADDRESS and disp represents a signed integer displacement.
+*/
+#undef FUNCNAME
+#define FUNCNAME MPID_Aint_add
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+MPI_Aint MPID_Aint_add(MPI_Aint base, MPI_Aint disp)
+{
+ MPI_Aint result;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_AINT_ADD);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_AINT_ADD);
+
+ result = MPI_VOID_PTR_CAST_TO_MPI_AINT ((char*)MPI_AINT_CAST_TO_VOID_PTR(base) + disp);
+
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_AINT_ADD);
+ return result;
+}
+
+/*
+ Input Parameters:
++ addr1 - minuend address (integer)
+- addr2 - subtrahend address (integer)
+
+ Return value:
+ A new MPI_Aint value that is equivalent to the difference between addr1 and
+ addr2 arguments, where addr1 and addr2 represent addresses returned by calls
+ to MPI_GET_ADDRESS.
+*/
+#undef FUNCNAME
+#define FUNCNAME MPID_Aint_diff
+#undef FCNAME
+#define FCNAME MPIDI_QUOTE(FUNCNAME)
+MPI_Aint MPID_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
+{
+ MPI_Aint result;
+
+ MPIDI_STATE_DECL(MPID_STATE_MPID_AINT_DIFF);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPID_AINT_DIFF);
+
+ result = MPI_PTR_DISP_CAST_TO_MPI_AINT ((char*)MPI_AINT_CAST_TO_VOID_PTR(addr1) - (char*)MPI_AINT_CAST_TO_VOID_PTR(addr2));
+
+ MPIDI_FUNC_EXIT(MPID_STATE_MPID_AINT_DIFF);
+ return result;
+}
diff --git a/src/mpid/pamid/src/mpid_finalize.c b/src/mpid/pamid/src/mpid_finalize.c
index 10d8dce..104dc1b 100644
--- a/src/mpid/pamid/src/mpid_finalize.c
+++ b/src/mpid/pamid/src/mpid_finalize.c
@@ -63,7 +63,8 @@ int MPID_Finalize()
{
pami_result_t rc;
int mpierrno = MPI_SUCCESS;
- MPIR_Barrier_impl(MPIR_Process.comm_world, &mpierrno);
+ mpir_errflag_t errflag=MPIR_ERR_NONE;
+ MPIR_Barrier_impl(MPIR_Process.comm_world, &errflag);
#ifdef MPIDI_STATISTICS
if (MPIDI_Process.mp_statistics) {
diff --git a/src/mpid/pamid/src/onesided/mpid_win_allocate.c b/src/mpid/pamid/src/onesided/mpid_win_allocate.c
index f9ff368..7471fa7 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_allocate.c
@@ -55,6 +55,7 @@ MPID_Win_allocate(MPI_Aint size,
{
int mpi_errno = MPI_SUCCESS;
int rc = MPI_SUCCESS;
+ mpir_errflag_t errflag = MPIR_ERR_NONE;
void *baseP;
static char FCNAME[] = "MPID_Win_allocate";
MPIDI_Win_info *winfo;
@@ -90,7 +91,7 @@ MPID_Win_allocate(MPI_Aint size,
if (rc != MPI_SUCCESS)
return rc;
*(void**) base_ptr = (void *) win->base;
- mpi_errno = MPIR_Barrier_impl(comm_ptr, &mpi_errno);
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
fn_fail:
return mpi_errno;
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 ecce9ce..447f2ce 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
@@ -484,6 +484,7 @@ MPID_Win_allocate_shared(MPI_Aint size,
MPID_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
+ mpir_errflag_t errflag = MPIR_ERR_NONE;
int onNode = 0;
MPID_Win *win = NULL;
int rank, prev_size;
@@ -545,7 +546,7 @@ MPID_Win_allocate_shared(MPI_Aint size,
*(void**) base_ptr = (void *) win->mpid.info[rank].base_addr;
- mpi_errno = MPIR_Barrier_impl(comm_ptr, &mpi_errno);
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, &errflag);
fn_exit:
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
diff --git a/src/mpid/pamid/src/onesided/mpid_win_create.c b/src/mpid/pamid/src/onesided/mpid_win_create.c
index 6c1b9cc..8adb91b 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_create.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_create.c
@@ -105,6 +105,7 @@ int
MPIDI_Win_allgather( MPI_Aint size, MPID_Win **win_ptr )
{
int mpi_errno = MPI_SUCCESS;
+ mpir_errflag_t errflag=MPIR_ERR_NONE;
MPID_Win *win;
int rank;
MPID_Comm *comm_ptr;
@@ -148,7 +149,7 @@ MPIDI_Win_allgather( MPI_Aint size, MPID_Win **win_ptr )
sizeof(struct MPIDI_Win_info),
MPI_BYTE,
comm_ptr,
- &mpi_errno);
+ &errflag);
fn_fail:
return mpi_errno;
@@ -186,6 +187,7 @@ MPID_Win_create(void * base,
MPID_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
+ mpir_errflag_t errflag = MPIR_ERR_NONE;
int rc = MPI_SUCCESS;
MPID_Win *win;
size_t rank;
@@ -205,7 +207,7 @@ MPID_Win_create(void * base,
return rc;
- mpi_errno = MPIR_Barrier_impl(comm_ptr, &mpi_errno);
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, (mpir_errflag_t *) &errflag);
return mpi_errno;
}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c b/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
index 633a8c5..9134e69 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
@@ -43,6 +43,7 @@ MPID_Win_create_dynamic( MPID_Info * info,
MPID_Win ** win_ptr)
{
int mpi_errno = MPI_SUCCESS;
+ mpir_errflag_t errflag = MPIR_ERR_NONE;
int rc = MPI_SUCCESS;
MPIDI_Win_info *winfo;
MPID_Win *win;
@@ -83,7 +84,7 @@ MPID_Win_create_dynamic( MPID_Info * info,
if (rc != MPI_SUCCESS)
return rc;
- mpi_errno = MPIR_Barrier_impl(comm_ptr, &mpi_errno);
+ mpi_errno = MPIR_Barrier_impl(comm_ptr, (mpir_errflag_t *) &errflag);
return mpi_errno;
}
diff --git a/src/mpid/pamid/src/onesided/mpid_win_fence.c b/src/mpid/pamid/src/onesided/mpid_win_fence.c
index 17bb022..bc84ff0 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_fence.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_fence.c
@@ -27,6 +27,7 @@ MPID_Win_fence(int assert,
MPID_Win *win)
{
int mpi_errno = MPI_SUCCESS;
+ mpir_errflag_t errflag = MPIR_ERR_NONE;
static char FCNAME[] = "MPID_Win_fence";
if(win->mpid.sync.origin_epoch_type != win->mpid.sync.target_epoch_type){
@@ -63,7 +64,7 @@ MPID_Win_fence(int assert,
if (!(assert & MPI_MODE_NOPRECEDE))
{
- mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &mpi_errno);
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
}
return mpi_errno;
diff --git a/src/mpid/pamid/src/onesided/mpid_win_set_info.c b/src/mpid/pamid/src/onesided/mpid_win_set_info.c
index 1566910..f55676d 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_set_info.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_set_info.c
@@ -93,9 +93,10 @@ int
MPID_Win_set_info(MPID_Win *win, MPID_Info *info)
{
int mpi_errno = MPI_SUCCESS;
+ mpir_errflag_t errflag = MPIR_ERR_NONE;
mpi_errno = MPIDI_Win_set_info(win, info);
MPID_assert(mpi_errno == MPI_SUCCESS);
- mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &mpi_errno);
+ mpi_errno = MPIR_Barrier_impl(win->comm_ptr, &errflag);
return mpi_errno;
}
-----------------------------------------------------------------------
Summary of changes:
src/mpid/pamid/include/mpidimpl.h | 11 ++---------
src/mpid/pamid/src/Makefile.mk | 1 +
src/mpid/pamid/src/misc/mpid_unimpl.c | 2 +-
src/mpid/{ch3 => pamid}/src/mpid_aint.c | 0
src/mpid/pamid/src/mpid_finalize.c | 3 ++-
src/mpid/pamid/src/onesided/mpid_win_allocate.c | 3 ++-
.../pamid/src/onesided/mpid_win_allocate_shared.c | 3 ++-
src/mpid/pamid/src/onesided/mpid_win_create.c | 6 ++++--
.../pamid/src/onesided/mpid_win_create_dynamic.c | 3 ++-
src/mpid/pamid/src/onesided/mpid_win_fence.c | 3 ++-
src/mpid/pamid/src/onesided/mpid_win_set_info.c | 3 ++-
11 files changed, 20 insertions(+), 18 deletions(-)
copy src/mpid/{ch3 => pamid}/src/mpid_aint.c (100%)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-96-g96f78a9
by noreply@mpich.org 08 Jan '15
by noreply@mpich.org 08 Jan '15
08 Jan '15
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 96f78a9866a9494a0e9e8d433f3968c5c9f2f917 (commit)
from 77db2516bc67652d77b77b5689cb128060f2b514 (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/96f78a9866a9494a0e9e8d433f3968c5c…
commit 96f78a9866a9494a0e9e8d433f3968c5c9f2f917
Author: Ralph Castain <rhc(a)open-mpi.org>
Date: Tue Jan 6 18:40:52 2015 -0800
ROMIO: Add missing files to Makefile.mk 'noinst'
OpenMPI uses 'make dist', but MPICH does not. Some recently added
(internal) header files were not listed in ROMIO's noinst declaration
Note: RobL combined and edited these OpenMPI patches into this patch:
- e0927895db8d
- 84c41429e9ac
Signed-off-by: Rob Latham <robl(a)mcs.anl.gov>
diff --git a/src/mpi/romio/adio/Makefile.mk b/src/mpi/romio/adio/Makefile.mk
index a64eb9e..505d518 100644
--- a/src/mpi/romio/adio/Makefile.mk
+++ b/src/mpi/romio/adio/Makefile.mk
@@ -19,7 +19,9 @@ noinst_HEADERS += \
adio/include/mpio_error.h \
adio/include/mpipr.h \
adio/include/mpiu_greq.h \
- adio/include/nopackage.h
+ adio/include/nopackage.h \
+ adio/include/mpiu_external32.h \
+ adio/include/hint_fns.h
include $(top_srcdir)/adio/ad_gpfs/Makefile.mk
include $(top_srcdir)/adio/ad_gpfs/bg/Makefile.mk
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/Makefile.mk | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-95-g77db251
by noreply@mpich.org 07 Jan '15
by noreply@mpich.org 07 Jan '15
07 Jan '15
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 77db2516bc67652d77b77b5689cb128060f2b514 (commit)
from b14397f77d64cf9659a746e14daff15de3585b5b (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/77db2516bc67652d77b77b5689cb12806…
commit 77db2516bc67652d77b77b5689cb128060f2b514
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Tue Dec 23 10:39:50 2014 -0600
add FCMODOUTFLAG to FC_COMPILE_MODS
Adding FCMODOUTFLAG directly to AM_FCFLAGS could cause conflicts with
certain libtool flags (-module) during linking. This change allows us
to set FCMODOUTFLAG during module creation, but not have it present
during linking. Refs #2024
Signed-off-by: Junchao Zhang <jczhang(a)mcs.anl.gov>
diff --git a/src/binding/fortran/use_mpi/buildiface b/src/binding/fortran/use_mpi/buildiface
index 8159e69..cc6dc72 100755
--- a/src/binding/fortran/use_mpi/buildiface
+++ b/src/binding/fortran/use_mpi/buildiface
@@ -950,7 +950,7 @@ nodist_noinst_HEADERS += \\
# cause any .\$(MOD) files to be output in the f90 bindings directory instead of
# the current directory
-AM_FCFLAGS += \$(FCMODOUTFLAG)src/binding/fortran/use_mpi
+FC_COMPILE_MODS += \$(FCMODOUTFLAG)src/binding/fortran/use_mpi
mpi_fc_sources += \\
src/binding/fortran/use_mpi/typef90cmplxf.c \\
-----------------------------------------------------------------------
Summary of changes:
src/binding/fortran/use_mpi/buildiface | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-94-gb14397f
by noreply@mpich.org 07 Jan '15
by noreply@mpich.org 07 Jan '15
07 Jan '15
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 b14397f77d64cf9659a746e14daff15de3585b5b (commit)
from 6ce38c2783d2839884f83db4a15e46535a13950b (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/b14397f77d64cf9659a746e14daff15de…
commit b14397f77d64cf9659a746e14daff15de3585b5b
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Tue Dec 23 11:27:57 2014 -0600
patch libtool for ifort on darwin
Recent versions of ifort on darwin will drop flags intended for the
linker unless they are prefixed with "-Wl,". Jeff Hammond checked with
the Intel compiler folks, and they confirmed that "-Wl," has been
supported since the initial ifort release on OSX (9.1).
Closes #2024
Signed-off-by: Junchao Zhang <jczhang(a)mcs.anl.gov>
diff --git a/autogen.sh b/autogen.sh
index cdbd09d..8a8ccd9 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -951,7 +951,22 @@ if [ "$do_build_configure" = "yes" ] ; then
fi
fi
- if [ $powerpcle_patch_requires_rebuild = "yes" -o $nagfor_patch_requires_rebuild = "yes" ] ; then
+ # There is no need to patch if we're not going to use Fortran.
+ ifort_patch_requires_rebuild=no
+ if [ $do_bindings = "yes" ] ; then
+ echo_n "Patching libtool.m4 for compatibility with ifort on OSX... "
+ patch -N -s -l $amdir/confdb/libtool.m4 maint/darwin-ifort.patch
+ if [ $? -eq 0 ] ; then
+ ifort_patch_requires_rebuild=yes
+ # Remove possible leftovers, which don't imply a failure
+ rm -f $amdir/confdb/libtool.m4.orig
+ echo "done"
+ else
+ echo "failed"
+ fi
+ fi
+
+ if [ $powerpcle_patch_requires_rebuild = "yes" -o $nagfor_patch_requires_rebuild = "yes" -o $ifort_patch_requires_rebuild = "yes" ] ; then
# Rebuild configure
(cd $amdir && $autoconf -f) || exit 1
# Reset libtool.m4 timestamps to avoid confusing make
diff --git a/maint/darwin-ifort.patch b/maint/darwin-ifort.patch
new file mode 100644
index 0000000..42c7816
--- /dev/null
+++ b/maint/darwin-ifort.patch
@@ -0,0 +1,14 @@
+--- confdb/libtool.m4~ 2014-12-23 10:59:38.000000000 -0600
++++ confdb/libtool.m4 2014-12-23 11:05:54.000000000 -0600
+@@ -1097,7 +1097,10 @@
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ case $cc_basename in
+- ifort*) _lt_dar_can_shared=yes ;;
++ ifort*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _lt_dar_can_shared=yes
++ ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
-----------------------------------------------------------------------
Summary of changes:
autogen.sh | 17 ++++++++++++++++-
maint/darwin-ifort.patch | 14 ++++++++++++++
2 files changed, 30 insertions(+), 1 deletions(-)
create mode 100644 maint/darwin-ifort.patch
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-93-g6ce38c2
by noreply@mpich.org 06 Jan '15
by noreply@mpich.org 06 Jan '15
06 Jan '15
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 6ce38c2783d2839884f83db4a15e46535a13950b (commit)
from 64f60754dc48835e8f049e623f6aebf699d44f7a (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/6ce38c2783d2839884f83db4a15e46535…
commit 6ce38c2783d2839884f83db4a15e46535a13950b
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Wed Dec 17 16:15:20 2014 -0600
Fortran profiling interface fix
Previous re-organization of the library symbols resulted in a
situation where Fortran programs could no longer be profiled using
tools written in C. Functions in libmpifort directly called the
PMPI_* versions in libmpi.
Now we always call the MPI_* versions from libmpifort. In the case
where we are building a separate profiling library, we use a new
preprocessor flag to ensure we call PMPI_* from inside libpmpi.
Additional bug fix:
- always define mpi_conversion_fn_null_, there is no pmpi version
Fixes #2209
Signed-off-by: Junchao Zhang <jczhang(a)mcs.anl.gov>
diff --git a/Makefile.am b/Makefile.am
index 818f60d..463bfe4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -150,6 +150,7 @@ if BUILD_PROFILING_LIB
lib_LTLIBRARIES += lib/lib@[email protected]
lib_lib@PMPILIBNAME@_la_SOURCES = $(mpi_sources) $(mpi_f77_sources) $(mpi_core_sources)
lib_lib@PMPILIBNAME@_la_LDFLAGS = $(external_ldflags) $(ABIVERSIONFLAGS)
+lib_lib@PMPILIBNAME@_la_CPPFLAGS = $(AM_CPPFLAGS) -DF77_USE_PMPI
lib_lib@PMPILIBNAME@_la_LIBADD = $(external_libs) $(pmpi_convenience_libs)
EXTRA_lib_lib@PMPILIBNAME@_la_DEPENDENCIES = $(pmpi_convenience_libs)
diff --git a/src/binding/fortran/mpif_h/buildiface b/src/binding/fortran/mpif_h/buildiface
index f6803fe..ba75a71 100755
--- a/src/binding/fortran/mpif_h/buildiface
+++ b/src/binding/fortran/mpif_h/buildiface
@@ -1370,11 +1370,13 @@ sub print_name_map_block {
#define ${lcprefix}${lcname}_ p${lcprefix}${lcname}_
#endif /* Test on name mapping */
+#ifdef F77_USE_PMPI
/* This defines the routine that we call, which must be the PMPI version
since we're renaming the Fortran entry as the pmpi version. The MPI name
must be undefined first to prevent any conflicts with previous renamings. */
#undef ${ucprefix}${routine_name}
#define ${ucprefix}${routine_name} P${ucprefix}${routine_name}
+#endif
#else
";
@@ -5379,12 +5381,10 @@ extern FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null_ ( void*v1, MPI_Fint*v
#endif
-#ifndef MPICH_MPI_FROM_PMPI
/* This isn't a callable function */
FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null_ ( void*v1, MPI_Fint*v2, MPI_Fint*v3, void*v4, MPI_Offset*v5, MPI_Fint *v6, MPI_Fint*v7, MPI_Fint *ierr ) {
return 0;
}
-#endif
";
-----------------------------------------------------------------------
Summary of changes:
Makefile.am | 1 +
src/binding/fortran/mpif_h/buildiface | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2a2-92-g64f6075
by noreply@mpich.org 06 Jan '15
by noreply@mpich.org 06 Jan '15
06 Jan '15
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 64f60754dc48835e8f049e623f6aebf699d44f7a (commit)
via cca5a3996d7077e93648a467406fce7c1bacdc28 (commit)
via 05b3e06fdc94021fac82ff3abe35c7a2fb17d274 (commit)
via ef2465bc5201630f41f3c1d230aa01bc73e0e3dc (commit)
via b6323b0f69290069329ee278c1cf7b4f257460dc (commit)
from b32189fc43f52312625648e9c1638d12a82b2bce (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/64f60754dc48835e8f049e623f6aebf69…
commit 64f60754dc48835e8f049e623f6aebf699d44f7a
Author: William Gropp <wgropp(a)illinois.edu>
Date: Thu Dec 18 10:41:11 2014 -0600
Add timelimit option
Adds a way to pass a timelimit argument to the run command, as long
as the timelimit is in seconds. This is enough for some of the MPICH
versions of mpiexec and for recent versions of the Cray aprun command.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/test/mpi/runtests.in b/test/mpi/runtests.in
index 3edc028..a6d05f3 100644
--- a/test/mpi/runtests.in
+++ b/test/mpi/runtests.in
@@ -49,6 +49,9 @@ $mpiexec = "@MPIEXEC@"; # Name of mpiexec program (including path, if necessa
# "-ppn %d"
$ppnArg = "";
$ppnMax = -1;
+# timelimitArg is the argument to use to mpiexec to set the timelimit
+# in seconds. The format is "string%d", e.g., "-t %d" for Cray aprun
+$timelimitArg="";
#
$testIsStrict = "@MPI_IS_STRICT@";
$MPIhasMPIX = "@MPI_HAS_MPIX@";
@@ -160,6 +163,9 @@ if (defined($ENV{'MPITEST_PPNARG'})) {
if (defined($ENV{'MPITEST_PPNMAX'})) {
$ppnMax = $ENV{'MPITEST_PPNMAX'};
}
+if (defined($ENV{'MPITEST_TIMELIMITARG'})) {
+ $timelimitArg = $ENV{'MPITEST_TIMELIMITARG'};
+}
#---------------------------------------------------------------------------
# Process arguments and override any defaults
@@ -174,6 +180,7 @@ foreach $_ (@ARGV) {
elsif (/--?maxnp=(\d+)/) { $np_max = $1; }
elsif (/--?ppn=(\d+)/) { $ppnMax = $1; }
elsif (/--?ppnarg=(.*)/) { $ppnArg = $1; }
+ elsif (/--?timelimitarg=(.*)/) { $timelimitArg = $1; }
elsif (/--?tests=(.*)/) { $listfiles = $1; }
elsif (/--?srcdir=(.*)/) { $srcdir = $1; }
elsif (/--?verbose/) { $verbose = 1; }
@@ -245,6 +252,7 @@ foreach $_ (@ARGV) {
print STDERR "runtests [-tests=testfile] [-np=nprocesses] \
[-maxnp=max-nprocesses] [-srcdir=location-of-tests] \
[-ppn=max-proc-per-node] [-ppnarg=string] \
+ [-timelimitarg=string] \
[-xmlfile=filename ] [-tapfile=filename ] \
[-junitfile=filename ] [-noxmlclose] \
[-verbose] [-showprogress] [-debug] [-batch]\n";
@@ -689,6 +697,13 @@ sub RunMPIProgram {
$extraArgs .= " " . $ppnargs;
}
+ # Handle the timelimit option.
+ if ($timelimitArg ne "" && $timeout> 0) {
+ $tlargs = "";
+ $tlargs = $timelimitArg;
+ $tlargs =~ s/\%d/$timeout/;
+ $extraArgs .= " " . $tlargs;
+ }
# Run the optional setup routine. For example, the timeout tests could
# be set to a shorter timeout.
@@ -831,6 +846,15 @@ sub AddMPIProgram {
$extraArgs .= " " . $ppnargs;
}
+ # Handle the timelimit option.
+ if ($timelimitArg ne "" && $timeout> 0) {
+ $tlargs = "";
+ $tlargs = $timelimitArg;
+ $tlargs =~ s/\%d/$timeout/;
+ $extraArgs .= " " . $tlargs;
+ }
+
+
print STDOUT "Env includes $progEnv\n" if $verbose;
print STDOUT "$mpiexec $np_arg $np $extraArgs $program_wrapper ./$programname $progArgs\n" if $verbose;
print STDOUT "." if $showProgress;
http://git.mpich.org/mpich.git/commitdiff/cca5a3996d7077e93648a467406fce7c1…
commit cca5a3996d7077e93648a467406fce7c1bacdc28
Author: William Gropp <wgropp(a)illinois.edu>
Date: Thu Dec 11 11:51:05 2014 -0800
Correct testsuite dist target support
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/test/mpi/ckpoint/Makefile.am b/test/mpi/ckpoint/Makefile.am
index 456e04d..d897d14 100644
--- a/test/mpi/ckpoint/Makefile.am
+++ b/test/mpi/ckpoint/Makefile.am
@@ -7,6 +7,8 @@
include $(top_srcdir)/Makefile.mtest
+EXTRA_DIST = testlist
+
## for all programs that are just built from the single corresponding source
## file, we don't need per-target _SOURCES rules, automake will infer them
## correctly
diff --git a/test/mpi/cxx/topo/Makefile.am b/test/mpi/cxx/topo/Makefile.am
index 7df4fd8..da38cda 100644
--- a/test/mpi/cxx/topo/Makefile.am
+++ b/test/mpi/cxx/topo/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile_cxx.mtest
-EXTRA_DIST = testlist distgraphcxx.cxx
+EXTRA_DIST = testlist.in distgraphcxx.cxx
# avoid having to write many "foo_SOURCES = foo.cxx" lines because
# automake is too limited to figure this out for itself
diff --git a/test/mpi/datatype/Makefile.am b/test/mpi/datatype/Makefile.am
index 2840393..ee6d9c1 100644
--- a/test/mpi/datatype/Makefile.am
+++ b/test/mpi/datatype/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
## For some reason, these tests were missing from both the simplemakefile and
## the testlist. Leaving them disabled for now.
diff --git a/test/mpi/errors/Makefile.am b/test/mpi/errors/Makefile.am
index 760e420..8500b36 100644
--- a/test/mpi/errors/Makefile.am
+++ b/test/mpi/errors/Makefile.am
@@ -7,6 +7,8 @@
include $(top_srcdir)/Makefile.mtest
+EXTRA_DIST = testlist.in
+
# FIXME should "datatype" be included in this list? It was not in the
# simplemake version for some reason and is also missing from the testlist
# file
diff --git a/test/mpi/errors/f77/Makefile.am b/test/mpi/errors/f77/Makefile.am
index 1cb612a..39cca6c 100644
--- a/test/mpi/errors/f77/Makefile.am
+++ b/test/mpi/errors/f77/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile_f77.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
SUBDIRS = @iodir@
DIST_SUBDIRS = io
diff --git a/test/mpi/errors/f90/Makefile.am b/test/mpi/errors/f90/Makefile.am
index 6824021..ab3aeed 100644
--- a/test/mpi/errors/f90/Makefile.am
+++ b/test/mpi/errors/f90/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile_f90.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
SUBDIRS = @iodir@
DIST_SUBDIRS = io
diff --git a/test/mpi/f08/Makefile.am b/test/mpi/f08/Makefile.am
index 64d0fc8..40e7366 100644
--- a/test/mpi/f08/Makefile.am
+++ b/test/mpi/f08/Makefile.am
@@ -7,5 +7,7 @@
include $(top_srcdir)/Makefile_f08.mtest
+EXTRA_DIST = testlist
+
SUBDIRS = attr coll comm datatype ext info init io misc profile pt2pt rma spawn subarray timer topo
-DIST_SUBDIRS = $(SUBDIRS)
+DIST_SUBDIRS = $(SUBDIRS) util
diff --git a/test/mpi/f08/coll/Makefile.am b/test/mpi/f08/coll/Makefile.am
index 46ac1a1..1b7d0b1 100644
--- a/test/mpi/f08/coll/Makefile.am
+++ b/test/mpi/f08/coll/Makefile.am
@@ -7,6 +7,8 @@
include $(top_srcdir)/Makefile_f08.mtest
+EXTRA_DIST = testlist
+
# avoid having to write many "foo_SOURCES = foo.f90" lines
AM_DEFAULT_SOURCE_EXT = .f90
diff --git a/test/mpi/f08/datatype/Makefile.am b/test/mpi/f08/datatype/Makefile.am
index 2de5301..8ab9147 100644
--- a/test/mpi/f08/datatype/Makefile.am
+++ b/test/mpi/f08/datatype/Makefile.am
@@ -9,6 +9,8 @@
include $(top_srcdir)/Makefile_f08.mtest
+EXTRA_DIST = testlist
+
# avoid having to write many "foo_SOURCES = foo.f90" lines
AM_DEFAULT_SOURCE_EXT = .f90
diff --git a/test/mpi/f08/ext/Makefile.am b/test/mpi/f08/ext/Makefile.am
index 426f9ed..7beb9bd 100644
--- a/test/mpi/f08/ext/Makefile.am
+++ b/test/mpi/f08/ext/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile_f08.mtest
-EXTRA_DIST = testlist.in
+EXTRA_DIST = testlist
# allocmemf is an "extra" program because it requires a Fortran extension
EXTRA_PROGRAMS = allocmemf90
diff --git a/test/mpi/f08/pt2pt/Makefile.am b/test/mpi/f08/pt2pt/Makefile.am
index 4df3e41..eb0e5dc 100644
--- a/test/mpi/f08/pt2pt/Makefile.am
+++ b/test/mpi/f08/pt2pt/Makefile.am
@@ -7,6 +7,8 @@
include $(top_srcdir)/Makefile_f08.mtest
+EXTRA_DIST = testlist
+
# avoid having to write many "foo_SOURCES = foo.f90" lines
AM_DEFAULT_SOURCE_EXT = .f90
diff --git a/test/mpi/f08/rma/Makefile.am b/test/mpi/f08/rma/Makefile.am
index 4c7a3eb..7b3e440 100644
--- a/test/mpi/f08/rma/Makefile.am
+++ b/test/mpi/f08/rma/Makefile.am
@@ -9,7 +9,7 @@
include $(top_srcdir)/Makefile_f08.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
# avoid having to write many "foo_SOURCES = foo.f90" lines
AM_DEFAULT_SOURCE_EXT = .f90
diff --git a/test/mpi/f77/rma/Makefile.am b/test/mpi/f77/rma/Makefile.am
index 06acf65..491ea21 100644
--- a/test/mpi/f77/rma/Makefile.am
+++ b/test/mpi/f77/rma/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile_f77.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
# avoid having to write many "foo_SOURCES = foo.f" lines
AM_DEFAULT_SOURCE_EXT = .f
diff --git a/test/mpi/f77/spawn/Makefile.am b/test/mpi/f77/spawn/Makefile.am
index 30f0302..36e6119 100644
--- a/test/mpi/f77/spawn/Makefile.am
+++ b/test/mpi/f77/spawn/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile_f77.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
# avoid having to write many "foo_SOURCES = foo.f" lines
AM_DEFAULT_SOURCE_EXT = .f
diff --git a/test/mpi/f90/misc/Makefile.am b/test/mpi/f90/misc/Makefile.am
index 6d87255..600378f 100644
--- a/test/mpi/f90/misc/Makefile.am
+++ b/test/mpi/f90/misc/Makefile.am
@@ -9,6 +9,8 @@ include $(top_srcdir)/Makefile_f90.mtest
EXTRA_DIST = testlist
+EXTRA_DIST += testlist.ap
+
noinst_PROGRAMS = sizeof2
sizeof2_SOURCES = sizeof2.f90
diff --git a/test/mpi/ft/Makefile.am b/test/mpi/ft/Makefile.am
index 6440f30..3aa31ed 100644
--- a/test/mpi/ft/Makefile.am
+++ b/test/mpi/ft/Makefile.am
@@ -7,6 +7,8 @@
include $(top_srcdir)/Makefile.mtest
+EXTRA_DIST = testlist
+
## for all programs that are just built from the single corresponding source
## file, we don't need per-target _SOURCES rules, automake will infer them
## correctly
diff --git a/test/mpi/io/Makefile.am b/test/mpi/io/Makefile.am
index f1932cd..abbfce5 100644
--- a/test/mpi/io/Makefile.am
+++ b/test/mpi/io/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
## for all programs that are just built from the single corresponding source
## file, we don't need per-target _SOURCES rules, automake will infer them
diff --git a/test/mpi/rma/Makefile.am b/test/mpi/rma/Makefile.am
index 1312d11..e2a3eb3 100644
--- a/test/mpi/rma/Makefile.am
+++ b/test/mpi/rma/Makefile.am
@@ -7,7 +7,7 @@
include $(top_srcdir)/Makefile.mtest
-EXTRA_DIST = testlist
+EXTRA_DIST = testlist.in
## for all programs that are just built from the single corresponding source
## file, we don't need per-target _SOURCES rules, automake will infer them
diff --git a/test/mpi/util/Makefile.am b/test/mpi/util/Makefile.am
index 9f33fdd..a31cc70 100644
--- a/test/mpi/util/Makefile.am
+++ b/test/mpi/util/Makefile.am
@@ -2,6 +2,7 @@
AM_CPPFLAGS = -I${srcdir}/../include -I../include
mtest.$(OBJEXT): mtest.c
+mtest_datatype.$(OBJEXT): mtest_datatype.c mtest_datatype.h
dtypes.$(OBJEXT): dtypes.c
nbc_pmpi_adapter.$(OBJEXT): nbc_pmpi_adapter.c
all-local: mtest.$(OBJEXT) dtypes.$(OBJEXT) nbc_pmpi_adapter.$(OBJEXT)
@@ -10,5 +11,9 @@ EXTRA_PROGRAMS = mtestcheck dtypes
mtestcheck_SOURCES = mtestcheck.c mtest.c
# exploiting the NBC PMPI adapter is still very much a manual process...
-EXTRA_DIST = nbc_pmpi_adapter.c
+# mtest_datatype.c and mtest_datatype_gen.c also needed
+# FIXME: mtest_datatype.h belongs with the other include files, in
+# ../include
+EXTRA_DIST = nbc_pmpi_adapter.c mtest_datatype.c mtest_datatype.h \
+ mtest_datatype_gen.c
http://git.mpich.org/mpich.git/commitdiff/05b3e06fdc94021fac82ff3abe35c7a2f…
commit 05b3e06fdc94021fac82ff3abe35c7a2fb17d274
Author: William Gropp <wgropp(a)illinois.edu>
Date: Thu Dec 11 11:50:31 2014 -0800
Update test suite README
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/test/mpi/README b/test/mpi/README
index 7b81d59..fa8baaf 100644
--- a/test/mpi/README
+++ b/test/mpi/README
@@ -1,7 +1,7 @@
MPICH Test Suite
This test suite is a *supplement* to other test suites, including the
-original MPICH testsuite, the Intel testsuite, and the IBM MPI test suite
+original MPICH testsuite, the Intel testsuite, and the IBM MPI test suite
(or test suites derived from that test, including the MPI C++ tests).
Building the Test Suite
@@ -12,7 +12,7 @@ automatically. In some cases, it will need some help. For example:
For IBM MPI, where the compilation commands are not mpicc and mpif77 etc.:
./configure CC=xlc MPICC=mpcc F77=xlf MPIF77=mpxlf CXX=xlC \
- MPICXX="mpCC -cpp" F90=xlf90 MPIF90=mpxlf90 \
+ MPICXX="mpCC -cpp" FC=xlf90 MPIFC=mpxlf90 \
--disable-spawn \
--enable-strictmpi
@@ -82,13 +82,25 @@ to checktests:
cd btest && ../checktests --ignorebogus
+See "More control over running tests" to see how to control how many
+processes per node on used. For example, on a Cray XE-6, this command
+line to runtests can be used:
+
+ runtests -batch -tests=testlist -ppnarg="-N %d" -ppn=2 -showprogress \
+ -mpiexec=aprun
+
+This runs at most 2 processes per node. Note that this can take a long
+time to execute because it builds all of the executables required for the
+tests (over 800 of them!). The "-showprogress" flag lets you know that
+something is happening, but is not necessary.
+
Controlling the Tests that are Run
==================================
-The tests are actually built and run by the script "runtests". This script
+The tests are actually built and run by the script "runtests". This script
can be given a file that contains a list of the tests to run. This file has
two primary types of entries:
- directories: Enter directory and look for the file "testlist".
+ directories: Enter directory and look for the file "testlist".
Recursively run the contents of that file
program names: Build and run that program
@@ -153,3 +165,41 @@ resultTest=proc : This is used to change the way in which the success or
in fact handled.
+More control over running tests
+===============================
+
+You can provide a "processes per node" argument to the run command (typically
+mpiexec) with either options to "runtests" or environment variables.
+The two values are
+
+-ppnarg=string or MPITEST_PPNARG
+ The string used to specify the number of processes per node. The number
+ of processes to use will be substituted for the %d in the string. For
+ example,
+
+ export MPITEST_PPNARG="-ppn %d"
+
+-ppn=n or MPITEST_PPNMAX
+ The maximum number of processes per node. For example
+
+ runtests ... -ppn=2
+
+ This allows the runtests script to ensure that the value of the
+ processes per node argument does not exceed the total number of processes;
+ some run commands (e.g., aprun on Cray) require that the number of
+ processes per node be no greater than the total number of processes.
+
+Note that for most systems it will be important to run the tests
+multiple times, using this option to ensure that the tests that
+involve more than one process are run each of the following cases:
+1) Multiple MPI processes per chip (likely using shared memory to
+communicate between processes)
+2) MPI processes on separate chips within the same node (also likely
+using shared memory between processes, but may use a different
+approach to handle the NUMA nature of this case)
+3) MPI processes on separate nodes (likely using the best available
+interconnect).
+Note, this depends on the nature of the MPI implementation; these
+options make it easier to run the necessary cases. If you run only
+the first case, which is often the default case, you may not
+effectively test the MPI implementation.
http://git.mpich.org/mpich.git/commitdiff/ef2465bc5201630f41f3c1d230aa01bc7…
commit ef2465bc5201630f41f3c1d230aa01bc73e0e3dc
Author: William Gropp <wgropp(a)illinois.edu>
Date: Thu Dec 11 11:50:00 2014 -0800
Add support for procs-per-node to testsuite runs
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/test/mpi/runtests.in b/test/mpi/runtests.in
index ba8dd6a..3edc028 100644
--- a/test/mpi/runtests.in
+++ b/test/mpi/runtests.in
@@ -44,6 +44,12 @@ use File::Copy qw(move);
$MPIMajorVersion = "@MPI_VERSION@";
$MPIMinorVersion = "@MPI_SUBVERSION@";
$mpiexec = "@MPIEXEC@"; # Name of mpiexec program (including path, if necessary)
+# ppnMax is the maximum number of processes per node. -1 means ignore.
+# ppnArg is the argument to use to mpiexec - format is "string%d"; e.g.,
+# "-ppn %d"
+$ppnArg = "";
+$ppnMax = -1;
+#
$testIsStrict = "@MPI_IS_STRICT@";
$MPIhasMPIX = "@MPI_HAS_MPIX@";
$runxfail = "@RUN_XFAIL@";
@@ -147,6 +153,13 @@ if (defined($ENV{'MPITEST_BATCH'})) {
if (defined($ENV{'MPITEST_BATCHDIR'})) {
$batrundir = $ENV{'MPITEST_BATCHDIR'};
}
+# PPN support
+if (defined($ENV{'MPITEST_PPNARG'})) {
+ $ppnArg = $ENV{'MPITEST_PPNARG'};
+}
+if (defined($ENV{'MPITEST_PPNMAX'})) {
+ $ppnMax = $ENV{'MPITEST_PPNMAX'};
+}
#---------------------------------------------------------------------------
# Process arguments and override any defaults
@@ -157,8 +170,10 @@ foreach $_ (@ARGV) {
# we don't want to bother to try and find it.
$mpiexec = $1;
}
- elsif (/--?np=(.*)/) { $np_default = $1; }
- elsif (/--?maxnp=(.*)/) { $np_max = $1; }
+ elsif (/--?np=(\d+)/) { $np_default = $1; }
+ elsif (/--?maxnp=(\d+)/) { $np_max = $1; }
+ elsif (/--?ppn=(\d+)/) { $ppnMax = $1; }
+ elsif (/--?ppnarg=(.*)/) { $ppnArg = $1; }
elsif (/--?tests=(.*)/) { $listfiles = $1; }
elsif (/--?srcdir=(.*)/) { $srcdir = $1; }
elsif (/--?verbose/) { $verbose = 1; }
@@ -229,6 +244,7 @@ foreach $_ (@ARGV) {
print STDERR "Unrecognized argument $_\n";
print STDERR "runtests [-tests=testfile] [-np=nprocesses] \
[-maxnp=max-nprocesses] [-srcdir=location-of-tests] \
+ [-ppn=max-proc-per-node] [-ppnarg=string] \
[-xmlfile=filename ] [-tapfile=filename ] \
[-junitfile=filename ] [-noxmlclose] \
[-verbose] [-showprogress] [-debug] [-batch]\n";
@@ -648,6 +664,7 @@ sub RunMPIProgram {
my $found_error = 0;
my $found_noerror = 0;
my $inline = "";
+ my $extraArgs = "";
&RunPreMsg( $programname, $np, $curdir );
@@ -659,14 +676,27 @@ sub RunMPIProgram {
$timeout = $timeLimit;
}
$ENV{"MPIEXEC_TIMEOUT"} = $timeout;
-
+
+ # Handle the ppn (processes per node) option.
+ $ppnargs = "";
+ if ($ppnArg ne "" && $ppnMax > 0) {
+ $ppnargs = $ppnArg;
+ $nn = $ppnMax;
+ # Some systems require setting the number of processes per node
+ # no greater than the total number of processes (e.g., aprun on Cray)
+ if ($nn > $np) { $nn = $np; }
+ $ppnargs =~ s/\%d/$nn/;
+ $extraArgs .= " " . $ppnargs;
+ }
+
+
# Run the optional setup routine. For example, the timeout tests could
# be set to a shorter timeout.
if ($InitForTest ne "") {
&$InitForTest();
}
print STDOUT "Env includes $progEnv\n" if $verbose;
- print STDOUT "$mpiexec $np_arg $np $program_wrapper ./$programname $progArgs\n" if $verbose;
+ print STDOUT "$mpiexec $np_arg $np $extraArgs $mpiexecArgs $program_wrapper ./$programname $progArgs\n" if $verbose;
print STDOUT "." if $showProgress;
# Save and restore the environment if necessary before running mpiexec.
if ($progEnv ne "") {
@@ -680,7 +710,7 @@ sub RunMPIProgram {
}
}
}
- open ( MPIOUT, "$mpiexec $np_arg $np $mpiexecArgs $program_wrapper ./$programname $progArgs 2>&1 |" ) ||
+ open ( MPIOUT, "$mpiexec $np_arg $np $extraArgs $mpiexecArgs $program_wrapper ./$programname $progArgs 2>&1 |" ) ||
die "Could not run ./$programname\n";
if ($progEnv ne "") {
%ENV = %saveEnv;
@@ -691,7 +721,7 @@ sub RunMPIProgram {
}
else {
if ($verbose) {
- $inline = "$mpiexec $np_arg $np $program_wrapper ./$programname\n";
+ $inline = "$mpiexec $np_arg $np $extraArgs $mpiexecArgs $program_wrapper ./$programname\n";
}
else {
$inline = "";
@@ -789,6 +819,18 @@ sub AddMPIProgram {
$extraArgs .= $timeoutArg
}
+ # Handle the ppn (processes per node) option.
+ $ppnargs = "";
+ if ($ppnArg ne "" && $ppnMax > 0) {
+ $ppnargs = $ppnArg;
+ $nn = $ppnMax;
+ # Some systems require setting the number of processes per node
+ # no greater than the total number of processes (e.g., aprun on Cray)
+ if ($nn > $np) { $nn = $np; }
+ $ppnargs =~ s/\%d/$nn/;
+ $extraArgs .= " " . $ppnargs;
+ }
+
print STDOUT "Env includes $progEnv\n" if $verbose;
print STDOUT "$mpiexec $np_arg $np $extraArgs $program_wrapper ./$programname $progArgs\n" if $verbose;
print STDOUT "." if $showProgress;
http://git.mpich.org/mpich.git/commitdiff/b6323b0f69290069329ee278c1cf7b4f2…
commit b6323b0f69290069329ee278c1cf7b4f257460dc
Author: William Gropp <wgropp(a)illinois.edu>
Date: Wed Dec 10 14:42:51 2014 -0800
Check for endif in f77tof90 to avoid false warning
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/maint/f77tof90.in b/maint/f77tof90.in
index b6ecccc..340b047 100644
--- a/maint/f77tof90.in
+++ b/maint/f77tof90.in
@@ -332,7 +332,7 @@ sub ConvertMakefile {
if (not m/^\s*#/) {
while (m/\b(\w+f)\b/g) {
my $word = $1;
- next if $word eq "if" or $word eq "rf"; # filter out some noise
+ next if $word eq "if" or $word eq "rf" or $word eq "endif"; # filter out some noise
if (-e "$indir/${word}.f" or
0 == system(qq(grep 'TESTDEFN filename="${word}\\.f"' '$indir/ioharness.defn' >/dev/null 2>&1)))
{
-----------------------------------------------------------------------
Summary of changes:
maint/f77tof90.in | 2 +-
test/mpi/README | 58 +++++++++++++++++++++++++--
test/mpi/ckpoint/Makefile.am | 2 +
test/mpi/cxx/topo/Makefile.am | 2 +-
test/mpi/datatype/Makefile.am | 2 +-
test/mpi/errors/Makefile.am | 2 +
test/mpi/errors/f77/Makefile.am | 2 +-
test/mpi/errors/f90/Makefile.am | 2 +-
test/mpi/f08/Makefile.am | 4 +-
test/mpi/f08/coll/Makefile.am | 2 +
test/mpi/f08/datatype/Makefile.am | 2 +
test/mpi/f08/ext/Makefile.am | 2 +-
test/mpi/f08/pt2pt/Makefile.am | 2 +
test/mpi/f08/rma/Makefile.am | 2 +-
test/mpi/f77/rma/Makefile.am | 2 +-
test/mpi/f77/spawn/Makefile.am | 2 +-
test/mpi/f90/misc/Makefile.am | 2 +
test/mpi/ft/Makefile.am | 2 +
test/mpi/io/Makefile.am | 2 +-
test/mpi/rma/Makefile.am | 2 +-
test/mpi/runtests.in | 78 ++++++++++++++++++++++++++++++++++---
test/mpi/util/Makefile.am | 7 +++-
22 files changed, 160 insertions(+), 23 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0