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
July 2014
- 1 participants
- 63 discussions
[mpich] MPICH primary repository annotated tag, v3.1.2, created. v3.1.2
by noreply@mpich.org 21 Jul '14
by noreply@mpich.org 21 Jul '14
21 Jul '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.2 has been created
at a4921c1e5f2cd644c9e688902eab8d5d95bca4e6 (tag)
tagging 88e23c46ccedf7643f3aa56c5cb1542eee0efc17 (commit)
replaces v3.1.1
tagged by Junchao Zhang
on Mon Jul 21 14:00:53 2014 -0500
- Log -----------------------------------------------------------------
tagging 'v3.1.2'
Antonio J. Pena (9):
Added support for thread-safe errno in Solaris
Switched -D_REENTRANT from CFLAGS to CPPFLAGS
Fixed unused variable compiler warnings in ROMIO
Change patch's --forward flag for short equivalent
Revert "Remove MPICXX_NAME and MPICPP_NAME."
Fix support for --program-prefix/-suffix options
Fix weak alias support detection
Fix usage of weak,alias attributes
Remove MPICH_ATTR_WEAK_ALIAS macro
Huiwei Lu (2):
Clean up MPI_Comm_idup code for '--enable-threads=single' case.
Improve checking for C compiler options on Solaris
Junchao Zhang (19):
Ported more F90 tests to F08
Fix bugs in comm_spawn & comm_spawn_multiple
Fix an MPI_Cancel bug in F08
Code cleanup
Fix a bug when converting a Fortran string to a C string
Fix bugs in MPI_Info_get and MPI_Info_get_valuelen
Move F08 hello test and ring test to dir misc
Added a makefile for f08 tests
Revised the handle conversion functions in Fortran.
Set MPIR_CVAR_MAX_STRLEN to a smaller value
Added assertion to protect cvars of type MPI_CHAR
Allocate mem. for a cvar when its type is MPI_CHAR
Increase buffer size to cover longer cvar strings
Added the missing const to the buf arg in MPI_T_pvar/cvar_write
Added a test for MPI_T cvar read and write
Added the missing const in cvar/pvar write
Update RELEASE_NOTES to include PathScale problems
Update CHANGES for 3.1.2 release
Upgraded revison number and release number
Ken Raffenetti (11):
remove preprocessor guards from nbc tests
fix assert in win_shared_noncontig tests
fixup for [f8c8d5aa]
increase feature level for pread/pwrite
add flag to enable C99 mode with Solaris compilers
allow timeout of zero in bscu_wait_for_completion
remove undeclared cvar check in portals4 netmod
add README section for portals4 netmod
portals4: set VC to active when id initialized
Solaris build fix for non-strict compile
fixup issendselfcancel test
Lisandro Dalcin (1):
Better implementation of MPI_Allreduce for intercommunicator.
Masamichi Takagi (3):
Add on-demand connection management for IB
Free, munmap, destroy on terminating VC
Add IB device name of mlx5_<n>
Michael Blocksome (3):
pamid: create memregions at an offset of the shared memory allocation
pamid: set base addr to NULL if size is zero in win_allocate_shared
pamid: remove blocking shmem mutex; remove shmem CAS/FOP optimizations
Mohamad Chaarawi (1):
ROMIO: big-datatypes: Update overly conservative assertion
Norio Yamaguchi (10):
Add IB device name of qib<n>
Change of the memory area used in put_scratch_pad
Initialize the ringbuf memory for re-use
Replace malloc-free functions when using netmod-IB
Fix header size when transmitting by SendNoncontig
No need to malloc scratch-pad when nranks is 1
Improve on-demand connection management for IB
Fix the management of RDMA-write ringbuffer
white space fixup
Fix build warnings about comparison of pointer
Paul Coffman (11):
Teach GPFS about PE platform
remove BGL_OPTIM_STEP flags from PE Makefile.mk
Teach GPFS-PE about MP_IOAGENT_CNT
added code to check if fd->comm is intercomm then abort
bg and pe to gpfs hints consolidation
migrate ranklist from agents aggregators
clean up resources if P2PContig selected
small memory leak on Blue Gene
resource cleanup in p2pcontig case
BALANCECONTIG cleanups/fixes
memory leak in PE aggregator creation
Pavan Balaji (17):
Ticket #1935 has been closed.
MPI_Status_c2f should also go into libmpi.
Upgraded to hwloc-1.9
Hydra-specific patches for hwloc.
Removed unnecessary unused attributes.
Only create shared memory when more than one process exists.
Add barrier-like semantics in PSCW for shared-memory operations.
Add a memory barrier at the end of the Win_complete function.
Fix badness in fence_shm.
Fix bug in PMI keyval caching logic.
Increase the number of possible PMI arguments.
Use global variable for MPI_PUT operations.
Avoid duplicate win_group_ranks creation
Mark get-struct as an xfail.
Simplified RMA_Op structure.
Revert "Simplified RMA_Op structure."
Add Sangmin to user/install guides.
Rob Latham (19):
Lustre used constants w/o header file
deal better with large user-defined types
additional test case for large datatype i/o
constify string handling
test for RMA with "struct of struct"
ROMIO: some platforms unhappy when passed 2 GiB counts
Revert "Address many of the perf problems in #1788"
do not redefine MIN if provided elsewhere
munmap and shm_unlink prototyped in mman.h
use apropriate enum
Fix up header files in ad_gpfs_open.c
add a descriptive string to function table
set an MPI Info key with the type of file system
ROMIO: report which ranks are aggregators
use 'long' for blocksize
ROMIO debugging: environment var to select fs type
fix unsigned arithmetic yielding unsigned
optionally display ROMIO hints
warning fixes with --enable-strict
Sameh Sharkawi (1):
pamid: Fix for pami_tune parameter parsing
Sangmin Seo (4):
Replaced -Wno-type-limits with -Wtype-limits.
Removed a unnecessary MPIU_Assert.
Add warning about memory tracing overhead.
Add environment variables to control memory tracing overhead.
Su Huang (4):
pamid: fix MPI_Abort hang with dynamic tasking
MPI_Iallgather has no validity check for sendcount
pamid: Data integrity error hit in MPI_Win_allocate_shared windows(LE)
Non-blocking collectives have no validity check for count
Wesley Bland (8):
Improve error checking for buffer aliasing
Add tests for new buffer aliasing checks
Fix coll6 test to use MPI_IN_PLACE when necessary
Add a CVAR to turn off collective alias checking
Fix redscat MPI_IN_PLACE checking
Fix collective alias checks to look for zero-sized buffers
Fix refcounting for isends
Add a test for the bug in #2129
Xin Zhao (11):
fix bug: delete incorrect lines in fetch_and_op.c
Rename static functions in RMA code
Rename RMA request gc and complete function
Separate progress engine code from garbage collection
Simplify RMA requests completion function
Add CVAR (# of completed reqs) to control when to stop in RMA GC function
Add CVAR (# of tested reqs) to control when to stop in RMA GC function
Fix bug: add barrier semantic in FENCE for SHM ops.
Add a test code to test FENCE on SHM.
Notes on when to do mem barriers in RMA.
Add/delete memory barriers in RMA.
-----------------------------------------------------------------------
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-134-g88e23c4
by noreply@mpich.org 21 Jul '14
by noreply@mpich.org 21 Jul '14
21 Jul '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 88e23c46ccedf7643f3aa56c5cb1542eee0efc17 (commit)
via 5a5ada7b65bbe7bd465f7569ee412b7d45e43a3a (commit)
from 2f7ef49c14d24aa40ff282be2b041f76fc9ce151 (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/88e23c46ccedf7643f3aa56c5cb1542ee…
commit 88e23c46ccedf7643f3aa56c5cb1542eee0efc17
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Mon Jul 21 10:50:41 2014 -0500
Upgraded revison number and release number
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/maint/version.m4 b/maint/version.m4
index 9692b70..6aad366 100644
--- a/maint/version.m4
+++ b/maint/version.m4
@@ -14,7 +14,7 @@
# changing this by playing with diversions, but then we would probably be
# playing with autotools-fire.
-m4_define([MPICH_VERSION_m4],[3.1.1])dnl
+m4_define([MPICH_VERSION_m4],[3.1.2])dnl
m4_define([MPICH_RELEASE_DATE_m4],[unreleased development copy])dnl
# For libtool ABI versioning rules see:
@@ -35,6 +35,6 @@ m4_define([MPICH_RELEASE_DATE_m4],[unreleased development copy])dnl
# libmpi so version only includes functionality defined in the MPI
# standard, and does not include MPIX_ functions and C++ bindings.
-m4_define([libmpi_so_version_m4],[12:1:0])dnl
+m4_define([libmpi_so_version_m4],[12:2:0])dnl
[#] end of __file__
http://git.mpich.org/mpich.git/commitdiff/5a5ada7b65bbe7bd465f7569ee412b7d4…
commit 5a5ada7b65bbe7bd465f7569ee412b7d45e43a3a
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Mon Jul 21 10:49:54 2014 -0500
Update CHANGES for 3.1.2 release
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/CHANGES b/CHANGES
index 090f27e..f3185aa 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,38 @@
===============================================================================
+ Changes in 3.1.2
+===============================================================================
+ # Upgraded to hwloc-1.9.
+
+ # Added more Fortran 2008 (F08) tests and fixed a few F08 binding bugs.
+ Now all MPICH F90 tests have been ported to F08.
+
+ # Updated weak alias support to align with gcc-4.x
+
+ # Enhancements to RMA implementation.
+
+ # Enhancements to ROMIO.
+
+ # Better implementation of MPI_Allreduce for intercommunicator.
+
+ # Added environment variables to control memory tracing overhead.
+
+ # Added flags to enable C99 mode with Solaris compilers.
+
+ # Updated implementation of MPI-T CVARs of type MPI_CHAR, as interpreted in MPI-3.0 Errata.
+
+ # Several other minor bug fixes, memory leak fixes, and code cleanup.
+
+ A full list of changes is available at the following link:
+
+ http://git.mpich.org/mpich.git/shortlog/v3.1.1..v3.1.2
+
+ A full list of bugs that have been fixed is available at the
+ following link:
+
+ https://trac.mpich.org/projects/mpich/query?status=closed&group=resolution&…
+
+
+===============================================================================
Changes in 3.1.1
===============================================================================
-----------------------------------------------------------------------
Summary of changes:
CHANGES | 34 ++++++++++++++++++++++++++++++++++
maint/version.m4 | 4 ++--
2 files changed, 36 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-132-g2f7ef49
by noreply@mpich.org 19 Jul '14
by noreply@mpich.org 19 Jul '14
19 Jul '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 2f7ef49c14d24aa40ff282be2b041f76fc9ce151 (commit)
from 09c9b86789eacc1f52adeb4431fe6f3b2f758b48 (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/2f7ef49c14d24aa40ff282be2b041f76f…
commit 2f7ef49c14d24aa40ff282be2b041f76fc9ce151
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Sun Jun 22 22:16:42 2014 -0500
Add Sangmin to user/install guides.
No reviewer.
diff --git a/doc/installguide/install.tex.vin b/doc/installguide/install.tex.vin
index 610496a..0a77d84 100644
--- a/doc/installguide/install.tex.vin
+++ b/doc/installguide/install.tex.vin
@@ -50,8 +50,8 @@
\author{
Pavan Balaji \and Wesley Bland \and William Gropp \and Rob Latham \and
-Huiwei Lu \and Antonio J. Pe\~na \and Ken Raffenetti \and Rajeev
-Thakur \and Junchao Zhang
+Huiwei Lu \and Antonio J. Pe\~na \and Ken Raffenetti \and Sangmin Seo
+\and Rajeev Thakur \and Junchao Zhang
}
\maketitle
diff --git a/doc/userguide/user.tex.vin b/doc/userguide/user.tex.vin
index 1a36308..d4ae978 100644
--- a/doc/userguide/user.tex.vin
+++ b/doc/userguide/user.tex.vin
@@ -48,8 +48,8 @@ Argonne National Laboratory}
\author{
Pavan Balaji \and Wesley Bland \and William Gropp \and Rob Latham \and
-Huiwei Lu \and Antonio J. Pe\~na \and Ken Raffenetti \and Rajeev
-Thakur \and Junchao Zhang
+Huiwei Lu \and Antonio J. Pe\~na \and Ken Raffenetti \and Sangmin Seo
+\and Rajeev Thakur \and Junchao Zhang
}
\maketitle
-----------------------------------------------------------------------
Summary of changes:
doc/installguide/install.tex.vin | 4 ++--
doc/userguide/user.tex.vin | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-131-g09c9b86
by noreply@mpich.org 19 Jul '14
by noreply@mpich.org 19 Jul '14
19 Jul '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 09c9b86789eacc1f52adeb4431fe6f3b2f758b48 (commit)
from 9c27521d161967433748e5d563a751bd89075285 (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/09c9b86789eacc1f52adeb4431fe6f3b2…
commit 09c9b86789eacc1f52adeb4431fe6f3b2f758b48
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Thu Jul 17 15:56:28 2014 -0400
Non-blocking collectives have no validity check for count
Added the check on count and datatype on the following functions:
- MPI_Iallreduce
- MPI_Ialltoall
- MPI_Ibcast
- MPI_Igather
- MPI_Ireduce
- MPI_Iscan
(ibm) D198793
Fixes #2139
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 4edfeda..e2b2e8b 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -732,6 +732,7 @@ int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count,
MPID_BEGIN_ERROR_CHECKS
{
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
+ MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_OP(op, mpi_errno);
MPIR_ERRTEST_COMM(comm, mpi_errno);
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index f83e716..a8ef91c 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -604,8 +604,11 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
{
MPID_BEGIN_ERROR_CHECKS
{
- if (sendbuf != MPI_IN_PLACE)
+ if (sendbuf != MPI_IN_PLACE) {
+ MPIR_ERRTEST_COUNT(sendcount, mpi_errno);
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
+ }
+ MPIR_ERRTEST_COUNT(recvcount, mpi_errno);
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
MPIR_ERRTEST_COMM(comm, mpi_errno);
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index 557dc20..812cfd1 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -941,6 +941,7 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Com
MPID_BEGIN_ERROR_CHECKS
{
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
+ MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_COMM(comm, mpi_errno);
/* TODO more checks may be appropriate */
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index cc52f90..f17238c 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -602,6 +602,12 @@ int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
MPID_BEGIN_ERROR_CHECKS
{
MPIR_ERRTEST_COMM(comm, mpi_errno);
+ if (sendbuf != MPI_IN_PLACE) {
+ MPIR_ERRTEST_COUNT(sendcount, mpi_errno);
+ MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
+ }
+ MPIR_ERRTEST_COUNT(recvcount, mpi_errno);
+ MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
/* TODO more checks may be appropriate */
}
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index c9b0308..5f31903 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -848,6 +848,7 @@ int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
{
MPID_BEGIN_ERROR_CHECKS
{
+ MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
MPIR_ERRTEST_OP(op, mpi_errno);
MPIR_ERRTEST_COMM(comm, mpi_errno);
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index 9cbea55..c8fa41e 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -404,6 +404,7 @@ int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dataty
MPID_BEGIN_ERROR_CHECKS
{
MPIR_ERRTEST_DATATYPE(datatype, "datatype", mpi_errno);
+ MPIR_ERRTEST_COUNT(count, mpi_errno);
MPIR_ERRTEST_OP(op, mpi_errno);
MPIR_ERRTEST_COMM(comm, mpi_errno);
-----------------------------------------------------------------------
Summary of changes:
src/mpi/coll/iallreduce.c | 1 +
src/mpi/coll/ialltoall.c | 5 ++++-
src/mpi/coll/ibcast.c | 1 +
src/mpi/coll/igather.c | 6 ++++++
src/mpi/coll/ireduce.c | 1 +
src/mpi/coll/iscan.c | 1 +
6 files changed, 14 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-130-g9c27521
by noreply@mpich.org 19 Jul '14
by noreply@mpich.org 19 Jul '14
19 Jul '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 9c27521d161967433748e5d563a751bd89075285 (commit)
from 99932bbce280c14f0688ba147e6ff8455c31e248 (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/9c27521d161967433748e5d563a751bd8…
commit 9c27521d161967433748e5d563a751bd89075285
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Tue Jul 15 09:34:29 2014 -0500
Update RELEASE_NOTES to include PathScale problems
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 43977b7..f3042df 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -11,6 +11,19 @@
https://trac.mpich.org/projects/mpich/ticket/2105
+### PathScale compilers
+ * Due to bugs in the PathScale compiler suite, some configurations of MPICH
+ do not build correctly.
+ - v5.0.1: When the --disable-shared configure option is passed to MPICH,
+ applications will give a segfault.
+
+ - v5.0.5: Unless you pass the --enable-fast=O0 configure flag to MPICH,
+ applications will hang.
+
+ See the following ticket for more information:
+
+ https://trac.mpich.org/projects/mpich/ticket/2104
+
### Fine-grained thread safety
* ch3:sock does not (and will not) support fine-grained threading.
-----------------------------------------------------------------------
Summary of changes:
RELEASE_NOTES | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-129-g99932bb
by noreply@mpich.org 19 Jul '14
by noreply@mpich.org 19 Jul '14
19 Jul '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 99932bbce280c14f0688ba147e6ff8455c31e248 (commit)
from b3007925c402c97bc5a799c4b630f6114a795146 (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/99932bbce280c14f0688ba147e6ff8455…
commit 99932bbce280c14f0688ba147e6ff8455c31e248
Author: Paul Coffman <pkcoff(a)us.ibm.com>
Date: Sat Jul 19 06:39:42 2014 -0500
memory leak in PE aggregator creation
Signed-off-by: Rob Latham <robl(a)mcs.anl.gov>
diff --git a/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c b/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c
index 2098b85..dfeeff5 100644
--- a/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c
+++ b/src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c
@@ -215,6 +215,9 @@ ADIOI_PE_gen_agg_ranklist(ADIO_File fd)
}
}
}
+
+ ADIOI_Free(allNodeRanks);
+
}
if ( getenv("MP_I_SHOW_AGGRS") ) {
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/ad_gpfs/pe/ad_pe_aggrs.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-128-gb300792
by noreply@mpich.org 18 Jul '14
by noreply@mpich.org 18 Jul '14
18 Jul '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 b3007925c402c97bc5a799c4b630f6114a795146 (commit)
via 07a301681491fe5f42a7aae8edfcf9a9d9937ee4 (commit)
via 2d947bf57e2fe57f59c28c5dc941bb47221d2c06 (commit)
via fab604e6aa6d35b762872477ec3794d386b0f99a (commit)
via c10e084137b9b4e98ca8edf607cd2d8c6ce17ae8 (commit)
via 4f32752683ba72b1e7e36f2009779d1dd3d7eafc (commit)
via 5e800079ecd53177a6be21824a06db248451c78e (commit)
via 56feb347d6eae5901fa8bfb0de8197cdaad1b3fd (commit)
from 60cf2c24ec303404ebf60def0a6e9c8a9bd22f64 (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/b3007925c402c97bc5a799c4b630f6114…
commit b3007925c402c97bc5a799c4b630f6114a795146
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Fri Jul 18 15:02:12 2014 -0500
warning fixes with --enable-strict
another round of strict warning cleanups before the release: missing
prototypes and shadowed declarations
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c
index 48f98b8..350a336 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c
@@ -16,6 +16,7 @@
#include "adio.h"
#include "adio_cb_config_list.h"
#include "ad_gpfs.h"
+#include "ad_gpfs_aggrs.h"
#ifdef AGGREGATION_PROFILE
#include "mpe.h"
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_close.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_close.c
index fbb03b7..f8a4167 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_close.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_close.c
@@ -12,6 +12,7 @@
* See COPYRIGHT notice in top-level directory.
*/
+#include "ad_gpfs.h"
#include "ad_gpfs_tuning.h"
#include <unistd.h>
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c
index d4e7466..31ba04b 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c
@@ -12,6 +12,7 @@
* See COPYRIGHT notice in top-level directory.
*/
+#include "ad_gpfs.h"
#include "ad_gpfs_tuning.h"
#include <sys/types.h>
@@ -28,7 +29,7 @@
#endif
#ifdef HAVE_GPFS_FCNTL_H
-void gpfs_free_all_locks(int fd)
+static void gpfs_free_all_locks(int fd)
{
int rc;
struct {
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c
index 71ddb9a..2172702 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c
@@ -279,9 +279,9 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
*
* First verify that the filetype is contig and the offsets are
* increasing in rank order*/
- int i, inOrderAndNoGaps = 1;
- for (i=0;i<(nprocs-1);i++) {
- if (end_offsets[i] != (st_offsets[i+1]-1))
+ int x, inOrderAndNoGaps = 1;
+ for (x=0;x<(nprocs-1);x++) {
+ if (end_offsets[x] != (st_offsets[x+1]-1))
inOrderAndNoGaps = 0;
}
if (inOrderAndNoGaps && buftype_is_contig) {
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h
index 16ce7cc..b82c642 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h
@@ -85,7 +85,7 @@ extern int gpfsmpio_bg_nagg_pset;
/* set internal variables for tuning environment variables */
-void ad_gpfs_get_env_vars();
+void ad_gpfs_get_env_vars(void);
/* report timing breakdown for MPI I/O collective call */
void ad_gpfs_timing_crw_report( int rw, ADIO_File fd, int myrank, int nprocs );
@@ -96,9 +96,9 @@ void ad_gpfs_timing_crw_report( int rw, ADIO_File fd, int myrank, int nprocs );
*/
#define GPFSMPIO_T_CIO_RESET( RW ) \
{ \
- int i; \
- for ( i = 0; i < GPFSMPIO_CIO_LAST; i ++ ) \
- gpfsmpio_prof_c##RW [ i ] = 0; \
+ int _i; \
+ for ( _i = 0; _i < GPFSMPIO_CIO_LAST; _i ++ ) \
+ gpfsmpio_prof_c##RW [ _i ] = 0; \
}
#define GPFSMPIO_T_CIO_REPORT( RW, FD, MYRANK, NPROCS ) \
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c
index 436d01d..17299f2 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c
@@ -386,7 +386,7 @@ void ADIOI_GPFS_WriteStridedColl(ADIO_File fd, const void *buf, int count,
#endif
}
-void gpfs_wr_access_start(int fd, ADIO_Offset offset, ADIO_Offset length)
+static void gpfs_wr_access_start(int fd, ADIO_Offset offset, ADIO_Offset length)
{
int rc=0;
#ifdef HAVE_GPFS_FCNTL_H
@@ -410,7 +410,7 @@ void gpfs_wr_access_start(int fd, ADIO_Offset offset, ADIO_Offset length)
ADIOI_Assert(rc == 0);
}
-void gpfs_wr_access_end(int fd, ADIO_Offset offset, ADIO_Offset length)
+static void gpfs_wr_access_end(int fd, ADIO_Offset offset, ADIO_Offset length)
{
int rc=0;
#ifdef HAVE_GPFS_FCNTL_H
@@ -437,7 +437,7 @@ void gpfs_wr_access_end(int fd, ADIO_Offset offset, ADIO_Offset length)
#ifdef BGQPLATFORM
/* my_start, my_end: this processes file domain. coudd be -1,-1 for "no i/o"
* fd_start, fd_end: arrays of length fd->hints->cb_nodes specifying all file domains */
-int gpfs_find_access_for_ion(ADIO_File fd,
+static int gpfs_find_access_for_ion(ADIO_File fd,
ADIO_Offset my_start, ADIO_Offset my_end,
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
ADIO_Offset *start, ADIO_Offset *end)
@@ -987,7 +987,7 @@ static void ADIOI_W_Exchange_data(ADIO_File fd, const void *buf, char *write_buf
if (nprocs_recv) {
if (*hole) {
- char * stuff = "data-sieve-in-two-phase";
+ const char * stuff = "data-sieve-in-two-phase";
setenv("LIBIOLOG_EXTRA_INFO", stuff, 1);
ADIO_ReadContig(fd, write_buf, size, MPI_BYTE,
ADIO_EXPLICIT_OFFSET, off, &status, &err);
diff --git a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c
index 6cadb8f..1141bab 100644
--- a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c
+++ b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c
@@ -494,7 +494,6 @@ ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
int numbridges = 0;
- int i;
for (i=0;i<naggs;i++)
bridgelistnum[i] = 0;
@@ -580,7 +579,6 @@ ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
while (ionlist[currentBridgeIndex] == currentIonId)
currentBridgeIndex++;
endSortIndex = currentBridgeIndex-1;
- int x;
for (x=startSortIndex;x<=endSortIndex;x++) {
for (i=startSortIndex;i<endSortIndex;i++) {
if (bridgelist[i] > bridgelist[i+1]) {
@@ -613,7 +611,6 @@ ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
}
// sort thisBridgeAggList
- int x;
for (x=0;x<numAggsForThisBridge;x++) {
int n;
for (n=0;n<(numAggsForThisBridge-1);n++) {
http://git.mpich.org/mpich.git/commitdiff/07a301681491fe5f42a7aae8edfcf9a9d…
commit 07a301681491fe5f42a7aae8edfcf9a9d9937ee4
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Thu Jul 17 14:20:11 2014 -0500
optionally display ROMIO hints
We often have a pretty good idea what hints are in use but it's not a
big deal to dump to stdout a list of the key-value pairs to confirm.
Signed-off-by: Paul Coffman <pkcoff(a)us.ibm.com>
diff --git a/src/mpi/romio/adio/common/ad_open.c b/src/mpi/romio/adio/common/ad_open.c
index 1e37bf3..e6b96c4 100644
--- a/src/mpi/romio/adio/common/ad_open.c
+++ b/src/mpi/romio/adio/common/ad_open.c
@@ -126,7 +126,12 @@ MPI_File ADIO_Open(MPI_Comm orig_comm,
if (*error_code != MPI_SUCCESS)
goto fn_exit;
}
-
+ /* for debugging, it can be helpful to see the hints selected */
+ char *p = getenv("ROMIO_PRINT_HINTS");
+ if (rank == 0 && p != NULL ) {
+ ADIOI_Info_print_keyvals(fd->info);
+ }
+
/* deferred open: if we are an aggregator, create a new communicator.
* we'll use this aggregator communicator for opens and closes.
* otherwise, we have a NULL communicator until we try to do independent
diff --git a/src/mpi/romio/adio/common/system_hints.c b/src/mpi/romio/adio/common/system_hints.c
index 546b9d4..665c79e 100644
--- a/src/mpi/romio/adio/common/system_hints.c
+++ b/src/mpi/romio/adio/common/system_hints.c
@@ -40,24 +40,23 @@
#define ROMIO_HINT_DEFAULT_CFG "/etc/romio-hints"
#define ROMIO_HINT_ENV_VAR "ROMIO_HINTS"
- /* should suppress unused warnings on GCC */
-static void dump_keys(MPI_Info info) ATTRIBUTE((unused, used));
-
/* debug function: a routine I want in the library to make my life easier when
- * using a source debugger. please ignore any "defined but not used" warnings
- */
-static void dump_keys(MPI_Info info)
+ * using a source debugger. Now optionally used in ADIO_Open. */
+void ADIOI_Info_print_keyvals(MPI_Info info)
{
int i, nkeys, flag;
char key[MPI_MAX_INFO_KEY];
char value[MPI_MAX_INFO_VAL];
+ if (info == MPI_INFO_NULL)
+ return;
+
MPI_Info_get_nkeys(info, &nkeys);
for (i=0; i<nkeys; i++) {
MPI_Info_get_nthkey(info, i, key);
ADIOI_Info_get(info, key, MPI_MAX_INFO_VAL-1, value, &flag);
- printf("key = %s, value = %s\n", key, value);
+ printf("key = %-25s value = %-10s\n", key, value);
}
return;
}
diff --git a/src/mpi/romio/adio/include/adioi.h b/src/mpi/romio/adio/include/adioi.h
index 83dc1e8..944e099 100644
--- a/src/mpi/romio/adio/include/adioi.h
+++ b/src/mpi/romio/adio/include/adioi.h
@@ -345,6 +345,7 @@ void ADIOI_Get_byte_offset(ADIO_File fd, ADIO_Offset offset,
void ADIOI_process_system_hints(MPI_Info info);
void ADIOI_incorporate_system_hints(MPI_Info info, MPI_Info sysinfo,
MPI_Info *new_info);
+void ADIOI_Info_print_keyvals(MPI_Info info);
void ADIOI_GEN_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
http://git.mpich.org/mpich.git/commitdiff/2d947bf57e2fe57f59c28c5dc941bb472…
commit 2d947bf57e2fe57f59c28c5dc941bb47221d2c06
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Wed Jul 16 16:28:23 2014 -0500
fix unsigned arithmetic yielding unsigned
clang finds a spot where we took the abs() of two unsigned numbers.
result can never be negative (could be surprisingly large).
Signed-off-by: Paul Coffman <pkcoff(a)us.ibm.com>
diff --git a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c
index e3a66a7..59f2219 100644
--- a/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c
+++ b/src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c
@@ -92,7 +92,7 @@ static unsigned procManhattanDistance(unsigned *aggCoords, unsigned *bridgeCoord
unsigned totalDistance = 0;
int i;
for (i=0;i<MPIX_TORUS_MAX_DIMS;i++) {
- unsigned dimDistance = abs(aggCoords[i] - bridgeCoords[i]);
+ unsigned dimDistance = abs((int)aggCoords[i] - (int)bridgeCoords[i]);
if (dimDistance > 0) { // could torus make it closer?
if (dimTorus[i]) {
if (aggCoords[i] == torusSize[i]) { // is wrap-around closer
@@ -104,7 +104,8 @@ static unsigned procManhattanDistance(unsigned *aggCoords, unsigned *bridgeCoord
dimDistance = aggCoords[i]+1;
}
}
- }
+ } /* else: dimDistance == 0, meaning aggCoords[i] and bridgeCoords[i] are
+ the same and there's no closer point to pick */
totalDistance += dimDistance;
}
return totalDistance;
http://git.mpich.org/mpich.git/commitdiff/fab604e6aa6d35b762872477ec3794d38…
commit fab604e6aa6d35b762872477ec3794d386b0f99a
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Wed Jul 16 14:31:41 2014 -0500
ROMIO debugging: environment var to select fs type
introduce the environment variable ROMIO_FSTYPE_FORCE which one can set
to forcibly override ROMIO's file system detection logic when the
"prepend a prefix" approach is infeasable.
diff --git a/src/mpi/romio/adio/common/ad_fstype.c b/src/mpi/romio/adio/common/ad_fstype.c
index f3f59e2..cd7e6c5 100644
--- a/src/mpi/romio/adio/common/ad_fstype.c
+++ b/src/mpi/romio/adio/common/ad_fstype.c
@@ -689,6 +689,22 @@ void ADIO_ResolveFileType(MPI_Comm comm, const char *filename, int *fstype,
}
}
+ /* lastly, there may be situations where one cannot override the file
+ * system detection with a prefix -- maybe the file name is passed to both
+ * posix and MPI-IO routines, or maybe the file name is hard-coded into an
+ * application.
+ * Assumes all processes set the same environment varialble.
+ * Values: the same prefix you would stick on a file path. e.g. pvfs2: --
+ * including the colon! */
+ char * p = getenv("ROMIO_FSTYPE_FORCE");
+ if (p != NULL) {
+ ADIO_FileSysType_prefix(p, &file_system, &myerrcode);
+ if (myerrcode != MPI_SUCCESS) {
+ *error_code = myerrcode;
+ return;
+ }
+ }
+
/* verify that we support this file system type and set ops pointer */
if (file_system == ADIO_PFS) {
#ifndef ROMIO_PFS
http://git.mpich.org/mpich.git/commitdiff/c10e084137b9b4e98ca8edf607cd2d8c6…
commit c10e084137b9b4e98ca8edf607cd2d8c6ce17ae8
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Wed Jul 16 11:48:41 2014 -0500
use 'long' for blocksize
there's no pre-defined MPI datatype for blksize_t, and we are still sort
of trying to avoid int64_t and related explicitly sized types for
maximum portability. 'long' should be big enough to hold a blocksize:
it's an int on many, a long int on some.
Closes #2123 (type mismatch in ad_opencoll.c)
diff --git a/src/mpi/romio/adio/include/adio.h b/src/mpi/romio/adio/include/adio.h
index fb1b22b..8c33bea 100644
--- a/src/mpi/romio/adio/include/adio.h
+++ b/src/mpi/romio/adio/include/adio.h
@@ -196,7 +196,7 @@ typedef struct ADIOI_FileD {
unsigned d_mem; /* data buffer memory alignment */
unsigned d_miniosz; /* min xfer size, xfer size multiple,
and file seek offset alignment */
- blksize_t blksize; /* some optimizations benefit from knowing
+ long blksize; /* some optimizations benefit from knowing
underlying block size */
ADIO_Offset fp_ind; /* individual file pointer in MPI-IO (in bytes)*/
ADIO_Offset fp_sys_posn; /* current location of the system file-pointer
http://git.mpich.org/mpich.git/commitdiff/4f32752683ba72b1e7e36f2009779d1dd…
commit 4f32752683ba72b1e7e36f2009779d1dd3d7eafc
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Mon Jul 7 16:12:51 2014 -0500
ROMIO: report which ranks are aggregators
ROMIO will pick some number of ranks P to be I/O aggregators, but had no
means to report that selection back to the user. Now someone can query
this hint after opening a file to find out which ranks were selected.
diff --git a/src/mpi/romio/adio/common/cb_config_list.c b/src/mpi/romio/adio/common/cb_config_list.c
index cfd29f7..64ad7ed 100644
--- a/src/mpi/romio/adio/common/cb_config_list.c
+++ b/src/mpi/romio/adio/common/cb_config_list.c
@@ -92,6 +92,13 @@ int ADIOI_cb_bcast_rank_map(ADIO_File fd)
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
ADIOI_Snprintf(value, MPI_MAX_INFO_VAL+1, "%d", fd->hints->cb_nodes);
ADIOI_Info_set(fd->info, "cb_nodes", value);
+ char *p = value;
+ int i;
+ for (i=0; i< fd->hints->cb_nodes; i++) {
+ p += ADIOI_Snprintf(p, MPI_MAX_INFO_VAL+1, "%d ", fd->hints->ranklist[i]);
+ if (p - value > MPI_MAX_INFO_VAL+1) break;
+ }
+ ADIOI_Info_set(fd->info, "romio_aggregator_list", value);
ADIOI_Free(value);
return 0;
http://git.mpich.org/mpich.git/commitdiff/5e800079ecd53177a6be21824a06db248…
commit 5e800079ecd53177a6be21824a06db248451c78e
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Mon Jul 7 14:23:34 2014 -0500
set an MPI Info key with the type of file system
Based on stat() or a user-provided prefix, the actual low-level file
system routines ROMIO uses might differ. the info object provides a
simple portable way to report that back.
diff --git a/src/mpi/romio/adio/common/ad_open.c b/src/mpi/romio/adio/common/ad_open.c
index 4a965cf..1e37bf3 100644
--- a/src/mpi/romio/adio/common/ad_open.c
+++ b/src/mpi/romio/adio/common/ad_open.c
@@ -95,6 +95,8 @@ MPI_File ADIO_Open(MPI_Comm orig_comm,
if (*error_code != MPI_SUCCESS)
goto fn_exit;
}
+ ADIOI_Info_set(fd->info, "romio_filesystem_type", fd->fns->fsname);
+
/* Instead of repeatedly allocating this buffer in collective read/write,
* allocating up-front might make memory management on small platforms
* (e.g. Blue Gene) more efficent */
http://git.mpich.org/mpich.git/commitdiff/56feb347d6eae5901fa8bfb0de8197cda…
commit 56feb347d6eae5901fa8bfb0de8197cdaad1b3fd
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Mon Jul 7 13:45:05 2014 -0500
add a descriptive string to function table
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs.c
index 73a4b58..4be147f 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs.c
@@ -51,4 +51,11 @@ struct ADIOI_Fns_struct ADIO_GPFS_operations = {
ADIOI_GEN_Resize, /* Resize */
ADIOI_GEN_Delete, /* Delete */
ADIOI_GEN_Feature, /* Features */
+#ifdef BGQPLATFORM
+ "GPFS+BGQ: IBM GPFS for Blue Gene",
+#elif PEPLATFORM
+ "GPFS+PE: IBM GPFS for PE",
+#else
+ "GPFS: IBM GPFS"
+#endif
};
diff --git a/src/mpi/romio/adio/ad_lustre/ad_lustre.c b/src/mpi/romio/adio/ad_lustre/ad_lustre.c
index f5a81b4..d524dd8 100644
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre.c
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre.c
@@ -40,4 +40,5 @@ struct ADIOI_Fns_struct ADIO_LUSTRE_operations = {
ADIOI_GEN_Resize, /* Resize */
ADIOI_GEN_Delete, /* Delete */
ADIOI_GEN_Feature, /* Features */
+ "LUSTRE:",
};
diff --git a/src/mpi/romio/adio/ad_nfs/ad_nfs.c b/src/mpi/romio/adio/ad_nfs/ad_nfs.c
index 8f323b8..725c4d1 100644
--- a/src/mpi/romio/adio/ad_nfs/ad_nfs.c
+++ b/src/mpi/romio/adio/ad_nfs/ad_nfs.c
@@ -37,4 +37,5 @@ struct ADIOI_Fns_struct ADIO_NFS_operations = {
ADIOI_NFS_Resize, /* Resize */
ADIOI_GEN_Delete, /* Delete */
ADIOI_NFS_Feature, /* Features */
+ "NFS:" /* fsname: just a string */
};
diff --git a/src/mpi/romio/adio/ad_panfs/ad_panfs.c b/src/mpi/romio/adio/ad_panfs/ad_panfs.c
index b3ce0fb..fd9cd93 100644
--- a/src/mpi/romio/adio/ad_panfs/ad_panfs.c
+++ b/src/mpi/romio/adio/ad_panfs/ad_panfs.c
@@ -41,4 +41,5 @@ struct ADIOI_Fns_struct ADIO_PANFS_operations = {
ADIOI_PANFS_Resize, /* Resize */
ADIOI_GEN_Delete, /* Delete */
ADIOI_GEN_Feature,
+ "PANFS: Panasas PanFS"
};
diff --git a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2.c b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2.c
index e2b8b0f..a55c3c8 100644
--- a/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2.c
+++ b/src/mpi/romio/adio/ad_pvfs2/ad_pvfs2.c
@@ -38,7 +38,8 @@ struct ADIOI_Fns_struct ADIO_PVFS2_operations = {
ADIOI_PVFS2_Flush, /* Flush */
ADIOI_PVFS2_Resize, /* Resize */
ADIOI_PVFS2_Delete, /* Delete */
- ADIOI_PVFS2_Feature,
+ ADIOI_PVFS2_Feature,
+ "PVFS2: the PVFS v2 or OrangeFS file systems"
};
/*
diff --git a/src/mpi/romio/adio/ad_testfs/ad_testfs.c b/src/mpi/romio/adio/ad_testfs/ad_testfs.c
index c315a24..6823468 100644
--- a/src/mpi/romio/adio/ad_testfs/ad_testfs.c
+++ b/src/mpi/romio/adio/ad_testfs/ad_testfs.c
@@ -35,4 +35,5 @@ struct ADIOI_Fns_struct ADIO_TESTFS_operations = {
ADIOI_TESTFS_Resize, /* Resize */
ADIOI_TESTFS_Delete, /* Delete */
ADIOI_GEN_Feature, /* Features */
+ "TESTFS: the logging-only file system"
};
diff --git a/src/mpi/romio/adio/ad_ufs/ad_ufs.c b/src/mpi/romio/adio/ad_ufs/ad_ufs.c
index 75488da..66b183e 100644
--- a/src/mpi/romio/adio/ad_ufs/ad_ufs.c
+++ b/src/mpi/romio/adio/ad_ufs/ad_ufs.c
@@ -40,4 +40,5 @@ struct ADIOI_Fns_struct ADIO_UFS_operations = {
ADIOI_GEN_Resize, /* Resize */
ADIOI_GEN_Delete, /* Delete */
ADIOI_GEN_Feature, /* Features */
+ "UFS: Generic ROMIO driver for all UNIX-like file systems",
};
diff --git a/src/mpi/romio/adio/ad_xfs/ad_xfs.c b/src/mpi/romio/adio/ad_xfs/ad_xfs.c
index 2b96347..b748a8a 100644
--- a/src/mpi/romio/adio/ad_xfs/ad_xfs.c
+++ b/src/mpi/romio/adio/ad_xfs/ad_xfs.c
@@ -40,4 +40,5 @@ struct ADIOI_Fns_struct ADIO_XFS_operations = {
ADIOI_XFS_Resize, /* Resize */
ADIOI_GEN_Delete, /* Delete */
ADIOI_GEN_Feature, /* Features */
+ "XFS: SGI XFS"
};
diff --git a/src/mpi/romio/adio/include/adioi.h b/src/mpi/romio/adio/include/adioi.h
index f600b77..83dc1e8 100644
--- a/src/mpi/romio/adio/include/adioi.h
+++ b/src/mpi/romio/adio/include/adioi.h
@@ -196,6 +196,7 @@ struct ADIOI_Fns_struct {
void (*ADIOI_xxx_Resize) (ADIO_File fd, ADIO_Offset size, int *error_code);
void (*ADIOI_xxx_Delete) (const char *filename, int *error_code);
int (*ADIOI_xxx_Feature) (ADIO_File fd, int flag);
+ const char *fsname;
};
/* optypes for ADIO_RequestD */
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/ad_gpfs/ad_gpfs.c | 7 +++++++
src/mpi/romio/adio/ad_gpfs/ad_gpfs_aggrs.c | 1 +
src/mpi/romio/adio/ad_gpfs/ad_gpfs_close.c | 1 +
src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c | 3 ++-
src/mpi/romio/adio/ad_gpfs/ad_gpfs_rdcoll.c | 6 +++---
src/mpi/romio/adio/ad_gpfs/ad_gpfs_tuning.h | 8 ++++----
src/mpi/romio/adio/ad_gpfs/ad_gpfs_wrcoll.c | 8 ++++----
src/mpi/romio/adio/ad_gpfs/bg/ad_bg_aggrs.c | 3 ---
src/mpi/romio/adio/ad_gpfs/bg/ad_bg_pset.c | 5 +++--
src/mpi/romio/adio/ad_lustre/ad_lustre.c | 1 +
src/mpi/romio/adio/ad_nfs/ad_nfs.c | 1 +
src/mpi/romio/adio/ad_panfs/ad_panfs.c | 1 +
src/mpi/romio/adio/ad_pvfs2/ad_pvfs2.c | 3 ++-
src/mpi/romio/adio/ad_testfs/ad_testfs.c | 1 +
src/mpi/romio/adio/ad_ufs/ad_ufs.c | 1 +
src/mpi/romio/adio/ad_xfs/ad_xfs.c | 1 +
src/mpi/romio/adio/common/ad_fstype.c | 16 ++++++++++++++++
src/mpi/romio/adio/common/ad_open.c | 9 ++++++++-
src/mpi/romio/adio/common/cb_config_list.c | 7 +++++++
src/mpi/romio/adio/common/system_hints.c | 13 ++++++-------
src/mpi/romio/adio/include/adio.h | 2 +-
src/mpi/romio/adio/include/adioi.h | 2 ++
22 files changed, 73 insertions(+), 27 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-120-g60cf2c2
by noreply@mpich.org 18 Jul '14
by noreply@mpich.org 18 Jul '14
18 Jul '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 60cf2c24ec303404ebf60def0a6e9c8a9bd22f64 (commit)
via 06ab532f4a6b5a860dcd1f82d9b7880eb44f626e (commit)
via 5d0e0e3d01eb022cf53607e9a9c6c3047f098a10 (commit)
via 6d963fb352315f48a3534d757660bf75c128addf (commit)
from 2c6e27c32bf76302348aecfedf82856c04286003 (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/60cf2c24ec303404ebf60def0a6e9c8a9…
commit 60cf2c24ec303404ebf60def0a6e9c8a9bd22f64
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Mon Mar 31 16:29:20 2014 +0000
Fix up header files in ad_gpfs_open.c
after re-engineering, ad_gpfs_open on some environments was missing a
header file for 'struct stat64'. Found it was also bringing in header
files it did not need.
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c
index 4e236b6..d4e7466 100644
--- a/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c
+++ b/src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c
@@ -14,10 +14,11 @@
#include "ad_gpfs_tuning.h"
-#include <sys/statfs.h>
-#include <sys/vfs.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <unistd.h>
+#include <fcntl.h>
+
#ifdef HAVE_GPFS_H
#include <gpfs.h>
http://git.mpich.org/mpich.git/commitdiff/06ab532f4a6b5a860dcd1f82d9b7880eb…
commit 06ab532f4a6b5a860dcd1f82d9b7880eb44f626e
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Thu Mar 27 18:49:40 2014 +0000
use apropriate enum
even though they are the same value, clang noticed this structure
expected members from one kind of enum, but was initialized with a
different enum.
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/onesided/mpid_win_create.c b/src/mpid/pamid/src/onesided/mpid_win_create.c
index 706da3c..20ce66a 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_create.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_create.c
@@ -81,7 +81,7 @@ MPIDI_Win_init( MPI_Aint length,
win->mpid.info_args.no_locks = 0;
win->mpid.info_args.accumulate_ordering =
(MPIDI_ACCU_ORDER_RAR | MPIDI_ACCU_ORDER_RAW | MPIDI_ACCU_ORDER_WAR | MPIDI_ACCU_ORDER_WAW);
- win->mpid.info_args.accumulate_ops = MPIDI_ACCU_OPS_SAME_OP_NO_OP; /*default */
+ win->mpid.info_args.accumulate_ops = MPIDI_ACCU_SAME_OP_NO_OP; /*default */
win->mpid.info_args.same_size = 0;
win->mpid.info_args.alloc_shared_noncontig = 0;
http://git.mpich.org/mpich.git/commitdiff/5d0e0e3d01eb022cf53607e9a9c6c3047…
commit 5d0e0e3d01eb022cf53607e9a9c6c3047f098a10
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Fri Jul 18 13:19:31 2014 -0500
munmap and shm_unlink prototyped in mman.h
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/onesided/mpid_win_free.c b/src/mpid/pamid/src/onesided/mpid_win_free.c
index 00da268..9c57553 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_free.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_free.c
@@ -23,6 +23,9 @@
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/stat.h>
+#ifdef USE_MMAP_SHM
+#include <sys/mman.h>
+#endif
int MPIDI_SHM_Win_free(MPID_Win **win_ptr)
http://git.mpich.org/mpich.git/commitdiff/6d963fb352315f48a3534d757660bf75c…
commit 6d963fb352315f48a3534d757660bf75c128addf
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Wed Jul 16 16:30:20 2014 -0500
do not redefine MIN if provided elsewhere
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/pamix/pamix.c b/src/mpid/pamid/src/pamix/pamix.c
index 78fb4c6..a24b59f 100644
--- a/src/mpid/pamid/src/pamix/pamix.c
+++ b/src/mpid/pamid/src/pamix/pamix.c
@@ -33,7 +33,9 @@
#define PAMIX_assert(x) assert(x)
#endif
-#define MIN(a,b) ((a<b)?a:b)
+#ifndef MIN
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#endif
#ifdef __BGQ__
#define __BG__
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/ad_gpfs/ad_gpfs_open.c | 5 +++--
src/mpid/pamid/src/onesided/mpid_win_create.c | 2 +-
src/mpid/pamid/src/onesided/mpid_win_free.c | 3 +++
src/mpid/pamid/src/pamix/pamix.c | 4 +++-
4 files changed, 10 insertions(+), 4 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-116-g2c6e27c
by noreply@mpich.org 18 Jul '14
by noreply@mpich.org 18 Jul '14
18 Jul '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 2c6e27c32bf76302348aecfedf82856c04286003 (commit)
from 0c1326c3ea6fee05ff76882905ae2c8e8b0a0047 (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/2c6e27c32bf76302348aecfedf82856c0…
commit 2c6e27c32bf76302348aecfedf82856c04286003
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Fri Jul 18 14:06:09 2014 -0500
Added the missing const in cvar/pvar write
Signed-off-by: Huiwei Lu <huiweilu(a)mcs.anl.gov>
diff --git a/src/mpi_t/cvar_write.c b/src/mpi_t/cvar_write.c
index fb57a47..8573332 100644
--- a/src/mpi_t/cvar_write.c
+++ b/src/mpi_t/cvar_write.c
@@ -14,7 +14,7 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_cvar_write as PMPI_T_cvar_write
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPI_T_cvar_write(MPI_T_cvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_cvar_write")));
+int MPI_T_cvar_write(MPI_T_cvar_handle handle, const void *buf) __attribute__((weak,alias("PMPI_T_cvar_write")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_write.c b/src/mpi_t/pvar_write.c
index ca3997b..76a7a16 100644
--- a/src/mpi_t/pvar_write.c
+++ b/src/mpi_t/pvar_write.c
@@ -14,7 +14,7 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_write as PMPI_T_pvar_write
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_pvar_write")));
+int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, const void *buf) __attribute__((weak,alias("PMPI_T_pvar_write")));
#endif
/* -- End Profiling Symbol Block */
-----------------------------------------------------------------------
Summary of changes:
src/mpi_t/cvar_write.c | 2 +-
src/mpi_t/pvar_write.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-115-g0c1326c
by noreply@mpich.org 18 Jul '14
by noreply@mpich.org 18 Jul '14
18 Jul '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 0c1326c3ea6fee05ff76882905ae2c8e8b0a0047 (commit)
from dd5c24d7a3c3e90081be65e2e1424c46cdf18586 (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/0c1326c3ea6fee05ff76882905ae2c8e8…
commit 0c1326c3ea6fee05ff76882905ae2c8e8b0a0047
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Fri Jul 18 15:45:27 2014 -0500
Revert "Simplified RMA_Op structure."
This reverts commit 274a5a70275081880d29f149ff0a24cc5ad9c8c3.
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index 65b7bde..935c03b 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -62,7 +62,7 @@ typedef union {
such as different RMA types. */
enum MPIDI_CH3_Pkt_types
{
- MPIDI_CH3_PKT_EAGER_SEND = 53,
+ MPIDI_CH3_PKT_EAGER_SEND = 0,
#if defined(USE_EAGER_SHORT)
MPIDI_CH3_PKT_EAGERSHORT_SEND,
#endif /* defined(USE_EAGER_SHORT) */
@@ -197,43 +197,6 @@ MPIDI_CH3_Pkt_cancel_send_resp_t;
MPIDI_CH3_PKT_DEFS
#endif
-#define MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(pkt_, datatype_) \
- { \
- switch(pkt_.type) { \
- case (MPIDI_CH3_PKT_PUT): \
- { \
- MPIDI_CH3_Pkt_put_t put_pkt_ = pkt_.put; \
- datatype_ = put_pkt_.datatype; \
- break; \
- } \
- case (MPIDI_CH3_PKT_GET): \
- { \
- MPIDI_CH3_Pkt_get_t get_pkt_ = pkt_.get; \
- datatype_ = get_pkt_.datatype; \
- break; \
- } \
- case (MPIDI_CH3_PKT_ACCUMULATE): \
- case (MPIDI_CH3_PKT_GET_ACCUM): \
- { \
- MPIDI_CH3_Pkt_accum_t acc_pkt_ = pkt_.accum; \
- datatype_ = acc_pkt_.datatype; \
- break; \
- } \
- case (MPIDI_CH3_PKT_CAS): \
- { \
- MPIDI_CH3_Pkt_cas_t cas_pkt_ = pkt_.cas; \
- datatype_ = cas_pkt_.datatype; \
- break; \
- } \
- case (MPIDI_CH3_PKT_FOP): \
- { \
- MPIDI_CH3_Pkt_fop_t fop_pkt_ = pkt_.fop; \
- datatype_ = fop_pkt_.datatype; \
- break; \
- } \
- } \
- }
-
typedef struct MPIDI_CH3_Pkt_put
{
MPIDI_CH3_Pkt_type_t type;
@@ -333,7 +296,6 @@ typedef struct MPIDI_CH3_Pkt_cas
MPI_Datatype datatype;
void *addr;
MPI_Request request_handle;
- MPI_Win source_win_handle;
MPI_Win target_win_handle; /* Used in the last RMA operation in each
* epoch for decrementing rma op counter in
* active target rma and for unlocking window
@@ -359,7 +321,6 @@ typedef struct MPIDI_CH3_Pkt_fop
void *addr;
MPI_Op op;
MPI_Request request_handle;
- MPI_Win source_win_handle;
MPI_Win target_win_handle; /* Used in the last RMA operation in each
* epoch for decrementing rma op counter in
* active target rma and for unlocking window
diff --git a/src/mpid/ch3/include/mpidrma.h b/src/mpid/ch3/include/mpidrma.h
index 38c9ee4..84bac45 100644
--- a/src/mpid/ch3/include/mpidrma.h
+++ b/src/mpid/ch3/include/mpidrma.h
@@ -13,6 +13,17 @@ MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_wincreate_allgather);
MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_winfree_rs);
MPIR_T_PVAR_DOUBLE_TIMER_DECL_EXTERN(RMA, rma_winfree_complete);
+typedef enum MPIDI_RMA_Op_type {
+ MPIDI_RMA_PUT = 23,
+ MPIDI_RMA_GET = 24,
+ MPIDI_RMA_ACCUMULATE = 25,
+ /* REMOVED: MPIDI_RMA_LOCK = 26, */
+ MPIDI_RMA_ACC_CONTIG = 27,
+ MPIDI_RMA_GET_ACCUMULATE = 28,
+ MPIDI_RMA_COMPARE_AND_SWAP = 29,
+ MPIDI_RMA_FETCH_AND_OP = 30
+} MPIDI_RMA_Op_type_t;
+
/* Special case RMA operations */
enum MPIDI_RMA_Datatype {
@@ -51,29 +62,33 @@ typedef struct MPIDI_RMA_dtype_info { /* for derived datatypes */
typedef struct MPIDI_RMA_Op {
struct MPIDI_RMA_Op *prev; /* pointer to next element in list */
struct MPIDI_RMA_Op *next; /* pointer to next element in list */
-
+ /* FIXME: It would be better to setup the packet that will be sent, at
+ least in most cases (if, as a result of the sync/ops/sync sequence,
+ a different packet type is needed, it can be extracted from the
+ information otherwise stored). */
+ MPIDI_RMA_Op_type_t type;
void *origin_addr;
int origin_count;
MPI_Datatype origin_datatype;
-
- void *compare_addr;
- MPI_Datatype compare_datatype;
-
- void *result_addr;
- int result_count;
- MPI_Datatype result_datatype;
-
+ int target_rank;
+ MPI_Aint target_disp;
+ int target_count;
+ MPI_Datatype target_datatype;
+ MPI_Op op; /* for accumulate */
+ /* Used to complete operations */
struct MPID_Request *request;
MPIDI_RMA_dtype_info dtype_info;
void *dataloop;
-
- int target_rank;
-
- MPIDI_CH3_Pkt_t pkt;
+ void *result_addr;
+ int result_count;
+ MPI_Datatype result_datatype;
+ void *compare_addr;
+ int compare_count;
+ MPI_Datatype compare_datatype;
} MPIDI_RMA_Op_t;
typedef struct MPIDI_PT_single_op {
- enum MPIDI_CH3_Pkt_types type; /* put, get, or accum. */
+ int type; /* put, get, or accum. */
void *addr;
int count;
MPI_Datatype datatype;
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_req.c b/src/mpid/ch3/src/ch3u_handle_recv_req.c
index 8c44d26..4d07c94 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_req.c
@@ -961,7 +961,7 @@ int MPIDI_CH3I_Release_lock(MPID_Win *win_ptr)
MPIDI_PT_single_op * single_op;
single_op = lock_queue->pt_single_op;
- if (single_op->type == MPIDI_CH3_PKT_LOCK_PUT_UNLOCK) {
+ if (single_op->type == MPIDI_RMA_PUT) {
mpi_errno = MPIR_Localcopy(single_op->data,
single_op->count,
single_op->datatype,
@@ -969,21 +969,21 @@ int MPIDI_CH3I_Release_lock(MPID_Win *win_ptr)
single_op->count,
single_op->datatype);
}
- else if (single_op->type == MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK) {
+ else if (single_op->type == MPIDI_RMA_ACCUMULATE) {
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
mpi_errno = do_simple_accumulate(single_op);
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
}
- else if (single_op->type == MPIDI_CH3_PKT_LOCK_GET_UNLOCK) {
+ else if (single_op->type == MPIDI_RMA_GET) {
mpi_errno = do_simple_get(win_ptr, lock_queue);
}
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
/* if put or accumulate, send rma done packet and release lock. */
- if (single_op->type != MPIDI_CH3_PKT_LOCK_GET_UNLOCK) {
+ if (single_op->type != MPIDI_RMA_GET) {
/* NOTE: Only *queued* single_op operations are completed here.
Lock-op-unlock/single_op RMA ops can also be completed as
they arrive within various packet/request handlers via
diff --git a/src/mpid/ch3/src/ch3u_rma_acc_ops.c b/src/mpid/ch3/src/ch3u_rma_acc_ops.c
index 182dec8..b0b5e54 100644
--- a/src/mpid/ch3/src/ch3u_rma_acc_ops.c
+++ b/src/mpid/ch3/src/ch3u_rma_acc_ops.c
@@ -86,46 +86,20 @@ int MPIDI_Get_accumulate(const void *origin_addr, int origin_count,
/* TODO: Can we use the MPIDI_RMA_ACC_CONTIG optimization? */
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_set);
-
- if (op == MPI_NO_OP) {
- /* Convert GAcc to a Get */
- MPIDI_CH3_Pkt_get_t *get_pkt = &(new_ptr->pkt.get);
- MPIDI_Pkt_init(get_pkt, MPIDI_CH3_PKT_GET);
- get_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- get_pkt->count = target_count;
- get_pkt->datatype = target_datatype;
- get_pkt->dataloop_size = 0;
- get_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
- get_pkt->source_win_handle = win_ptr->handle;
-
- new_ptr->origin_addr = result_addr;
- new_ptr->origin_count = result_count;
- new_ptr->origin_datatype = result_datatype;
- new_ptr->target_rank = target_rank;
- }
-
- else {
- MPIDI_CH3_Pkt_accum_t *accum_pkt = &(new_ptr->pkt.accum);
- MPIDI_Pkt_init(accum_pkt, MPIDI_CH3_PKT_GET_ACCUM);
- accum_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- accum_pkt->count = target_count;
- accum_pkt->datatype = target_datatype;
- accum_pkt->dataloop_size = 0;
- accum_pkt->op = op;
- accum_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
- accum_pkt->source_win_handle = win_ptr->handle;
-
- new_ptr->origin_addr = (void *) origin_addr;
- new_ptr->origin_count = origin_count;
- new_ptr->origin_datatype = origin_datatype;
- new_ptr->result_addr = result_addr;
- new_ptr->result_count = result_count;
- new_ptr->result_datatype = result_datatype;
- new_ptr->target_rank = target_rank;
- }
-
+ new_ptr->type = MPIDI_RMA_GET_ACCUMULATE;
+ /* Cast away const'ness for origin_address as MPIDI_RMA_Op_t
+ * contain both PUT and GET like ops */
+ new_ptr->origin_addr = (void *) origin_addr;
+ new_ptr->origin_count = origin_count;
+ new_ptr->origin_datatype = origin_datatype;
+ new_ptr->result_addr = result_addr;
+ new_ptr->result_count = result_count;
+ new_ptr->result_datatype = result_datatype;
+ new_ptr->target_rank = target_rank;
+ new_ptr->target_disp = target_disp;
+ new_ptr->target_count = target_count;
+ new_ptr->target_datatype = target_datatype;
+ new_ptr->op = op;
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
/* if source or target datatypes are derived, increment their
@@ -214,8 +188,6 @@ int MPIDI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
MPIDI_RMA_Ops_list_t *ops_list = MPIDI_CH3I_RMA_Get_ops_list(win_ptr, target_rank);
MPIDI_RMA_Op_t *new_ptr = NULL;
- MPIDI_CH3_Pkt_cas_t *cas_pkt = NULL;
-
/* Append this operation to the RMA ops queue */
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_alloc);
mpi_errno = MPIDI_CH3I_RMA_Ops_alloc_tail(ops_list, &new_ptr);
@@ -223,23 +195,20 @@ int MPIDI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_set);
-
- cas_pkt = &(new_ptr->pkt.cas);
- MPIDI_Pkt_init(cas_pkt, MPIDI_CH3_PKT_CAS);
- cas_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- cas_pkt->datatype = datatype;
- cas_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
- cas_pkt->source_win_handle = win_ptr->handle;
-
+ new_ptr->type = MPIDI_RMA_COMPARE_AND_SWAP;
new_ptr->origin_addr = (void *) origin_addr;
new_ptr->origin_count = 1;
new_ptr->origin_datatype = datatype;
+ new_ptr->target_rank = target_rank;
+ new_ptr->target_disp = target_disp;
+ new_ptr->target_count = 1;
+ new_ptr->target_datatype = datatype;
new_ptr->result_addr = result_addr;
+ new_ptr->result_count = 1;
new_ptr->result_datatype = datatype;
new_ptr->compare_addr = (void *) compare_addr;
+ new_ptr->compare_count = 1;
new_ptr->compare_datatype = datatype;
- new_ptr->target_rank = target_rank;
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
}
@@ -311,8 +280,6 @@ int MPIDI_Fetch_and_op(const void *origin_addr, void *result_addr,
MPIDI_RMA_Ops_list_t *ops_list = MPIDI_CH3I_RMA_Get_ops_list(win_ptr, target_rank);
MPIDI_RMA_Op_t *new_ptr = NULL;
- MPIDI_CH3_Pkt_fop_t *fop_pkt = NULL;
-
/* Append this operation to the RMA ops queue */
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_alloc);
mpi_errno = MPIDI_CH3I_RMA_Ops_alloc_tail(ops_list, &new_ptr);
@@ -320,21 +287,18 @@ int MPIDI_Fetch_and_op(const void *origin_addr, void *result_addr,
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_set);
- fop_pkt = &(new_ptr->pkt.fop);
- MPIDI_Pkt_init(fop_pkt, MPIDI_CH3_PKT_FOP);
- fop_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- fop_pkt->datatype = datatype;
- fop_pkt->op = op;
- fop_pkt->source_win_handle = win_ptr->handle;
- fop_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
-
+ new_ptr->type = MPIDI_RMA_FETCH_AND_OP;
new_ptr->origin_addr = (void *) origin_addr;
new_ptr->origin_count = 1;
new_ptr->origin_datatype = datatype;
+ new_ptr->target_rank = target_rank;
+ new_ptr->target_disp = target_disp;
+ new_ptr->target_count = 1;
+ new_ptr->target_datatype = datatype;
new_ptr->result_addr = result_addr;
+ new_ptr->result_count = 1;
new_ptr->result_datatype = datatype;
- new_ptr->target_rank = target_rank;
+ new_ptr->op = op;
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
}
diff --git a/src/mpid/ch3/src/ch3u_rma_ops.c b/src/mpid/ch3/src/ch3u_rma_ops.c
index a9d8224..f30c464 100644
--- a/src/mpid/ch3/src/ch3u_rma_ops.c
+++ b/src/mpid/ch3/src/ch3u_rma_ops.c
@@ -173,8 +173,6 @@ int MPIDI_Put(const void *origin_addr, int origin_count, MPI_Datatype
MPIDI_RMA_Ops_list_t *ops_list = MPIDI_CH3I_RMA_Get_ops_list(win_ptr, target_rank);
MPIDI_RMA_Op_t *new_ptr = NULL;
- MPIDI_CH3_Pkt_put_t *put_pkt = NULL;
-
/* queue it up */
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_alloc);
mpi_errno = MPIDI_CH3I_RMA_Ops_alloc_tail(ops_list, &new_ptr);
@@ -182,22 +180,18 @@ int MPIDI_Put(const void *origin_addr, int origin_count, MPI_Datatype
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_set);
-
- put_pkt = &(new_ptr->pkt.put);
- MPIDI_Pkt_init(put_pkt, MPIDI_CH3_PKT_PUT);
- put_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- put_pkt->count = target_count;
- put_pkt->datatype = target_datatype;
- put_pkt->dataloop_size = 0;
- put_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
- put_pkt->source_win_handle = win_ptr->handle;
-
/* FIXME: For contig and very short operations, use a streamlined op */
+ new_ptr->type = MPIDI_RMA_PUT;
+ /* Cast away const'ness for the origin address, as the
+ * MPIDI_RMA_Op_t structure is used for both PUT and GET like
+ * operations */
new_ptr->origin_addr = (void *) origin_addr;
new_ptr->origin_count = origin_count;
new_ptr->origin_datatype = origin_datatype;
- new_ptr->target_rank = target_rank;
+ new_ptr->target_rank = target_rank;
+ new_ptr->target_disp = target_disp;
+ new_ptr->target_count = target_count;
+ new_ptr->target_datatype = target_datatype;
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
/* if source or target datatypes are derived, increment their
@@ -291,8 +285,6 @@ int MPIDI_Get(void *origin_addr, int origin_count, MPI_Datatype
MPIDI_RMA_Ops_list_t *ops_list = MPIDI_CH3I_RMA_Get_ops_list(win_ptr, target_rank);
MPIDI_RMA_Op_t *new_ptr = NULL;
- MPIDI_CH3_Pkt_get_t *get_pkt = NULL;
-
/* queue it up */
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_alloc);
mpi_errno = MPIDI_CH3I_RMA_Ops_alloc_tail(ops_list, &new_ptr);
@@ -300,22 +292,15 @@ int MPIDI_Get(void *origin_addr, int origin_count, MPI_Datatype
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_set);
-
- get_pkt = &(new_ptr->pkt.get);
- MPIDI_Pkt_init(get_pkt, MPIDI_CH3_PKT_GET);
- get_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- get_pkt->count = target_count;
- get_pkt->datatype = target_datatype;
- get_pkt->dataloop_size = 0;
- get_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
- get_pkt->source_win_handle = win_ptr->handle;
-
/* FIXME: For contig and very short operations, use a streamlined op */
+ new_ptr->type = MPIDI_RMA_GET;
new_ptr->origin_addr = origin_addr;
new_ptr->origin_count = origin_count;
new_ptr->origin_datatype = origin_datatype;
- new_ptr->target_rank = target_rank;
+ new_ptr->target_rank = target_rank;
+ new_ptr->target_disp = target_disp;
+ new_ptr->target_count = target_count;
+ new_ptr->target_datatype = target_datatype;
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
/* if source or target datatypes are derived, increment their
@@ -411,8 +396,6 @@ int MPIDI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
MPIDI_RMA_Ops_list_t *ops_list = MPIDI_CH3I_RMA_Get_ops_list(win_ptr, target_rank);
MPIDI_RMA_Op_t *new_ptr = NULL;
- MPIDI_CH3_Pkt_accum_t *accum_pkt = NULL;
-
/* queue it up */
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_alloc);
mpi_errno = MPIDI_CH3I_RMA_Ops_alloc_tail(ops_list, &new_ptr);
@@ -422,52 +405,35 @@ int MPIDI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype
/* If predefined and contiguous, use a simplified element */
if (MPIR_DATATYPE_IS_PREDEFINED(origin_datatype) &&
MPIR_DATATYPE_IS_PREDEFINED(target_datatype) && enableShortACC) {
- MPI_Aint origin_type_size;
- size_t len;
-
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_set);
-
- MPID_Datatype_get_size_macro(origin_datatype, origin_type_size);
- MPIU_Assign_trunc(len, origin_count * origin_type_size, size_t);
- if (MPIR_CVAR_CH3_RMA_ACC_IMMED && len <= MPIDI_RMA_IMMED_INTS*sizeof(int)) {
- MPIDI_CH3_Pkt_accum_immed_t *accumi_pkt = &(new_ptr->pkt.accum_immed);
-
- MPIDI_Pkt_init(accumi_pkt, MPIDI_CH3_PKT_ACCUM_IMMED);
- accumi_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- accumi_pkt->count = target_count;
- accumi_pkt->datatype = target_datatype;
- accumi_pkt->op = op;
- accumi_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
- accumi_pkt->source_win_handle = win_ptr->handle;
-
- new_ptr->origin_addr = (void *) origin_addr;
- new_ptr->origin_count = origin_count;
- new_ptr->origin_datatype = origin_datatype;
- new_ptr->target_rank = target_rank;
- MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
- goto fn_exit;
- }
+ new_ptr->type = MPIDI_RMA_ACC_CONTIG;
+ /* Only the information needed for the contig/predefined acc */
+ /* Cast away const'ness for origin_address as
+ * MPIDI_RMA_Op_t contain both PUT and GET like ops */
+ new_ptr->origin_addr = (void *) origin_addr;
+ new_ptr->origin_count = origin_count;
+ new_ptr->origin_datatype = origin_datatype;
+ new_ptr->target_rank = target_rank;
+ new_ptr->target_disp = target_disp;
+ new_ptr->target_count = target_count;
+ new_ptr->target_datatype = target_datatype;
+ new_ptr->op = op;
+ MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
+ goto fn_exit;
}
MPIR_T_PVAR_TIMER_START(RMA, rma_rmaqueue_set);
-
- accum_pkt = &(new_ptr->pkt.accum);
-
- MPIDI_Pkt_init(accum_pkt, MPIDI_CH3_PKT_ACCUMULATE);
- accum_pkt->addr = (char *) win_ptr->base_addrs[target_rank] +
- win_ptr->disp_units[target_rank] * target_disp;
- accum_pkt->count = target_count;
- accum_pkt->datatype = target_datatype;
- accum_pkt->dataloop_size = 0;
- accum_pkt->op = op;
- accum_pkt->target_win_handle = win_ptr->all_win_handles[target_rank];
- accum_pkt->source_win_handle = win_ptr->handle;
-
+ new_ptr->type = MPIDI_RMA_ACCUMULATE;
+ /* Cast away const'ness for origin_address as MPIDI_RMA_Op_t
+ * contain both PUT and GET like ops */
new_ptr->origin_addr = (void *) origin_addr;
new_ptr->origin_count = origin_count;
new_ptr->origin_datatype = origin_datatype;
- new_ptr->target_rank = target_rank;
+ new_ptr->target_rank = target_rank;
+ new_ptr->target_disp = target_disp;
+ new_ptr->target_count = target_count;
+ new_ptr->target_datatype = target_datatype;
+ new_ptr->op = op;
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
/* if source or target datatypes are derived, increment their
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 7fb9a42..740192b 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -1017,10 +1017,24 @@ static int send_unlock_msg(int dest, MPID_Win *win_ptr);
/* static int send_flush_msg(int dest, MPID_Win *win_ptr); */
static int wait_for_lock_granted(MPID_Win *win_ptr, int target_rank);
static int acquire_local_lock(MPID_Win *win_ptr, int lock_mode);
-static int send_rma_msg(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr, MPIDI_CH3_Pkt_flags_t flags);
-static int recv_rma_msg(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr, MPIDI_CH3_Pkt_flags_t flags);
-static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt_flags_t flags);
-static int send_immed_rmw_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt_flags_t flags);
+static int send_rma_msg(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win source_win_handle,
+ MPI_Win target_win_handle,
+ MPIDI_RMA_dtype_info * dtype_info,
+ void ** dataloop, MPID_Request ** request);
+static int recv_rma_msg(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win source_win_handle,
+ MPI_Win target_win_handle,
+ MPIDI_RMA_dtype_info * dtype_info,
+ void ** dataloop, MPID_Request ** request);
+static int send_contig_acc_msg(MPIDI_RMA_Op_t *, MPID_Win *,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win, MPI_Win, MPID_Request ** );
+static int send_immed_rmw_msg(MPIDI_RMA_Op_t *, MPID_Win *,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win, MPI_Win, MPID_Request ** );
static int do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
int *wait_for_rma_done_pkt,
MPIDI_CH3_Pkt_flags_t sync_flags);
@@ -1042,30 +1056,60 @@ static int create_datatype(const MPIDI_RMA_dtype_info *dtype_info,
/* Issue an RMA operation -- Before calling this macro, you must define the
* MPIDI_CH3I_TRACK_RMA_WRITE helper macro. This macro defines any extra action
* that should be taken when a write (put/acc) operation is encountered. */
-#define MPIDI_CH3I_ISSUE_RMA_OP(op_ptr_, win_ptr_, flags_, err_) \
+#define MPIDI_CH3I_ISSUE_RMA_OP(op_ptr_, win_ptr_, flags_, source_win_handle_, target_win_handle_,err_) \
do { \
- switch ((op_ptr_)->pkt.type) \
+ switch ((op_ptr_)->type) \
{ \
- case (MPIDI_CH3_PKT_PUT): \
- case (MPIDI_CH3_PKT_ACCUMULATE): \
- case (MPIDI_CH3_PKT_GET_ACCUM): \
+ case (MPIDI_RMA_PUT): \
+ case (MPIDI_RMA_ACCUMULATE): \
MPIDI_CH3I_TRACK_RMA_WRITE(op_ptr_, win_ptr_); \
- (err_) = send_rma_msg((op_ptr_), (win_ptr_), (flags_)); \
+ (err_) = send_rma_msg((op_ptr_), (win_ptr_), (flags_), (source_win_handle_), \
+ (target_win_handle_), &(op_ptr_)->dtype_info, \
+ &(op_ptr_)->dataloop, &(op_ptr_)->request); \
if (err_) { MPIU_ERR_POP(err_); } \
break; \
- case MPIDI_CH3_PKT_ACCUM_IMMED: \
+ case (MPIDI_RMA_GET_ACCUMULATE): \
+ if ((op_ptr_)->op == MPI_NO_OP) { \
+ /* Note: Origin arguments are ignored for NO_OP, so we don't \
+ * need to release a ref to the origin datatype. */ \
+ \
+ /* Convert the GAcc to a Get */ \
+ (op_ptr_)->type = MPIDI_RMA_GET; \
+ (op_ptr_)->origin_addr = (op_ptr_)->result_addr; \
+ (op_ptr_)->origin_count = (op_ptr_)->result_count; \
+ (op_ptr_)->origin_datatype = (op_ptr_)->result_datatype; \
+ \
+ (err_) = recv_rma_msg((op_ptr_), (win_ptr_), (flags_), (source_win_handle_), \
+ (target_win_handle_), &(op_ptr_)->dtype_info,\
+ &(op_ptr_)->dataloop, &(op_ptr_)->request); \
+ } else { \
+ MPIDI_CH3I_TRACK_RMA_WRITE(op_ptr_, win_ptr_); \
+ (err_) = send_rma_msg((op_ptr_), (win_ptr_), (flags_), (source_win_handle_), \
+ (target_win_handle_), &(op_ptr_)->dtype_info,\
+ &(op_ptr_)->dataloop, &(op_ptr_)->request); \
+ } \
+ if (err_) { MPIU_ERR_POP(err_); } \
+ break; \
+ case MPIDI_RMA_ACC_CONTIG: \
MPIDI_CH3I_TRACK_RMA_WRITE(op_ptr_, win_ptr_); \
- (err_) = send_contig_acc_msg((op_ptr_), (win_ptr_), (flags_)); \
+ (err_) = send_contig_acc_msg((op_ptr_), (win_ptr_), (flags_), \
+ (source_win_handle_), (target_win_handle_),\
+ &(op_ptr_)->request ); \
if (err_) { MPIU_ERR_POP(err_); } \
break; \
- case (MPIDI_CH3_PKT_GET): \
- (err_) = recv_rma_msg((op_ptr_), (win_ptr_), (flags_)); \
+ case (MPIDI_RMA_GET): \
+ (err_) = recv_rma_msg((op_ptr_), (win_ptr_), (flags_), \
+ (source_win_handle_), (target_win_handle_), \
+ &(op_ptr_)->dtype_info, \
+ &(op_ptr_)->dataloop, &(op_ptr_)->request); \
if (err_) { MPIU_ERR_POP(err_); } \
break; \
- case (MPIDI_CH3_PKT_CAS): \
- case (MPIDI_CH3_PKT_FOP): \
+ case (MPIDI_RMA_COMPARE_AND_SWAP): \
+ case (MPIDI_RMA_FETCH_AND_OP): \
MPIDI_CH3I_TRACK_RMA_WRITE(op_ptr_, win_ptr_); \
- (err_) = send_immed_rmw_msg((op_ptr_), (win_ptr_), (flags_)); \
+ (err_) = send_immed_rmw_msg((op_ptr_), (win_ptr_), (flags_), \
+ (source_win_handle_), (target_win_handle_),\
+ &(op_ptr_)->request ); \
if (err_) { MPIU_ERR_POP(err_); } \
break; \
\
@@ -1087,6 +1131,7 @@ int MPIDI_Win_fence(int assert, MPID_Win *win_ptr)
MPIDI_RMA_Op_t *curr_ptr;
MPIDI_RMA_Ops_list_t *ops_list;
MPID_Comm *comm_ptr;
+ MPI_Win source_win_handle, target_win_handle;
MPID_Progress_state progress_state;
int errflag = FALSE;
MPIU_CHKLMEM_DECL(3);
@@ -1265,8 +1310,12 @@ int MPIDI_Win_fence(int assert, MPID_Win *win_ptr)
flags = MPIDI_CH3_PKT_FLAG_RMA_AT_COMPLETE;
}
+ source_win_handle = win_ptr->handle;
+ target_win_handle = win_ptr->all_win_handles[curr_ptr->target_rank];
+
#define MPIDI_CH3I_TRACK_RMA_WRITE(op_ptr_, win_ptr_) /* Not used by active mode */
- MPIDI_CH3I_ISSUE_RMA_OP(curr_ptr, win_ptr, flags, mpi_errno);
+ MPIDI_CH3I_ISSUE_RMA_OP(curr_ptr, win_ptr, flags,
+ source_win_handle, target_win_handle, mpi_errno);
#undef MPIDI_CH3I_TRACK_RMA_WRITE
i++;
@@ -1448,10 +1497,16 @@ static int create_datatype(const MPIDI_RMA_dtype_info *dtype_info,
#define FUNCNAME send_rma_msg
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt_flags_t flags)
+static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win source_win_handle,
+ MPI_Win target_win_handle,
+ MPIDI_RMA_dtype_info *dtype_info,
+ void **dataloop, MPID_Request **request)
{
- MPIDI_CH3_Pkt_put_t *put_pkt = &rma_op->pkt.put;
- MPIDI_CH3_Pkt_accum_t *accum_pkt = &rma_op->pkt.accum;
+ MPIDI_CH3_Pkt_t upkt;
+ MPIDI_CH3_Pkt_put_t *put_pkt = &upkt.put;
+ MPIDI_CH3_Pkt_accum_t *accum_pkt = &upkt.accum;
MPID_IOV iov[MPID_IOV_LIMIT];
int mpi_errno=MPI_SUCCESS;
int origin_dt_derived, target_dt_derived, iovcnt;
@@ -1459,7 +1514,6 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
MPIDI_VC_t * vc;
MPID_Comm *comm_ptr;
MPID_Datatype *target_dtp=NULL, *origin_dtp=NULL;
- MPI_Datatype target_datatype;
MPID_Request *resp_req=NULL;
MPIU_CHKPMEM_DECL(1);
MPIDI_STATE_DECL(MPID_STATE_SEND_RMA_MSG);
@@ -1467,15 +1521,24 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
MPIDI_RMA_FUNC_ENTER(MPID_STATE_SEND_RMA_MSG);
- rma_op->request = NULL;
+ *request = NULL;
- if (rma_op->pkt.type == MPIDI_CH3_PKT_PUT)
+ if (rma_op->type == MPIDI_RMA_PUT)
{
+ MPIDI_Pkt_init(put_pkt, MPIDI_CH3_PKT_PUT);
+ put_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
put_pkt->flags = flags;
+ put_pkt->count = rma_op->target_count;
+ put_pkt->datatype = rma_op->target_datatype;
+ put_pkt->dataloop_size = 0;
+ put_pkt->target_win_handle = target_win_handle;
+ put_pkt->source_win_handle = source_win_handle;
+
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) put_pkt;
iov[0].MPID_IOV_LEN = sizeof(*put_pkt);
}
- else if (rma_op->pkt.type == MPIDI_CH3_PKT_GET_ACCUM)
+ else if (rma_op->type == MPIDI_RMA_GET_ACCUMULATE)
{
/* Create a request for the GACC response. Store the response buf, count, and
datatype in it, and pass the request's handle in the GACC packet. When the
@@ -1488,8 +1551,8 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
resp_req->dev.user_buf = rma_op->result_addr;
resp_req->dev.user_count = rma_op->result_count;
resp_req->dev.datatype = rma_op->result_datatype;
- resp_req->dev.target_win_handle = accum_pkt->target_win_handle;
- resp_req->dev.source_win_handle = accum_pkt->source_win_handle;
+ resp_req->dev.target_win_handle = target_win_handle;
+ resp_req->dev.source_win_handle = source_win_handle;
if (!MPIR_DATATYPE_IS_PREDEFINED(resp_req->dev.datatype)) {
MPID_Datatype *result_dtp = NULL;
@@ -1500,14 +1563,34 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
}
/* Note: Get_accumulate uses the same packet type as accumulate */
- accum_pkt->request_handle = resp_req->handle;
+ MPIDI_Pkt_init(accum_pkt, MPIDI_CH3_PKT_GET_ACCUM);
+ accum_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
accum_pkt->flags = flags;
+ accum_pkt->count = rma_op->target_count;
+ accum_pkt->datatype = rma_op->target_datatype;
+ accum_pkt->dataloop_size = 0;
+ accum_pkt->op = rma_op->op;
+ accum_pkt->target_win_handle = target_win_handle;
+ accum_pkt->source_win_handle = source_win_handle;
+ accum_pkt->request_handle = resp_req->handle;
+
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) accum_pkt;
iov[0].MPID_IOV_LEN = sizeof(*accum_pkt);
}
else
{
+ MPIDI_Pkt_init(accum_pkt, MPIDI_CH3_PKT_ACCUMULATE);
+ accum_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
accum_pkt->flags = flags;
+ accum_pkt->count = rma_op->target_count;
+ accum_pkt->datatype = rma_op->target_datatype;
+ accum_pkt->dataloop_size = 0;
+ accum_pkt->op = rma_op->op;
+ accum_pkt->target_win_handle = target_win_handle;
+ accum_pkt->source_win_handle = source_win_handle;
+
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) accum_pkt;
iov[0].MPID_IOV_LEN = sizeof(*accum_pkt);
}
@@ -1530,11 +1613,10 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
origin_dt_derived = 0;
}
- MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(rma_op->pkt, target_datatype);
- if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype))
+ if (!MPIR_DATATYPE_IS_PREDEFINED(rma_op->target_datatype))
{
target_dt_derived = 1;
- MPID_Datatype_get_ptr(target_datatype, target_dtp);
+ MPID_Datatype_get_ptr(rma_op->target_datatype, target_dtp);
}
else
{
@@ -1544,32 +1626,32 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
if (target_dt_derived)
{
/* derived datatype on target. fill derived datatype info */
- rma_op->dtype_info.is_contig = target_dtp->is_contig;
- rma_op->dtype_info.max_contig_blocks = target_dtp->max_contig_blocks;
- rma_op->dtype_info.size = target_dtp->size;
- rma_op->dtype_info.extent = target_dtp->extent;
- rma_op->dtype_info.dataloop_size = target_dtp->dataloop_size;
- rma_op->dtype_info.dataloop_depth = target_dtp->dataloop_depth;
- rma_op->dtype_info.eltype = target_dtp->eltype;
- rma_op->dtype_info.dataloop = target_dtp->dataloop;
- rma_op->dtype_info.ub = target_dtp->ub;
- rma_op->dtype_info.lb = target_dtp->lb;
- rma_op->dtype_info.true_ub = target_dtp->true_ub;
- rma_op->dtype_info.true_lb = target_dtp->true_lb;
- rma_op->dtype_info.has_sticky_ub = target_dtp->has_sticky_ub;
- rma_op->dtype_info.has_sticky_lb = target_dtp->has_sticky_lb;
-
- MPIU_CHKPMEM_MALLOC(rma_op->dataloop, void *, target_dtp->dataloop_size,
+ dtype_info->is_contig = target_dtp->is_contig;
+ dtype_info->max_contig_blocks = target_dtp->max_contig_blocks;
+ dtype_info->size = target_dtp->size;
+ dtype_info->extent = target_dtp->extent;
+ dtype_info->dataloop_size = target_dtp->dataloop_size;
+ dtype_info->dataloop_depth = target_dtp->dataloop_depth;
+ dtype_info->eltype = target_dtp->eltype;
+ dtype_info->dataloop = target_dtp->dataloop;
+ dtype_info->ub = target_dtp->ub;
+ dtype_info->lb = target_dtp->lb;
+ dtype_info->true_ub = target_dtp->true_ub;
+ dtype_info->true_lb = target_dtp->true_lb;
+ dtype_info->has_sticky_ub = target_dtp->has_sticky_ub;
+ dtype_info->has_sticky_lb = target_dtp->has_sticky_lb;
+
+ MPIU_CHKPMEM_MALLOC(*dataloop, void *, target_dtp->dataloop_size,
mpi_errno, "dataloop");
MPIDI_FUNC_ENTER(MPID_STATE_MEMCPY);
- MPIU_Memcpy(rma_op->dataloop, target_dtp->dataloop, target_dtp->dataloop_size);
+ MPIU_Memcpy(*dataloop, target_dtp->dataloop, target_dtp->dataloop_size);
MPIDI_FUNC_EXIT(MPID_STATE_MEMCPY);
/* the dataloop can have undefined padding sections, so we need to let
* valgrind know that it is OK to pass this data to writev later on */
- MPL_VG_MAKE_MEM_DEFINED(rma_op->dataloop, target_dtp->dataloop_size);
+ MPL_VG_MAKE_MEM_DEFINED(*dataloop, target_dtp->dataloop_size);
- if (rma_op->pkt.type == MPIDI_CH3_PKT_PUT)
+ if (rma_op->type == MPIDI_RMA_PUT)
{
put_pkt->dataloop_size = target_dtp->dataloop_size;
}
@@ -1591,36 +1673,36 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
iov[1].MPID_IOV_LEN = rma_op->origin_count * origin_type_size;
iovcnt = 2;
MPIU_THREAD_CS_ENTER(CH3COMM,vc);
- mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, iovcnt, &rma_op->request);
+ mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, iovcnt, request);
MPIU_THREAD_CS_EXIT(CH3COMM,vc);
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
else
{
/* derived datatype on origin */
- rma_op->request = MPID_Request_create();
- MPIU_ERR_CHKANDJUMP(rma_op->request == NULL,mpi_errno,MPI_ERR_OTHER,"**nomemreq");
+ *request = MPID_Request_create();
+ MPIU_ERR_CHKANDJUMP(*request == NULL,mpi_errno,MPI_ERR_OTHER,"**nomemreq");
- MPIU_Object_set_ref(rma_op->request, 2);
- rma_op->request->kind = MPID_REQUEST_SEND;
+ MPIU_Object_set_ref(*request, 2);
+ (*request)->kind = MPID_REQUEST_SEND;
- rma_op->request->dev.segment_ptr = MPID_Segment_alloc( );
- MPIU_ERR_CHKANDJUMP1(rma_op->request->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ (*request)->dev.segment_ptr = MPID_Segment_alloc( );
+ MPIU_ERR_CHKANDJUMP1((*request)->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- rma_op->request->dev.datatype_ptr = origin_dtp;
+ (*request)->dev.datatype_ptr = origin_dtp;
/* this will cause the datatype to be freed when the request
is freed. */
MPID_Segment_init(rma_op->origin_addr, rma_op->origin_count,
rma_op->origin_datatype,
- rma_op->request->dev.segment_ptr, 0);
- rma_op->request->dev.segment_first = 0;
- rma_op->request->dev.segment_size = rma_op->origin_count * origin_type_size;
+ (*request)->dev.segment_ptr, 0);
+ (*request)->dev.segment_first = 0;
+ (*request)->dev.segment_size = rma_op->origin_count * origin_type_size;
- rma_op->request->dev.OnFinal = 0;
- rma_op->request->dev.OnDataAvail = 0;
+ (*request)->dev.OnFinal = 0;
+ (*request)->dev.OnDataAvail = 0;
MPIU_THREAD_CS_ENTER(CH3COMM,vc);
- mpi_errno = vc->sendNoncontig_fn(vc, rma_op->request, iov[0].MPID_IOV_BUF, iov[0].MPID_IOV_LEN);
+ mpi_errno = vc->sendNoncontig_fn(vc, *request, iov[0].MPID_IOV_BUF, iov[0].MPID_IOV_LEN);
MPIU_THREAD_CS_EXIT(CH3COMM,vc);
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
@@ -1630,36 +1712,36 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
/* derived datatype on target */
MPID_Datatype *combined_dtp = NULL;
- rma_op->request = MPID_Request_create();
- if (rma_op->request == NULL) {
+ *request = MPID_Request_create();
+ if (*request == NULL) {
MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomemreq");
}
- MPIU_Object_set_ref(rma_op->request, 2);
- rma_op->request->kind = MPID_REQUEST_SEND;
+ MPIU_Object_set_ref(*request, 2);
+ (*request)->kind = MPID_REQUEST_SEND;
- rma_op->request->dev.segment_ptr = MPID_Segment_alloc( );
- MPIU_ERR_CHKANDJUMP1(rma_op->request->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
+ (*request)->dev.segment_ptr = MPID_Segment_alloc( );
+ MPIU_ERR_CHKANDJUMP1((*request)->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
/* create a new datatype containing the dtype_info, dataloop, and origin data */
- mpi_errno = create_datatype(&rma_op->dtype_info, rma_op->dataloop, target_dtp->dataloop_size, rma_op->origin_addr,
+ mpi_errno = create_datatype(dtype_info, *dataloop, target_dtp->dataloop_size, rma_op->origin_addr,
rma_op->origin_count, rma_op->origin_datatype, &combined_dtp);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- rma_op->request->dev.datatype_ptr = combined_dtp;
+ (*request)->dev.datatype_ptr = combined_dtp;
/* combined_datatype will be freed when request is freed */
MPID_Segment_init(MPI_BOTTOM, 1, combined_dtp->handle,
- rma_op->request->dev.segment_ptr, 0);
- rma_op->request->dev.segment_first = 0;
- rma_op->request->dev.segment_size = combined_dtp->size;
+ (*request)->dev.segment_ptr, 0);
+ (*request)->dev.segment_first = 0;
+ (*request)->dev.segment_size = combined_dtp->size;
- rma_op->request->dev.OnFinal = 0;
- rma_op->request->dev.OnDataAvail = 0;
+ (*request)->dev.OnFinal = 0;
+ (*request)->dev.OnDataAvail = 0;
MPIU_THREAD_CS_ENTER(CH3COMM,vc);
- mpi_errno = vc->sendNoncontig_fn(vc, rma_op->request, iov[0].MPID_IOV_BUF, iov[0].MPID_IOV_LEN);
+ mpi_errno = vc->sendNoncontig_fn(vc, *request, iov[0].MPID_IOV_BUF, iov[0].MPID_IOV_LEN);
MPIU_THREAD_CS_EXIT(CH3COMM,vc);
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
@@ -1672,7 +1754,7 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
/* This operation can generate two requests; one for inbound and one for
outbound data. */
if (resp_req != NULL) {
- if (rma_op->request != NULL) {
+ if (*request != NULL) {
/* If we have both inbound and outbound requests (i.e. GACC
operation), we need to ensure that the source buffer is
available and that the response data has been received before
@@ -1688,11 +1770,11 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
it will be completed by the progress engine.
*/
- MPID_Request_release(rma_op->request);
- rma_op->request = resp_req;
+ MPID_Request_release(*request);
+ *request = resp_req;
} else {
- rma_op->request = resp_req;
+ *request = resp_req;
}
/* For error checking */
@@ -1708,14 +1790,14 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
if (resp_req) {
MPID_Request_release(resp_req);
}
- if (rma_op->request)
+ if (*request)
{
MPIU_CHKPMEM_REAP();
- if (rma_op->request->dev.datatype_ptr)
- MPID_Datatype_release(rma_op->request->dev.datatype_ptr);
- MPID_Request_release(rma_op->request);
+ if ((*request)->dev.datatype_ptr)
+ MPID_Datatype_release((*request)->dev.datatype_ptr);
+ MPID_Request_release(*request);
}
- rma_op->request = NULL;
+ *request = NULL;
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -1727,9 +1809,15 @@ static int send_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
#define FUNCNAME send_contig_acc_msg
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt_flags_t flags)
+static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op,
+ MPID_Win *win_ptr,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win source_win_handle,
+ MPI_Win target_win_handle,
+ MPID_Request **request)
{
- MPIDI_CH3_Pkt_accum_t *accum_pkt = &rma_op->pkt.accum;
+ MPIDI_CH3_Pkt_t upkt;
+ MPIDI_CH3_Pkt_accum_t *accum_pkt = &upkt.accum;
MPID_IOV iov[MPID_IOV_LIMIT];
int mpi_errno=MPI_SUCCESS;
int iovcnt;
@@ -1741,16 +1829,24 @@ static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_
MPIDI_RMA_FUNC_ENTER(MPID_STATE_SEND_CONTIG_ACC_MSG);
- rma_op->request = NULL;
+ *request = NULL;
MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_type_size);
/* FIXME: Make this size check efficient and match the packet type */
MPIU_Assign_trunc(len, rma_op->origin_count * origin_type_size, size_t);
if (MPIR_CVAR_CH3_RMA_ACC_IMMED && len <= MPIDI_RMA_IMMED_INTS*sizeof(int)) {
- MPIDI_CH3_Pkt_accum_immed_t * accumi_pkt = &rma_op->pkt.accum_immed;
+ MPIDI_CH3_Pkt_accum_immed_t * accumi_pkt = &upkt.accum_immed;
void *dest = accumi_pkt->data, *src = rma_op->origin_addr;
+ MPIDI_Pkt_init(accumi_pkt, MPIDI_CH3_PKT_ACCUM_IMMED);
+ accumi_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
accumi_pkt->flags = flags;
+ accumi_pkt->count = rma_op->target_count;
+ accumi_pkt->datatype = rma_op->target_datatype;
+ accumi_pkt->op = rma_op->op;
+ accumi_pkt->target_win_handle = target_win_handle;
+ accumi_pkt->source_win_handle = source_win_handle;
switch (len) {
case 1: *(uint8_t *)dest = *(uint8_t *)src; break;
@@ -1763,13 +1859,23 @@ static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_
comm_ptr = win_ptr->comm_ptr;
MPIDI_Comm_get_vc_set_active(comm_ptr, rma_op->target_rank, &vc);
MPIU_THREAD_CS_ENTER(CH3COMM,vc);
- mpi_errno = MPIDI_CH3_iStartMsg(vc, accumi_pkt, sizeof(*accumi_pkt), &rma_op->request);
+ mpi_errno = MPIDI_CH3_iStartMsg(vc, accumi_pkt, sizeof(*accumi_pkt), request);
MPIU_THREAD_CS_EXIT(CH3COMM,vc);
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
goto fn_exit;
}
+ MPIDI_Pkt_init(accum_pkt, MPIDI_CH3_PKT_ACCUMULATE);
+ accum_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
accum_pkt->flags = flags;
+ accum_pkt->count = rma_op->target_count;
+ accum_pkt->datatype = rma_op->target_datatype;
+ accum_pkt->dataloop_size = 0;
+ accum_pkt->op = rma_op->op;
+ accum_pkt->target_win_handle = target_win_handle;
+ accum_pkt->source_win_handle = source_win_handle;
+
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) accum_pkt;
iov[0].MPID_IOV_LEN = sizeof(*accum_pkt);
@@ -1792,7 +1898,7 @@ static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_
iov[1].MPID_IOV_LEN = rma_op->origin_count * origin_type_size;
iovcnt = 2;
MPIU_THREAD_CS_ENTER(CH3COMM,vc);
- mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, iovcnt, &rma_op->request);
+ mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, iovcnt, request);
MPIU_THREAD_CS_EXIT(CH3COMM,vc);
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
@@ -1801,11 +1907,11 @@ static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- if (rma_op->request)
+ if (*request)
{
- MPID_Request_release(rma_op->request);
+ MPID_Request_release(*request);
}
- rma_op->request = NULL;
+ *request = NULL;
goto fn_exit;
/* --END ERROR HANDLING-- */
}
@@ -1818,10 +1924,15 @@ static int send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_
#define FUNCNAME send_immed_rmw_msg
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-static int send_immed_rmw_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt_flags_t flags)
+static int send_immed_rmw_msg(MPIDI_RMA_Op_t *rma_op,
+ MPID_Win *win_ptr,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win source_win_handle,
+ MPI_Win target_win_handle,
+ MPID_Request **request)
{
int mpi_errno = MPI_SUCCESS;
- MPID_Request *rmw_req = NULL;
+ MPID_Request *rmw_req = NULL, *resp_req = NULL;
MPIDI_VC_t *vc;
MPID_Comm *comm_ptr;
MPI_Aint len;
@@ -1829,37 +1940,45 @@ static int send_immed_rmw_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_C
MPIDI_RMA_FUNC_ENTER(MPID_STATE_SEND_IMMED_RMW_MSG);
- rma_op->request = NULL;
+ *request = NULL;
/* Create a request for the RMW response. Store the origin buf, count, and
datatype in it, and pass the request's handle RMW packet. When the
response comes from the target, it will contain the request handle. */
- rma_op->request = MPID_Request_create();
- MPIU_ERR_CHKANDJUMP(rma_op->request == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
+ resp_req = MPID_Request_create();
+ MPIU_ERR_CHKANDJUMP(resp_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
+ *request = resp_req;
/* Set refs on the request to 2: one for the response message, and one for
the partial completion handler */
- MPIU_Object_set_ref(rma_op->request, 2);
+ MPIU_Object_set_ref(resp_req, 2);
- rma_op->request->dev.user_buf = rma_op->result_addr;
- rma_op->request->dev.user_count = rma_op->result_count;
- rma_op->request->dev.datatype = rma_op->result_datatype;
+ resp_req->dev.user_buf = rma_op->result_addr;
+ resp_req->dev.user_count = rma_op->result_count;
+ resp_req->dev.datatype = rma_op->result_datatype;
+ resp_req->dev.target_win_handle = target_win_handle;
+ resp_req->dev.source_win_handle = source_win_handle;
/* REQUIRE: All datatype arguments must be of the same, builtin
type and counts must be 1. */
MPID_Datatype_get_size_macro(rma_op->origin_datatype, len);
comm_ptr = win_ptr->comm_ptr;
- if (rma_op->pkt.type == MPIDI_CH3_PKT_CAS) {
- MPIDI_CH3_Pkt_cas_t *cas_pkt = &rma_op->pkt.cas;
+ if (rma_op->type == MPIDI_RMA_COMPARE_AND_SWAP) {
+ MPIDI_CH3_Pkt_t upkt;
+ MPIDI_CH3_Pkt_cas_t *cas_pkt = &upkt.cas;
MPIU_Assert(len <= sizeof(MPIDI_CH3_CAS_Immed_u));
- rma_op->request->dev.target_win_handle = cas_pkt->target_win_handle;
- rma_op->request->dev.source_win_handle = cas_pkt->source_win_handle;
+ MPIDI_Pkt_init(cas_pkt, MPIDI_CH3_PKT_CAS);
- cas_pkt->request_handle = rma_op->request->handle;
+ cas_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
cas_pkt->flags = flags;
+ cas_pkt->datatype = rma_op->target_datatype;
+ cas_pkt->target_win_handle = target_win_handle;
+ cas_pkt->request_handle = resp_req->handle;
+
MPIU_Memcpy( (void *) &cas_pkt->origin_data, rma_op->origin_addr, len );
MPIU_Memcpy( (void *) &cas_pkt->compare_data, rma_op->compare_addr, len );
@@ -1874,20 +1993,25 @@ static int send_immed_rmw_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_C
}
}
- else if (rma_op->pkt.type == MPIDI_CH3_PKT_FOP) {
- MPIDI_CH3_Pkt_fop_t *fop_pkt = &rma_op->pkt.fop;
+ else if (rma_op->type == MPIDI_RMA_FETCH_AND_OP) {
+ MPIDI_CH3_Pkt_t upkt;
+ MPIDI_CH3_Pkt_fop_t *fop_pkt = &upkt.fop;
MPIU_Assert(len <= sizeof(MPIDI_CH3_FOP_Immed_u));
- rma_op->request->dev.target_win_handle = fop_pkt->target_win_handle;
- rma_op->request->dev.source_win_handle = fop_pkt->source_win_handle;
+ MPIDI_Pkt_init(fop_pkt, MPIDI_CH3_PKT_FOP);
- fop_pkt->request_handle = rma_op->request->handle;
+ fop_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
fop_pkt->flags = flags;
+ fop_pkt->datatype = rma_op->target_datatype;
+ fop_pkt->target_win_handle = target_win_handle;
+ fop_pkt->request_handle = resp_req->handle;
+ fop_pkt->op = rma_op->op;
- if (len <= sizeof(fop_pkt->origin_data) || fop_pkt->op == MPI_NO_OP) {
+ if (len <= sizeof(fop_pkt->origin_data) || rma_op->op == MPI_NO_OP) {
/* Embed FOP data in the packet header */
- if (fop_pkt->op != MPI_NO_OP) {
+ if (rma_op->op != MPI_NO_OP) {
MPIU_Memcpy( fop_pkt->origin_data, rma_op->origin_addr, len );
}
@@ -1934,10 +2058,10 @@ fn_exit:
return mpi_errno;
/* --BEGIN ERROR HANDLING-- */
fn_fail:
- if (rma_op->request) {
- MPID_Request_release(rma_op->request);
+ if (*request) {
+ MPID_Request_release(*request);
}
- rma_op->request = NULL;
+ *request = NULL;
if (rmw_req) {
MPID_Request_release(rmw_req);
}
@@ -1951,15 +2075,20 @@ fn_fail:
#define FUNCNAME recv_rma_msg
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-static int recv_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt_flags_t flags)
+static int recv_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr,
+ MPIDI_CH3_Pkt_flags_t flags,
+ MPI_Win source_win_handle,
+ MPI_Win target_win_handle,
+ MPIDI_RMA_dtype_info *dtype_info,
+ void **dataloop, MPID_Request **request)
{
- MPIDI_CH3_Pkt_get_t *get_pkt = &rma_op->pkt.get;
+ MPIDI_CH3_Pkt_t upkt;
+ MPIDI_CH3_Pkt_get_t *get_pkt = &upkt.get;
int mpi_errno=MPI_SUCCESS;
MPIDI_VC_t * vc;
MPID_Comm *comm_ptr;
- MPID_Datatype *dtp;
- MPI_Datatype target_datatype;
MPID_Request *req = NULL;
+ MPID_Datatype *dtp;
MPID_IOV iov[MPID_IOV_LIMIT];
MPIU_CHKPMEM_DECL(1);
MPIDI_STATE_DECL(MPID_STATE_RECV_RMA_MSG);
@@ -1971,28 +2100,37 @@ static int recv_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
and pass a handle to it in the get packet. When the get
response comes from the target, it will contain the request
handle. */
- rma_op->request = MPID_Request_create();
- if (rma_op->request == NULL) {
+ req = MPID_Request_create();
+ if (req == NULL) {
MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER,"**nomemreq");
}
- MPIU_Object_set_ref(rma_op->request, 2);
+ *request = req;
- rma_op->request->dev.user_buf = rma_op->origin_addr;
- rma_op->request->dev.user_count = rma_op->origin_count;
- rma_op->request->dev.datatype = rma_op->origin_datatype;
- rma_op->request->dev.target_win_handle = MPI_WIN_NULL;
- rma_op->request->dev.source_win_handle = get_pkt->source_win_handle;
- if (!MPIR_DATATYPE_IS_PREDEFINED(rma_op->request->dev.datatype))
+ MPIU_Object_set_ref(req, 2);
+
+ req->dev.user_buf = rma_op->origin_addr;
+ req->dev.user_count = rma_op->origin_count;
+ req->dev.datatype = rma_op->origin_datatype;
+ req->dev.target_win_handle = MPI_WIN_NULL;
+ req->dev.source_win_handle = source_win_handle;
+ if (!MPIR_DATATYPE_IS_PREDEFINED(req->dev.datatype))
{
- MPID_Datatype_get_ptr(rma_op->request->dev.datatype, dtp);
- rma_op->request->dev.datatype_ptr = dtp;
+ MPID_Datatype_get_ptr(req->dev.datatype, dtp);
+ req->dev.datatype_ptr = dtp;
/* this will cause the datatype to be freed when the
request is freed. */
}
- get_pkt->request_handle = rma_op->request->handle;
+ MPIDI_Pkt_init(get_pkt, MPIDI_CH3_PKT_GET);
+ get_pkt->addr = (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
get_pkt->flags = flags;
+ get_pkt->count = rma_op->target_count;
+ get_pkt->datatype = rma_op->target_datatype;
+ get_pkt->request_handle = req->handle;
+ get_pkt->target_win_handle = target_win_handle;
+ get_pkt->source_win_handle = source_win_handle;
/* printf("send pkt: type %d, addr %d, count %d, base %d\n", rma_pkt->type,
rma_pkt->addr, rma_pkt->count, win_ptr->base_addrs[rma_op->target_rank]);
@@ -2002,8 +2140,7 @@ static int recv_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
comm_ptr = win_ptr->comm_ptr;
MPIDI_Comm_get_vc_set_active(comm_ptr, rma_op->target_rank, &vc);
- MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(rma_op->pkt, target_datatype);
- if (MPIR_DATATYPE_IS_PREDEFINED(target_datatype))
+ if (MPIR_DATATYPE_IS_PREDEFINED(rma_op->target_datatype))
{
/* basic datatype on target. simply send the get_pkt. */
MPIU_THREAD_CS_ENTER(CH3COMM,vc);
@@ -2015,40 +2152,40 @@ static int recv_rma_msg(MPIDI_RMA_Op_t *rma_op, MPID_Win *win_ptr, MPIDI_CH3_Pkt
/* derived datatype on target. fill derived datatype info and
send it along with get_pkt. */
- MPID_Datatype_get_ptr(target_datatype, dtp);
- rma_op->dtype_info.is_contig = dtp->is_contig;
- rma_op->dtype_info.max_contig_blocks = dtp->max_contig_blocks;
- rma_op->dtype_info.size = dtp->size;
- rma_op->dtype_info.extent = dtp->extent;
- rma_op->dtype_info.dataloop_size = dtp->dataloop_size;
- rma_op->dtype_info.dataloop_depth = dtp->dataloop_depth;
- rma_op->dtype_info.eltype = dtp->eltype;
- rma_op->dtype_info.dataloop = dtp->dataloop;
- rma_op->dtype_info.ub = dtp->ub;
- rma_op->dtype_info.lb = dtp->lb;
- rma_op->dtype_info.true_ub = dtp->true_ub;
- rma_op->dtype_info.true_lb = dtp->true_lb;
- rma_op->dtype_info.has_sticky_ub = dtp->has_sticky_ub;
- rma_op->dtype_info.has_sticky_lb = dtp->has_sticky_lb;
-
- MPIU_CHKPMEM_MALLOC(rma_op->dataloop, void *, dtp->dataloop_size,
+ MPID_Datatype_get_ptr(rma_op->target_datatype, dtp);
+ dtype_info->is_contig = dtp->is_contig;
+ dtype_info->max_contig_blocks = dtp->max_contig_blocks;
+ dtype_info->size = dtp->size;
+ dtype_info->extent = dtp->extent;
+ dtype_info->dataloop_size = dtp->dataloop_size;
+ dtype_info->dataloop_depth = dtp->dataloop_depth;
+ dtype_info->eltype = dtp->eltype;
+ dtype_info->dataloop = dtp->dataloop;
+ dtype_info->ub = dtp->ub;
+ dtype_info->lb = dtp->lb;
+ dtype_info->true_ub = dtp->true_ub;
+ dtype_info->true_lb = dtp->true_lb;
+ dtype_info->has_sticky_ub = dtp->has_sticky_ub;
+ dtype_info->has_sticky_lb = dtp->has_sticky_lb;
+
+ MPIU_CHKPMEM_MALLOC(*dataloop, void *, dtp->dataloop_size,
mpi_errno, "dataloop");
MPIDI_FUNC_ENTER(MPID_STATE_MEMCPY);
- MPIU_Memcpy(rma_op->dataloop, dtp->dataloop, dtp->dataloop_size);
+ MPIU_Memcpy(*dataloop, dtp->dataloop, dtp->dataloop_size);
MPIDI_FUNC_EXIT(MPID_STATE_MEMCPY);
/* the dataloop can have undefined padding sections, so we need to let
* valgrind know that it is OK to pass this data to writev later on */
- MPL_VG_MAKE_MEM_DEFINED(rma_op->dataloop, dtp->dataloop_size);
+ MPL_VG_MAKE_MEM_DEFINED(*dataloop, dtp->dataloop_size);
get_pkt->dataloop_size = dtp->dataloop_size;
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST)get_pkt;
iov[0].MPID_IOV_LEN = sizeof(*get_pkt);
- iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) &rma_op->dtype_info;
- iov[1].MPID_IOV_LEN = sizeof(rma_op->dtype_info);
- iov[2].MPID_IOV_BUF = (MPID_IOV_BUF_CAST)rma_op->dataloop;
+ iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST)dtype_info;
+ iov[1].MPID_IOV_LEN = sizeof(*dtype_info);
+ iov[2].MPID_IOV_BUF = (MPID_IOV_BUF_CAST)*dataloop;
iov[2].MPID_IOV_LEN = dtp->dataloop_size;
MPIU_THREAD_CS_ENTER(CH3COMM,vc);
@@ -2446,6 +2583,7 @@ int MPIDI_Win_complete(MPID_Win *win_ptr)
MPIDI_RMA_Op_t *curr_ptr;
MPIDI_RMA_Ops_list_t *ops_list;
MPID_Comm *comm_ptr;
+ MPI_Win source_win_handle, target_win_handle;
int start_grp_size, *ranks_in_win_grp, rank;
int nRequest = 0;
int nRequestNew = 0;
@@ -2546,8 +2684,12 @@ int MPIDI_Win_complete(MPID_Win *win_ptr)
flags = MPIDI_CH3_PKT_FLAG_RMA_AT_COMPLETE;
}
+ source_win_handle = win_ptr->handle;
+ target_win_handle = win_ptr->all_win_handles[curr_ptr->target_rank];
+
#define MPIDI_CH3I_TRACK_RMA_WRITE(op_ptr_, win_ptr_) /* Not used by active mode */
- MPIDI_CH3I_ISSUE_RMA_OP(curr_ptr, win_ptr, flags, mpi_errno);
+ MPIDI_CH3I_ISSUE_RMA_OP(curr_ptr, win_ptr, flags,
+ source_win_handle, target_win_handle, mpi_errno);
#undef MPIDI_CH3I_TRACK_RMA_WRITE
i++;
@@ -2933,9 +3075,9 @@ int MPIDI_Win_unlock(int dest, MPID_Win *win_ptr)
if ( MPIR_CVAR_CH3_RMA_MERGE_LOCK_OP_UNLOCK &&
win_ptr->targets[dest].remote_lock_state == MPIDI_CH3_WIN_LOCK_CALLED &&
rma_op && rma_op->next == NULL /* There is only one op */ &&
- rma_op->pkt.type != MPIDI_CH3_PKT_CAS &&
- rma_op->pkt.type != MPIDI_CH3_PKT_FOP &&
- rma_op->pkt.type != MPIDI_CH3_PKT_GET_ACCUM )
+ rma_op->type != MPIDI_RMA_COMPARE_AND_SWAP &&
+ rma_op->type != MPIDI_RMA_FETCH_AND_OP &&
+ rma_op->type != MPIDI_RMA_GET_ACCUMULATE )
{
/* Single put, get, or accumulate between the lock and unlock. If it
* is of small size and predefined datatype at the target, we
@@ -2945,20 +3087,18 @@ int MPIDI_Win_unlock(int dest, MPID_Win *win_ptr)
MPI_Aint type_size;
MPIDI_VC_t *vc;
MPIDI_RMA_Op_t *curr_op = rma_op;
- MPI_Datatype target_datatype;
MPIDI_Comm_get_vc_set_active(win_ptr->comm_ptr, dest, &vc);
MPID_Datatype_get_size_macro(curr_op->origin_datatype, type_size);
/* msg_sz typically = 65480 */
- MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(curr_op->pkt, target_datatype);
- if (MPIR_DATATYPE_IS_PREDEFINED(target_datatype) &&
+ if (MPIR_DATATYPE_IS_PREDEFINED(curr_op->target_datatype) &&
(type_size * curr_op->origin_count <= vc->eager_max_msg_sz) ) {
single_op_opt = 1;
/* Set the lock granted flag to 1 */
win_ptr->targets[dest].remote_lock_state = MPIDI_CH3_WIN_LOCK_GRANTED;
- if (curr_op->pkt.type == MPIDI_CH3_PKT_GET) {
+ if (curr_op->type == MPIDI_RMA_GET) {
mpi_errno = send_lock_get(win_ptr, dest);
wait_for_rma_done_pkt = 0;
}
@@ -3443,6 +3583,7 @@ static int do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
{
int mpi_errno = MPI_SUCCESS, nops;
MPIDI_RMA_Op_t *curr_ptr;
+ MPI_Win source_win_handle = MPI_WIN_NULL, target_win_handle = MPI_WIN_NULL;
int nRequest=0, nRequestNew=0;
MPIDI_STATE_DECL(MPID_STATE_DO_PASSIVE_TARGET_RMA);
@@ -3473,10 +3614,10 @@ static int do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
/* Check if we can piggyback the RMA done acknowlegdement on the last
operation in the epoch. */
- if (tail->pkt.type == MPIDI_CH3_PKT_GET ||
- tail->pkt.type == MPIDI_CH3_PKT_CAS ||
- tail->pkt.type == MPIDI_CH3_PKT_FOP ||
- tail->pkt.type == MPIDI_CH3_PKT_GET_ACCUM)
+ if (tail->type == MPIDI_RMA_GET ||
+ tail->type == MPIDI_RMA_COMPARE_AND_SWAP ||
+ tail->type == MPIDI_RMA_FETCH_AND_OP ||
+ tail->type == MPIDI_RMA_GET_ACCUMULATE)
{
/* last operation sends a response message. no need to wait
for an additional rma done pkt */
@@ -3492,7 +3633,7 @@ static int do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
curr_ptr = MPIDI_CH3I_RMA_Ops_head(&win_ptr->targets[target_rank].rma_ops_list);
while (curr_ptr != NULL) {
- if (curr_ptr->pkt.type == MPIDI_CH3_PKT_GET) {
+ if (curr_ptr->type == MPIDI_RMA_GET) {
/* Found a GET, move it to the end */
*wait_for_rma_done_pkt = 0;
@@ -3519,6 +3660,10 @@ static int do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
curr_ptr = MPIDI_CH3I_RMA_Ops_head(&win_ptr->targets[target_rank].rma_ops_list);
+ if (curr_ptr != NULL) {
+ target_win_handle = win_ptr->all_win_handles[curr_ptr->target_rank];
+ }
+
while (curr_ptr != NULL)
{
MPIDI_CH3_Pkt_flags_t flags = MPIDI_CH3_PKT_FLAG_NONE;
@@ -3564,6 +3709,8 @@ static int do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
if (*wait_for_rma_done_pkt) {
flags |= MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK;
}
+
+ source_win_handle = win_ptr->handle;
}
/* Track passive target write operations. This is used during Win_free
@@ -3572,7 +3719,8 @@ static int do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
#define MPIDI_CH3I_TRACK_RMA_WRITE(op_, win_ptr_) \
do { (win_ptr_)->pt_rma_puts_accs[(op_)->target_rank]++; } while (0)
- MPIDI_CH3I_ISSUE_RMA_OP(curr_ptr, win_ptr, flags, mpi_errno);
+ MPIDI_CH3I_ISSUE_RMA_OP(curr_ptr, win_ptr, flags, source_win_handle,
+ target_win_handle, mpi_errno);
#undef MPIDI_CH3I_TRACK_RMA_WRITE
/* If the request is null, we can remove it immediately */
@@ -3872,11 +4020,10 @@ static int send_lock_put_or_acc(MPID_Win *win_ptr, int target_rank)
MPID_Datatype *origin_dtp=NULL;
MPI_Aint origin_type_size;
MPIDI_CH3_Pkt_t upkt;
- MPIDI_CH3_Pkt_lock_put_unlock_t *lock_put_unlock_pkt = &upkt.lock_put_unlock;
- MPIDI_CH3_Pkt_lock_accum_unlock_t *lock_accum_unlock_pkt = &upkt.lock_accum_unlock;
- MPIDI_CH3_Pkt_put_t *put_pkt;
- MPIDI_CH3_Pkt_accum_t *accum_pkt;
- MPIDI_CH3_Pkt_accum_immed_t *accumi_pkt;
+ MPIDI_CH3_Pkt_lock_put_unlock_t *lock_put_unlock_pkt =
+ &upkt.lock_put_unlock;
+ MPIDI_CH3_Pkt_lock_accum_unlock_t *lock_accum_unlock_pkt =
+ &upkt.lock_accum_unlock;
MPIDI_STATE_DECL(MPID_STATE_SEND_LOCK_PUT_OR_ACC);
@@ -3888,26 +4035,27 @@ static int send_lock_put_or_acc(MPID_Win *win_ptr, int target_rank)
win_ptr->pt_rma_puts_accs[rma_op->target_rank]++;
- if (rma_op->pkt.type == MPIDI_CH3_PKT_PUT) {
- put_pkt = &rma_op->pkt.put;
-
+ if (rma_op->type == MPIDI_RMA_PUT) {
MPIDI_Pkt_init(lock_put_unlock_pkt, MPIDI_CH3_PKT_LOCK_PUT_UNLOCK);
lock_put_unlock_pkt->flags = MPIDI_CH3_PKT_FLAG_RMA_LOCK |
MPIDI_CH3_PKT_FLAG_RMA_UNLOCK | MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK;
- lock_put_unlock_pkt->target_win_handle = win_ptr->all_win_handles[rma_op->target_rank];
+ lock_put_unlock_pkt->target_win_handle =
+ win_ptr->all_win_handles[rma_op->target_rank];
lock_put_unlock_pkt->source_win_handle = win_ptr->handle;
lock_put_unlock_pkt->lock_type = lock_type;
- lock_put_unlock_pkt->addr = put_pkt->addr;
- lock_put_unlock_pkt->count = put_pkt->count;
- lock_put_unlock_pkt->datatype = put_pkt->datatype;
+
+ lock_put_unlock_pkt->addr =
+ (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
+
+ lock_put_unlock_pkt->count = rma_op->target_count;
+ lock_put_unlock_pkt->datatype = rma_op->target_datatype;
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) lock_put_unlock_pkt;
iov[0].MPID_IOV_LEN = sizeof(*lock_put_unlock_pkt);
}
- else if (rma_op->pkt.type == MPIDI_CH3_PKT_ACCUMULATE) {
- accum_pkt = &rma_op->pkt.accum;
-
+ else if (rma_op->type == MPIDI_RMA_ACCUMULATE) {
MPIDI_Pkt_init(lock_accum_unlock_pkt, MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK);
lock_accum_unlock_pkt->flags = MPIDI_CH3_PKT_FLAG_RMA_LOCK |
MPIDI_CH3_PKT_FLAG_RMA_UNLOCK | MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK;
@@ -3915,17 +4063,19 @@ static int send_lock_put_or_acc(MPID_Win *win_ptr, int target_rank)
win_ptr->all_win_handles[rma_op->target_rank];
lock_accum_unlock_pkt->source_win_handle = win_ptr->handle;
lock_accum_unlock_pkt->lock_type = lock_type;
- lock_accum_unlock_pkt->addr = accum_pkt->addr;
- lock_accum_unlock_pkt->count = accum_pkt->count;
- lock_accum_unlock_pkt->datatype = accum_pkt->datatype;
- lock_accum_unlock_pkt->op = accum_pkt->op;
+
+ lock_accum_unlock_pkt->addr =
+ (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
+
+ lock_accum_unlock_pkt->count = rma_op->target_count;
+ lock_accum_unlock_pkt->datatype = rma_op->target_datatype;
+ lock_accum_unlock_pkt->op = rma_op->op;
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) lock_accum_unlock_pkt;
iov[0].MPID_IOV_LEN = sizeof(*lock_accum_unlock_pkt);
}
- else if (rma_op->pkt.type == MPIDI_CH3_PKT_ACCUM_IMMED) {
- accumi_pkt = &rma_op->pkt.accum_immed;
-
+ else if (rma_op->type == MPIDI_RMA_ACC_CONTIG) {
MPIDI_Pkt_init(lock_accum_unlock_pkt, MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK);
lock_accum_unlock_pkt->flags = MPIDI_CH3_PKT_FLAG_RMA_LOCK |
MPIDI_CH3_PKT_FLAG_RMA_UNLOCK | MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK;
@@ -3933,10 +4083,14 @@ static int send_lock_put_or_acc(MPID_Win *win_ptr, int target_rank)
win_ptr->all_win_handles[rma_op->target_rank];
lock_accum_unlock_pkt->source_win_handle = win_ptr->handle;
lock_accum_unlock_pkt->lock_type = lock_type;
- lock_accum_unlock_pkt->addr = accumi_pkt->addr;
- lock_accum_unlock_pkt->count = accumi_pkt->count;
- lock_accum_unlock_pkt->datatype = accumi_pkt->datatype;
- lock_accum_unlock_pkt->op = accumi_pkt->op;
+
+ lock_accum_unlock_pkt->addr =
+ (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
+
+ lock_accum_unlock_pkt->count = rma_op->target_count;
+ lock_accum_unlock_pkt->datatype = rma_op->target_datatype;
+ lock_accum_unlock_pkt->op = rma_op->op;
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) lock_accum_unlock_pkt;
iov[0].MPID_IOV_LEN = sizeof(*lock_accum_unlock_pkt);
@@ -4069,8 +4223,8 @@ static int send_lock_get(MPID_Win *win_ptr, int target_rank)
MPID_Comm *comm_ptr;
MPID_Datatype *dtp;
MPIDI_CH3_Pkt_t upkt;
- MPIDI_CH3_Pkt_lock_get_unlock_t *lock_get_unlock_pkt = &upkt.lock_get_unlock;
- MPIDI_CH3_Pkt_get_t *get_pkt;
+ MPIDI_CH3_Pkt_lock_get_unlock_t *lock_get_unlock_pkt =
+ &upkt.lock_get_unlock;
MPIDI_STATE_DECL(MPID_STATE_SEND_LOCK_GET);
@@ -4105,8 +4259,6 @@ static int send_lock_get(MPID_Win *win_ptr, int target_rank)
request is freed. */
}
- get_pkt = &rma_op->pkt.get;
-
MPIDI_Pkt_init(lock_get_unlock_pkt, MPIDI_CH3_PKT_LOCK_GET_UNLOCK);
lock_get_unlock_pkt->flags = MPIDI_CH3_PKT_FLAG_RMA_LOCK |
MPIDI_CH3_PKT_FLAG_RMA_UNLOCK; /* FIXME | MPIDI_CH3_PKT_FLAG_RMA_REQ_ACK; */
@@ -4114,9 +4266,13 @@ static int send_lock_get(MPID_Win *win_ptr, int target_rank)
win_ptr->all_win_handles[rma_op->target_rank];
lock_get_unlock_pkt->source_win_handle = win_ptr->handle;
lock_get_unlock_pkt->lock_type = lock_type;
- lock_get_unlock_pkt->addr = get_pkt->addr;
- lock_get_unlock_pkt->count = get_pkt->count;
- lock_get_unlock_pkt->datatype = get_pkt->datatype;
+
+ lock_get_unlock_pkt->addr =
+ (char *) win_ptr->base_addrs[rma_op->target_rank] +
+ win_ptr->disp_units[rma_op->target_rank] * rma_op->target_disp;
+
+ lock_get_unlock_pkt->count = rma_op->target_count;
+ lock_get_unlock_pkt->datatype = rma_op->target_datatype;
lock_get_unlock_pkt->request_handle = rreq->handle;
comm_ptr = win_ptr->comm_ptr;
@@ -5233,7 +5389,7 @@ int MPIDI_CH3_PktHandler_LockPutUnlock( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
new_ptr->source_win_handle = lock_put_unlock_pkt->source_win_handle;
new_ptr->vc = vc;
- new_ptr->pt_single_op->type = MPIDI_CH3_PKT_LOCK_PUT_UNLOCK;
+ new_ptr->pt_single_op->type = MPIDI_RMA_PUT;
new_ptr->pt_single_op->flags = lock_put_unlock_pkt->flags;
new_ptr->pt_single_op->addr = lock_put_unlock_pkt->addr;
new_ptr->pt_single_op->count = lock_put_unlock_pkt->count;
@@ -5387,7 +5543,7 @@ int MPIDI_CH3_PktHandler_LockGetUnlock( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
new_ptr->source_win_handle = lock_get_unlock_pkt->source_win_handle;
new_ptr->vc = vc;
- new_ptr->pt_single_op->type = MPIDI_CH3_PKT_LOCK_GET_UNLOCK;
+ new_ptr->pt_single_op->type = MPIDI_RMA_GET;
new_ptr->pt_single_op->flags = lock_get_unlock_pkt->flags;
new_ptr->pt_single_op->addr = lock_get_unlock_pkt->addr;
new_ptr->pt_single_op->count = lock_get_unlock_pkt->count;
@@ -5482,7 +5638,7 @@ int MPIDI_CH3_PktHandler_LockAccumUnlock( MPIDI_VC_t *vc, MPIDI_CH3_Pkt_t *pkt,
new_ptr->source_win_handle = lock_accum_unlock_pkt->source_win_handle;
new_ptr->vc = vc;
- new_ptr->pt_single_op->type = MPIDI_CH3_PKT_LOCK_ACCUM_UNLOCK;
+ new_ptr->pt_single_op->type = MPIDI_RMA_ACCUMULATE;
new_ptr->pt_single_op->flags = lock_accum_unlock_pkt->flags;
new_ptr->pt_single_op->addr = lock_accum_unlock_pkt->addr;
new_ptr->pt_single_op->count = lock_accum_unlock_pkt->count;
-----------------------------------------------------------------------
Summary of changes:
src/mpid/ch3/include/mpidpkt.h | 41 +---
src/mpid/ch3/include/mpidrma.h | 43 ++-
src/mpid/ch3/src/ch3u_handle_recv_req.c | 8 +-
src/mpid/ch3/src/ch3u_rma_acc_ops.c | 92 ++----
src/mpid/ch3/src/ch3u_rma_ops.c | 104 ++----
src/mpid/ch3/src/ch3u_rma_sync.c | 576 ++++++++++++++++++++-----------
6 files changed, 463 insertions(+), 401 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0