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
June 2014
- 2 participants
- 35 discussions
[mpich] MPICH primary repository branch, master, updated. v3.1.1-10-gb88df66
by noreply@mpich.org 12 Jun '14
by noreply@mpich.org 12 Jun '14
12 Jun '14
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 b88df6648432569f72a61b7dfa35c33799902708 (commit)
from 1d82f9220af2c152b87bfbcbbd9a9553fb5625a7 (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/b88df6648432569f72a61b7dfa35c3379…
commit b88df6648432569f72a61b7dfa35c33799902708
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Thu May 22 16:31:02 2014 -0500
remove preprocessor guards from nbc tests
Nonblocking collectives are standardized and tests for them should be
run by any implementation claiming MPI-3. The level of MPI support
determined at configure time and mpiversion specified in testlist
are sufficient to restrict the tests from being run. These preprocessor
guards are not necessary.
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/test/mpi/coll/iallred.c b/test/mpi/coll/iallred.c
index d90cacf..684fd50 100644
--- a/test/mpi/coll/iallred.c
+++ b/test/mpi/coll/iallred.c
@@ -10,15 +10,6 @@
#include "mpi.h"
#include "mpitest.h"
-/* Since MPICH is currently the only NBC implementation in existence, just use
- * this quick-and-dirty #ifdef to decide whether to test the nonblocking
- * collectives. Eventually we can add a configure option or configure test, or
- * the MPI-3 standard will be released and these can be gated on a MPI_VERSION
- * check */
-#if !defined(USE_STRICT_MPI) && defined(MPICH)
-#define TEST_NBC_ROUTINES 1
-#endif
-
int main(int argc, char *argv[])
{
MPI_Request request;
@@ -30,7 +21,6 @@ int main(int argc, char *argv[])
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
assert(size == 2);
-#if defined(TEST_NBC_ROUTINES)
MPI_Iallreduce(&one,&isum,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD,&request);
MPI_Allreduce(&two,&sum,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
MPI_Wait(&request,MPI_STATUS_IGNORE);
@@ -38,15 +28,12 @@ int main(int argc, char *argv[])
assert(isum == 2);
assert(sum == 4);
-#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
if (MPI_SUCCESS == MPI_Iallreduce(&one, &one, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &request))
errs++;
-#endif
if (rank == 0 && errs == 0)
printf(" No errors\n");
-#endif
MPI_Finalize();
return 0;
diff --git a/test/mpi/coll/nonblocking.c b/test/mpi/coll/nonblocking.c
index f30d813..3a306f5 100644
--- a/test/mpi/coll/nonblocking.c
+++ b/test/mpi/coll/nonblocking.c
@@ -12,9 +12,6 @@
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
-#include "mpitest.h"
-/* USE_STRICT_MPI may be defined in mpitestconf.h */
-#include "mpitestconf.h"
#define NUM_INTS (2)
@@ -51,7 +48,6 @@ int main(int argc, char **argv)
MPI_Comm_size(comm, &size);
MPI_Comm_rank(comm, &rank);
-#if !defined(USE_STRICT_MPI) && defined(MPICH)
/* enough space for every process to contribute at least NUM_INTS ints to any
* collective operation */
sbuf = malloc(NUM_INTS*size*sizeof(int));
@@ -132,8 +128,6 @@ int main(int argc, char **argv)
MPI_Iexscan(sbuf, rbuf, NUM_INTS, MPI_INT, MPI_SUM, comm, &req);
MPI_Wait(&req, MPI_STATUS_IGNORE);
-#endif
-
if (sbuf) free(sbuf);
if (rbuf) free(rbuf);
if (scounts) free(scounts);
diff --git a/test/mpi/coll/nonblocking2.c b/test/mpi/coll/nonblocking2.c
index 9abdb75..3de5d12 100644
--- a/test/mpi/coll/nonblocking2.c
+++ b/test/mpi/coll/nonblocking2.c
@@ -5,7 +5,7 @@
*/
/* A basic test of all 17 nonblocking collective operations specified by the
- * draft MPI-3 standard. It only exercises the intracommunicator functionality,
+ * MPI-3 standard. It only exercises the intracommunicator functionality,
* does not use MPI_IN_PLACE, and only transmits/receives simple integer types
* with relatively small counts. It does check a few fancier issues, such as
* ensuring that "premature user releases" of MPI_Op and MPI_Datatype objects
@@ -14,8 +14,6 @@
#include "mpi.h"
#include <stdlib.h>
#include <stdio.h>
-/* USE_STRICT_MPI may be defined in mpitestconf.h */
-#include "mpitestconf.h"
#define COUNT (10)
#define PRIME (17)
@@ -28,15 +26,6 @@
} \
} while (0)
-/* Since MPICH is currently the only NBC implementation in existence, just use
- * this quick-and-dirty #ifdef to decide whether to test the nonblocking
- * collectives. Eventually we can add a configure option or configure test, or
- * the MPI-3 standard will be released and these can be gated on a MPI_VERSION
- * check */
-#if !defined(USE_STRICT_MPI) && defined(MPICH)
-#define TEST_NBC_ROUTINES 1
-#endif
-
static void sum_fn(void *invec, void *inoutvec, int *len, MPI_Datatype *datatype)
{
int i;
@@ -66,7 +55,6 @@ int main(int argc, char **argv)
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
-#if defined(TEST_NBC_ROUTINES)
buf = malloc(COUNT*size*sizeof(int));
recvbuf = malloc(COUNT*size*sizeof(int));
@@ -448,8 +436,6 @@ int main(int argc, char **argv)
}
}
-#endif /* defined(TEST_NBC_ROUTINES) */
-
if (rank == 0)
printf(" No Errors\n");
diff --git a/test/mpi/coll/nonblocking3.c b/test/mpi/coll/nonblocking3.c
index 77d28c8..7708456 100644
--- a/test/mpi/coll/nonblocking3.c
+++ b/test/mpi/coll/nonblocking3.c
@@ -18,8 +18,6 @@
#include <stdio.h>
#include <string.h>
#include <assert.h>
-/* USE_STRICT_MPI may be defined in mpitestconf.h */
-#include "mpitestconf.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
@@ -56,16 +54,6 @@ static int errs = 0;
} \
} while (0)
-/* Since MPICH is currently the only NBC implementation in existence, just use
- * this quick-and-dirty #ifdef to decide whether to test the nonblocking
- * collectives. Eventually we can add a configure option or configure test, or
- * the MPI-3 standard will be released and these can be gated on a MPI_VERSION
- * check */
-#if !defined(USE_STRICT_MPI) && defined(MPICH)
-#define TEST_NBC_ROUTINES 1
-#endif
-
-#if defined(TEST_NBC_ROUTINES)
/* Intended to act like "rand_r", but we can be sure that it will exist and be
* consistent across all of comm world. Returns a number in the range
* [0,GEN_PRN_MAX] */
@@ -745,7 +733,6 @@ static void complete_something_somehow(unsigned int rndnum, int numreqs, MPI_Req
}
#undef COMPLETION_CASES
}
-#endif /* defined(TEST_NBC_ROUTINES) */
int main(int argc, char **argv)
{
@@ -753,9 +740,7 @@ int main(int argc, char **argv)
int wrank, wsize;
unsigned int seed = 0x10bc;
unsigned int post_seq, complete_seq;
-#if defined(TEST_NBC_ROUTINES)
struct laundry larr[WINDOW];
-#endif
MPI_Request reqs[WINDOW];
int outcount;
int indices[WINDOW];
@@ -766,8 +751,6 @@ int main(int argc, char **argv)
MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
MPI_Comm_size(MPI_COMM_WORLD, &wsize);
-#if defined(TEST_NBC_ROUTINES)
-
/* it is critical that all processes in the communicator start with a
* consistent value for "post_seq" */
post_seq = complete_seq = gen_prn(seed);
@@ -826,8 +809,6 @@ int main(int argc, char **argv)
MPI_Comm_free(&comms[i]);
}
-#endif /* defined(TEST_NBC_ROUTINES) */
-
if (wrank == 0) {
if (errs)
printf("found %d errors\n", errs);
diff --git a/test/mpi/coll/nonblocking4.c b/test/mpi/coll/nonblocking4.c
index d977406..8cf7c25 100644
--- a/test/mpi/coll/nonblocking4.c
+++ b/test/mpi/coll/nonblocking4.c
@@ -13,8 +13,6 @@
#include <stdio.h>
#include <stdlib.h>
#include "mpitest.h"
-/* USE_STRICT_MPI may be defined in mpitestconf.h */
-#include "mpitestconf.h"
#define NUM_INTS (2)
@@ -53,7 +51,6 @@ int main(int argc, char **argv)
MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
-#if !defined(USE_STRICT_MPI) && defined(MPICH)
/* enough space for every process to contribute at least NUM_INTS ints to any
* collective operation */
sbuf = malloc(NUM_INTS*size*sizeof(int));
@@ -143,8 +140,6 @@ int main(int argc, char **argv)
MPI_Iexscan(sbuf, sbuf, NUM_INTS, MPI_INT, MPI_SUM, comm, &req))
errs++;
-#endif
-
if (sbuf) free(sbuf);
if (rbuf) free(rbuf);
if (scounts) free(scounts);
-----------------------------------------------------------------------
Summary of changes:
test/mpi/coll/iallred.c | 13 -------------
test/mpi/coll/nonblocking.c | 6 ------
test/mpi/coll/nonblocking2.c | 16 +---------------
test/mpi/coll/nonblocking3.c | 19 -------------------
test/mpi/coll/nonblocking4.c | 5 -----
5 files changed, 1 insertions(+), 58 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-9-g1d82f92
by noreply@mpich.org 11 Jun '14
by noreply@mpich.org 11 Jun '14
11 Jun '14
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 1d82f9220af2c152b87bfbcbbd9a9553fb5625a7 (commit)
from be93caec6c6b9b230fbde9b1b296cde001fde934 (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/1d82f9220af2c152b87bfbcbbd9a9553f…
commit 1d82f9220af2c152b87bfbcbbd9a9553fb5625a7
Author: Antonio J. Pena <apenya(a)mcs.anl.gov>
Date: Wed Jun 11 15:46:13 2014 -0500
Switched -D_REENTRANT from CFLAGS to CPPFLAGS
Hotfix for commit be93caec. Thanks to Dave Goodell to bring this out.
See #2107
diff --git a/configure.ac b/configure.ac
index 96545b0..0d0a982 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1356,7 +1356,7 @@ AC_DEFINE_UNQUOTED(MPICH_THREAD_LEVEL,$MPICH_THREAD_LEVEL,[Level of thread suppo
# Most POSIX systems provide this by default when using -lpthread, but we only use it in MPI_THREAD_MULTIPLE.
# Some systems (Solaris) still require an explicit define in any case.
if test "$MPICH_THREAD_LEVEL" != "MPI_THREAD_SINGLE"; then
- PAC_APPEND_FLAG([-D_REENTRANT], [CFLAGS])
+ PAC_APPEND_FLAG([-D_REENTRANT], [CPPFLAGS])
fi
# Check for value thread_cs choice; set the refcount default if necessary
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
Re: [mpich-commits] commits post from [email protected] requires approval
by Balaji, Pavan 11 Jun '14
by Balaji, Pavan 11 Jun '14
11 Jun '14
This email went to commits(a)mpich.org, which has no one from Argonne on it. Cc’ing all-commits(a)mpich.org.
Yes, this should be CPPFLAGS, not CFLAGS. In practice it shouldn’t matter, but we should try to get that cleaned up.
— Pavan
On Jun 11, 2014, at 2:06 PM, <commits-owner(a)mpich.org> <commits-owner(a)mpich.org> wrote:
>
> On Jun 11, 2014, at 11:01 AM, Service Account <noreply(a)mpich.org> wrote:
>
>> commit be93caec6c6b9b230fbde9b1b296cde001fde934
>> Author: Antonio J. Pena <apenya(a)mcs.anl.gov>
>> Date: Mon Jun 9 17:12:17 2014 -0500
>>
>> Added support for thread-safe errno in Solaris
>>
>> The _REENTRANT macro is required to be defined in order to get
>> thread-safe "errno" values. Modern POSIX systems provide this by default
>> when using -lpthreads, but there are still some (Solaris) that require
>> an explicit define. Since we weren't compiling with that macro, we were
>> getting incorrect "errno" values from the threads (mainly 0).
>>
>> More details: since we use nonblocking sockets, our code was checking
>> "errno" to not be EINPROGRESS whenever we got an error code from a
>> connect/accept, in order to determine an actual error (a return value
>> of -1 and errno of EINPROGRESS does not define an actual error but a
>> "not yet" when using nonblocking sockets).
>
> Interesting, I did not know about this Solaris "quirk".
>
>> This patch automatically gets this macro defined by configure whenever
>> we are not building in MPI_THREAD_SINGLE mode only.
>>
>> Fixes #2107
>>
>> Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
>>
>> diff --git a/configure.ac b/configure.ac
>> index 936f6ce..96545b0 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -1352,6 +1352,13 @@ fi
>> export MPICH_THREAD_LEVEL
>> AC_DEFINE_UNQUOTED(MPICH_THREAD_LEVEL,$MPICH_THREAD_LEVEL,[Level of thread support selected at compile time])
>>
>> +# If not in MPI_THREAD_SINGLE, we need -D_REENTRANT to get thread-safe "errno".
>> +# Most POSIX systems provide this by default when using -lpthread, but we only use it in MPI_THREAD_MULTIPLE.
>> +# Some systems (Solaris) still require an explicit define in any case.
>> +if test "$MPICH_THREAD_LEVEL" != "MPI_THREAD_SINGLE"; then
>> + PAC_APPEND_FLAG([-D_REENTRANT], [CFLAGS])
>
> A largely academic observation, but: should this be CPPFLAGS instead?
>
> -Dave
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-8-gbe93cae
by noreply@mpich.org 11 Jun '14
by noreply@mpich.org 11 Jun '14
11 Jun '14
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 be93caec6c6b9b230fbde9b1b296cde001fde934 (commit)
from 3b9d2b36bc4066c5505d5a758b88359ea107d201 (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/be93caec6c6b9b230fbde9b1b296cde00…
commit be93caec6c6b9b230fbde9b1b296cde001fde934
Author: Antonio J. Pena <apenya(a)mcs.anl.gov>
Date: Mon Jun 9 17:12:17 2014 -0500
Added support for thread-safe errno in Solaris
The _REENTRANT macro is required to be defined in order to get
thread-safe "errno" values. Modern POSIX systems provide this by default
when using -lpthreads, but there are still some (Solaris) that require
an explicit define. Since we weren't compiling with that macro, we were
getting incorrect "errno" values from the threads (mainly 0).
More details: since we use nonblocking sockets, our code was checking
"errno" to not be EINPROGRESS whenever we got an error code from a
connect/accept, in order to determine an actual error (a return value
of -1 and errno of EINPROGRESS does not define an actual error but a
"not yet" when using nonblocking sockets).
This patch automatically gets this macro defined by configure whenever
we are not building in MPI_THREAD_SINGLE mode only.
Fixes #2107
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/configure.ac b/configure.ac
index 936f6ce..96545b0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1352,6 +1352,13 @@ fi
export MPICH_THREAD_LEVEL
AC_DEFINE_UNQUOTED(MPICH_THREAD_LEVEL,$MPICH_THREAD_LEVEL,[Level of thread support selected at compile time])
+# If not in MPI_THREAD_SINGLE, we need -D_REENTRANT to get thread-safe "errno".
+# Most POSIX systems provide this by default when using -lpthread, but we only use it in MPI_THREAD_MULTIPLE.
+# Some systems (Solaris) still require an explicit define in any case.
+if test "$MPICH_THREAD_LEVEL" != "MPI_THREAD_SINGLE"; then
+ PAC_APPEND_FLAG([-D_REENTRANT], [CFLAGS])
+fi
+
# Check for value thread_cs choice; set the refcount default if necessary
thread_granularity=MPIU_THREAD_GRANULARITY_SINGLE
thread_refcount=MPIU_REFCOUNT_NONE
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-7-g3b9d2b3
by noreply@mpich.org 11 Jun '14
by noreply@mpich.org 11 Jun '14
11 Jun '14
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 3b9d2b36bc4066c5505d5a758b88359ea107d201 (commit)
via 5b4bdef9b128518a5edab138c27cca1ceadef4c0 (commit)
via 40862985af601cf019e9201c6eb9f5e1c4534b38 (commit)
from 00f452cd0738129a19a8782766981a464ae9cfad (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/3b9d2b36bc4066c5505d5a758b88359ea…
commit 3b9d2b36bc4066c5505d5a758b88359ea107d201
Author: Wesley Bland <wbland(a)anl.gov>
Date: Tue Jun 10 09:34:01 2014 -0500
Fix coll6 test to use MPI_IN_PLACE when necessary
The test source:test/mpi/coll/coll6.c was sometimes aliasing buffers
incorrectly. This adds a check for that and uses MPI_IN_PLACE when
appropriate.
Signed-off-by: Antonio J. Pena <apenya(a)mcs.anl.gov>
diff --git a/test/mpi/coll/coll6.c b/test/mpi/coll/coll6.c
index 6e8ea36..666b2ee 100644
--- a/test/mpi/coll/coll6.c
+++ b/test/mpi/coll/coll6.c
@@ -53,9 +53,14 @@ int main( int argc, char **argv )
table[i][j] = rank + 10;
/* Everybody gets the gathered data */
- MPI_Allgatherv(&table[begin_row][0], send_count, MPI_INT,
- &table[0][0], recv_counts, displs,
- MPI_INT, test_comm);
+ if ((char *) &table[begin_row][0] != (char *) table + displs[rank]*sizeof(int))
+ MPI_Allgatherv(&table[begin_row][0], send_count, MPI_INT,
+ &table[0][0], recv_counts, displs,
+ MPI_INT, test_comm);
+ else
+ MPI_Allgatherv(MPI_IN_PLACE, send_count, MPI_INT,
+ &table[0][0], recv_counts, displs,
+ MPI_INT, test_comm);
/* Everybody should have the same table now.
http://git.mpich.org/mpich.git/commitdiff/5b4bdef9b128518a5edab138c27cca1ce…
commit 5b4bdef9b128518a5edab138c27cca1ceadef4c0
Author: Wesley Bland <wbland(a)anl.gov>
Date: Thu May 22 10:42:05 2014 -0500
Add tests for new buffer aliasing checks
Added tests to the existing test suite. Usually these tests are next to
existing MPI_IN_PLACE tests to make sure that the IN_PLACE checks are correct.
For the nonblocking tests, they are all in one big test (nonblocking4) since
the other nonblocking tests were already in that format.
Fixes #2049
Signed-off-by: Antonio J. Pena <apenya(a)mcs.anl.gov>
diff --git a/test/mpi/coll/Makefile.am b/test/mpi/coll/Makefile.am
index 98264a4..7368173 100644
--- a/test/mpi/coll/Makefile.am
+++ b/test/mpi/coll/Makefile.am
@@ -70,6 +70,7 @@ noinst_PROGRAMS = \
nonblocking \
nonblocking2 \
nonblocking3 \
+ nonblocking4 \
op_commutative \
opband \
opbor \
diff --git a/test/mpi/coll/allgather2.c b/test/mpi/coll/allgather2.c
index edb907d..66a21ec 100644
--- a/test/mpi/coll/allgather2.c
+++ b/test/mpi/coll/allgather2.c
@@ -50,7 +50,18 @@ int main( int argc, char **argv )
MTestFreeComm( &comm );
}
-
+
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &size);
+ vecout = (double *) malloc(size * sizeof(double));
+ if (MPI_SUCCESS == MPI_Allgather(&vecout[rank], 1, MPI_DOUBLE,
+ vecout, 1, MPI_DOUBLE, MPI_COMM_WORLD))
+ errs++;
+ free(vecout);
+#endif
+
MTest_Finalize( errs );
MPI_Finalize();
return 0;
diff --git a/test/mpi/coll/allgatherv2.c b/test/mpi/coll/allgatherv2.c
index 4a54344..678193c 100644
--- a/test/mpi/coll/allgatherv2.c
+++ b/test/mpi/coll/allgatherv2.c
@@ -57,11 +57,21 @@ int main( int argc, char **argv )
}
free( vecout );
}
+
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ vecout = (double *) malloc(size * sizeof(double));
+ if (MPI_SUCCESS == MPI_Allgatherv(&vecout[rank * recvcounts[rank]], recvcounts[rank], MPI_DOUBLE,
+ vecout, recvcounts, displs, MPI_DOUBLE, comm))
+ errs++;
+ free(vecout);
+#endif
+
free( displs );
free( recvcounts );
MTestFreeComm( &comm );
}
-
+
MTest_Finalize( errs );
MPI_Finalize();
return 0;
diff --git a/test/mpi/coll/allred6.c b/test/mpi/coll/allred6.c
index ba829e1..65629de 100644
--- a/test/mpi/coll/allred6.c
+++ b/test/mpi/coll/allred6.c
@@ -67,6 +67,14 @@ int main( int argc, char *argv[] )
}
MPI_Op_free( &op );
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ /* Check to make sure that aliasing is disallowed correctly */
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ if (MPI_SUCCESS == MPI_Allreduce(&rank, &rank, 1, MPI_INT, MPI_OP_NULL, MPI_COMM_WORLD))
+ errs++;
+#endif
+
MTest_Finalize( errs );
MPI_Finalize();
return 0;
diff --git a/test/mpi/coll/alltoall1.c b/test/mpi/coll/alltoall1.c
index cd6d3d8..4d400cf 100644
--- a/test/mpi/coll/alltoall1.c
+++ b/test/mpi/coll/alltoall1.c
@@ -115,6 +115,14 @@ int main( int argc, char *argv[] )
MTestFreeComm( &comm );
}
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ /* Check to make sure that aliasing is disallowed correctly */
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ if (MPI_SUCCESS == MPI_Alltoall(&rank, 1, MPI_INT, &rank, 1, MPI_INT, MPI_COMM_WORLD))
+ errs++;
+#endif
+
MTest_Finalize( errs );
MPI_Finalize();
return 0;
diff --git a/test/mpi/coll/alltoallv.c b/test/mpi/coll/alltoallv.c
index bcae133..435b3c3 100644
--- a/test/mpi/coll/alltoallv.c
+++ b/test/mpi/coll/alltoallv.c
@@ -122,6 +122,12 @@ int main( int argc, char **argv )
}
}
}
+
+ /* Check to make sure that aliasing is disallowed correctly */
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Alltoallv(rbuf, recvcounts, rdispls, MPI_INT,
+ rbuf, recvcounts, rdispls, MPI_INT, comm))
+ err++;
#endif
free( rdispls );
diff --git a/test/mpi/coll/alltoallw2.c b/test/mpi/coll/alltoallw2.c
index 7d40236..e2c7d5f 100644
--- a/test/mpi/coll/alltoallw2.c
+++ b/test/mpi/coll/alltoallw2.c
@@ -133,6 +133,11 @@ int main( int argc, char **argv )
}
}
}
+
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Alltoallw(rbuf, recvcounts, rdispls, recvtypes,
+ rbuf, recvcounts, rdispls, recvtypes, comm))
+ err++;
#endif
free(recvtypes);
diff --git a/test/mpi/coll/exscan.c b/test/mpi/coll/exscan.c
index 70f4c53..64ab9d5 100644
--- a/test/mpi/coll/exscan.c
+++ b/test/mpi/coll/exscan.c
@@ -84,6 +84,11 @@ int main( int argc, char *argv[] )
}
}
}
+
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ /* Make sure that we check for buffer aliasing properly */
+ if (MPI_SUCCESS == MPI_Exscan( recvbuf, recvbuf, count, MPI_INT, MPI_SUM, comm ))
+ errs++;
#endif
free( sendbuf );
diff --git a/test/mpi/coll/gather.c b/test/mpi/coll/gather.c
index 7433caa..e14503f 100644
--- a/test/mpi/coll/gather.c
+++ b/test/mpi/coll/gather.c
@@ -66,6 +66,16 @@ int main( int argc, char **argv )
/* do a zero length gather */
MPI_Gather( NULL, 0, MPI_BYTE, NULL, 0, MPI_BYTE, 0, MPI_COMM_WORLD );
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ /* Check to make sure that aliasing is disallowed correctly */
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ if (0 == rank)
+ if (MPI_SUCCESS == MPI_Gather(&rank, 1, MPI_INT,
+ &rank, 1, MPI_INT, 0, MPI_COMM_WORLD))
+ errs++;
+#endif
+
MTest_Finalize( errs );
MPI_Finalize();
return 0;
diff --git a/test/mpi/coll/iallred.c b/test/mpi/coll/iallred.c
index 2542a3f..d90cacf 100644
--- a/test/mpi/coll/iallred.c
+++ b/test/mpi/coll/iallred.c
@@ -24,6 +24,8 @@ int main(int argc, char *argv[])
MPI_Request request;
int size, rank;
int one = 1, two = 2, isum, sum;
+ int errs = 0;
+
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
@@ -35,7 +37,14 @@ int main(int argc, char *argv[])
assert(isum == 2);
assert(sum == 4);
- if (rank == 0)
+
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Iallreduce(&one, &one, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &request))
+ errs++;
+#endif
+
+ if (rank == 0 && errs == 0)
printf(" No errors\n");
#endif
diff --git a/test/mpi/coll/nonblocking4.c b/test/mpi/coll/nonblocking4.c
new file mode 100644
index 0000000..d977406
--- /dev/null
+++ b/test/mpi/coll/nonblocking4.c
@@ -0,0 +1,164 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2010 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* This is a very weak sanity test that all nonblocking collectives specified by
+ * MPI-3 are present in the library and take arguments as expected. This test
+ * does not check for progress, matching issues, or sensible output buffer
+ * values. */
+
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+/* USE_STRICT_MPI may be defined in mpitestconf.h */
+#include "mpitestconf.h"
+
+#define NUM_INTS (2)
+
+#define my_assert(cond_) \
+ do { \
+ if (!(cond_)) { \
+ fprintf(stderr, "assertion (%s) failed, aborting\n", #cond_); \
+ MPI_Abort(MPI_COMM_WORLD, 1); \
+ } \
+ } while (0)
+
+int main(int argc, char **argv)
+{
+ int errs = 0;
+ int i;
+ int rank, size;
+ int *sbuf = NULL;
+ int *rbuf = NULL;
+ int *scounts = NULL;
+ int *rcounts = NULL;
+ int *sdispls = NULL;
+ int *rdispls = NULL;
+ int *types = NULL;
+ MPI_Comm comm;
+ MPI_Request req;
+
+ /* intentionally not using MTest_Init/MTest_Finalize in order to make it
+ * easy to take this test and use it as an NBC sanity test outside of the
+ * MPICH test suite */
+ MPI_Init(&argc, &argv);
+
+ comm = MPI_COMM_WORLD;
+
+ MPI_Comm_size(comm, &size);
+ MPI_Comm_rank(comm, &rank);
+
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+
+#if !defined(USE_STRICT_MPI) && defined(MPICH)
+ /* enough space for every process to contribute at least NUM_INTS ints to any
+ * collective operation */
+ sbuf = malloc(NUM_INTS*size*sizeof(int));
+ my_assert(sbuf);
+ rbuf = malloc(NUM_INTS*size*sizeof(int));
+ my_assert(rbuf);
+ scounts = malloc(size*sizeof(int));
+ my_assert(scounts);
+ rcounts = malloc(size*sizeof(int));
+ my_assert(rcounts);
+ sdispls = malloc(size*sizeof(int));
+ my_assert(sdispls);
+ rdispls = malloc(size*sizeof(int));
+ my_assert(rdispls);
+ types = malloc(size*sizeof(int));
+ my_assert(types);
+
+ for (i = 0; i < size; ++i) {
+ sbuf[2*i] = i;
+ sbuf[2*i+1] = i;
+ rbuf[2*i] = i;
+ rbuf[2*i+1] = i;
+ scounts[i] = NUM_INTS;
+ rcounts[i] = NUM_INTS;
+ sdispls[i] = i * NUM_INTS;
+ rdispls[i] = i * NUM_INTS;
+ types[i] = MPI_INT;
+ }
+
+ if (rank == 0 && MPI_SUCCESS ==
+ MPI_Igather(sbuf, NUM_INTS, MPI_INT, sbuf, NUM_INTS, MPI_INT, 0, comm, &req))
+ errs++;
+
+ if (rank == 0 && MPI_SUCCESS ==
+ MPI_Igatherv(sbuf, NUM_INTS, MPI_INT, sbuf, rcounts, rdispls, MPI_INT, 0, comm, &req))
+ errs++;
+
+ if (rank == 0 && MPI_SUCCESS ==
+ MPI_Iscatter(sbuf, NUM_INTS, MPI_INT, sbuf, NUM_INTS, MPI_INT, 0, comm, &req))
+ errs++;
+
+ if (rank == 0 && MPI_SUCCESS ==
+ MPI_Iscatterv(sbuf, scounts, sdispls, MPI_INT, sbuf, NUM_INTS, MPI_INT, 0, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Iallgather(&sbuf[rank], 1, MPI_INT, sbuf, 1, MPI_INT, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Iallgatherv(&sbuf[rank * rcounts[rank]], rcounts[rank], MPI_INT, sbuf, rcounts, rdispls, MPI_INT, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Ialltoall(sbuf, NUM_INTS, MPI_INT, sbuf, NUM_INTS, MPI_INT, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Ialltoallv(sbuf, scounts, sdispls, MPI_INT, sbuf, scounts, sdispls, MPI_INT, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Ialltoallw(sbuf, scounts, sdispls, types, sbuf, scounts, sdispls, types, comm, &req))
+ errs++;
+
+ if (rank == 0 && MPI_SUCCESS ==
+ MPI_Ireduce(sbuf, sbuf, NUM_INTS, MPI_INT, MPI_SUM, 0, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Iallreduce(sbuf, sbuf, NUM_INTS, MPI_INT, MPI_SUM, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Ireduce_scatter(sbuf, sbuf, rcounts, MPI_INT, MPI_SUM, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Ireduce_scatter_block(sbuf, sbuf, NUM_INTS, MPI_INT, MPI_SUM, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Iscan(sbuf, sbuf, NUM_INTS, MPI_INT, MPI_SUM, comm, &req))
+ errs++;
+
+ if (MPI_SUCCESS ==
+ MPI_Iexscan(sbuf, sbuf, NUM_INTS, MPI_INT, MPI_SUM, comm, &req))
+ errs++;
+
+#endif
+
+ if (sbuf) free(sbuf);
+ if (rbuf) free(rbuf);
+ if (scounts) free(scounts);
+ if (rcounts) free(rcounts);
+ if (sdispls) free(sdispls);
+ if (rdispls) free(rdispls);
+
+ if (rank == 0) {
+ if (errs)
+ fprintf(stderr, "Found %d errors\n", errs);
+ else
+ printf(" No errors\n");
+ }
+ MPI_Finalize();
+ return 0;
+}
+
diff --git a/test/mpi/coll/red3.c b/test/mpi/coll/red3.c
index 32358d9..7835b64 100644
--- a/test/mpi/coll/red3.c
+++ b/test/mpi/coll/red3.c
@@ -182,6 +182,16 @@ int main( int argc, char *argv[] )
if (rank == root) {
errs += isShiftLeft( comm, bufout );
}
+
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ /* Try one more time without IN_PLACE to make sure we check
+ * aliasing correctly */
+ if (rank == root) {
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Reduce( bufout, bufout, count, mattype, op, root, comm ))
+ errs++;
+ }
+#endif
}
free( buf );
diff --git a/test/mpi/coll/red_scat_block.c b/test/mpi/coll/red_scat_block.c
index 3092c8d..a2f20a0 100644
--- a/test/mpi/coll/red_scat_block.c
+++ b/test/mpi/coll/red_scat_block.c
@@ -66,6 +66,11 @@ int main(int argc, char **argv)
fprintf(stdout, "Did not get expected value for reduce scatter block\n");
fprintf(stdout, "[%d] Got %d expected %d\n", rank, recvbuf[0], sumval);
}
+
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Reduce_scatter_block(recvbuf, recvbuf, 1, MPI_INT, MPI_SUM, comm))
+ err++;
+
free(recvbuf);
#endif
diff --git a/test/mpi/coll/redscat3.c b/test/mpi/coll/redscat3.c
index d2ed7ec..5efbd37 100644
--- a/test/mpi/coll/redscat3.c
+++ b/test/mpi/coll/redscat3.c
@@ -80,6 +80,7 @@ int main( int argc, char **argv )
}
}
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
MPI_Reduce_scatter( MPI_IN_PLACE, sendbuf, recvcounts, MPI_INT, MPI_SUM,
comm );
@@ -96,6 +97,11 @@ int main( int argc, char **argv )
}
}
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Reduce_scatter(sendbuf, sendbuf, recvcounts, MPI_INT, MPI_SUM, comm))
+ err++;
+#endif
+
free(sendbuf);
free(recvbuf);
free(recvcounts);
diff --git a/test/mpi/coll/reduce.c b/test/mpi/coll/reduce.c
index 6106782..ad09c9b 100644
--- a/test/mpi/coll/reduce.c
+++ b/test/mpi/coll/reduce.c
@@ -48,6 +48,15 @@ int main( int argc, char *argv[] )
free( sendbuf );
free( recvbuf );
}
+
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ if (0 == rank) {
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Reduce(&rank, &rank, 1, MPI_INT, MPI_SUM, 0, comm))
+ errs++;
+ }
+#endif
+
MTestFreeComm( &comm );
}
diff --git a/test/mpi/coll/scantst.c b/test/mpi/coll/scantst.c
index 2690644..1359acc 100644
--- a/test/mpi/coll/scantst.c
+++ b/test/mpi/coll/scantst.c
@@ -5,6 +5,7 @@
*/
#include "mpi.h"
#include <stdio.h>
+#include "mpitest.h"
void addem ( int *, int *, int *, MPI_Datatype * );
void assoc ( int *, int *, int *, MPI_Datatype * );
@@ -102,6 +103,12 @@ int main( int argc, char **argv )
errors++;
}
+#if MTEST_HAVE_MIN_MPI_VERSION(2,2)
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (MPI_SUCCESS == MPI_Scan( &data, &data, 1, MPI_INT, op_assoc, comm))
+ errors++;
+#endif
+
MPI_Op_free( &op_assoc );
MPI_Op_free( &op_addem );
diff --git a/test/mpi/coll/scatter2.c b/test/mpi/coll/scatter2.c
index 5535a30..feac832 100644
--- a/test/mpi/coll/scatter2.c
+++ b/test/mpi/coll/scatter2.c
@@ -64,7 +64,14 @@ int main( int argc, char **argv )
}
}
}
+
+ MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
+ if (rank == 0 && MPI_SUCCESS ==
+ MPI_Scatter(vecin, 1, MPI_DOUBLE, vecin, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD))
+ err++;
+ free(vecin);
+ free(vecout);
MTest_Finalize( err );
MPI_Type_free( &vec );
MPI_Finalize();
diff --git a/test/mpi/coll/testlist b/test/mpi/coll/testlist
index 01ef986..c4028f6 100644
--- a/test/mpi/coll/testlist
+++ b/test/mpi/coll/testlist
@@ -139,6 +139,7 @@ nonblocking3 1 mpiversion=3.0
nonblocking3 4 mpiversion=3.0
nonblocking3 5 mpiversion=3.0
nonblocking3 10 timeLimit=600 mpiversion=3.0
+nonblocking4 4 mpiversion=3.0
iallred 2 mpiversion=3.0
# ibarrier will hang forever if it fails, but will complete quickly if it
# succeeds
http://git.mpich.org/mpich.git/commitdiff/40862985af601cf019e9201c6eb9f5e1c…
commit 40862985af601cf019e9201c6eb9f5e1c4534b38
Author: Wesley Bland <wbland(a)anl.gov>
Date: Wed May 21 10:12:16 2014 -0500
Improve error checking for buffer aliasing
If the user isn't using MPI_IN_PLACE when they should, this check will do a
better job of warning them about it.
See #2049
Signed-off-by: Antonio J. Pena <apenya(a)mcs.anl.gov>
diff --git a/src/mpi/coll/allgather.c b/src/mpi/coll/allgather.c
index 6ddef58..803ed85 100644
--- a/src/mpi/coll/allgather.c
+++ b/src/mpi/coll/allgather.c
@@ -932,8 +932,18 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPID_Comm_valid_ptr( comm_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTERCOMM)
+ if (comm_ptr->comm_kind == MPID_INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
+ } else {
+ /* catch common aliasing cases */
+ if (sendbuf != MPI_IN_PLACE && sendtype == recvtype &&
+ recvcount != 0 && sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + comm_ptr->rank*recvcount*recvtype_size, mpi_errno);
+ }
+ }
+
if (sendbuf != MPI_IN_PLACE)
{
MPIR_ERRTEST_COUNT(sendcount, mpi_errno);
@@ -961,10 +971,6 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPIR_ERRTEST_USERBUFFER(recvbuf,recvcount,recvtype,mpi_errno);
-
- /* catch common aliasing cases */
- if (sendbuf != MPI_IN_PLACE && sendtype == recvtype && recvcount != 0 && sendcount != 0)
- MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
}
MPID_END_ERROR_CHECKS;
}
diff --git a/src/mpi/coll/allgatherv.c b/src/mpi/coll/allgatherv.c
index 275c404..82320a3 100644
--- a/src/mpi/coll/allgatherv.c
+++ b/src/mpi/coll/allgatherv.c
@@ -1057,6 +1057,16 @@ int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPIR_ERRTEST_USERBUFFER(sendbuf,sendcount,sendtype,mpi_errno);
+
+ /* catch common aliasing cases */
+ if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ sendtype == recvtype &&
+ recvcounts[comm_ptr->rank] != 0 &&
+ sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + displs[comm_ptr->rank]*recvtype_size, mpi_errno);
+ }
}
if (comm_ptr->comm_kind == MPID_INTRACOMM)
diff --git a/src/mpi/coll/allreduce.c b/src/mpi/coll/allreduce.c
index c2ac3b5..74758f0 100644
--- a/src/mpi/coll/allreduce.c
+++ b/src/mpi/coll/allreduce.c
@@ -868,8 +868,12 @@ int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
- if (comm_ptr->comm_kind == MPID_INTERCOMM)
+ if (comm_ptr->comm_kind == MPID_INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, count, mpi_errno);
+ } else {
+ if (count != 0 && sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
+ }
if (sendbuf != MPI_IN_PLACE)
MPIR_ERRTEST_USERBUFFER(sendbuf,count,datatype,mpi_errno);
@@ -885,9 +889,6 @@ int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
mpi_errno =
( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
}
- if (count != 0) {
- MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
- }
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
MPID_END_ERROR_CHECKS;
diff --git a/src/mpi/coll/alltoall.c b/src/mpi/coll/alltoall.c
index c3d381f..28143cb 100644
--- a/src/mpi/coll/alltoall.c
+++ b/src/mpi/coll/alltoall.c
@@ -845,6 +845,13 @@ int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPID_Datatype_committed_ptr( sendtype_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
}
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ sendbuf != MPI_IN_PLACE &&
+ sendcount == recvcount &&
+ sendtype == recvtype &&
+ sendcount != 0)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
}
MPIR_ERRTEST_COUNT(recvcount, mpi_errno);
diff --git a/src/mpi/coll/alltoallv.c b/src/mpi/coll/alltoallv.c
index 359cd41..665c580 100644
--- a/src/mpi/coll/alltoallv.c
+++ b/src/mpi/coll/alltoallv.c
@@ -469,9 +469,12 @@ int MPI_Alltoallv(const void *sendbuf, const int *sendcounts,
MPID_Comm_valid_ptr( comm_ptr, mpi_errno );
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (comm_ptr->comm_kind == MPID_INTRACOMM) {
comm_size = comm_ptr->local_size;
- else
+
+ if (sendbuf != MPI_IN_PLACE && sendtype == recvtype && sendcounts == recvcounts)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
+ } else
comm_size = comm_ptr->remote_size;
if (comm_ptr->comm_kind == MPID_INTERCOMM && sendbuf == MPI_IN_PLACE) {
diff --git a/src/mpi/coll/alltoallw.c b/src/mpi/coll/alltoallw.c
index f0e4565..af6ac78 100644
--- a/src/mpi/coll/alltoallw.c
+++ b/src/mpi/coll/alltoallw.c
@@ -471,9 +471,12 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**sendbuf_inplace");
}
- if (comm_ptr->comm_kind == MPID_INTRACOMM)
+ if (comm_ptr->comm_kind == MPID_INTRACOMM) {
comm_size = comm_ptr->local_size;
- else
+
+ if (sendbuf != MPI_IN_PLACE && sendcounts == recvcounts && sendtypes == recvtypes)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
+ } else
comm_size = comm_ptr->remote_size;
for (i=0; i<comm_size; i++) {
diff --git a/src/mpi/coll/exscan.c b/src/mpi/coll/exscan.c
index 0de26b5..3df9fe1 100644
--- a/src/mpi/coll/exscan.c
+++ b/src/mpi/coll/exscan.c
@@ -369,8 +369,10 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
mpi_errno =
( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
}
-
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
+
+ if (sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
}
MPID_END_ERROR_CHECKS;
}
diff --git a/src/mpi/coll/gather.c b/src/mpi/coll/gather.c
index 284ba14..533c85b 100644
--- a/src/mpi/coll/gather.c
+++ b/src/mpi/coll/gather.c
@@ -824,8 +824,11 @@ int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_USERBUFFER(recvbuf,recvcount,recvtype,mpi_errno);
/* catch common aliasing cases */
- if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0)
- MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
+ if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, ((char *)recvbuf) + comm_ptr->rank*recvcount*recvtype_size,mpi_errno);
+ }
}
else
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
diff --git a/src/mpi/coll/gatherv.c b/src/mpi/coll/gatherv.c
index 8deb6e3..7934d04 100644
--- a/src/mpi/coll/gatherv.c
+++ b/src/mpi/coll/gatherv.c
@@ -355,6 +355,13 @@ int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
break;
}
}
+
+ /* catch common aliasing cases */
+ if (sendbuf != MPI_IN_PLACE && sendtype == recvtype && recvcounts[comm_ptr->rank] != 0 && sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + displs[comm_ptr->rank]*recvtype_size, mpi_errno);
+ }
}
else
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index b526cdd..f45c291 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -710,7 +710,15 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+
+ /* catch common aliasing cases */
+ if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + comm_ptr->rank*recvcount*recvtype_size, mpi_errno);
+ }
+
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/iallgatherv.c b/src/mpi/coll/iallgatherv.c
index 9921146..ce3e827 100644
--- a/src/mpi/coll/iallgatherv.c
+++ b/src/mpi/coll/iallgatherv.c
@@ -796,13 +796,25 @@ int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, v
MPID_Comm_valid_ptr(comm_ptr, mpi_errno);
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (sendbuf != MPI_IN_PLACE && HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
- MPID_Datatype *sendtype_ptr = NULL;
- MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
- MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
- if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
- if (mpi_errno != MPI_SUCCESS) goto fn_fail;
+ if (sendbuf != MPI_IN_PLACE) {
+ if (HANDLE_GET_KIND(sendtype) != HANDLE_KIND_BUILTIN) {
+ MPID_Datatype *sendtype_ptr = NULL;
+ MPID_Datatype_get_ptr(sendtype, sendtype_ptr);
+ MPID_Datatype_valid_ptr(sendtype_ptr, mpi_errno);
+ if (mpi_errno != MPI_SUCCESS) goto fn_fail;
+ MPID_Datatype_committed_ptr(sendtype_ptr, mpi_errno);
+ if (mpi_errno != MPI_SUCCESS) goto fn_fail;
+ }
+
+ /* catch common aliasing cases */
+ if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ sendtype == recvtype &&
+ recvcounts[comm_ptr->rank] != 0 &&
+ sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + displs[comm_ptr->rank]*recvtype_size, mpi_errno);
+ }
}
MPIR_ERRTEST_ARGNULL(recvcounts,"recvcounts", mpi_errno);
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 8829c61..0acee0f 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -772,6 +772,10 @@ int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count,
MPIR_ERRTEST_USERBUFFER(sendbuf,count,datatype,mpi_errno);
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM && count != 0 && sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
+
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
}
MPID_END_ERROR_CHECKS
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index 0e8e539..129c521 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -641,7 +641,14 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
}
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ sendbuf != MPI_IN_PLACE &&
+ sendcount == recvcount &&
+ sendtype == recvtype &&
+ sendcount != 0)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/ialltoallv.c b/src/mpi/coll/ialltoallv.c
index a5f6d99..e6bab8b 100644
--- a/src/mpi/coll/ialltoallv.c
+++ b/src/mpi/coll/ialltoallv.c
@@ -378,6 +378,12 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
}
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ sendbuf != MPI_IN_PLACE &&
+ sendcounts == recvcounts &&
+ sendtype == recvtype)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
}
MPID_END_ERROR_CHECKS
diff --git a/src/mpi/coll/ialltoallw.c b/src/mpi/coll/ialltoallw.c
index fe76606..e0e3675 100644
--- a/src/mpi/coll/ialltoallw.c
+++ b/src/mpi/coll/ialltoallw.c
@@ -360,6 +360,11 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
MPIR_ERRTEST_ARGNULL(sendcounts,"sendcounts", mpi_errno);
MPIR_ERRTEST_ARGNULL(sdispls,"sdispls", mpi_errno);
MPIR_ERRTEST_ARGNULL(sendtypes,"sendtypes", mpi_errno);
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM &&
+ sendcounts == recvcounts &&
+ sendtypes == recvtypes)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
}
MPIR_ERRTEST_ARGNULL(recvcounts,"recvcounts", mpi_errno);
MPIR_ERRTEST_ARGNULL(rdispls,"rdispls", mpi_errno);
@@ -368,7 +373,7 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**sendbuf_inplace");
}
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index f7b7f17..97ef8cb 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -305,7 +305,10 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+
+ if (sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index c1e43a4..8a5c9ee 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -649,8 +649,11 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_USERBUFFER(recvbuf,recvcount,recvtype,mpi_errno);
/* catch common aliasing cases */
- if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0)
- MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
+ if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + comm_ptr->rank*recvcount*recvtype_size, mpi_errno);
+ }
}
else
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
diff --git a/src/mpi/coll/igatherv.c b/src/mpi/coll/igatherv.c
index 1985b73..88ac3b2 100644
--- a/src/mpi/coll/igatherv.c
+++ b/src/mpi/coll/igatherv.c
@@ -256,6 +256,13 @@ int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void
break;
}
}
+
+ /* catch common aliasing cases */
+ if (sendbuf != MPI_IN_PLACE && sendtype == recvtype && recvcounts[comm_ptr->rank] != 0 && sendcount != 0) {
+ int recvtype_size;
+ MPID_Datatype_get_size_macro(recvtype, recvtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, (char*)recvbuf + displs[comm_ptr->rank]*recvtype_size, mpi_errno);
+ }
}
else
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index 68a64ff..c9d86b7 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -1133,7 +1133,10 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index acb8ff2..6ca9c55 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -1034,7 +1034,10 @@ int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf,
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index 1113e99..94180c1 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -862,6 +862,8 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
{
MPID_BEGIN_ERROR_CHECKS
{
+ int rank;
+
MPID_Comm_valid_ptr(comm_ptr, mpi_errno);
if (HANDLE_GET_KIND(datatype) != HANDLE_KIND_BUILTIN) {
MPID_Datatype *datatype_ptr = NULL;
@@ -883,7 +885,24 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM) {
+ if (sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_USERBUFFER(sendbuf,count,datatype,mpi_errno);
+
+ rank = comm_ptr->rank;
+ if (rank == root) {
+ MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, count, mpi_errno);
+ MPIR_ERRTEST_USERBUFFER(recvbuf,count,datatype,mpi_errno);
+ if (count != 0 && sendbuf != MPI_IN_PLACE) {
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
+ }
+ }
+ else
+ MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, count, mpi_errno);
+ }
+
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index 7b0d286..e0338fd 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -441,7 +441,10 @@ int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dataty
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- /* TODO more checks may be appropriate (counts, in_place, buffer aliasing, etc) */
+
+ if (sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
+ /* TODO more checks may be appropriate (counts, in_place, etc) */
}
MPID_END_ERROR_CHECKS
}
diff --git a/src/mpi/coll/iscatter.c b/src/mpi/coll/iscatter.c
index 07d1cb0..32ff029 100644
--- a/src/mpi/coll/iscatter.c
+++ b/src/mpi/coll/iscatter.c
@@ -665,8 +665,11 @@ int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
/* catch common aliasing cases */
- if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && recvcount != 0)
- MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
+ if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && recvcount != 0) {
+ int sendtype_size;
+ MPID_Datatype_get_size_macro(sendtype, sendtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(recvbuf, (char*)sendbuf + comm_ptr->rank*sendcount*sendtype_size, mpi_errno);
+ }
}
else
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
diff --git a/src/mpi/coll/iscatterv.c b/src/mpi/coll/iscatterv.c
index 13210ca..71c01a2 100644
--- a/src/mpi/coll/iscatterv.c
+++ b/src/mpi/coll/iscatterv.c
@@ -256,6 +256,13 @@ int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[
break;
}
}
+ /* catch common aliasing cases */
+ if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcounts[comm_ptr->rank] != 0 && recvcount != 0) {
+ int sendtype_size;
+ MPID_Datatype_get_size_macro(sendtype, sendtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(recvbuf, (char*)sendbuf + displs[comm_ptr->rank]*sendtype_size, mpi_errno);
+ }
+
}
else
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
diff --git a/src/mpi/coll/red_scat.c b/src/mpi/coll/red_scat.c
index 46dc14e..2221b04 100644
--- a/src/mpi/coll/red_scat.c
+++ b/src/mpi/coll/red_scat.c
@@ -1172,8 +1172,10 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
}
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcounts[comm_ptr->rank], mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTERCOMM)
+ if (comm_ptr->comm_kind == MPID_INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sum, mpi_errno);
+ } else if (sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
MPIR_ERRTEST_USERBUFFER(recvbuf,recvcounts[comm_ptr->rank],datatype,mpi_errno);
MPIR_ERRTEST_USERBUFFER(sendbuf,sum,datatype,mpi_errno);
diff --git a/src/mpi/coll/red_scat_block.c b/src/mpi/coll/red_scat_block.c
index 6086115..b5cf449 100644
--- a/src/mpi/coll/red_scat_block.c
+++ b/src/mpi/coll/red_scat_block.c
@@ -1136,8 +1136,10 @@ int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
}
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTERCOMM)
+ if (comm_ptr->comm_kind == MPID_INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, recvcount, mpi_errno);
+ } else if (sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
MPIR_ERRTEST_USERBUFFER(recvbuf,recvcount,datatype,mpi_errno);
MPIR_ERRTEST_USERBUFFER(sendbuf,recvcount,datatype,mpi_errno);
diff --git a/src/mpi/coll/scan.c b/src/mpi/coll/scan.c
index 5ff546a..ee826f6 100644
--- a/src/mpi/coll/scan.c
+++ b/src/mpi/coll/scan.c
@@ -548,6 +548,9 @@ int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
( * MPIR_OP_HDL_TO_DTYPE_FN(op) )(datatype);
}
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
+
+ if (sendbuf != MPI_IN_PLACE)
+ MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
}
MPID_END_ERROR_CHECKS;
}
diff --git a/src/mpi/coll/scatter.c b/src/mpi/coll/scatter.c
index 705a456..b7278a0 100644
--- a/src/mpi/coll/scatter.c
+++ b/src/mpi/coll/scatter.c
@@ -724,10 +724,13 @@ int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sendcount, mpi_errno);
/* catch common aliasing cases */
- if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && recvcount != 0)
- MPIR_ERRTEST_ALIAS_COLL(sendbuf,recvbuf,mpi_errno);
+ if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcount == recvcount && recvcount != 0) {
+ int sendtype_size;
+ MPID_Datatype_get_size_macro(sendtype, sendtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(recvbuf, (char*)sendbuf + comm_ptr->rank*sendcount*sendtype_size, mpi_errno);
+ }
}
- else
+ else
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
if (recvbuf != MPI_IN_PLACE) {
diff --git a/src/mpi/coll/scatterv.c b/src/mpi/coll/scatterv.c
index ed1006a..1a23ec1 100644
--- a/src/mpi/coll/scatterv.c
+++ b/src/mpi/coll/scatterv.c
@@ -293,6 +293,12 @@ int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
break;
}
}
+ /* catch common aliasing cases */
+ if (recvbuf != MPI_IN_PLACE && sendtype == recvtype && sendcounts[comm_ptr->rank] != 0 && recvcount != 0) {
+ int sendtype_size;
+ MPID_Datatype_get_size_macro(sendtype, sendtype_size);
+ MPIR_ERRTEST_ALIAS_COLL(recvbuf, (char*)sendbuf + displs[comm_ptr->rank]*sendtype_size, mpi_errno);
+ }
}
else
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
-----------------------------------------------------------------------
Summary of changes:
src/mpi/coll/allgather.c | 16 +++--
src/mpi/coll/allgatherv.c | 10 +++
src/mpi/coll/allreduce.c | 9 ++-
src/mpi/coll/alltoall.c | 7 ++
src/mpi/coll/alltoallv.c | 7 ++-
src/mpi/coll/alltoallw.c | 7 ++-
src/mpi/coll/exscan.c | 4 +-
src/mpi/coll/gather.c | 7 ++-
src/mpi/coll/gatherv.c | 7 ++
src/mpi/coll/iallgather.c | 10 +++-
src/mpi/coll/iallgatherv.c | 26 +++++--
src/mpi/coll/iallreduce.c | 4 +
src/mpi/coll/ialltoall.c | 9 ++-
src/mpi/coll/ialltoallv.c | 6 ++
src/mpi/coll/ialltoallw.c | 7 ++-
src/mpi/coll/iexscan.c | 5 +-
src/mpi/coll/igather.c | 7 ++-
src/mpi/coll/igatherv.c | 7 ++
src/mpi/coll/ired_scat.c | 5 +-
src/mpi/coll/ired_scat_block.c | 5 +-
src/mpi/coll/ireduce.c | 21 ++++++-
src/mpi/coll/iscan.c | 5 +-
src/mpi/coll/iscatter.c | 7 ++-
src/mpi/coll/iscatterv.c | 7 ++
src/mpi/coll/red_scat.c | 4 +-
src/mpi/coll/red_scat_block.c | 4 +-
src/mpi/coll/scan.c | 3 +
src/mpi/coll/scatter.c | 9 ++-
src/mpi/coll/scatterv.c | 6 ++
test/mpi/coll/Makefile.am | 1 +
test/mpi/coll/allgather2.c | 13 +++-
test/mpi/coll/allgatherv2.c | 12 +++-
test/mpi/coll/allred6.c | 8 ++
test/mpi/coll/alltoall1.c | 8 ++
test/mpi/coll/alltoallv.c | 6 ++
test/mpi/coll/alltoallw2.c | 5 ++
test/mpi/coll/coll6.c | 11 ++-
test/mpi/coll/exscan.c | 5 ++
test/mpi/coll/gather.c | 10 +++
test/mpi/coll/iallred.c | 11 +++-
test/mpi/coll/{nonblocking.c => nonblocking4.c} | 83 +++++++++++++----------
test/mpi/coll/red3.c | 10 +++
test/mpi/coll/red_scat_block.c | 5 ++
test/mpi/coll/redscat3.c | 6 ++
test/mpi/coll/reduce.c | 9 +++
test/mpi/coll/scantst.c | 7 ++
test/mpi/coll/scatter2.c | 7 ++
test/mpi/coll/testlist | 1 +
48 files changed, 367 insertions(+), 82 deletions(-)
copy test/mpi/coll/{nonblocking.c => nonblocking4.c} (58%)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-4-g00f452c
by noreply@mpich.org 10 Jun '14
by noreply@mpich.org 10 Jun '14
10 Jun '14
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 00f452cd0738129a19a8782766981a464ae9cfad (commit)
from e6ddea13901a9f718af9108638f4755327442e14 (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/00f452cd0738129a19a8782766981a464…
commit 00f452cd0738129a19a8782766981a464ae9cfad
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Tue Jun 10 00:16:26 2014 -0500
Ticket #1935 has been closed.
Remove xfails pointing to #1935.
No reviewer.
diff --git a/test/mpi/comm/testlist b/test/mpi/comm/testlist
index c5ed8d8..b3987af 100644
--- a/test/mpi/comm/testlist
+++ b/test/mpi/comm/testlist
@@ -27,8 +27,8 @@ comm_group_rand 8 mpiversion=3.0
comm_idup 2 mpiversion=3.0
comm_idup 4 mpiversion=3.0
comm_idup 9 mpiversion=3.0
-comm_idup_mul 2 mpiversion=3.0 xfail=ticket1935
-comm_idup_overlap 2 mpiversion=3.0 xfail=ticket1935
+comm_idup_mul 2 mpiversion=3.0
+comm_idup_overlap 2 mpiversion=3.0
dup_with_info 2 mpiversion=3.0
dup_with_info 4 mpiversion=3.0
dup_with_info 9 mpiversion=3.0
-----------------------------------------------------------------------
Summary of changes:
test/mpi/comm/testlist | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-3-ge6ddea1
by noreply@mpich.org 06 Jun '14
by noreply@mpich.org 06 Jun '14
06 Jun '14
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 e6ddea13901a9f718af9108638f4755327442e14 (commit)
via 66c07f53bd389af488adcf421f28a7d9e6660ce2 (commit)
via cd168292eed8ee98fd15554d6109fda6f860d150 (commit)
from d39b7f534d72ca862fea1ec80894f5633bc8d926 (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/e6ddea13901a9f718af9108638f475532…
commit e6ddea13901a9f718af9108638f4755327442e14
Author: Michael Blocksome <blocksom(a)us.ibm.com>
Date: Thu Jun 5 23:10:15 2014 -0500
pamid: remove blocking shmem mutex; remove shmem CAS/FOP optimizations
The blocking pthread mutex in the shared memory window causes a deadlock
on bgq - perhaps because the messaging state is not advanced while the
thread is waiting for the mutex to be released.
Removing this blocking mutex resolves the bgq failures:
- rma/strided_putget_indexed_shared
- rma/strided_getacc_indexed_shared
With the calls to the blocking mutex removed the CAS and FOP functions
are not atomic. Solution is to remove the shared memory optimization and
instead use the common (network) code path.
Removing these shared memory optimizations from CAS/FOP resolves the
bgq hangs:
- rma/mutex_bench_shared
diff --git a/src/mpid/pamid/src/onesided/mpid_win_accumulate.c b/src/mpid/pamid/src/onesided/mpid_win_accumulate.c
index 47fe880..26ed220 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_accumulate.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_accumulate.c
@@ -298,8 +298,6 @@ MPID_Accumulate(const void *origin_addr,
int len, one;
++win->mpid.sync.total;
- MPIDI_SHM_MUTEX_LOCK(win);
- shm_locked = 1;
base = win->mpid.info[target_rank].base_addr;
disp_unit = win->mpid.info[target_rank].disp_unit;
dest_addr = (char *) base + disp_unit * target_disp;
@@ -311,10 +309,6 @@ MPID_Accumulate(const void *origin_addr,
(*uop)((void *) origin_addr, dest_addr, &one, &origin_datatype);
- if (shm_locked) {
- MPIDI_SHM_MUTEX_UNLOCK(win);
- shm_locked = 0;
- }
MPIU_Free(req);
++win->mpid.sync.complete;
diff --git a/src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c b/src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
index e75c921..d31b4be 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_compare_and_swap.c
@@ -109,46 +109,6 @@ int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
}
req->target.rank = target_rank;
-
- if (target_rank == win->comm_ptr->rank || win->create_flavor == MPI_WIN_FLAVOR_SHARED)
- {
- void *base, *dest_addr;
- int disp_unit;
- int len;
-
- ++win->mpid.sync.total;
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
- MPIDI_SHM_MUTEX_LOCK(win);
- shm_locked = 1;
-
- base = win->mpid.info[target_rank].base_addr;
- disp_unit = win->disp_unit;
- }
- else if (win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC) {
- base = NULL;
- disp_unit = win->disp_unit;
- }
- else {
- base = win->mpid.info[target_rank].base_addr;
- disp_unit = win->disp_unit;
- }
-
- dest_addr = (char *) base + disp_unit * target_disp;
-
- MPID_Datatype_get_size_macro(datatype, len);
- MPIU_Memcpy(result_addr, dest_addr, len);
-
- if (MPIR_Compare_equal(compare_addr, dest_addr, datatype))
- MPIU_Memcpy(dest_addr, origin_addr, len);
-
- if (shm_locked) {
- MPIDI_SHM_MUTEX_UNLOCK(win);
- shm_locked = 0;
- }
- MPIU_Free(req);
- ++win->mpid.sync.complete;
- }
- else {
req->buffer = (void *) ((uintptr_t) origin_addr + req->origin.dt.true_lb);
req->user_buffer = result_addr + req->origin.dt.true_lb;
req->compare_buffer = (void *) ((uintptr_t) compare_addr + req->origin.dt.true_lb);
@@ -198,7 +158,6 @@ int MPID_Compare_and_swap(const void *origin_addr, const void *compare_addr,
{
PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Atomic, req);
}
- }
fn_fail:
return mpi_errno;
diff --git a/src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c b/src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
index 6343484..749165c 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_fetch_and_op.c
@@ -289,51 +289,6 @@ int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
req->target.rank = target_rank;
-
- if (target_rank == win->comm_ptr->rank || win->create_flavor == MPI_WIN_FLAVOR_SHARED)
- {
- MPI_User_function *uop;
- void *base, *dest_addr;
- int disp_unit;
- int len, one;
-
- ++win->mpid.sync.total;
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
- MPIDI_SHM_MUTEX_LOCK(win);
- shm_locked = 1;
- base = win->mpid.info[target_rank].base_addr;
- disp_unit = win->mpid.info[target_rank].disp_unit;
-
- }
- else if (win->create_flavor == MPI_WIN_FLAVOR_DYNAMIC) {
- base = NULL;
- disp_unit = win->disp_unit;
- }
- else {
- base = win->mpid.info[target_rank].base_addr;
- disp_unit = win->mpid.info[target_rank].disp_unit;
- }
-
- dest_addr = (char *) base + disp_unit * target_disp;
-
- MPID_Datatype_get_size_macro(datatype, len);
- MPIU_Memcpy(result_addr, dest_addr, len);
-
- uop = MPIR_OP_HDL_TO_FN(op);
- one = 1;
-
- (*uop)((void *) origin_addr, dest_addr, &one, &datatype);
-
- if (shm_locked) {
- MPIDI_SHM_MUTEX_UNLOCK(win);
- shm_locked = 0;
- }
-
- MPIU_Free(req);
-
- ++win->mpid.sync.complete;
- }
- else {
req->compare_buffer = NULL;
req->pami_op = pami_op;
req->op = op;
@@ -376,7 +331,6 @@ int MPID_Fetch_and_op(const void *origin_addr, void *result_addr,
PAMI_Context_post(MPIDI_Context[0], &req->post_request, MPIDI_Atomic, req);
}
- }
fn_fail:
return mpi_errno;
diff --git a/src/mpid/pamid/src/onesided/mpid_win_get.c b/src/mpid/pamid/src/onesided/mpid_win_get.c
index 7b83d4a..872f62f 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_get.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_get.c
@@ -267,10 +267,6 @@ MPID_Get(void *origin_addr,
else
target_addr = win->mpid.info[target_rank].base_addr + req->offset;
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
- MPIDI_SHM_MUTEX_LOCK(win);
- shm_locked=1;
- }
/* The operation is not complete until the local copy is performed */
mpi_errno = MPIR_Localcopy(target_addr,
@@ -279,10 +275,6 @@ MPID_Get(void *origin_addr,
origin_addr,
origin_count,
origin_datatype);
- if (shm_locked) {
- MPIDI_SHM_MUTEX_UNLOCK(win);
- shm_locked=0;
- }
/* The instant this completion counter is set to zero another thread
* may notice the change and begin freeing request resources. The
diff --git a/src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c b/src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
index 52855bd..f57eddb 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_get_accumulate.c
@@ -40,12 +40,8 @@ MPIDI_Fetch_data_op(const void * origin_addr,
int disp_unit;
int len, one;
- if (win->create_flavor == MPI_WIN_FLAVOR_SHARED) {
- MPIDI_SHM_MUTEX_LOCK(win);
- shm_locked = 1;
base = win->mpid.info[target_rank].base_addr;
disp_unit = win->mpid.info[target_rank].disp_unit;
- }
dest_addr = (char *) base + disp_unit * target_disp;
MPID_Datatype_get_size_macro(origin_datatype, len);
@@ -56,10 +52,6 @@ MPIDI_Fetch_data_op(const void * origin_addr,
(*uop)((void *) origin_addr, dest_addr, &one, &origin_datatype);
}
- if (shm_locked) {
- MPIDI_SHM_MUTEX_UNLOCK(win);
- shm_locked = 0;
- }
fn_fail: return;
}
http://git.mpich.org/mpich.git/commitdiff/66c07f53bd389af488adcf421f28a7d9e…
commit 66c07f53bd389af488adcf421f28a7d9e6660ce2
Author: Michael Blocksome <blocksom(a)us.ibm.com>
Date: Thu Jun 5 15:58:05 2014 -0500
pamid: set base addr to NULL if size is zero in win_allocate_shared
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 e94eb48..cfd08a7 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
@@ -365,14 +365,14 @@ MPID_getSharedSegment(MPI_Aint size,
/* allocate a temporary buffer to gather the 'size' of each buffer on
* the node to determine the amount of shared memory to allocate
*/
- MPI_Aint *tmp_buf;
- tmp_buf = MPIU_Malloc (2*comm_size*sizeof(MPI_Aint));
- tmp_buf[rank] = (MPI_Aint) size;
+ MPI_Aint * size_array;
+ size_array = MPIU_Malloc (2*comm_size*sizeof(MPI_Aint));
+ size_array[rank] = (MPI_Aint) size;
mpi_errno = MPIR_Allgather_impl(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL,
- tmp_buf, 1 * sizeof(MPI_Aint), MPI_BYTE,
+ size_array, 1 * sizeof(MPI_Aint), MPI_BYTE,
(*win_ptr)->comm_ptr, &errflag);
if (mpi_errno) {
- MPIU_Free(tmp_buf);
+ MPIU_Free(size_array);
MPIU_ERR_POP(mpi_errno);
}
@@ -380,9 +380,9 @@ MPID_getSharedSegment(MPI_Aint size,
MPI_Aint actual_size;
win->mpid.info[0].base_addr = NULL;
for (i = 0; i < comm_size; ++i) {
- win->mpid.info[i].base_size = tmp_buf[i];
+ win->mpid.info[i].base_size = size_array[i];
- actual_size = (*noncontig)?MPIDI_ROUND_UP_PAGESIZE(tmp_buf[i],pageSize):tmp_buf[i];
+ actual_size = (*noncontig)?MPIDI_ROUND_UP_PAGESIZE(size_array[i],pageSize):size_array[i];
win->mpid.shm->segment_len += actual_size;
@@ -394,7 +394,6 @@ MPID_getSharedSegment(MPI_Aint size,
win->mpid.info[i+1].base_addr =
(void *) ((uintptr_t)win->mpid.info[i].base_addr + actual_size);
}
- MPIU_Free(tmp_buf);
/* The beginning of the shared memory allocation contains a control
* block before the data begins.
@@ -421,6 +420,12 @@ MPID_getSharedSegment(MPI_Aint size,
(void *) ((uintptr_t)win->mpid.info[i].base_addr + (uintptr_t)win->base);
}
+ for (i = 0; i < comm_size; ++i) {
+ if (size_array[i] == 0) win->mpid.info[i].base_addr = NULL;
+ }
+
+ MPIU_Free(size_array);
+
/* increment the shared counter */
OPA_fetch_and_add_int((OPA_int_t *) &win->mpid.shm->ctrl->shm_count,(int) 1);
http://git.mpich.org/mpich.git/commitdiff/cd168292eed8ee98fd15554d6109fda6f…
commit cd168292eed8ee98fd15554d6109fda6f860d150
Author: Michael Blocksome <blocksom(a)us.ibm.com>
Date: Thu Jun 5 12:09:19 2014 -0500
pamid: create memregions at an offset of the shared memory allocation
For MPI_Win_allocate_shared() the memory regions that are exchanged all
pointed to the begining of the shared memory allocation instead of at
the portion of the shared memory allocated to each process. When
MPI_Put(), for example, issues a PAMI_Rput() it uses an offset of zero
to specify the begining of the peer's window. As the exchanged memory
regions for each peer rank were not created at the start of each peer
rank's allocation, data corruption and other bad things occur.
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 0a63e9f..e94eb48 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_allocate_shared.c
@@ -377,14 +377,22 @@ MPID_getSharedSegment(MPI_Aint size,
}
/* calculate total number of bytes needed */
+ MPI_Aint actual_size;
+ win->mpid.info[0].base_addr = NULL;
for (i = 0; i < comm_size; ++i) {
win->mpid.info[i].base_size = tmp_buf[i];
- len = tmp_buf[i];
- if (*noncontig)
- /* Round up to next page size */
- win->mpid.shm->segment_len += MPIDI_ROUND_UP_PAGESIZE(len,pageSize);
- else
- win->mpid.shm->segment_len += len;
+
+ actual_size = (*noncontig)?MPIDI_ROUND_UP_PAGESIZE(tmp_buf[i],pageSize):tmp_buf[i];
+
+ win->mpid.shm->segment_len += actual_size;
+
+ /* Save the OFFSET to each rank's private shared memory area. This
+ * will be added to the BASE ADDRESS of the entire shared memory
+ * allocation to determine the virtual address.
+ */
+ if (i < comm_size-1)
+ win->mpid.info[i+1].base_addr =
+ (void *) ((uintptr_t)win->mpid.info[i].base_addr + actual_size);
}
MPIU_Free(tmp_buf);
@@ -405,14 +413,19 @@ MPID_getSharedSegment(MPI_Aint size,
#endif
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ /* compute the base addresses of each process within the shared memory segment */
+ win->base = (void *) ((long) win->mpid.shm->base_addr + (long ) MPIDI_ROUND_UP_PAGESIZE((sizeof(MPIDI_Win_shm_ctrl_t) + ((comm_size+1) * sizeof(void *))),pageSize));
+
+ for (i = 0; i < comm_size; ++i) {
+ win->mpid.info[i].base_addr =
+ (void *) ((uintptr_t)win->mpid.info[i].base_addr + (uintptr_t)win->base);
+ }
+
/* increment the shared counter */
OPA_fetch_and_add_int((OPA_int_t *) &win->mpid.shm->ctrl->shm_count,(int) 1);
/* wait for all ranks complete */
while((int) win->mpid.shm->ctrl->shm_count != comm_size) MPIDI_QUICKSLEEP;
-
- /* compute the base addresses of each process within the shared memory segment */
- win->base = (void *) ((long) win->mpid.shm->base_addr + (long ) MPIDI_ROUND_UP_PAGESIZE((sizeof(MPIDI_Win_shm_ctrl_t) + ((comm_size+1) * sizeof(void *))),pageSize));
}
fn_exit:
@@ -508,26 +521,6 @@ MPID_Win_allocate_shared(MPI_Aint size,
if (mpi_errno != MPI_SUCCESS)
return mpi_errno;
- if (comm_size > 1) {
- char *cur_base = (*win_ptr)->base;
- for (i = 0; i < comm_size; ++i) {
- if (win->mpid.info[i].base_size) {
- if (i == 0)
- win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base);
- else {
- if (noncontig)
- /* Round up to next page size */
- win->mpid.info[i].base_addr =(void *) ((MPI_Aint) cur_base + (MPI_Aint) MPIDI_ROUND_UP_PAGESIZE((win->mpid.info[i-1].base_size),pageSize));
- else
- win->mpid.info[i].base_addr = (void *) ((MPI_Aint) cur_base + (MPI_Aint) (win->mpid.info[i-1].base_size));
- }
- cur_base = win->mpid.info[i].base_addr;
- } else {
- win->mpid.info[i].base_addr = NULL;
- }
- }
- }
-
*(void**) base_ptr = (void *) win->mpid.info[rank].base_addr;
mpi_errno = MPIR_Barrier_impl(comm_ptr, &mpi_errno);
diff --git a/src/mpid/pamid/src/onesided/mpid_win_create.c b/src/mpid/pamid/src/onesided/mpid_win_create.c
index 7be9415..706da3c 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_create.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_create.c
@@ -123,7 +123,7 @@ MPIDI_Win_allgather( MPI_Aint size, MPID_Win **win_ptr )
#ifdef USE_PAMI_RDMA
if (size != 0)
{
- rc = PAMI_Memregion_create(MPIDI_Context[0], win->base, win->size, &length_out, &winfo->memregion);
+ rc = PAMI_Memregion_create(MPIDI_Context[0], win->mpid.info[rank].base_addr, win->mpid.info[rank].base_size, &length_out, &winfo->memregion);
MPIU_ERR_CHKANDJUMP((rc != PAMI_SUCCESS), mpi_errno, MPI_ERR_OTHER, "**nomem");
MPIU_ERR_CHKANDJUMP((win->size < length_out), mpi_errno, MPI_ERR_OTHER, "**nomem");
@@ -131,7 +131,7 @@ MPIDI_Win_allgather( MPI_Aint size, MPID_Win **win_ptr )
#else
if ( (!MPIDI_Process.mp_s_use_pami_get) && (size != 0) )
{
- rc = PAMI_Memregion_create(MPIDI_Context[0], win->base, win->size, &length_out, &winfo->memregion);
+ rc = PAMI_Memregion_create(MPIDI_Context[0], win->mpid.info[rank].base_addr, win->mpid.info[rank].base_size, &length_out, &winfo->memregion);
if(rc == PAMI_SUCCESS)
{
winfo->memregion_used = 1;
-----------------------------------------------------------------------
Summary of changes:
src/mpid/pamid/src/onesided/mpid_win_accumulate.c | 6 --
.../pamid/src/onesided/mpid_win_allocate_shared.c | 70 ++++++++++----------
.../pamid/src/onesided/mpid_win_compare_and_swap.c | 41 ------------
src/mpid/pamid/src/onesided/mpid_win_create.c | 4 +-
.../pamid/src/onesided/mpid_win_fetch_and_op.c | 46 -------------
src/mpid/pamid/src/onesided/mpid_win_get.c | 8 --
.../pamid/src/onesided/mpid_win_get_accumulate.c | 8 --
7 files changed, 36 insertions(+), 147 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository annotated tag, v3.1.1, created. v3.1.1
by noreply@mpich.org 04 Jun '14
by noreply@mpich.org 04 Jun '14
04 Jun '14
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 annotated tag, v3.1.1 has been created
at 113a33db7868b1c4ca9bcdb7c9f162eb2f427a99 (tag)
tagging d39b7f534d72ca862fea1ec80894f5633bc8d926 (commit)
replaces v3.1
tagged by Huiwei Lu
on Wed Jun 4 15:01:20 2014 -0500
- Log -----------------------------------------------------------------
tagging 'v3.1.1'
Antonio J. Pena (8):
Fixed configure when disabling f77/fc
Fix compilation warning in bcast.c
Linker warning multiple common of 'HYD_pmcd_pmip'
Fixed obsolete string format conversion
Fix incorrect declaration of string pointer
Fix Intel compiler warnings in fdebug.c
Compiler complains about uninitialized variable
Fix compiler warning about missing fncn prototype
Bob Cernohous (1):
Free the builtin communicators (world/self/iworld)
Haizhu Liu (1):
Fix Memory leak due to dynamic task change
Huiwei Lu (10):
Fixes failing electric-fence check
Fixes freeing uninitialized memory
Fixes inconsistent definition of parameters
Adds configuration check for lock-free option
Fixes test scripts in test/mpi
Fixes default optimization flags
Fixes MPI_Comm_idup
Adds two tests to MPI_Comm_idup
Fixes building MPI_Comm_idup for single-thread case
Update CHANGES for 3.1.1 release
James Dinan (1):
Add RMA accumulate test with min/maxloc operator
Jeff Hammond (3):
add CVAR to disable Abort message
change default for abort msg suppression to false
add Jed's cleanup w.r.t. silent abort
Junchao Zhang (19):
Fix weak symbol redefinition error with Pathscale
Put weak symbols in #ifndef MPICH_MPI_FROM_PMPI
Rename Fortran binding directories.
Add const& to Datatype of MPI::Op::Reduce_local
Add an example f08 binding
Remove support subarray in mpi_f08_constants.f90
Add an almost complete F08 binding with dir re-arranged
Add a script use_mpi_f08/buildiface
Add a script use_mpi_f08/wrappers_c/buildiface
Update the build system to include F08 binding
Update .gitignore to skip autogenerated files
Code cleanup
Revise impl of MPI_IN_PLACE and MPI_BOTTOM
Fix whole array access errs on assumed-size arrays
Comment out c_funptr code due to Cray ftn bugs
Add the missing mpi_c_interface.F90 in makefile
Add basic (non)contiguous subarray support
Add a bunch of F08 subarray tests
Fix a perl script problem met with perl-5.8.8
Ken Raffenetti (22):
use AC_SEARCH_LIBS for additional libraries
add back script to create html indexes for docs
fix warning for ambiguous usage of perl localtime
fix $wl setting for Solaris Studio compilers
macro fix in datatype test
add missing consts to MPI::Op methods
add test for Op::Reduce_local
avoid duplicate data in MPIR_proctable
correct validation of MPI_Info handle
fix incorrect usage of MPI_Abort in f90 tests
move the F77 compiler tests later in configure
cleanup .gitignore for src/env directory
setup framework for Fortran 2008 tests
convert f90 tests to f08
update CHANGES for F08
isolate F08 binding configure tests
add missing header file to sendrect2 test
nonblocking collective test fixes
type matching issues in pt2pt tests
moved shared memory configure option to m4 macro
remove check for strtoll
use --enable-new-dtags in compiler scripts
Lisandro Dalcin (3):
Human readable names for MPI-3 C++ datatypes
testcase for MPI_Error_string()
Deal with empty error class/code strings
Michael Blocksome (26):
Uninitialized variable in pamid 'MPID_Win_test' function
warning cleanup: pamid
Do not force -Werror when -Wall is specified
fix comments in pamid subconfigure.m4 file
add support for powerpcle
pamid: mpid_win_* fixes
pamid: support downlevel pami 'is_local_task' extension
Document the 'MPIFCLIBNAME' configure environment variable
pamid: 'gracefully degrade' instead of error out when node info is not available
pamid: fix bgq 'is_local_task' extension bug.
pamid: implement comm_split_type hook.
pamid: detect smp by default on bgq
pamid: force context post on when using 'per-object' locks
pamid: use shared memory configure option m4 macro
pamid: remove unnecessary bgq specialization.
pamid: change macro to not reference a local variable
pamid: move pe-specific code to sysv function
pamid: add a posix (mmap) shared memory impl. for bgq
pamid: fix win_allocate_shared error handling
pamid: fix win_shared_query
pamid: fix request completion race condition
pamid: use MPIDI_Win_shm_ctrl_t structure consistently
pamid: calculate correct shared memory base address
pamid: shared window fixes for mpi_get
pamid: shared window fixes for mpi_get_accumulate
Update mpich 3.1.1 RELEASE_NOTES for Blue Gene/Q
Nysal Jan K.A (2):
Fix vecblklen validation failure on power arch
pamid: Allow message sizes greater than 4GB
Paul Coffman (18):
subset peer-to-peer two phase
balancecontig: topology-aware aggregator seleciton
move ad_bg to ad_gpfs files and directories
makefile and autoconf changes
ad_bg to ad_gpfs major reorganization
bg to gpfs new files
remove ad_bgl and ad_bglockless directories
pushed bluegene platform code to bg subdir and removed ad_bg_getsh.c and ad_bg_setsh.c
further lockless removal/doc fixes
fixed configuration but so gpfs-only build does not include bluegene files
Replace ADIOI_GPFS_assert with ADIOI_Assert
fix hintfile pocessing to initialize flag
Balance-contig fix: wrong initial index
ROMIO: Balance-contig bugfix
Assert on non-zero gpfs_fcntl
gpfs_find_access_for_ion is BGQ-specific
fix to support gpfs hints and deferred open
Blue Gene: one-hop aggregator placement
Pavan Balaji (53):
Remove MPIX_ usage for program internal function names.
Added a new test for Reduce_scatter_block in C++.
Replace comm_free with comm_disconnect.
Remove armci-mpi.
Fix incorrect comments.
Added copyright check script.
Update Copyright version dates.
Better checks for VA_ARGS.
Remove more windows files.
Revert aclocal_cc.m4 commits that tweak VA_ARGS.
Updated the CHANGES file with Reduce_local fix.
Incorrect placement of the MPIR_Comm_split_type_impl symbol.
Rename mpich libraries.
Use CPPFLAGS for preprocessor macros.
Make binding automake conditional names consistent.
Move symbols to correct libraries.
Reorder library names in pkg-config.
Use library dependencies.
Update pkg-config with inter-library dependency changes.
Updated the CHANGES file with library management changes.
Merge libmpif77 and libmpifort.
Add backward compatibility symlinks.
Bug-fix: MPIR_CVAR_CH3_ODD_EVEN_CLIQUES was not working.
Reorder libmpi and libpmpi builds.
Added more information on mpiexec to the user guide.
Add an explicit application dependency on the profiling library.
Cleanup the symbol management to go into the right library.
Create a dummy function that calls all ROMIO public symbols.
Make extractcvars VPATH build safe.
Cleanup mpicxx.h.in rebuild logic.
White space cleanup.
Remove MPICXX_NAME and MPICPP_NAME.
Make install time prefix setting less hacky.
Clean up some bad writeup in the README.
Correct README for the library name changes in MPICH.
Allow libmpl/opa to be merged into libmpi (or libpmpi).
Added backward compatible links for mpl and opa.
Remove unnecessary static linking code.
Move mpif90 to mpifort and manf90.txt to manfort.txt.
Add a symlink for mpif90 to maintain backward compatibility.
Make "F77" an expert-level setting.
Update documentation to reflect the change to --disable-fortran.
Check for shared memory support capability in Comm_split_type.
Update environment variables controlling the mpiexec port range.
Fix the release script.
Update version in preparation for the 3.1.1 release.
Reenable --enable-f77 and --enable-fc options.
Remove the --enable-f90 option.
build system fixes for f08
Fix ibsend failures with the pathscale compilers.
Remove mpd.
Added a CHANGES note about mpd's death.
Revert "Update mpich 3.1.1 RELEASE_NOTES for Blue Gene/Q"
Rob Latham (93):
corrects old text in the introductory comments.
Clean up resources in error cases
ROMIO portablity: cannot "switch" on datatypes
Add missing pvfs2 headers to tarball
panasas: some layout types not handled
avoid ompi redefinition of MPI_MAX_DATAREP_STRING.
Ompi re-sync: check for statfs function
OpenMPI-resync: housekeeping: clean up MIN macro
Romio portability: check for extended greqs
OpenMPI resync: converted wrong buffer in external32
OpenMPI resync: teach ROMIO about OpenMPI option
OpenMPI re-sync: remove unneeded end-of-script stuff
incorrect header guards
fix PVFS2 compile error with hint processing
request newer features for pread/pwrite
better error handling for NULL filename
Feature check for scalable resize
some lustre parameters larger than signed int
introduce missing function prototypes
warning cleanup: clarify = and == in conditional
warning fixup: clean up casting
warning cleanup: non-void function explicit return
warning fix: shadowed declarations
warning fix: provide proper prototype
fix fs detection when multiple fs exist
dust off old Blue Gene timing infrastrucutre
bg-timing: DO NOT MERGE WITH MASTER: time lockless
use pwrite/pread instead of seek+write/read
bluegene timing: condense into one set of timers
remove uneeded barrier
Allocate two-phase buffer outside write path
remove extraneous locks in bluegene driver
coll_perf buffer size too small
Two-phase I/O with threaded write
romio-timing: even more finer grained timing
deferred open fixup: broadcast from correct root
additional logging information
option to read/write to /dev/null
Promote blocksize to ADIOI_FileD struct
additional broadcast in open for blocksize
Rework "scalable flush" logic
Significant simplification of ad_bg_open
romio configure: if/fi unbalanced
disable aio on BlueGene
blksize_t not available under enable-strict
clean up P2Pcontig warnings
feature request for pread/pwrite
unused variable cleanup
include pthread.h for pthread routines
romio pvfs2: bad use of memcpy
romio pvfs2: const-ify interface
romio pvfs2 warning fixes
Missed a call site when renamed this function
remove unused variables
bring in missing header files for lseek and close
A few items describing the reworked BlueGene driver
Remove preprocessor defines no longer used
Bug: Inverted logic for scalable resize check
clean up stray declrations of GPFS_SUPER_MAGIC
more comments for crazy ROMIO multi-platform stat
Bugfix: detected any fs as gpfs
Disable "create on one, open on all" for NTFS
modify MPL_trdump to make a single fprintf call
update errstring2 for MPICH test harness
Revert "Mark indexperf as failing perf test"
clean up unused variables in panasas hints
tiny warning fix for panasas debugging routine
update panasas routines for const-ification
usleep available but not prototyped in strict mode
slightly better checks for Panasas SDK
Make concurrent write the default for Panasas
turn datatype test into a function
ROMIO dtype flattening: ignore zero-length counts
test case for 'resized of resized'
Deal with more errno values
ROMIO: Consolidate errno processing
Actually initialize debug event logging
Test case for darray
update darray_read for test suite conventions
Got a bit carried away zapping zero-length blocks
exercise a few more datatypes
rename indexed_zeros
zero-length blocklens fix for structs
typo in ROMIO runtests
romio+gpfs: experiment with gpfs_fcntl hints
romio+gpfs: experiement with per-access hints
an IO-node aware mode for gpfs hints
Debugging code caused segfault
make event elements array a bit bigger
Free duplicated communicator in error path
Don't build GPFS hints if headers not found
revert old "removezeros" optimization
fix "used uninitilized" compiler warning
Sameer Kumar (1):
pamid: fixes for MPI_Win_allocate_shared on BG/Q.
Sameh Sharkawi (2):
OOM running broadcast stress test w/ COLLECTIVE_SELECTION=yes
PAMID: Initializing mpierrno before calling MPIDO_Barrier in MPIDI_Coll_comm_create
Sangmin Seo (1):
Fix of integer variable size
Su Huang (8):
MPICH test case linked_list_lockall hang in MPI_Win_flush
pamid: datatype is not freed in MPID_Win_accumulate
pamid: memory leak on handles for request based RMA operations
pamid: fix a bug in MPID_Win_free
pamid: mapped datatypes needed to be unmapped
pamid: task 0 hang in MPI_Init() if MP_PRINTENV=yes
pamid: mutiple fixes for RMA shared window
pamid: fixed various RMA problems with shared window
Wei-keng Liao (1):
ROMIO test case demonstrating indexed type bugs
Wesley Bland (6):
Remove the use of MPIDI_TAG_UB
Adds universe check to C spawn tests
Add the universe check to the fortran spawn tests
Makes sure that the status object is always defined
Mark ft/isendalive as xfail
Make handling of request cleanup more uniform
William Gropp (21):
Add datatype test support from MPICH1
Add dataalign test from MPICH1
Add sendrecv2 and sendrecv4 test from MPICH-1
Add some MPICH-1 tests to MPICH datatype tests
Fix bug in marking unbuilt tests as failed
Fix typo in comment in dataalign.c
Correct CPP name
Add style commands to generated files
Use MPIR_MIN/MPIR_MAX instead of MIN/MAX
Add style comments for coding style checker
Added summary.junit.xml to clean list
Mark indexperf as failing perf test
Minor typo fix for datatype/dataloop code
Fix incorrect use of status and buffer mgmt
Add detail to error messages in darray-pack
Add more datatype tests
Address many of the perf problems in #1788
Remove incorrect use of status in test
Fix location of debugging statement
Correct error in description
Remove incomplete dataloop optimizations
-----------------------------------------------------------------------
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1-300-gd39b7f5
by noreply@mpich.org 04 Jun '14
by noreply@mpich.org 04 Jun '14
04 Jun '14
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 d39b7f534d72ca862fea1ec80894f5633bc8d926 (commit)
from f0cdd1041131b278615479774eaa3eed62d87d84 (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/d39b7f534d72ca862fea1ec80894f5633…
commit d39b7f534d72ca862fea1ec80894f5633bc8d926
Author: Huiwei Lu <huiweilu(a)mcs.anl.gov>
Date: Wed Jun 4 11:17:14 2014 -0500
Update CHANGES for 3.1.1 release
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/CHANGES b/CHANGES
index 407a1a6..090f27e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,16 +2,20 @@
Changes in 3.1.1
===============================================================================
+ # Blue Gene/Q implementation supports MPI-3. This release contains a
+ functional and compliant Blue Gene/Q implementation of the MPI-3 standard.
+ Instructions to build on Blue Gene/Q are on the mpich.org wiki:
+ http://wiki.mpich.org/mpich/index.php/BGQ
+
+ # Fortran 2008 bindings (experimental). Build with --enable-fortran=all. Must have
+ a Fortran 2008 + TS 29113 capable compiler.
+
# Significant rework of MPICH library management and which symbols go
into which libraries. Also updated MPICH library names to make
them consistent with Intel MPI, Cray MPI and IBM PE MPI. Backward
compatibility links are provided for older mpich-based build
systems.
- # Fixed the prototype of the Reduce_local C++ binding. The previous
- prototype was completely incorrect. Thanks to Jeff Squyres for
- reporting the issue.
-
# The ROMIO "Blue Gene" driver has seen significant rework. We have separated
"file system" features from "platform" features, since GPFS shows up in more
places than just Blue Gene
@@ -24,8 +28,12 @@
# The old ROMIO optimization "deferred open" either stopped working or was
disabled on several platforms.
- # Fortran 2008 bindings (experimental). Build with --enable-fortran=all. Must have
- a Fortran 2008 + TS 29113 capable compiler.
+ # Added support for powerpcle compiler. Patched libtool in MPICH to support
+ little-endian powerpc linux host.
+
+ # Fixed the prototype of the Reduce_local C++ binding. The previous
+ prototype was completely incorrect. Thanks to Jeff Squyres for
+ reporting the issue.
# The mpd process manager, which was deprecated and unsupported for
the past four major release series (1.3.x till 3.1), has now been
-----------------------------------------------------------------------
Summary of changes:
CHANGES | 20 ++++++++++++++------
1 files changed, 14 insertions(+), 6 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1-299-gf0cdd10
by noreply@mpich.org 04 Jun '14
by noreply@mpich.org 04 Jun '14
04 Jun '14
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 f0cdd1041131b278615479774eaa3eed62d87d84 (commit)
from e852708fa9fdd532e4dddba4af3e1d8276894fca (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/f0cdd1041131b278615479774eaa3eed6…
commit f0cdd1041131b278615479774eaa3eed62d87d84
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Wed Jun 4 12:26:06 2014 -0500
Revert "Update mpich 3.1.1 RELEASE_NOTES for Blue Gene/Q"
This reverts commit e852708fa9fdd532e4dddba4af3e1d8276894fca.
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 9bc15e9..8ece71f 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,17 +1,4 @@
----------------------------------------------------------------------
- NEW FEATURES
-----------------------------------------------------------------------
-
-### Blue Gene/Q implementation supports MPI-3
-
- * This release contains a functional and compliant Blue Gene/Q
- implementation of the MPI-3 standard. Instructions to build on
- Blue Gene/Q are on the mpich.org wiki:
-
- http://wiki.mpich.org/mpich/index.php/BGQ
-
-
-----------------------------------------------------------------------
KNOWN ISSUES
----------------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
RELEASE_NOTES | 13 -------------
1 files changed, 0 insertions(+), 13 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0