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
May 2015
- 1 participants
- 25 discussions
[mpich] MPICH primary repository branch, master, updated. v3.2b2-78-gcb91074
by noreply@mpich.org 31 May '15
by noreply@mpich.org 31 May '15
31 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via cb910743a8bd88089400c897933a3926eb522478 (commit)
from bdc6617a5043f768ffa349966867346c2661f8d6 (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/cb910743a8bd88089400c897933a3926e…
commit cb910743a8bd88089400c897933a3926eb522478
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Sun May 31 18:30:46 2015 -0500
xfail bcastlength for release
No reviewer.
diff --git a/test/mpi/errors/coll/testlist b/test/mpi/errors/coll/testlist
index 7cb768a..9697478 100644
--- a/test/mpi/errors/coll/testlist
+++ b/test/mpi/errors/coll/testlist
@@ -3,4 +3,4 @@ noalias2 4 mpiversion=2.2
noalias3 4 mpiversion=3.0
rerr 2
reduce_local 1
-bcastlength 4
+bcastlength 4 xfail=ticket2260
-----------------------------------------------------------------------
Summary of changes:
test/mpi/errors/coll/testlist | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-77-gbdc6617
by noreply@mpich.org 31 May '15
by noreply@mpich.org 31 May '15
31 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via bdc6617a5043f768ffa349966867346c2661f8d6 (commit)
from 2eb6236cb10160079c788e71d8d757822b9f2f0b (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/bdc6617a5043f768ffa349966867346c2…
commit bdc6617a5043f768ffa349966867346c2661f8d6
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Sun May 31 13:54:16 2015 -0500
another xfail to prep release
diff --git a/test/mpi/coll/testlist b/test/mpi/coll/testlist
index 765ca7a..de33962 100644
--- a/test/mpi/coll/testlist
+++ b/test/mpi/coll/testlist
@@ -18,7 +18,7 @@ red4 10
alltoall1 8
alltoallv 10
alltoallv0 10
-alltoallw1 10
+alltoallw1 10 xfail=ticket2180
alltoallw2 10
alltoallw_zeros 1
alltoallw_zeros 2
-----------------------------------------------------------------------
Summary of changes:
test/mpi/coll/testlist | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-76-g2eb6236
by noreply@mpich.org 31 May '15
by noreply@mpich.org 31 May '15
31 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 2eb6236cb10160079c788e71d8d757822b9f2f0b (commit)
from 57e4f7568347705d1715e6ffd57788836af76e27 (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/2eb6236cb10160079c788e71d8d757822…
commit 2eb6236cb10160079c788e71d8d757822b9f2f0b
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Sun May 31 13:34:21 2015 -0500
xfail cancelrecv
Cancel send is not implemented in all our tested netmods. xfail
this test for now.
No reviewer.
diff --git a/test/mpi/pt2pt/testlist b/test/mpi/pt2pt/testlist
index 2447643..4f6421b 100644
--- a/test/mpi/pt2pt/testlist
+++ b/test/mpi/pt2pt/testlist
@@ -29,7 +29,7 @@ scancel 2 xfail=ticket287
scancel2 2
pscancel 2 xfail=ticket287
rcancel 2
-cancelrecv 2
+cancelrecv 2 xfail=ticket2266
cancelanysrc 2
isendselfprobe 1
inactivereq 1
-----------------------------------------------------------------------
Summary of changes:
test/mpi/pt2pt/testlist | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-75-g57e4f75
by noreply@mpich.org 31 May '15
by noreply@mpich.org 31 May '15
31 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 57e4f7568347705d1715e6ffd57788836af76e27 (commit)
from b01c4038de97e937c1540b1d5444f11d87d1851a (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/57e4f7568347705d1715e6ffd57788836…
commit 57e4f7568347705d1715e6ffd57788836af76e27
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Sun May 31 10:23:40 2015 -0500
Bug-fix: issue extended packet header in sock.
Originally we add extended packet header for RMA packets and issue
it from Nemesis and netmods, unfortunately we forgot to modify
Sock channel. This patch fixes this problem.
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/mpid/ch3/channels/sock/src/ch3_isendv.c b/src/mpid/ch3/channels/sock/src/ch3_isendv.c
index 8d0fcf4..c66fede 100644
--- a/src/mpid/ch3/channels/sock/src/ch3_isendv.c
+++ b/src/mpid/ch3/channels/sock/src/ch3_isendv.c
@@ -50,6 +50,17 @@ int MPIDI_CH3_iSendv(MPIDI_VC_t * vc, MPID_Request * sreq,
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_ISENDV);
+ if (sreq->dev.ext_hdr_sz > 0) {
+ int i;
+ for (i = n_iov-1; i >= 1; i--) {
+ iov[i+1].MPID_IOV_BUF = iov[i].MPID_IOV_BUF;
+ iov[i+1].MPID_IOV_LEN = iov[i].MPID_IOV_LEN;
+ }
+ iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) sreq->dev.ext_hdr_ptr;
+ iov[1].MPID_IOV_LEN = sreq->dev.ext_hdr_sz;
+ n_iov++;
+ }
+
MPIU_Assert(n_iov <= MPID_IOV_LIMIT);
MPIU_Assert(iov[0].MPID_IOV_LEN <= sizeof(MPIDI_CH3_Pkt_t));
-----------------------------------------------------------------------
Summary of changes:
src/mpid/ch3/channels/sock/src/ch3_isendv.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-74-gb01c403
by noreply@mpich.org 30 May '15
by noreply@mpich.org 30 May '15
30 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via b01c4038de97e937c1540b1d5444f11d87d1851a (commit)
from 007b9a30751e90d479bb8b288c017fc6f562ebbf (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/b01c4038de97e937c1540b1d5444f11d8…
commit b01c4038de97e937c1540b1d5444f11d87d1851a
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Sat May 30 15:56:23 2015 -0500
mark some additional tests as xfail prior to release
No reviewer.
diff --git a/test/mpi/pt2pt/testlist b/test/mpi/pt2pt/testlist
index 514f7b8..2447643 100644
--- a/test/mpi/pt2pt/testlist
+++ b/test/mpi/pt2pt/testlist
@@ -25,9 +25,9 @@ greq1 1
probe-unexp 4
probenull 1
# For testing, scancel will run with 1 process as well
-scancel 2
+scancel 2 xfail=ticket287
scancel2 2
-pscancel 2
+pscancel 2 xfail=ticket287
rcancel 2
cancelrecv 2
cancelanysrc 2
diff --git a/test/mpi/threads/comm/testlist b/test/mpi/threads/comm/testlist
index 1485529..7767799 100644
--- a/test/mpi/threads/comm/testlist
+++ b/test/mpi/threads/comm/testlist
@@ -3,5 +3,5 @@ dup_leak_test 2
comm_dup_deadlock 4
comm_create_threads 4
comm_create_group_threads 4
-comm_idup 4 mpiversion=3.0
+comm_idup 4 mpiversion=3.0 xfail=ticket2108
ctxidup 4 mpiversion=3.0
-----------------------------------------------------------------------
Summary of changes:
test/mpi/pt2pt/testlist | 4 ++--
test/mpi/threads/comm/testlist | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-73-g007b9a3
by noreply@mpich.org 30 May '15
by noreply@mpich.org 30 May '15
30 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 007b9a30751e90d479bb8b288c017fc6f562ebbf (commit)
via 2bf9e807d3e1b1a0a7b0c64f9cba6d063afb06af (commit)
via 6e25f1e703ac66e2433b026cc9237470678ed9bf (commit)
via 2fe6a58ed2643a1fff77fa0dc38adc82ce8dc311 (commit)
via 1188e6b9053c98f8305b3ade586ece74012dbd04 (commit)
from 72956d99ea05f9b5dc0d88aae21330fb7ff15fe3 (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/007b9a30751e90d479bb8b288c017fc6f…
commit 007b9a30751e90d479bb8b288c017fc6f562ebbf
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Fri May 29 10:54:23 2015 -0500
Change MPI_SUBVERSION from 0 to 1 for MPI-3.1
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index e4e2b40..6d22fd9 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -453,7 +453,7 @@ typedef int (MPI_Copy_function) ( MPI_Comm, int, void *, void *, void *, int * )
typedef int (MPI_Delete_function) ( MPI_Comm, int, void *, void * );
#define MPI_VERSION 3
-#define MPI_SUBVERSION 0
+#define MPI_SUBVERSION 1
#define MPICH_NAME 3
#define MPICH 1
#define MPICH_HAS_C2F 1
http://git.mpich.org/mpich.git/commitdiff/2bf9e807d3e1b1a0a7b0c64f9cba6d063…
commit 2bf9e807d3e1b1a0a7b0c64f9cba6d063afb06af
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Fri May 29 10:46:30 2015 -0500
Replace MPIX_ with MPI_ in NBC-IO for MPI-3.1
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/binding/fortran/use_mpi_f08/mpi_f08.f90 b/src/binding/fortran/use_mpi_f08/mpi_f08.f90
index adcd708..338d0ce 100644
--- a/src/binding/fortran/use_mpi_f08/mpi_f08.f90
+++ b/src/binding/fortran/use_mpi_f08/mpi_f08.f90
@@ -4121,8 +4121,8 @@ interface MPI_Aint_diff
end function MPI_Aint_diff_f08
end interface MPI_Aint_diff
-interface MPIX_File_iread_all
- subroutine MPIX_File_iread_all_f08ts(fh, buf, count, datatype, request, ierror)
+interface MPI_File_iread_all
+ subroutine MPI_File_iread_all_f08ts(fh, buf, count, datatype, request, ierror)
use :: mpi_f08_types, only : MPI_File, MPI_Datatype, MPI_Request
implicit none
type(MPI_File), intent(in) :: fh
@@ -4131,11 +4131,11 @@ interface MPIX_File_iread_all
type(MPI_Datatype), intent(in) :: datatype
type(MPI_Request), intent(out) :: request
integer, optional, intent(out) :: ierror
- end subroutine MPIX_File_iread_all_f08ts
-end interface MPIX_File_iread_all
+ end subroutine MPI_File_iread_all_f08ts
+end interface MPI_File_iread_all
-interface MPIX_File_iwrite_all
- subroutine MPIX_File_iwrite_all_f08ts(fh, buf, count, datatype, request, ierror)
+interface MPI_File_iwrite_all
+ subroutine MPI_File_iwrite_all_f08ts(fh, buf, count, datatype, request, ierror)
use :: mpi_f08_types, only : MPI_File, MPI_Datatype, MPI_Request
implicit none
type(MPI_File), intent(in) :: fh
@@ -4144,11 +4144,11 @@ interface MPIX_File_iwrite_all
type(MPI_Datatype), intent(in) :: datatype
type(MPI_Request), intent(out) :: request
integer, optional, intent(out) :: ierror
- end subroutine MPIX_File_iwrite_all_f08ts
-end interface MPIX_File_iwrite_all
+ end subroutine MPI_File_iwrite_all_f08ts
+end interface MPI_File_iwrite_all
-interface MPIX_File_iread_at_all
- subroutine MPIX_File_iread_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
+interface MPI_File_iread_at_all
+ subroutine MPI_File_iread_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
use :: mpi_f08_types, only : MPI_File, MPI_Datatype, MPI_Request
use :: mpi_f08_compile_constants, only : MPI_OFFSET_KIND
implicit none
@@ -4159,11 +4159,11 @@ interface MPIX_File_iread_at_all
type(MPI_Datatype), intent(in) :: datatype
type(MPI_Request), intent(out) :: request
integer, optional, intent(out) :: ierror
- end subroutine MPIX_File_iread_at_all_f08ts
-end interface MPIX_File_iread_at_all
+ end subroutine MPI_File_iread_at_all_f08ts
+end interface MPI_File_iread_at_all
-interface MPIX_File_iwrite_at_all
- subroutine MPIX_File_iwrite_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
+interface MPI_File_iwrite_at_all
+ subroutine MPI_File_iwrite_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
use :: mpi_f08_types, only : MPI_File, MPI_Datatype, MPI_Request
use :: mpi_f08_compile_constants, only : MPI_OFFSET_KIND
implicit none
@@ -4174,7 +4174,7 @@ interface MPIX_File_iwrite_at_all
type(MPI_Datatype), intent(in) :: datatype
type(MPI_Request), intent(out) :: request
integer, optional, intent(out) :: ierror
- end subroutine MPIX_File_iwrite_at_all_f08ts
-end interface MPIX_File_iwrite_at_all
+ end subroutine MPI_File_iwrite_at_all_f08ts
+end interface MPI_File_iwrite_at_all
end module mpi_f08
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
index f70e101..64425d6 100755
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
@@ -146,10 +146,10 @@ my %bufpos = (
"MPI_Win_attach" => [1, -1, -1],
"MPI_Win_create" => [0, -1, -1],
"MPI_Win_detach" => [1, -1, -1],
- "MPIX_File_iread_all" => [1, 2, 3],
- "MPIX_File_iread_at_all" => [2, 3, 4],
- "MPIX_File_iwrite_all" => [1, 2, 3],
- "MPIX_File_iwrite_at_all" => [2, 3, 4]
+ "MPI_File_iread_all" => [1, 2, 3],
+ "MPI_File_iread_at_all" => [2, 3, 4],
+ "MPI_File_iwrite_all" => [1, 2, 3],
+ "MPI_File_iwrite_at_all" => [2, 3, 4]
);
# Choice buffers in some functions can be passed in MPI_IN_PLACE. We store such
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_all_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_all_f08ts.f90
index 72c86b6..cbaa860 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_all_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_all_f08ts.f90
@@ -3,7 +3,7 @@
! (C) 2014 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
-subroutine MPIX_File_iread_all_f08ts(fh, buf, count, datatype, request, ierror)
+subroutine MPI_File_iread_all_f08ts(fh, buf, count, datatype, request, ierror)
use, intrinsic :: iso_c_binding, only : c_loc, c_associated
use, intrinsic :: iso_c_binding, only : c_int, c_ptr
use :: mpi_f08, only : MPI_File, MPI_Datatype, MPI_Request
@@ -39,4 +39,4 @@ subroutine MPIX_File_iread_all_f08ts(fh, buf, count, datatype, request, ierror)
if (present(ierror)) ierror = ierror_c
-end subroutine MPIX_File_iread_all_f08ts
+end subroutine MPI_File_iread_all_f08ts
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_at_all_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_at_all_f08ts.f90
index fe68cfc..7e42c1a 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_at_all_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iread_at_all_f08ts.f90
@@ -3,7 +3,7 @@
! (C) 2014 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
-subroutine MPIX_File_iread_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
+subroutine MPI_File_iread_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
use, intrinsic :: iso_c_binding, only : c_loc, c_associated
use, intrinsic :: iso_c_binding, only : c_int, c_ptr
use :: mpi_f08, only : MPI_File, MPI_Datatype, MPI_Request
@@ -43,4 +43,4 @@ subroutine MPIX_File_iread_at_all_f08ts(fh, offset, buf, count, datatype, reques
if (present(ierror)) ierror = ierror_c
-end subroutine MPIX_File_iread_at_all_f08ts
+end subroutine MPI_File_iread_at_all_f08ts
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_all_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_all_f08ts.f90
index 469555a..b4b1893 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_all_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_all_f08ts.f90
@@ -3,7 +3,7 @@
! (C) 2014 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
-subroutine MPIX_File_iwrite_all_f08ts(fh, buf, count, datatype, request, ierror)
+subroutine MPI_File_iwrite_all_f08ts(fh, buf, count, datatype, request, ierror)
use, intrinsic :: iso_c_binding, only : c_loc, c_associated
use, intrinsic :: iso_c_binding, only : c_int, c_ptr
use :: mpi_f08, only : MPI_File, MPI_Datatype, MPI_Request
@@ -39,4 +39,4 @@ subroutine MPIX_File_iwrite_all_f08ts(fh, buf, count, datatype, request, ierror)
if (present(ierror)) ierror = ierror_c
-end subroutine MPIX_File_iwrite_all_f08ts
+end subroutine MPI_File_iwrite_all_f08ts
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_at_all_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_at_all_f08ts.f90
index b5ed93f..0be29ac 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_at_all_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/file_iwrite_at_all_f08ts.f90
@@ -3,7 +3,7 @@
! (C) 2014 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
-subroutine MPIX_File_iwrite_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
+subroutine MPI_File_iwrite_at_all_f08ts(fh, offset, buf, count, datatype, request, ierror)
use, intrinsic :: iso_c_binding, only : c_loc, c_associated
use, intrinsic :: iso_c_binding, only : c_int, c_ptr
use :: mpi_f08, only : MPI_File, MPI_Datatype, MPI_Request
@@ -43,4 +43,4 @@ subroutine MPIX_File_iwrite_at_all_f08ts(fh, offset, buf, count, datatype, reque
if (present(ierror)) ierror = ierror_c
-end subroutine MPIX_File_iwrite_at_all_f08ts
+end subroutine MPI_File_iwrite_at_all_f08ts
diff --git a/src/mpi/romio/include/mpio.h.in b/src/mpi/romio/include/mpio.h.in
index 2238f4b..1f3f382 100644
--- a/src/mpi/romio/include/mpio.h.in
+++ b/src/mpi/romio/include/mpio.h.in
@@ -239,16 +239,16 @@ int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
#endif
/* For MPI 3.1 */
-int MPIX_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,
+int MPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int MPIX_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+int MPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int MPIX_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+int MPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPIX_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+int MPI_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
/* End Prototypes */
@@ -468,16 +468,16 @@ int PMPI_File_get_errhandler( MPI_File, MPI_Errhandler * );
#endif
/* For MPI 3.1 */
-int PMPIX_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,
+int PMPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int PMPIX_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+int PMPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
-int PMPIX_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+int PMPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int PMPIX_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+int PMPI_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
diff --git a/src/mpi/romio/mpi-io/iread_all.c b/src/mpi/romio/mpi-io/iread_all.c
index ba36161..4aa980b 100644
--- a/src/mpi/romio/mpi-io/iread_all.c
+++ b/src/mpi/romio/mpi-io/iread_all.c
@@ -9,16 +9,16 @@
#ifdef HAVE_WEAK_SYMBOLS
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_File_iread_all = PMPIX_File_iread_all
+#pragma weak MPI_File_iread_all = PMPI_File_iread_all
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_File_iread_all MPIX_File_iread_all
+#pragma _HP_SECONDARY_DEF PMPI_File_iread_all MPI_File_iread_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_File_iread_all as PMPIX_File_iread_all
+#pragma _CRI duplicate MPI_File_iread_all as PMPI_File_iread_all
/* end of weak pragmas */
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPIX_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+int MPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
- __attribute__((weak,alias("PMPIX_File_iread_all")));
+ __attribute__((weak,alias("PMPI_File_iread_all")));
#endif
/* Include mapping from MPI->PMPI */
@@ -31,7 +31,7 @@ int MPIX_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype
#endif
/*@
- MPIX_File_iread_all - Nonblocking collective read using individual file pointer
+ MPI_File_iread_all - Nonblocking collective read using individual file pointer
Input Parameters:
. fh - file handle (handle)
@@ -44,11 +44,11 @@ Output Parameters:
.N fortran
@*/
-int MPIX_File_iread_all(MPI_File fh, void *buf, int count,
+int MPI_File_iread_all(MPI_File fh, void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
{
int error_code;
- static char myname[] = "MPIX_FILE_IREAD_ALL";
+ static char myname[] = "MPI_FILE_IREAD_ALL";
#ifdef MPI_hpux
int fl_xmpi;
@@ -72,7 +72,7 @@ int MPIX_File_iread_all(MPI_File fh, void *buf, int count,
return error_code;
}
-/* Note: MPIOI_File_iread_all also used by MPIX_File_iread_at_all */
+/* Note: MPIOI_File_iread_all also used by MPI_File_iread_at_all */
/* prevent multiple definitions of this routine */
#ifdef MPIO_BUILD_PROFILING
int MPIOI_File_iread_all(MPI_File fh,
diff --git a/src/mpi/romio/mpi-io/iread_atall.c b/src/mpi/romio/mpi-io/iread_atall.c
index 1a9d718..da9326a 100644
--- a/src/mpi/romio/mpi-io/iread_atall.c
+++ b/src/mpi/romio/mpi-io/iread_atall.c
@@ -9,16 +9,16 @@
#ifdef HAVE_WEAK_SYMBOLS
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_File_iread_at_all = PMPIX_File_iread_at_all
+#pragma weak MPI_File_iread_at_all = PMPI_File_iread_at_all
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_File_iread_at_all MPIX_File_iread_at_all
+#pragma _HP_SECONDARY_DEF PMPI_File_iread_at_all MPI_File_iread_at_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_File_iread_at_all as PMPIX_File_iread_at_all
+#pragma _CRI duplicate MPI_File_iread_at_all as PMPI_File_iread_at_all
/* end of weak pragmas */
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPIX_File_iread_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
+int MPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
MPI_Datatype datatype, MPI_Request *request)
- __attribute__((weak,alias("PMPIX_File_iread_at_all")));
+ __attribute__((weak,alias("PMPI_File_iread_at_all")));
#endif
/* Include mapping from MPI->PMPI */
@@ -31,7 +31,7 @@ int MPIX_File_iread_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count
#endif
/*@
- MPIX_File_iread_at_all - Nonblocking collective read using explicit offset
+ MPI_File_iread_at_all - Nonblocking collective read using explicit offset
Input Parameters:
. fh - file handle (handle)
@@ -45,12 +45,12 @@ Output Parameters:
.N fortran
@*/
-int MPIX_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf,
+int MPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf,
int count, MPI_Datatype datatype,
MPI_Request *request)
{
int error_code;
- static char myname[] = "MPIX_FILE_IREAD_AT_ALL";
+ static char myname[] = "MPI_FILE_IREAD_AT_ALL";
#ifdef MPI_hpux
int fl_xmpi;
diff --git a/src/mpi/romio/mpi-io/iwrite_all.c b/src/mpi/romio/mpi-io/iwrite_all.c
index aeed90d..81de3b5 100644
--- a/src/mpi/romio/mpi-io/iwrite_all.c
+++ b/src/mpi/romio/mpi-io/iwrite_all.c
@@ -9,16 +9,16 @@
#ifdef HAVE_WEAK_SYMBOLS
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_File_iwrite_all = PMPIX_File_iwrite_all
+#pragma weak MPI_File_iwrite_all = PMPI_File_iwrite_all
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_File_iwrite_all MPIX_File_iwrite_all
+#pragma _HP_SECONDARY_DEF PMPI_File_iwrite_all MPI_File_iwrite_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_File_iwrite_all as PMPIX_File_iwrite_all
+#pragma _CRI duplicate MPI_File_iwrite_all as PMPI_File_iwrite_all
/* end of weak pragmas */
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPIX_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+int MPI_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
MPI_Request *request)
- __attribute__((weak,alias("PMPIX_File_iwrite_all")));
+ __attribute__((weak,alias("PMPI_File_iwrite_all")));
#endif
/* Include mapping from MPI->PMPI */
@@ -31,7 +31,7 @@ int MPIX_File_iwrite_all(MPI_File fh, const void *buf, int count, MPI_Datatype d
#endif
/*@
- MPIX_File_iwrite_all - Nonblocking collective write using individual file pointer
+ MPI_File_iwrite_all - Nonblocking collective write using individual file pointer
Input Parameters:
. fh - file handle (handle)
@@ -44,11 +44,11 @@ Output Parameters:
.N fortran
@*/
-int MPIX_File_iwrite_all(MPI_File fh, ROMIO_CONST void *buf, int count,
+int MPI_File_iwrite_all(MPI_File fh, ROMIO_CONST void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
{
int error_code;
- static char myname[] = "MPIX_FILE_IWRITE_ALL";
+ static char myname[] = "MPI_FILE_IWRITE_ALL";
#ifdef MPI_hpux
int fl_xmpi;
@@ -66,7 +66,7 @@ int MPIX_File_iwrite_all(MPI_File fh, ROMIO_CONST void *buf, int count,
return error_code;
}
-/* Note: MPIOI_File_iwrite_all also used by MPIX_File_iwrite_at_all */
+/* Note: MPIOI_File_iwrite_all also used by MPI_File_iwrite_at_all */
/* prevent multiple definitions of this routine */
#ifdef MPIO_BUILD_PROFILING
int MPIOI_File_iwrite_all(MPI_File fh,
diff --git a/src/mpi/romio/mpi-io/iwrite_atall.c b/src/mpi/romio/mpi-io/iwrite_atall.c
index c5eba79..9c0564e 100644
--- a/src/mpi/romio/mpi-io/iwrite_atall.c
+++ b/src/mpi/romio/mpi-io/iwrite_atall.c
@@ -9,16 +9,16 @@
#ifdef HAVE_WEAK_SYMBOLS
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_File_iwrite_at_all = PMPIX_File_iwrite_at_all
+#pragma weak MPI_File_iwrite_at_all = PMPI_File_iwrite_at_all
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_File_iwrite_at_all MPIX_File_iwrite_at_all
+#pragma _HP_SECONDARY_DEF PMPI_File_iwrite_at_all MPI_File_iwrite_at_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_File_iwrite_at_all as PMPIX_File_iwrite_at_all
+#pragma _CRI duplicate MPI_File_iwrite_at_all as PMPI_File_iwrite_at_all
/* end of weak pragmas */
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPIX_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+int MPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPI_Request *request)
- __attribute__((weak,alias("PMPIX_File_iwrite_at_all")));
+ __attribute__((weak,alias("PMPI_File_iwrite_at_all")));
#endif
/* Include mapping from MPI->PMPI */
@@ -31,7 +31,7 @@ int MPIX_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int
#endif
/*@
- MPIX_File_iwrite_at_all - Nonblocking collective write using explicit offset
+ MPI_File_iwrite_at_all - Nonblocking collective write using explicit offset
Input Parameters:
. fh - file handle (handle)
@@ -45,12 +45,12 @@ Output Parameters:
.N fortran
@*/
-int MPIX_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, ROMIO_CONST void *buf,
+int MPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, ROMIO_CONST void *buf,
int count, MPI_Datatype datatype,
MPI_Request *request)
{
int error_code;
- static char myname[] = "MPIX_FILE_IWRITE_AT_ALL";
+ static char myname[] = "MPI_FILE_IWRITE_AT_ALL";
#ifdef MPI_hpux
int fl_xmpi;
diff --git a/src/mpi/romio/mpi-io/mpioprof.h b/src/mpi/romio/mpi-io/mpioprof.h
index 15654ac..f3ee3b4 100644
--- a/src/mpi/romio/mpi-io/mpioprof.h
+++ b/src/mpi/romio/mpi-io/mpioprof.h
@@ -70,14 +70,14 @@
#undef MPI_File_get_byte_offset
#define MPI_File_get_byte_offset PMPI_File_get_byte_offset
-#undef MPIX_File_iread_at_all
-#define MPIX_File_iread_at_all PMPIX_File_iread_at_all
-#undef MPIX_File_iwrite_at_all
-#define MPIX_File_iwrite_at_all PMPIX_File_iwrite_at_all
-#undef MPIX_File_iread_all
-#define MPIX_File_iread_all PMPIX_File_iread_all
-#undef MPIX_File_iwrite_all
-#define MPIX_File_iwrite_all PMPIX_File_iwrite_all
+#undef MPI_File_iread_at_all
+#define MPI_File_iread_at_all PMPI_File_iread_at_all
+#undef MPI_File_iwrite_at_all
+#define MPI_File_iwrite_at_all PMPI_File_iwrite_at_all
+#undef MPI_File_iread_all
+#define MPI_File_iread_all PMPI_File_iread_all
+#undef MPI_File_iwrite_all
+#define MPI_File_iwrite_all PMPI_File_iwrite_all
#undef MPI_File_read_shared
#define MPI_File_read_shared PMPI_File_read_shared
diff --git a/test/mpi/f08/io/i_fcoll_test.f90 b/test/mpi/f08/io/i_fcoll_test.f90
index 29bc82a..cdf53d2 100644
--- a/test/mpi/f08/io/i_fcoll_test.f90
+++ b/test/mpi/f08/io/i_fcoll_test.f90
@@ -108,7 +108,7 @@ call MPI_FILE_OPEN(MPI_COMM_WORLD, str, MPI_MODE_CREATE+MPI_MODE_RDWR, MPI_INFO_
disp = 0
call MPI_FILE_SET_VIEW(fh, disp, MPI_INTEGER, newtype, "native", MPI_INFO_NULL, ierr)
-call MPIX_FILE_IWRITE_ALL(fh, writebuf, bufcount, MPI_INTEGER, request, ierr)
+call MPI_FILE_IWRITE_ALL(fh, writebuf, bufcount, MPI_INTEGER, request, ierr)
call MPI_WAIT(request, status, ierr)
call MPI_FILE_CLOSE(fh, ierr)
@@ -117,7 +117,7 @@ call MPI_FILE_CLOSE(fh, ierr)
call MPI_FILE_OPEN(MPI_COMM_WORLD, str, MPI_MODE_CREATE+MPI_MODE_RDWR, MPI_INFO_NULL, fh, ierr)
call MPI_FILE_SET_VIEW(fh, disp, MPI_INTEGER, newtype, "native", MPI_INFO_NULL, ierr)
-call MPIX_FILE_IREAD_ALL(fh, readbuf, bufcount, MPI_INTEGER, request, ierr)
+call MPI_FILE_IREAD_ALL(fh, readbuf, bufcount, MPI_INTEGER, request, ierr)
call MPI_WAIT(request, status, ierr)
call MPI_FILE_CLOSE(fh, ierr)
diff --git a/test/mpi/f08/io/ioharness.defn b/test/mpi/f08/io/ioharness.defn
index 5a7d756..1a38ef8 100644
--- a/test/mpi/f08/io/ioharness.defn
+++ b/test/mpi/f08/io/ioharness.defn
@@ -258,7 +258,7 @@ integer (kind=MPI_OFFSET_KIND)offset
do k=1, b
<setContigBuffer/>
<findOffset/>
- call MPIX_File_iwrite_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
+ call MPI_File_iwrite_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
call MPI_Wait(request, status, ierr)
<checkErr/>
enddo
@@ -270,7 +270,7 @@ enddo
do k=1, b
<clearContigBuffer/>
<findOffset/>
- call MPIX_File_iread_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
+ call MPI_File_iread_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
call MPI_Wait(request, status, ierr)
<checkErr/>
<checkContigBuffer/>
diff --git a/test/mpi/f08/io/testlist.in b/test/mpi/f08/io/testlist.in
index b534ba0..21061eb 100644
--- a/test/mpi/f08/io/testlist.in
+++ b/test/mpi/f08/io/testlist.in
@@ -18,5 +18,5 @@ miscfilef90 4
setviewcurf90 4
c2f2ciof90 1
c2f90multio 1
-@mpix@i_fcoll_test 4
-@mpix@iwriteatallf90 4
+i_fcoll_test 4 mpiversion=3.1
+iwriteatallf90 4 mpiversion=3.1
diff --git a/test/mpi/f77/io/i_setviewcurf.f b/test/mpi/f77/io/i_setviewcurf.f
index 15b222e..1f672d3 100644
--- a/test/mpi/f77/io/i_setviewcurf.f
+++ b/test/mpi/f77/io/i_setviewcurf.f
@@ -37,7 +37,7 @@ C using a combination of collective and ordered writes
endif
buf(1) = size
- call MPIX_File_iwrite_all( fh, buf, 1, MPI_INTEGER, request, ierr)
+ call MPI_File_iwrite_all( fh, buf, 1, MPI_INTEGER, request, ierr)
if (ierr .ne. MPI_SUCCESS) then
errs = errs + 1
call MTestPrintErrorMsg( "iwrite_all", ierr )
diff --git a/test/mpi/f77/io/ioharness.defn b/test/mpi/f77/io/ioharness.defn
index 22d143c..2fd0863 100644
--- a/test/mpi/f77/io/ioharness.defn
+++ b/test/mpi/f77/io/ioharness.defn
@@ -258,7 +258,7 @@ include 'iooffset.h'
do k=1, b
<setContigBuffer/>
<findOffset/>
- call mpix_file_iwrite_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
+ call mpi_file_iwrite_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
call mpi_wait(request, status, ierr)
<checkErr/>
enddo
@@ -270,7 +270,7 @@ enddo
do k=1, b
<clearContigBuffer/>
<findOffset/>
- call mpix_file_iread_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
+ call mpi_file_iread_at_all( fh, offset, buf, n, MPI_INTEGER, request, ierr )
call mpi_wait(request, status, ierr)
<checkErr/>
<checkContigBuffer/>
diff --git a/test/mpi/f77/io/testlist.in b/test/mpi/f77/io/testlist.in
index ae4bec8..d93ca57 100644
--- a/test/mpi/f77/io/testlist.in
+++ b/test/mpi/f77/io/testlist.in
@@ -18,5 +18,5 @@ miscfilef 4
setviewcurf 4
c2f2ciof 1
c2fmultio 1
-@mpix@i_setviewcurf 4
-@mpix@iwriteatallf 4
+i_setviewcurf 4 mpiversion=3.1
+iwriteatallf 4 mpiversion=3.1
diff --git a/test/mpi/io/i_aggregation1.c b/test/mpi/io/i_aggregation1.c
index d36d821..67d39f0 100644
--- a/test/mpi/io/i_aggregation1.c
+++ b/test/mpi/io/i_aggregation1.c
@@ -112,7 +112,7 @@ static void write_file(char *target, int rank, MPI_Info *info)
buffer[i] = (char *)malloc(OBJ_SIZE);
fill_buffer(buffer[i], OBJ_SIZE, rank, offset);
if (debug) printf("%s", buffer[i]);
- if ((mpi_ret = MPIX_File_iwrite_at_all(wfh, offset, buffer[i], OBJ_SIZE,
+ if ((mpi_ret = MPI_File_iwrite_at_all(wfh, offset, buffer[i], OBJ_SIZE,
MPI_CHAR, &request[i]))
!= MPI_SUCCESS) {
fatal_error(mpi_ret, NULL, "write");
@@ -176,7 +176,7 @@ static void read_file(char *target, int rank, MPI_Info *info, int *corrupt_block
verify_buf[i] = (char *)malloc(OBJ_SIZE);
fill_buffer(verify_buf[i], OBJ_SIZE, rank, offset[i]);
if (debug) printf("Expecting %s", verify_buf[i]);
- if ((mpi_ret = MPIX_File_iread_at_all(rfh, offset[i], buffer[i],
+ if ((mpi_ret = MPI_File_iread_at_all(rfh, offset[i], buffer[i],
OBJ_SIZE, MPI_CHAR, &request[i]))
!= MPI_SUCCESS) {
fatal_error(mpi_ret, NULL, "read");
diff --git a/test/mpi/io/i_aggregation2.c b/test/mpi/io/i_aggregation2.c
index 0ead78e..99b0be4 100644
--- a/test/mpi/io/i_aggregation2.c
+++ b/test/mpi/io/i_aggregation2.c
@@ -60,9 +60,9 @@ int main(int argc, char **argv)
errcode = MPI_File_open(MPI_COMM_WORLD, filename,
MPI_MODE_WRONLY | MPI_MODE_CREATE, info, &fh);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_open");
- errcode = MPIX_File_iwrite_at_all(fh, off, buffer, BUFSIZE, MPI_INT,
+ errcode = MPI_File_iwrite_at_all(fh, off, buffer, BUFSIZE, MPI_INT,
&request);
- if (errcode != MPI_SUCCESS) handle_error(errcode, "MPIX_File_iwrite_at_all");
+ if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_iwrite_at_all");
MPI_Wait(&request, &status);
errcode = MPI_File_close(&fh);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_close");
@@ -70,9 +70,9 @@ int main(int argc, char **argv)
errcode = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info,
&fh);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_open");
- errcode = MPIX_File_iread_at_all(fh, off, buf2, BUFSIZE, MPI_INT,
+ errcode = MPI_File_iread_at_all(fh, off, buf2, BUFSIZE, MPI_INT,
&request);
- if (errcode != MPI_SUCCESS) handle_error(errcode, "MPIX_File_iread_at_all");
+ if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_iread_at_all");
MPI_Wait(&request, &status);
errcode = MPI_File_close(&fh);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_close");
diff --git a/test/mpi/io/i_bigtype.c b/test/mpi/io/i_bigtype.c
index 301b54c..a5968a9 100644
--- a/test/mpi/io/i_bigtype.c
+++ b/test/mpi/io/i_bigtype.c
@@ -100,7 +100,7 @@ int main(int argc, char **argv)
}
/* write everything */
- rc = MPIX_File_iwrite_at_all(fh, 0, buf_write, 1, mem_type, &request);
+ rc = MPI_File_iwrite_at_all(fh, 0, buf_write, 1, mem_type, &request);
if (rc != MPI_SUCCESS) {
printf("%d ERROR IWRITE AT ALL\n", rc);
exit(1);
@@ -115,7 +115,7 @@ int main(int argc, char **argv)
}
/* read everything */
- rc = MPIX_File_iread_at_all(fh, 0, buf_read, 1, mem_type, &request);
+ rc = MPI_File_iread_at_all(fh, 0, buf_read, 1, mem_type, &request);
if (rc != MPI_SUCCESS) {
printf("%d ERROR IREAD AT ALL\n", rc);
exit(1);
diff --git a/test/mpi/io/i_coll_test.c b/test/mpi/io/i_coll_test.c
index 982f4e5..5f65cc5 100644
--- a/test/mpi/io/i_coll_test.c
+++ b/test/mpi/io/i_coll_test.c
@@ -122,8 +122,8 @@ int main(int argc, char **argv)
errcode = MPI_File_set_view(fh, 0, MPI_INT, newtype, "native", info);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_set_view");
- errcode = MPIX_File_iwrite_all(fh, writebuf, bufcount, MPI_INT, &request);
- if (errcode != MPI_SUCCESS) handle_error(errcode, "MPIX_File_iwrite_all");
+ errcode = MPI_File_iwrite_all(fh, writebuf, bufcount, MPI_INT, &request);
+ if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_iwrite_all");
MPI_Wait(&request, &status);
errcode = MPI_File_close(&fh);
@@ -163,8 +163,8 @@ int main(int argc, char **argv)
errcode = MPI_File_set_view(fh, 0, MPI_INT, newtype, "native", info);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_set_view");
- errcode = MPIX_File_iread_all(fh, readbuf, bufcount, MPI_INT, &request);
- if (errcode != MPI_SUCCESS) handle_error(errcode, "MPIX_File_iread_all");
+ errcode = MPI_File_iread_all(fh, readbuf, bufcount, MPI_INT, &request);
+ if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_iread_all");
MPI_Wait(&request, &status);
errcode = MPI_File_close(&fh);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_File_close");
diff --git a/test/mpi/io/i_darray_read.c b/test/mpi/io/i_darray_read.c
index dccb660..8fc970d 100644
--- a/test/mpi/io/i_darray_read.c
+++ b/test/mpi/io/i_darray_read.c
@@ -92,7 +92,7 @@ int main(int argc, char *argv[])
MPI_INFO_NULL, &mpi_fh));
CHECK(MPI_File_set_view(mpi_fh, 0, MPI_DOUBLE, darray, "native",
MPI_INFO_NULL));
- CHECK(MPIX_File_iread_all(mpi_fh, ldata, nelem, MPI_DOUBLE, &request));
+ CHECK(MPI_File_iread_all(mpi_fh, ldata, nelem, MPI_DOUBLE, &request));
CHECK(MPI_Wait(&request, &status));
CHECK(MPI_File_close(&mpi_fh));
diff --git a/test/mpi/io/i_hindexed.c b/test/mpi/io/i_hindexed.c
index f8523ed..93471eb 100644
--- a/test/mpi/io/i_hindexed.c
+++ b/test/mpi/io/i_hindexed.c
@@ -174,7 +174,7 @@ int main(int argc, char **argv)
offset = i * global_array_size;
/* set the file view */
MPI_File_set_view(fh, offset, MPI_BYTE, ftype, "native", MPI_INFO_NULL);
- MPIX_File_iwrite_all(fh, buf, ftype_size, MPI_CHAR, &request[i]);
+ MPI_File_iwrite_all(fh, buf, ftype_size, MPI_CHAR, &request[i]);
}
MPI_Waitall(num_io, request, statuses);
MPI_File_close(&fh);
diff --git a/test/mpi/io/i_hindexed_io.c b/test/mpi/io/i_hindexed_io.c
index 5b17819..40e9f99 100644
--- a/test/mpi/io/i_hindexed_io.c
+++ b/test/mpi/io/i_hindexed_io.c
@@ -71,13 +71,13 @@ int main(int argc, char **argv)
MPI_INFO_NULL));
/* write everything */
- CHECK(MPIX_File_iwrite_at_all(fh, 0, data, 1, mem_type, &request));
+ CHECK(MPI_File_iwrite_at_all(fh, 0, data, 1, mem_type, &request));
MPI_Wait(&request, &status);
/* verify */
CHECK(MPI_File_set_view(fh, 0, MPI_BYTE, MPI_BYTE, "native",
MPI_INFO_NULL));
- CHECK(MPIX_File_iread_at_all(fh, 0,
+ CHECK(MPI_File_iread_at_all(fh, 0,
verify, (HEADER + PAD + BLK_COUNT * DATA_SIZE) / sizeof(int),
MPI_INT, &request));
MPI_Wait(&request, &status);
diff --git a/test/mpi/io/i_noncontig_coll.c b/test/mpi/io/i_noncontig_coll.c
index f625e9b..474023d 100644
--- a/test/mpi/io/i_noncontig_coll.c
+++ b/test/mpi/io/i_noncontig_coll.c
@@ -79,7 +79,7 @@ int main(int argc, char **argv)
for (i = 0; i < SIZE; i++)
buf[i] = i + mynod * SIZE;
- MPIX_File_iwrite_all(fh, buf, 1, newtype, &request);
+ MPI_File_iwrite_all(fh, buf, 1, newtype, &request);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Wait(&request, &status);
@@ -87,7 +87,7 @@ int main(int argc, char **argv)
for (i = 0; i < SIZE; i++)
buf[i] = -1;
- MPIX_File_iread_at_all(fh, 0, buf, 1, newtype, &request);
+ MPI_File_iread_at_all(fh, 0, buf, 1, newtype, &request);
MPI_Wait(&request, &status);
for (i = 0; i < SIZE; i++) {
@@ -134,7 +134,7 @@ int main(int argc, char **argv)
MPI_INFO_NULL, &fh);
for (i = 0; i < SIZE; i++) buf[i] = i + mynod * SIZE;
- MPIX_File_iwrite_at_all(fh, mynod * (SIZE / 2) * sizeof(int), buf, 1,
+ MPI_File_iwrite_at_all(fh, mynod * (SIZE / 2) * sizeof(int), buf, 1,
newtype, &request);
MPI_Barrier(MPI_COMM_WORLD);
@@ -142,7 +142,7 @@ int main(int argc, char **argv)
for (i = 0; i < SIZE; i++) buf[i] = -1;
- MPIX_File_iread_at_all(fh, mynod * (SIZE / 2) * sizeof(int), buf, 1,
+ MPI_File_iread_at_all(fh, mynod * (SIZE / 2) * sizeof(int), buf, 1,
newtype, &request);
MPI_Wait(&request, &status);
@@ -192,7 +192,7 @@ int main(int argc, char **argv)
MPI_File_set_view(fh, 0, MPI_INT, newtype, "native", MPI_INFO_NULL);
for (i = 0; i < SIZE; i++) buf[i] = i + mynod * SIZE;
- MPIX_File_iwrite_all(fh, buf, SIZE, MPI_INT, &request);
+ MPI_File_iwrite_all(fh, buf, SIZE, MPI_INT, &request);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Wait(&request, &status);
@@ -200,7 +200,7 @@ int main(int argc, char **argv)
for (i = 0; i < SIZE; i++)
buf[i] = -1;
- MPIX_File_iread_at_all(fh, 0, buf, SIZE, MPI_INT, &request);
+ MPI_File_iread_at_all(fh, 0, buf, SIZE, MPI_INT, &request);
MPI_Wait(&request, &status);
for (i = 0; i < SIZE; i++) {
diff --git a/test/mpi/io/i_noncontig_coll2.c b/test/mpi/io/i_noncontig_coll2.c
index 83d8ab8..3b97f24 100644
--- a/test/mpi/io/i_noncontig_coll2.c
+++ b/test/mpi/io/i_noncontig_coll2.c
@@ -402,9 +402,9 @@ int test_file(char *filename, int mynod, int nprocs, char *cb_hosts,
MPI_File_set_view(fh, 0, MPI_INT, newtype, "native", info);
for (i = 0; i < SIZE; i++) buf[i] = SEEDER(mynod, i, SIZE);
- errcode = MPIX_File_iwrite_all(fh, buf, 1, newtype, &request);
+ errcode = MPI_File_iwrite_all(fh, buf, 1, newtype, &request);
if (errcode != MPI_SUCCESS) {
- handle_error(errcode, "nc mem - nc file: MPIX_File_iwrite_all");
+ handle_error(errcode, "nc mem - nc file: MPI_File_iwrite_all");
}
MPI_Barrier(MPI_COMM_WORLD);
@@ -412,9 +412,9 @@ int test_file(char *filename, int mynod, int nprocs, char *cb_hosts,
for (i = 0; i < SIZE; i++) buf[i] = -1;
- errcode = MPIX_File_iread_at_all(fh, 0, buf, 1, newtype, &request);
+ errcode = MPI_File_iread_at_all(fh, 0, buf, 1, newtype, &request);
if (errcode != MPI_SUCCESS) {
- handle_error(errcode, "nc mem - nc file: MPIX_File_iread_at_all");
+ handle_error(errcode, "nc mem - nc file: MPI_File_iread_at_all");
}
MPI_Wait(&request, &status);
@@ -467,10 +467,10 @@ int test_file(char *filename, int mynod, int nprocs, char *cb_hosts,
info, &fh);
for (i = 0; i < SIZE; i++) buf[i] = SEEDER(mynod, i, SIZE);
- errcode = MPIX_File_iwrite_at_all(fh, mynod * (SIZE / nprocs) * sizeof(int),
+ errcode = MPI_File_iwrite_at_all(fh, mynod * (SIZE / nprocs) * sizeof(int),
buf, 1, newtype, &request);
if (errcode != MPI_SUCCESS)
- handle_error(errcode, "nc mem - c file: MPIX_File_iwrite_at_all");
+ handle_error(errcode, "nc mem - c file: MPI_File_iwrite_at_all");
MPI_Barrier(MPI_COMM_WORLD);
MPI_Wait(&request, &status);
@@ -478,10 +478,10 @@ int test_file(char *filename, int mynod, int nprocs, char *cb_hosts,
for (i = 0; i < SIZE; i++)
buf[i] = -1;
- errcode = MPIX_File_iread_at_all(fh, mynod * (SIZE / nprocs) * sizeof(int),
+ errcode = MPI_File_iread_at_all(fh, mynod * (SIZE / nprocs) * sizeof(int),
buf, 1, newtype, &request);
if (errcode != MPI_SUCCESS)
- handle_error(errcode, "nc mem - c file: MPIX_File_iread_at_all");
+ handle_error(errcode, "nc mem - c file: MPI_File_iread_at_all");
MPI_Wait(&request, &status);
/* just like as above */
@@ -527,18 +527,18 @@ int test_file(char *filename, int mynod, int nprocs, char *cb_hosts,
for (i = 0; i < SIZE; i++)
buf[i] = SEEDER(mynod, i, SIZE);
- errcode = MPIX_File_iwrite_all(fh, buf, SIZE, MPI_INT, &request);
+ errcode = MPI_File_iwrite_all(fh, buf, SIZE, MPI_INT, &request);
if (errcode != MPI_SUCCESS)
- handle_error(errcode, "c mem - nc file: MPIX_File_iwrite_all");
+ handle_error(errcode, "c mem - nc file: MPI_File_iwrite_all");
MPI_Barrier(MPI_COMM_WORLD);
MPI_Wait(&request, &status);
for (i = 0; i < SIZE; i++) buf[i] = -1;
- errcode = MPIX_File_iread_at_all(fh, 0, buf, SIZE, MPI_INT, &request);
+ errcode = MPI_File_iread_at_all(fh, 0, buf, SIZE, MPI_INT, &request);
if (errcode != MPI_SUCCESS)
- handle_error(errcode, "c mem - nc file: MPIX_File_iread_at_all");
+ handle_error(errcode, "c mem - nc file: MPI_File_iread_at_all");
MPI_Wait(&request, &status);
/* same crazy checking */
diff --git a/test/mpi/io/i_rdwrord.c b/test/mpi/io/i_rdwrord.c
index ca4d625..eed3f7b 100644
--- a/test/mpi/io/i_rdwrord.c
+++ b/test/mpi/io/i_rdwrord.c
@@ -42,7 +42,7 @@ int main(int argc, char *argv[])
/* Set the individual pointer to 0, since we want to use a iread_all */
MPI_File_seek(fh, 0, MPI_SEEK_SET);
- rc = MPIX_File_iread_all(fh, buf, size, MPI_INT, &request);
+ rc = MPI_File_iread_all(fh, buf, size, MPI_INT, &request);
if (rc != MPI_SUCCESS) {
MTestPrintErrorMsg("File_iread_all", rc);
errs++;
diff --git a/test/mpi/io/i_setviewcur.c b/test/mpi/io/i_setviewcur.c
index c696628..61e1558 100644
--- a/test/mpi/io/i_setviewcur.c
+++ b/test/mpi/io/i_setviewcur.c
@@ -39,7 +39,7 @@ int main(int argc, char *argv[])
MPI_Comm_rank(comm, &rank);
buf = (int *) malloc(size * sizeof(int));
buf[0] = size;
- err = MPIX_File_iwrite_all(fh, buf, 1, MPI_INT, &request);
+ err = MPI_File_iwrite_all(fh, buf, 1, MPI_INT, &request);
if (err) {
errs++;
MTestPrintErrorMsg("Iwrite_all", err);
diff --git a/test/mpi/io/i_types_with_zeros.c b/test/mpi/io/i_types_with_zeros.c
index 3f32030..d18b065 100644
--- a/test/mpi/io/i_types_with_zeros.c
+++ b/test/mpi/io/i_types_with_zeros.c
@@ -100,8 +100,8 @@ static int test_indexed_with_zeros(char *filename, int testcase)
if (err != MPI_SUCCESS) handle_error(err, "MPI_File_open");
err = MPI_File_set_view(fh, 0, MPI_INT, filetype, "native", MPI_INFO_NULL);
if (err != MPI_SUCCESS) handle_error(err, "MPI_File_set_view");
- err = MPIX_File_iwrite_all(fh, buf, buflen, MPI_INT, &request);
- if (err != MPI_SUCCESS) handle_error(err, "MPIX_File_iwrite_all");
+ err = MPI_File_iwrite_all(fh, buf, buflen, MPI_INT, &request);
+ if (err != MPI_SUCCESS) handle_error(err, "MPI_File_iwrite_all");
err = MPI_Wait(&request, &status);
if (err != MPI_SUCCESS) handle_error(err, "MPI_Wait");
MPI_Type_free(&filetype);
diff --git a/test/mpi/io/testlist.in b/test/mpi/io/testlist.in
index 5fee38d..1dd8bbe 100644
--- a/test/mpi/io/testlist.in
+++ b/test/mpi/io/testlist.in
@@ -12,15 +12,15 @@ resized 1
resized2 1 xfail=ticket2088
bigtype 1
hindexed_io 1
-@mpix@i_bigtype 1
-@mpix@i_hindexed_io 1
-@mpix@i_rdwrord 4
-@mpix@i_setviewcur 4
-@mpix@i_aggregation1 4
-@mpix@i_aggregation2 4
-@mpix@i_coll_test 4
-@mpix@i_darray_read 4
-@mpix@i_hindexed 4
-@mpix@i_noncontig_coll 2
-@mpix@i_noncontig_coll2 4
-@mpix@i_types_with_zeros 2
+i_bigtype 1 mpiversion=3.1
+i_hindexed_io 1 mpiversion=3.1
+i_rdwrord 4 mpiversion=3.1
+i_setviewcur 4 mpiversion=3.1
+i_aggregation1 4 mpiversion=3.1
+i_aggregation2 4 mpiversion=3.1
+i_coll_test 4 mpiversion=3.1
+i_darray_read 4 mpiversion=3.1
+i_hindexed 4 mpiversion=3.1
+i_noncontig_coll 2 mpiversion=3.1
+i_noncontig_coll2 4 mpiversion=3.1
+i_types_with_zeros 2 mpiversion=3.1
http://git.mpich.org/mpich.git/commitdiff/6e25f1e703ac66e2433b026cc92374706…
commit 6e25f1e703ac66e2433b026cc9237470678ed9bf
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Fri May 29 10:29:31 2015 -0500
Replace MPIX_T_ with MPI_T_ for MPI-3.1
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index 11c77a0..e4e2b40 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -865,12 +865,14 @@ typedef int (MPIX_Grequest_wait_function)(int, void **, double, MPI_Status *);
#define MPI_T_ERR_PVAR_NO_STARTSTOP 70 /* Pvar can't be started or stopped */
#define MPI_T_ERR_PVAR_NO_WRITE 71 /* Pvar can't be written or reset */
#define MPI_T_ERR_PVAR_NO_ATOMIC 72 /* Pvar can't be R/W atomically */
+#define MPI_T_ERR_INVALID_NAME 73 /* Name doesn't match */
+#define MPI_T_ERR_INVALID 74 /* Generic error code for MPI_T added in MPI-3.1 */
#define MPI_ERR_LASTCODE 0x3fffffff /* Last valid error code for a
predefined error class */
/* WARNING: this is also defined in mpishared.h. Update both locations */
-#define MPICH_ERR_LAST_CLASS 72 /* It is also helpful to know the
+#define MPICH_ERR_LAST_CLASS 74 /* It is also helpful to know the
last valid class */
#define MPICH_ERR_FIRST_MPIX 100 /* Define a gap here because sock is
@@ -882,10 +884,8 @@ typedef int (MPIX_Grequest_wait_function)(int, void **, double, MPI_Status *);
#define MPIX_ERR_PROC_FAILED_PENDING MPICH_ERR_FIRST_MPIX+2 /* A failure has caused this request
* to be pending */
#define MPIX_ERR_REVOKED MPICH_ERR_FIRST_MPIX+3 /* The communciation object has been revoked */
-#define MPIX_T_ERR_INVALID_NAME MPICH_ERR_FIRST_MPIX+4 /* Name doesn't match */
-#define MPIX_T_ERR_INVALID MPICH_ERR_FIRST_MPIX+5 /* Generic error code for MPI_T added in MPI-3.1 */
-#define MPICH_ERR_LAST_MPIX MPICH_ERR_FIRST_MPIX+5
+#define MPICH_ERR_LAST_MPIX MPICH_ERR_FIRST_MPIX+3
/* End of MPI's error classes */
@@ -1532,9 +1532,9 @@ int MPI_T_category_get_cvars(int cat_index, int len, int indices[]);
int MPI_T_category_get_pvars(int cat_index, int len, int indices[]);
int MPI_T_category_get_categories(int cat_index, int len, int indices[]);
int MPI_T_category_changed(int *stamp);
-int MPIX_T_cvar_get_index(const char *name, int *cvar_index);
-int MPIX_T_pvar_get_index(const char *name, int var_class, int *pvar_index);
-int MPIX_T_category_get_index(const char *name, int *cat_index);
+int MPI_T_cvar_get_index(const char *name, int *cvar_index);
+int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index);
+int MPI_T_category_get_index(const char *name, int *cat_index);
/* End Skip Prototypes */
@@ -2178,9 +2178,9 @@ int PMPI_T_category_get_cvars(int cat_index, int len, int indices[]);
int PMPI_T_category_get_pvars(int cat_index, int len, int indices[]);
int PMPI_T_category_get_categories(int cat_index, int len, int indices[]);
int PMPI_T_category_changed(int *stamp);
-int PMPIX_T_cvar_get_index(const char *name, int *cvar_index);
-int PMPIX_T_pvar_get_index(const char *name, int var_class, int *pvar_index);
-int PMPIX_T_category_get_index(const char *name, int *cat_index);
+int PMPI_T_cvar_get_index(const char *name, int *cvar_index);
+int PMPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index);
+int PMPI_T_category_get_index(const char *name, int *cat_index);
/* End Skip Prototypes */
diff --git a/src/include/mpishared.h b/src/include/mpishared.h
index 46a6bf1..16cf8ed 100644
--- a/src/include/mpishared.h
+++ b/src/include/mpishared.h
@@ -62,7 +62,7 @@
#include "mpierrs.h"
/* FIXME: This is extracted from mpi.h.in, where it may not be appropriate */
-#define MPICH_ERR_LAST_CLASS 72 /* It is also helpful to know the
+#define MPICH_ERR_LAST_CLASS 74 /* It is also helpful to know the
last valid class */
#include "mpifunc.h"
diff --git a/src/mpi_t/cat_get_index.c b/src/mpi_t/cat_get_index.c
index 44d6ee1..331ef2b 100644
--- a/src/mpi_t/cat_get_index.c
+++ b/src/mpi_t/cat_get_index.c
@@ -6,31 +6,31 @@
#include "mpiimpl.h"
-/* -- Begin Profiling Symbol Block for routine MPIX_T_category_get_index */
+/* -- Begin Profiling Symbol Block for routine MPI_T_category_get_index */
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_T_category_get_index = PMPIX_T_category_get_index
+#pragma weak MPI_T_category_get_index = PMPI_T_category_get_index
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_T_category_get_index MPIX_T_category_get_index
+#pragma _HP_SECONDARY_DEF PMPI_T_category_get_index MPI_T_category_get_index
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_T_category_get_index as PMPIX_T_category_get_index
+#pragma _CRI duplicate MPI_T_category_get_index as PMPI_T_category_get_index
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPIX_T_category_get_index(const char *name, int *cat_index) __attribute__((weak,alias("PMPIX_T_category_get_index")));
+int MPI_T_category_get_index(const char *name, int *cat_index) __attribute__((weak,alias("PMPI_T_category_get_index")));
#endif
/* -- End Profiling Symbol Block */
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
#ifndef MPICH_MPI_FROM_PMPI
-#undef MPIX_T_category_get_index
-#define MPIX_T_category_get_index PMPIX_T_category_get_index
+#undef MPI_T_category_get_index
+#define MPI_T_category_get_index PMPI_T_category_get_index
#endif /* MPICH_MPI_FROM_PMPI */
#undef FUNCNAME
-#define FUNCNAME MPIX_T_category_get_index
+#define FUNCNAME MPI_T_category_get_index
#undef FCNAME
#define FCNAME MPIU_QUOTE(FUNCNAME)
/*@
-MPIX_T_category_get_index - Get the index of a category
+MPI_T_category_get_index - Get the index of a category
Output Parameters:
. name - the name of the category (string)
@@ -42,17 +42,17 @@ Output Parameters:
.N Errors
.N MPI_SUCCESS
-.N MPIX_T_ERR_INVALID_NAME
+.N MPI_T_ERR_INVALID_NAME
.N MPI_T_ERR_NOT_INITIALIZED
@*/
-int MPIX_T_category_get_index(const char *name, int *cat_index)
+int MPI_T_category_get_index(const char *name, int *cat_index)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_T_CATEGORY_GET_INDEX);
+ MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_T_CATEGORY_GET_INDEX);
+ MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -75,14 +75,14 @@ int MPIX_T_category_get_index(const char *name, int *cat_index)
if (hash_entry != NULL) {
*cat_index = hash_entry->idx;
} else {
- mpi_errno = MPIX_T_ERR_INVALID_NAME;
+ mpi_errno = MPI_T_ERR_INVALID_NAME;
goto fn_fail;
}
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_T_CATEGORY_GET_INDEX);
+ MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CATEGORY_GET_INDEX);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/cvar_get_index.c b/src/mpi_t/cvar_get_index.c
index a18e181..e40abbb 100644
--- a/src/mpi_t/cvar_get_index.c
+++ b/src/mpi_t/cvar_get_index.c
@@ -6,31 +6,31 @@
#include "mpiimpl.h"
-/* -- Begin Profiling Symbol Block for routine MPIX_T_cvar_get_index */
+/* -- Begin Profiling Symbol Block for routine MPI_T_cvar_get_index */
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_T_cvar_get_index = PMPIX_T_cvar_get_index
+#pragma weak MPI_T_cvar_get_index = PMPI_T_cvar_get_index
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_T_cvar_get_index MPIX_T_cvar_get_index
+#pragma _HP_SECONDARY_DEF PMPI_T_cvar_get_index MPI_T_cvar_get_index
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_T_cvar_get_index as PMPIX_T_cvar_get_index
+#pragma _CRI duplicate MPI_T_cvar_get_index as PMPI_T_cvar_get_index
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPIX_T_cvar_get_index(const char *name, int *cvar_index) __attribute__((weak,alias("PMPIX_T_cvar_get_index")));
+int MPI_T_cvar_get_index(const char *name, int *cvar_index) __attribute__((weak,alias("PMPI_T_cvar_get_index")));
#endif
/* -- End Profiling Symbol Block */
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
#ifndef MPICH_MPI_FROM_PMPI
-#undef MPIX_T_cvar_get_index
-#define MPIX_T_cvar_get_index PMPIX_T_cvar_get_index
+#undef MPI_T_cvar_get_index
+#define MPI_T_cvar_get_index PMPI_T_cvar_get_index
#endif /* MPICH_MPI_FROM_PMPI */
#undef FUNCNAME
-#define FUNCNAME MPIX_T_cvar_get_index
+#define FUNCNAME MPI_T_cvar_get_index
#undef FCNAME
#define FCNAME MPIU_QUOTE(FUNCNAME)
/*@
-MPIX_T_cvar_get_index - Get the index of a control variable
+MPI_T_cvar_get_index - Get the index of a control variable
Output Parameters:
. name - name of the control variable (string)
@@ -42,17 +42,17 @@ Output Parameters:
.N Errors
.N MPI_SUCCESS
-.N MPIX_T_ERR_INVALID_NAME
+.N MPI_T_ERR_INVALID_NAME
.N MPI_T_ERR_NOT_INITIALIZED
@*/
-int MPIX_T_cvar_get_index(const char *name, int *cvar_index)
+int MPI_T_cvar_get_index(const char *name, int *cvar_index)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_T_CVAR_GET_INDEX);
+ MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_CVAR_GET_INDEX);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_T_CVAR_GET_INDEX);
+ MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_CVAR_GET_INDEX);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -75,14 +75,14 @@ int MPIX_T_cvar_get_index(const char *name, int *cvar_index)
if (hash_entry != NULL) {
*cvar_index = hash_entry->idx;
} else {
- mpi_errno = MPIX_T_ERR_INVALID_NAME;
+ mpi_errno = MPI_T_ERR_INVALID_NAME;
goto fn_fail;
}
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_T_CVAR_GET_INDEX);
+ MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_CVAR_GET_INDEX);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/errnames.txt b/src/mpi_t/errnames.txt
index cbb3f7d..37c7f3c 100644
--- a/src/mpi_t/errnames.txt
+++ b/src/mpi_t/errnames.txt
@@ -66,9 +66,9 @@
**mpi_t_category_get_categories %d %d %p: MPI_T_category_get_categories(cat_index=%d, len=%d, indices=%p)
**mpi_t_category_changed: MPI_T_category_changed failed
**mpi_t_category_changed %p: MPI_T_category_changed(stamp=%p)
-**mpix_t_cvar_get_index: mpix_t_cvar_get_index failed
-**mpix_t_cvar_get_index %p %p: mpix_t_cvar_get_index(name=%p, cvar_index=%p)
-**mpix_t_pvar_get_index: mpix_t_pvar_get_index failed
-**mpix_t_pvar_get_index %p %d %p: mpix_t_pvar_get_index(name=%p, var_class=%d, pvar_index=%p)
-**mpix_t_category_get_index: mpix_t_category_get_index failed
-**mpix_t_category_get_index %p %p: mpix_t_category_get_index(name=%p, cat_index=%p)
+**mpi_t_cvar_get_index: mpi_t_cvar_get_index failed
+**mpi_t_cvar_get_index %p %p: mpi_t_cvar_get_index(name=%p, cvar_index=%p)
+**mpi_t_pvar_get_index: mpi_t_pvar_get_index failed
+**mpi_t_pvar_get_index %p %d %p: mpi_t_pvar_get_index(name=%p, var_class=%d, pvar_index=%p)
+**mpi_t_category_get_index: mpi_t_category_get_index failed
+**mpi_t_category_get_index %p %p: mpi_t_category_get_index(name=%p, cat_index=%p)
diff --git a/src/mpi_t/pvar_get_index.c b/src/mpi_t/pvar_get_index.c
index b65408c..bb1639c 100644
--- a/src/mpi_t/pvar_get_index.c
+++ b/src/mpi_t/pvar_get_index.c
@@ -6,31 +6,31 @@
#include "mpiimpl.h"
-/* -- Begin Profiling Symbol Block for routine MPIX_T_pvar_get_index */
+/* -- Begin Profiling Symbol Block for routine MPI_T_pvar_get_index */
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_T_pvar_get_index = PMPIX_T_pvar_get_index
+#pragma weak MPI_T_pvar_get_index = PMPI_T_pvar_get_index
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_T_pvar_get_index MPIX_T_pvar_get_index
+#pragma _HP_SECONDARY_DEF PMPI_T_pvar_get_index MPI_T_pvar_get_index
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_T_pvar_get_index as PMPIX_T_pvar_get_index
+#pragma _CRI duplicate MPI_T_pvar_get_index as PMPI_T_pvar_get_index
#elif defined(HAVE_WEAK_ATTRIBUTE)
-int MPIX_T_pvar_get_index(const char *name, int var_class, int *pvar_index) __attribute__((weak,alias("PMPIX_T_pvar_get_index")));
+int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index) __attribute__((weak,alias("PMPI_T_pvar_get_index")));
#endif
/* -- End Profiling Symbol Block */
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
#ifndef MPICH_MPI_FROM_PMPI
-#undef MPIX_T_pvar_get_index
-#define MPIX_T_pvar_get_index PMPIX_T_pvar_get_index
+#undef MPI_T_pvar_get_index
+#define MPI_T_pvar_get_index PMPI_T_pvar_get_index
#endif /* MPICH_MPI_FROM_PMPI */
#undef FUNCNAME
-#define FUNCNAME MPIX_T_pvar_get_index
+#define FUNCNAME MPI_T_pvar_get_index
#undef FCNAME
#define FCNAME MPIU_QUOTE(FUNCNAME)
/*@
-MPIX_T_pvar_get_index - Get the index of a performance variable
+MPI_T_pvar_get_index - Get the index of a performance variable
Input Parameters:
. name - the name of the performance variable (string)
@@ -43,17 +43,17 @@ Output Parameters:
.N Errors
.N MPI_SUCCESS
-.N MPIX_T_ERR_INVALID_NAME
+.N MPI_T_ERR_INVALID_NAME
.N MPI_T_ERR_NOT_INITIALIZED
@*/
-int MPIX_T_pvar_get_index(const char *name, int var_class, int *pvar_index)
+int MPI_T_pvar_get_index(const char *name, int var_class, int *pvar_index)
{
int mpi_errno = MPI_SUCCESS;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_T_PVAR_GET_INDEX);
+ MPID_MPI_STATE_DECL(MPID_STATE_MPI_T_PVAR_GET_INDEX);
MPIR_ERRTEST_MPIT_INITIALIZED(mpi_errno);
MPIR_T_THREAD_CS_ENTER();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_T_PVAR_GET_INDEX);
+ MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_T_PVAR_GET_INDEX);
/* Validate parameters */
# ifdef HAVE_ERROR_CHECKING
@@ -65,7 +65,7 @@ int MPIX_T_pvar_get_index(const char *name, int var_class, int *pvar_index)
if (var_class < MPIR_T_PVAR_CLASS_FIRST ||
var_class >= MPIR_T_PVAR_CLASS_LAST)
{
- mpi_errno = MPIX_T_ERR_INVALID_NAME;
+ mpi_errno = MPI_T_ERR_INVALID_NAME;
goto fn_fail;
}
}
@@ -83,14 +83,14 @@ int MPIX_T_pvar_get_index(const char *name, int var_class, int *pvar_index)
if (hash_entry != NULL) {
*pvar_index = hash_entry->idx;
} else {
- mpi_errno = MPIX_T_ERR_INVALID_NAME;
+ mpi_errno = MPI_T_ERR_INVALID_NAME;
goto fn_fail;
}
/* ... end of body of routine ... */
fn_exit:
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_T_PVAR_GET_INDEX);
+ MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_T_PVAR_GET_INDEX);
MPIR_T_THREAD_CS_EXIT();
return mpi_errno;
diff --git a/src/mpi_t/pvar_read.c b/src/mpi_t/pvar_read.c
index ab40212..8de6e01 100644
--- a/src/mpi_t/pvar_read.c
+++ b/src/mpi_t/pvar_read.c
@@ -35,12 +35,12 @@ int MPIR_T_pvar_read_impl(MPI_T_pvar_session session, MPI_T_pvar_handle handle,
int i, mpi_errno = MPI_SUCCESS;
/* Reading a never started pvar, or a stopped and then reset wartermark,
- * will run into this nasty situation. MPI-3.0 does not define what error
- * code should be returned. We return a generic MPI error code. Once MPI-3.1
- * is approved, it should be changed to MPI_T_ERR_INVALID.
+ * will run into this nasty situation. MPI-3.0 did not define what error
+ * code should be returned. We returned a generic MPI error code. With MPI-3.1
+ * approved, we changed it to MPI_T_ERR_INVALID.
*/
if (!MPIR_T_pvar_is_oncestarted(handle)) {
- mpi_errno = MPI_ERR_OTHER;
+ mpi_errno = MPI_T_ERR_INVALID;
goto fn_fail;
}
diff --git a/test/mpi/mpi_t/getindex.c b/test/mpi/mpi_t/getindex.c
index 6e13bcf..ede43a6 100644
--- a/test/mpi/mpi_t/getindex.c
+++ b/test/mpi/mpi_t/getindex.c
@@ -4,7 +4,7 @@
* See COPYRIGHT in top-level directory.
*/
-/* Test MPIX_T_xxx_get_index() for cvars, pvars and categories.
+/* Test MPI_T_xxx_get_index() for cvars, pvars and categories.
*/
#include <stdio.h>
#include "mpi.h"
@@ -25,23 +25,23 @@ int main(int argc, char *argv[])
MPI_T_init_thread(required, &provided);
MPI_Init(&argc, &argv);
- /* Test MPIX_T_cvar_get_index with both valid and bogus names */
+ /* Test MPI_T_cvar_get_index with both valid and bogus names */
MPI_T_cvar_get_num(&num_cvar);
if (verbose) fprintf(stdout, "%d MPI Control Variables\n", num_cvar);
for (i = 0; i < num_cvar; i++) {
namelen = sizeof(name);
MPI_T_cvar_get_info(i, name, &namelen, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if (namelen <= 128) {
- errno = MPIX_T_cvar_get_index(name, &cvar_index);
+ errno = MPI_T_cvar_get_index(name, &cvar_index);
if (errno != MPI_SUCCESS || cvar_index != i) errs++;
}
}
- errno = MPIX_T_cvar_get_index("AN INVALID CVAR NAME FOR TEST", &cvar_index);
- if (errno != MPIX_T_ERR_INVALID_NAME) errs++;
+ errno = MPI_T_cvar_get_index("AN INVALID CVAR NAME FOR TEST", &cvar_index);
+ if (errno != MPI_T_ERR_INVALID_NAME) errs++;
- if (errs) fprintf(stdout, "Errors found in MPIX_T_cvar_get_index\n");
+ if (errs) fprintf(stdout, "Errors found in MPI_T_cvar_get_index\n");
- /* Test MPIX_T_pvar_get_index with both valid and bogus names */
+ /* Test MPI_T_pvar_get_index with both valid and bogus names */
MPI_T_pvar_get_num(&num_pvar);
if (verbose) fprintf(stdout, "%d MPI Performance Variables\n", num_pvar);
@@ -50,28 +50,28 @@ int main(int argc, char *argv[])
MPI_T_pvar_get_info(i, name, &namelen, NULL, &pvar_class, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL);
if (namelen <= 128) {
- errno = MPIX_T_pvar_get_index(name, pvar_class, &pvar_index);
+ errno = MPI_T_pvar_get_index(name, pvar_class, &pvar_index);
if (errno != MPI_SUCCESS || pvar_index != i) errs++;
}
}
- errno = MPIX_T_pvar_get_index("AN INVALID PVAR NAME FOR TEST", MPI_T_PVAR_CLASS_COUNTER, &cvar_index);
- if (errno != MPIX_T_ERR_INVALID_NAME) errs++;
- if (errs) fprintf(stdout, "Errors found in MPIX_T_cvar_get_index\n");
+ errno = MPI_T_pvar_get_index("AN INVALID PVAR NAME FOR TEST", MPI_T_PVAR_CLASS_COUNTER, &cvar_index);
+ if (errno != MPI_T_ERR_INVALID_NAME) errs++;
+ if (errs) fprintf(stdout, "Errors found in MPI_T_cvar_get_index\n");
- /* Test MPIX_T_category_get_index with both valid and bogus names */
+ /* Test MPI_T_category_get_index with both valid and bogus names */
MPI_T_category_get_num(&num_cat);
if (verbose) fprintf(stdout, "%d MPI_T categories\n", num_cat);
for (i = 0; i < num_cat; i++) {
namelen = sizeof(name);
MPI_T_category_get_info(i, name, &namelen, NULL, NULL, NULL, NULL, NULL);
if (namelen <= 128) {
- errno = MPIX_T_category_get_index(name, &cat_index);
+ errno = MPI_T_category_get_index(name, &cat_index);
if (errno != MPI_SUCCESS || cat_index != i) errs++;
}
}
- errno = MPIX_T_category_get_index("AN INVALID CATEGORY NAME FOR TEST", &cat_index);
- if (errno != MPIX_T_ERR_INVALID_NAME) errs++;
- if (errs) fprintf(stdout, "Errors found in MPIX_T_cvar_get_index\n");
+ errno = MPI_T_category_get_index("AN INVALID CATEGORY NAME FOR TEST", &cat_index);
+ if (errno != MPI_T_ERR_INVALID_NAME) errs++;
+ if (errs) fprintf(stdout, "Errors found in MPI_T_cvar_get_index\n");
MPI_T_finalize();
MPI_Finalize();
diff --git a/test/mpi/mpi_t/testlist b/test/mpi/mpi_t/testlist
index bded0d2..26a0c7e 100644
--- a/test/mpi/mpi_t/testlist
+++ b/test/mpi/mpi_t/testlist
@@ -1,4 +1,4 @@
mpi_t_str 1 mpiversion=3.0
mpit_vars 1 mpiversion=3.0
cvarwrite 1 mpiversion=3.0
-getindex 1 strict=false
+getindex 1 mpiversion=3.1
http://git.mpich.org/mpich.git/commitdiff/2fe6a58ed2643a1fff77fa0dc38adc82c…
commit 2fe6a58ed2643a1fff77fa0dc38adc82ce8dc311
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Fri May 29 09:57:55 2015 -0500
Replace MPIX_Aint_ with MPI_Aint_ for MPI-3.1
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/binding/fortran/mpif_h/buildiface b/src/binding/fortran/mpif_h/buildiface
index 9f60cf2..fd6d97d 100755
--- a/src/binding/fortran/mpif_h/buildiface
+++ b/src/binding/fortran/mpif_h/buildiface
@@ -4338,27 +4338,27 @@ sub build_specials {
}
$returnType = "void";
- # MPIX_Aint_add/diff do not have the ierror argument.
+ # MPI_Aint_add/diff do not have the ierror argument.
$OUTFD = "AINTADD";
$filename = "aint_addf.c";
open( $OUTFD, ">$filename.new" ) || die "Cannot open $filename.new\n";
$files[$#files+1] = $filename;
$returnType = "MPI_Aint";
- &set_weak_decl( "MPIX_Aint_add", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
- &set_weak_decl( "PMPIX_Aint_add", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
- &print_header( "mpix_", "MPIX_Aint_add", "aint_add", "MPI_Aint *, MPI_Aint *");
- &print_routine_type_decl( $OUTFD, "mpix_", "aint_add" );
+ &set_weak_decl( "MPI_Aint_add", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
+ &set_weak_decl( "PMPI_Aint_add", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
+ &print_header( "mpi_", "MPI_Aint_add", "aint_add", "MPI_Aint *, MPI_Aint *");
+ &print_routine_type_decl( $OUTFD, "mpi_", "aint_add" );
print $OUTFD "(MPI_Aint *base, MPI_Aint *disp)\n";
print $OUTFD "{\n";
- print $OUTFD " return MPIX_Aint_add(*base, *disp);\n";
+ print $OUTFD " return MPI_Aint_add(*base, *disp);\n";
print $OUTFD "}\n";
close ($OUTFD);
&ReplaceIfDifferent( $filename, $filename . ".new" );
if ($build_prototypes) {
print PROTOFD "extern ";
- &print_routine_type_decl( PROTOFD, "mpix_", "aint_add" );
+ &print_routine_type_decl( PROTOFD, "mpi_", "aint_add" );
print PROTOFD "( MPI_Aint *, MPI_Aint * )";
- &print_attr( PROTOFD, "mpix_"."aint_add_" );
+ &print_attr( PROTOFD, "mpi_"."aint_add_" );
print PROTOFD ";\n";
}
$returnType = "void";
@@ -4368,21 +4368,21 @@ sub build_specials {
open( $OUTFD, ">$filename.new" ) || die "Cannot open $filename.new\n";
$files[$#files+1] = $filename;
$returnType = "MPI_Aint";
- &set_weak_decl( "MPIX_Aint_diff", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
- &set_weak_decl( "PMPIX_Aint_diff", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
- &print_header( "mpix_", "MPIX_Aint_diff", "aint_diff", "MPI_Aint *, MPI_Aint *");
- &print_routine_type_decl( $OUTFD, "mpix_", "aint_diff" );
+ &set_weak_decl( "MPI_Aint_diff", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
+ &set_weak_decl( "PMPI_Aint_diff", "MPI_Aint *, MPI_Aint *", "MPI_Aint" );
+ &print_header( "mpi_", "MPI_Aint_diff", "aint_diff", "MPI_Aint *, MPI_Aint *");
+ &print_routine_type_decl( $OUTFD, "mpi_", "aint_diff" );
print $OUTFD "(MPI_Aint *addr1, MPI_Aint *addr2)\n";
print $OUTFD "{\n";
- print $OUTFD " return MPIX_Aint_diff(*addr1, *addr2);\n";
+ print $OUTFD " return MPI_Aint_diff(*addr1, *addr2);\n";
print $OUTFD "}\n";
close ($OUTFD);
&ReplaceIfDifferent( $filename, $filename . ".new" );
if ($build_prototypes) {
print PROTOFD "extern ";
- &print_routine_type_decl( PROTOFD, "mpix_", "aint_diff" );
+ &print_routine_type_decl( PROTOFD, "mpi_", "aint_diff" );
print PROTOFD "( MPI_Aint *, MPI_Aint * )";
- &print_attr( PROTOFD, "mpix_"."aint_diff_" );
+ &print_attr( PROTOFD, "mpi_"."aint_diff_" );
print PROTOFD ";\n";
}
$returnType = "void";
diff --git a/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 b/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90
index 38bfaf5..41ec748 100644
--- a/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90
+++ b/src/binding/fortran/use_mpi_f08/mpi_c_interface_nobuf.f90
@@ -2524,7 +2524,7 @@ function MPIR_Comm_spawn_multiple_c(count, array_of_commands, array_of_argv, arr
end function MPIR_Comm_spawn_multiple_c
function MPIR_Aint_add_c(base, disp) &
- bind(C, name="PMPIX_Aint_add") result(res)
+ bind(C, name="PMPI_Aint_add") result(res)
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
implicit none
integer(MPI_ADDRESS_KIND), value, intent(in) :: base, disp
@@ -2532,7 +2532,7 @@ function MPIR_Aint_add_c(base, disp) &
end function MPIR_Aint_add_c
function MPIR_Aint_diff_c(addr1, addr2) &
- bind(C, name="PMPIX_Aint_diff") result(res)
+ bind(C, name="PMPI_Aint_diff") result(res)
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
implicit none
integer(MPI_ADDRESS_KIND), value, intent(in) :: addr1, addr2
diff --git a/src/binding/fortran/use_mpi_f08/mpi_f08.f90 b/src/binding/fortran/use_mpi_f08/mpi_f08.f90
index de11fb2..adcd708 100644
--- a/src/binding/fortran/use_mpi_f08/mpi_f08.f90
+++ b/src/binding/fortran/use_mpi_f08/mpi_f08.f90
@@ -4103,23 +4103,23 @@ interface MPI_Wtime
end function MPI_Wtime_f08
end interface MPI_Wtime
-interface MPIX_Aint_add
- function MPIX_Aint_add_f08(base, disp) result(res)
+interface MPI_Aint_add
+ function MPI_Aint_add_f08(base, disp) result(res)
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
implicit none
integer(MPI_ADDRESS_KIND), intent(in) :: base, disp
integer(MPI_ADDRESS_KIND) :: res
- end function MPIX_Aint_add_f08
-end interface MPIX_Aint_add
+ end function MPI_Aint_add_f08
+end interface MPI_Aint_add
-interface MPIX_Aint_diff
- function MPIX_Aint_diff_f08(addr1, addr2) result(res)
+interface MPI_Aint_diff
+ function MPI_Aint_diff_f08(addr1, addr2) result(res)
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
implicit none
integer(MPI_ADDRESS_KIND), intent(in) :: addr1, addr2
integer(MPI_ADDRESS_KIND) :: res
- end function MPIX_Aint_diff_f08
-end interface MPIX_Aint_diff
+ end function MPI_Aint_diff_f08
+end interface MPI_Aint_diff
interface MPIX_File_iread_all
subroutine MPIX_File_iread_all_f08ts(fh, buf, count, datatype, request, ierror)
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/aint_add_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/aint_add_f08ts.f90
index cf6ef8f..ade7aca 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/aint_add_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/aint_add_f08ts.f90
@@ -3,7 +3,7 @@
! (C) 2014 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
-function MPIX_Aint_add_f08(base, disp) result(res)
+function MPI_Aint_add_f08(base, disp) result(res)
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_nobuf, only : MPIR_Aint_add_c
implicit none
@@ -11,4 +11,4 @@ function MPIX_Aint_add_f08(base, disp) result(res)
integer(MPI_ADDRESS_KIND) :: res
res = MPIR_Aint_add_c(base, disp)
-end function MPIX_Aint_add_f08
\ No newline at end of file
+end function MPI_Aint_add_f08
\ No newline at end of file
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_f/aint_diff_f08ts.f90 b/src/binding/fortran/use_mpi_f08/wrappers_f/aint_diff_f08ts.f90
index 7c20dec..a58ccee 100644
--- a/src/binding/fortran/use_mpi_f08/wrappers_f/aint_diff_f08ts.f90
+++ b/src/binding/fortran/use_mpi_f08/wrappers_f/aint_diff_f08ts.f90
@@ -3,7 +3,7 @@
! (C) 2014 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
-function MPIX_Aint_diff_f08(addr1, addr2) result(res)
+function MPI_Aint_diff_f08(addr1, addr2) result(res)
use :: mpi_f08_compile_constants, only : MPI_ADDRESS_KIND
use :: mpi_c_interface_nobuf, only : MPIR_Aint_diff_c
implicit none
@@ -11,4 +11,4 @@ function MPIX_Aint_diff_f08(addr1, addr2) result(res)
integer(MPI_ADDRESS_KIND) :: res
res = MPIR_Aint_diff_c(addr1, addr2)
-end function MPIX_Aint_diff_f08
+end function MPI_Aint_diff_f08
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index 7ca2a3c..11c77a0 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -1547,8 +1547,8 @@ int MPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm);
int MPIX_Comm_agree(MPI_Comm comm, int *flag);
/* MPI_Aint addressing arithmetic */
-MPI_Aint MPIX_Aint_add(MPI_Aint base, MPI_Aint disp);
-MPI_Aint MPIX_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
+MPI_Aint MPI_Aint_add(MPI_Aint base, MPI_Aint disp);
+MPI_Aint MPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
/* End Prototypes */
#endif /* MPICH_SUPPRESS_PROTOTYPES */
@@ -2193,8 +2193,8 @@ int PMPIX_Comm_shrink(MPI_Comm comm, MPI_Comm *newcomm);
int PMPIX_Comm_agree(MPI_Comm comm, int *flag);
/* MPI_Aint addressing arithmetic */
-MPI_Aint PMPIX_Aint_add(MPI_Aint base, MPI_Aint disp);
-MPI_Aint PMPIX_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
+MPI_Aint PMPI_Aint_add(MPI_Aint base, MPI_Aint disp);
+MPI_Aint PMPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2);
#endif /* MPI_BUILD_PROFILING */
/* End of MPI bindings */
diff --git a/src/mpi/misc/aint_add.c b/src/mpi/misc/aint_add.c
index bcc8c82..7bad236 100644
--- a/src/mpi/misc/aint_add.c
+++ b/src/mpi/misc/aint_add.c
@@ -7,31 +7,31 @@
#include "mpiimpl.h"
-/* -- Begin Profiling Symbol Block for routine MPIX_Aint_add */
+/* -- Begin Profiling Symbol Block for routine MPI_Aint_add */
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_Aint_add = PMPIX_Aint_add
+#pragma weak MPI_Aint_add = PMPI_Aint_add
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_Aint_add MPIX_Aint_add
+#pragma _HP_SECONDARY_DEF PMPI_Aint_add MPI_Aint_add
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_Aint_add as PMPIX_Aint_add
+#pragma _CRI duplicate MPI_Aint_add as PMPI_Aint_add
#elif defined(HAVE_WEAK_ATTRIBUTE)
-MPI_Aint MPIX_Aint_add(MPI_Aint base, MPI_Aint disp) __attribute__((weak,alias("PMPIX_Aint_add")));
+MPI_Aint MPI_Aint_add(MPI_Aint base, MPI_Aint disp) __attribute__((weak,alias("PMPI_Aint_add")));
#endif
/* -- End Profiling Symbol Block */
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
#ifndef MPICH_MPI_FROM_PMPI
-#undef MPIX_Aint_add
-#define MPIX_Aint_add PMPIX_Aint_add
+#undef MPI_Aint_add
+#define MPI_Aint_add PMPI_Aint_add
#endif
#undef FUNCNAME
-#define FUNCNAME MPIX_Aint_add
+#define FUNCNAME MPI_Aint_add
/*@
-MPIX_Aint_add - Returns the sum of base and disp
+MPI_Aint_add - Returns the sum of base and disp
Input Parameters:
+ base - base address (integer)
@@ -41,7 +41,7 @@ Return value:
Sum of the base and disp argument
Notes:
-MPIX_Aint_Add produces a new MPI_Aint value that is equivalent to the sum of the
+MPI_Aint_Add produces a new MPI_Aint value that is equivalent to the sum of the
base and disp arguments, where base represents a base address returned by a call
to MPI_GET_ADDRESS and disp represents a signed integer displacement. The resulting
address is valid only at the process that generated base, and it must correspond
@@ -50,19 +50,19 @@ a manner that results in the correct MPI_Aint representation of the output addre
as if the process that originally produced base had called:
MPI_Get_address((char *) base + disp, &result)
-.seealso: MPIX_Aint_diff
+.seealso: MPI_Aint_diff
@*/
-MPI_Aint MPIX_Aint_add(MPI_Aint base, MPI_Aint disp)
+MPI_Aint MPI_Aint_add(MPI_Aint base, MPI_Aint disp)
{
MPI_Aint result;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_AINT_ADD);
+ MPID_MPI_STATE_DECL(MPID_STATE_MPI_AINT_ADD);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_AINT_ADD);
+ MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_AINT_ADD);
result = MPID_Aint_add(base, disp);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_AINT_ADD);
+ MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_AINT_ADD);
return result;
}
diff --git a/src/mpi/misc/aint_diff.c b/src/mpi/misc/aint_diff.c
index 5c2e5cd..61147e4 100644
--- a/src/mpi/misc/aint_diff.c
+++ b/src/mpi/misc/aint_diff.c
@@ -7,31 +7,31 @@
#include "mpiimpl.h"
-/* -- Begin Profiling Symbol Block for routine MPIX_Aint_diff */
+/* -- Begin Profiling Symbol Block for routine MPI_Aint_diff */
#if defined(HAVE_PRAGMA_WEAK)
-#pragma weak MPIX_Aint_diff = PMPIX_Aint_diff
+#pragma weak MPI_Aint_diff = PMPI_Aint_diff
#elif defined(HAVE_PRAGMA_HP_SEC_DEF)
-#pragma _HP_SECONDARY_DEF PMPIX_Aint_diff MPIX_Aint_diff
+#pragma _HP_SECONDARY_DEF PMPI_Aint_diff MPI_Aint_diff
#elif defined(HAVE_PRAGMA_CRI_DUP)
-#pragma _CRI duplicate MPIX_Aint_diff as PMPIX_Aint_diff
+#pragma _CRI duplicate MPI_Aint_diff as PMPI_Aint_diff
#elif defined(HAVE_WEAK_ATTRIBUTE)
-MPI_Aint MPIX_Aint_diff(MPI_Aint addr1, MPI_Aint addr2) __attribute__((weak,alias("PMPIX_Aint_diff")));
+MPI_Aint MPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2) __attribute__((weak,alias("PMPI_Aint_diff")));
#endif
/* -- End Profiling Symbol Block */
/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build
the MPI routines */
#ifndef MPICH_MPI_FROM_PMPI
-#undef MPIX_Aint_diff
-#define MPIX_Aint_diff PMPIX_Aint_diff
+#undef MPI_Aint_diff
+#define MPI_Aint_diff PMPI_Aint_diff
#endif
#undef FUNCNAME
-#define FUNCNAME MPIX_Aint_diff
+#define FUNCNAME MPI_Aint_diff
/*@
-MPIX_Aint_diff - Returns the difference between addr1 and addr2
+MPI_Aint_diff - Returns the difference between addr1 and addr2
Input Parameters:
+ addr1 - minuend address (integer)
@@ -41,7 +41,7 @@ Return value:
Difference between addr1 and addr2
Notes:
-MPIX_Aint_diff produces a new MPI_Aint value that is equivalent to the difference
+MPI_Aint_diff produces a new MPI_Aint value that is equivalent to the difference
between addr1 and addr2 arguments, where addr1 and addr2 represent addresses
returned by calls to MPI_GET_ADDRESS. The resulting address is valid only at the
process that generated addr1 and addr2, and addr1 and addr2 must correspond to
@@ -51,19 +51,19 @@ process that originally produced the addresses had called
(char *) addr1 - (char *) addr2
on the addresses initially passed to MPI_GET_ADDRESS.
-.seealso: MPIX_Aint_add
+.seealso: MPI_Aint_add
@*/
-MPI_Aint MPIX_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
+MPI_Aint MPI_Aint_diff(MPI_Aint addr1, MPI_Aint addr2)
{
MPI_Aint result;
- MPID_MPI_STATE_DECL(MPID_STATE_MPIX_AINT_DIFF);
+ MPID_MPI_STATE_DECL(MPID_STATE_MPI_AINT_DIFF);
MPIR_ERRTEST_INITIALIZED_ORDIE();
- MPID_MPI_FUNC_ENTER(MPID_STATE_MPIX_AINT_DIFF);
+ MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_AINT_DIFF);
result = MPID_Aint_diff(addr1, addr2);
- MPID_MPI_FUNC_EXIT(MPID_STATE_MPIX_AINT_DIFF);
+ MPID_MPI_FUNC_EXIT(MPID_STATE_MPI_AINT_DIFF);
return result;
}
diff --git a/test/mpi/f08/rma/aintf08.f90 b/test/mpi/f08/rma/aintf08.f90
index 96ddedd..cef75eb 100644
--- a/test/mpi/f08/rma/aintf08.f90
+++ b/test/mpi/f08/rma/aintf08.f90
@@ -52,10 +52,10 @@ program main
! Do MPI_Aint addressing arithmetic
if (rank == 0) then
disp = intsize*511
- offset = MPIX_Aint_add(bases(1), disp) ! offset points to array(1023)
+ offset = MPI_Aint_add(bases(1), disp) ! offset points to array(1023)
else if (rank == 1) then
disp = intsize*512
- offset = MPIX_Aint_diff(bases(0), disp) ! offset points to array(0)
+ offset = MPI_Aint_diff(bases(0), disp) ! offset points to array(0)
endif
! Get value and verify it
diff --git a/test/mpi/f08/rma/testlist.in b/test/mpi/f08/rma/testlist.in
index d72ad4c..c35f8b5 100644
--- a/test/mpi/f08/rma/testlist.in
+++ b/test/mpi/f08/rma/testlist.in
@@ -10,4 +10,4 @@ c2f2cwinf08 1
baseattrwinf08 1
winattrf08 1
winattr2f08 1
-@mpix@aintf08 2 strict=false
+aintf08 2 mpiversion=3.1
diff --git a/test/mpi/f77/rma/aintf.f b/test/mpi/f77/rma/aintf.f
index f7d67df..88739f6 100644
--- a/test/mpi/f77/rma/aintf.f
+++ b/test/mpi/f77/rma/aintf.f
@@ -21,8 +21,8 @@
integer :: win
integer :: intsize
- integer(kind=MPI_ADDRESS_KIND), external :: MPIX_Aint_add
- integer(kind=MPI_ADDRESS_KIND), external :: MPIX_Aint_diff
+ integer(kind=MPI_ADDRESS_KIND), external :: MPI_Aint_add
+ integer(kind=MPI_ADDRESS_KIND), external :: MPI_Aint_diff
errs = 0
call mtest_init(ierr);
@@ -60,10 +60,10 @@
! Do MPI_Aint addressing arithmetic
if (rank == 0) then
disp = intsize*511
- offset = MPIX_Aint_add(bases(1), disp)
+ offset = MPI_Aint_add(bases(1), disp)
else if (rank == 1) then
disp = intsize*512
- offset = MPIX_Aint_diff(bases(0), disp)
+ offset = MPI_Aint_diff(bases(0), disp)
endif
! Get value and verify it
diff --git a/test/mpi/f77/rma/testlist.in b/test/mpi/f77/rma/testlist.in
index 78675ac..08420a3 100644
--- a/test/mpi/f77/rma/testlist.in
+++ b/test/mpi/f77/rma/testlist.in
@@ -10,4 +10,4 @@ c2f2cwinf 1
baseattrwinf 1
winattrf 1
winattr2f 1
-@mpix@aintf 2 strict=false
+aintf 2 mpiversion=3.1
diff --git a/test/mpi/rma/aint.c b/test/mpi/rma/aint.c
index 9eba621..888ecb4 100644
--- a/test/mpi/rma/aint.c
+++ b/test/mpi/rma/aint.c
@@ -55,10 +55,10 @@ int main(int argc, char **argv)
/* Do MPI_Aint addressing arithmetic */
if (rank == 0) {
disp = sizeof(int)*511;
- offset = MPIX_Aint_add(bases[1], disp); /* offset points to array[1023]*/
+ offset = MPI_Aint_add(bases[1], disp); /* offset points to array[1023]*/
} else if (rank == 1) {
disp = sizeof(int)*512;
- offset = MPIX_Aint_diff(bases[0], disp); /* offset points to array[0] */
+ offset = MPI_Aint_diff(bases[0], disp); /* offset points to array[0] */
}
/* Get val and verify it */
diff --git a/test/mpi/rma/testlist.in b/test/mpi/rma/testlist.in
index c707b6c..33a6385 100644
--- a/test/mpi/rma/testlist.in
+++ b/test/mpi/rma/testlist.in
@@ -131,7 +131,7 @@ at_complete 2
atomic_rmw_fop 3
atomic_rmw_cas 3
atomic_rmw_gacc 3
-@mpix@aint 2 strict=false
+aint 2 mpiversion=3.1
acc-pairtype 2
manyget 2 xfail=ticket2264
derived-acc-flush_local 3 mpiversion=3.0
http://git.mpich.org/mpich.git/commitdiff/1188e6b9053c98f8305b3ade586ece740…
commit 1188e6b9053c98f8305b3ade586ece74012dbd04
Author: Junchao Zhang <jczhang(a)mcs.anl.gov>
Date: Sat May 30 10:55:57 2015 -0500
Mark test/mpi/f90/f90types/createf90types with xfail
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/test/mpi/f90/f90types/testlist b/test/mpi/f90/f90types/testlist
index 69c63af..626db00 100644
--- a/test/mpi/f90/f90types/testlist
+++ b/test/mpi/f90/f90types/testlist
@@ -1,2 +1,2 @@
-createf90types 1
-createf90types 1 arg=10000
+createf90types 1 xfail=ticket2265
+createf90types 1 arg=10000 xfail=ticket2265
-----------------------------------------------------------------------
Summary of changes:
src/binding/fortran/mpif_h/buildiface | 30 ++++++------
.../fortran/use_mpi_f08/mpi_c_interface_nobuf.f90 | 4 +-
src/binding/fortran/use_mpi_f08/mpi_f08.f90 | 48 ++++++++++----------
.../fortran/use_mpi_f08/wrappers_c/buildiface | 8 ++--
.../use_mpi_f08/wrappers_f/aint_add_f08ts.f90 | 4 +-
.../use_mpi_f08/wrappers_f/aint_diff_f08ts.f90 | 4 +-
.../wrappers_f/file_iread_all_f08ts.f90 | 4 +-
.../wrappers_f/file_iread_at_all_f08ts.f90 | 4 +-
.../wrappers_f/file_iwrite_all_f08ts.f90 | 4 +-
.../wrappers_f/file_iwrite_at_all_f08ts.f90 | 4 +-
src/include/mpi.h.in | 30 ++++++------
src/include/mpishared.h | 2 +-
src/mpi/misc/aint_add.c | 30 ++++++------
src/mpi/misc/aint_diff.c | 30 ++++++------
src/mpi/romio/include/mpio.h.in | 16 +++---
src/mpi/romio/mpi-io/iread_all.c | 18 ++++----
src/mpi/romio/mpi-io/iread_atall.c | 16 +++---
src/mpi/romio/mpi-io/iwrite_all.c | 18 ++++----
src/mpi/romio/mpi-io/iwrite_atall.c | 16 +++---
src/mpi/romio/mpi-io/mpioprof.h | 16 +++---
src/mpi_t/cat_get_index.c | 30 ++++++------
src/mpi_t/cvar_get_index.c | 30 ++++++------
src/mpi_t/errnames.txt | 12 +++---
src/mpi_t/pvar_get_index.c | 32 +++++++-------
src/mpi_t/pvar_read.c | 8 ++--
test/mpi/f08/io/i_fcoll_test.f90 | 4 +-
test/mpi/f08/io/ioharness.defn | 4 +-
test/mpi/f08/io/testlist.in | 4 +-
test/mpi/f08/rma/aintf08.f90 | 4 +-
test/mpi/f08/rma/testlist.in | 2 +-
test/mpi/f77/io/i_setviewcurf.f | 2 +-
test/mpi/f77/io/ioharness.defn | 4 +-
test/mpi/f77/io/testlist.in | 4 +-
test/mpi/f77/rma/aintf.f | 8 ++--
test/mpi/f77/rma/testlist.in | 2 +-
test/mpi/f90/f90types/testlist | 4 +-
test/mpi/io/i_aggregation1.c | 4 +-
test/mpi/io/i_aggregation2.c | 8 ++--
test/mpi/io/i_bigtype.c | 4 +-
test/mpi/io/i_coll_test.c | 8 ++--
test/mpi/io/i_darray_read.c | 2 +-
test/mpi/io/i_hindexed.c | 2 +-
test/mpi/io/i_hindexed_io.c | 4 +-
test/mpi/io/i_noncontig_coll.c | 12 +++---
test/mpi/io/i_noncontig_coll2.c | 24 +++++-----
test/mpi/io/i_rdwrord.c | 2 +-
test/mpi/io/i_setviewcur.c | 2 +-
test/mpi/io/i_types_with_zeros.c | 4 +-
test/mpi/io/testlist.in | 24 +++++-----
test/mpi/mpi_t/getindex.c | 32 +++++++-------
test/mpi/mpi_t/testlist | 2 +-
test/mpi/rma/aint.c | 4 +-
test/mpi/rma/testlist.in | 2 +-
53 files changed, 300 insertions(+), 300 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-68-g72956d9
by noreply@mpich.org 30 May '15
by noreply@mpich.org 30 May '15
30 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 72956d99ea05f9b5dc0d88aae21330fb7ff15fe3 (commit)
via bd08290f0948a00b571fef0257cd5de08aeebfb2 (commit)
via e50bec3af65eb54005dd0150599a387a52dd1fda (commit)
via 25e40e4358f3a5008f78d670b01a4c2951214b7c (commit)
via e0eaed63e0a2228215b67672386e7323eb2049d5 (commit)
via 6f62c424b6add5339cdb295a794b8808ac7d8f98 (commit)
via caeb3b3a60bc89616c0ccb28d0127f96459607c9 (commit)
via a5a9c964a00179191ad9a4446a3e074227fdff2b (commit)
via b0668be93a65729668b9987a27b7171b472b3f59 (commit)
via c292eca93f2035d2cfcfb616f7f7acbb59766e15 (commit)
via 19bdecfa2485036f82118608f58bbc171d9c2596 (commit)
via 08d72e3790144b3058b6c9aaebe44f70a4329282 (commit)
via 6b693f72fdafb07962dc1be996c1b9fcb2c19f8d (commit)
via e595d1ec065faa03c43c7c750b9b1b0c81abc11d (commit)
via 6155592fbfd62974c157320016e333a8913eec3e (commit)
from ccf8bcb8e35debb869eb1508d4748d89c22b3286 (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/72956d99ea05f9b5dc0d88aae21330fb7…
commit 72956d99ea05f9b5dc0d88aae21330fb7ff15fe3
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Tue May 19 15:50:03 2015 -0500
Merge issuing functions for streamed msgs and non-streamed msgs in CH3.
Originally in CH3, we have two issuing functions to issue RMA messages:
issue_from_origin_buffer() for issuing non-streamed messages and
issue_from_origin_buffer_stream() for issuing streamed messages. Most
code in those two functions are the same, therefore here we merge them
into one function. The function requires stream_offset and stream_size
as input arguments, for non-streamed messages, we pass stream_offset
as 0 and stream_size as the size of the entire message.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpid_rma_issue.h b/src/mpid/ch3/include/mpid_rma_issue.h
index e6cc3f7..f530a24 100644
--- a/src/mpid/ch3/include/mpid_rma_issue.h
+++ b/src/mpid/ch3/include/mpid_rma_issue.h
@@ -163,200 +163,9 @@ static int create_datatype(int *ints, MPI_Aint * displaces, MPI_Datatype * datat
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
+ MPIDI_msg_sz_t stream_offset, MPIDI_msg_sz_t stream_size,
MPID_Request ** req_ptr)
{
- MPI_Aint origin_type_size;
- MPI_Datatype target_datatype;
- MPID_Datatype *target_dtp = NULL, *origin_dtp = NULL;
- int is_origin_contig;
- MPID_IOV iov[MPID_IOV_LIMIT];
- MPID_Request *req = NULL;
- int count;
- int *ints = NULL;
- int *blocklens = NULL;
- MPI_Aint *displaces = NULL;
- MPI_Datatype *datatypes = NULL;
- MPI_Aint dt_true_lb;
- int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
-
- MPIDI_FUNC_ENTER(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
-
- /* Judge if target datatype is derived datatype. */
- MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(rma_op->pkt, target_datatype, mpi_errno);
- if (!MPIR_DATATYPE_IS_PREDEFINED(target_datatype)) {
- MPID_Datatype_get_ptr(target_datatype, target_dtp);
-
- /* Fill derived datatype info. */
- mpi_errno = fill_in_derived_dtp_info(rma_op, target_dtp);
- if (mpi_errno != MPI_SUCCESS)
- MPIU_ERR_POP(mpi_errno);
-
- /* Set dataloop size in pkt header */
- MPIDI_CH3_PKT_RMA_SET_DATALOOP_SIZE(rma_op->pkt, target_dtp->dataloop_size, mpi_errno);
- }
-
- /* Judge if origin datatype is derived datatype. */
- if (!MPIR_DATATYPE_IS_PREDEFINED(rma_op->origin_datatype)) {
- MPID_Datatype_get_ptr(rma_op->origin_datatype, origin_dtp);
- }
-
- MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_type_size);
-
- /* check if origin data is contiguous and get true lb */
- MPID_Datatype_is_contig(rma_op->origin_datatype, &is_origin_contig);
- MPID_Datatype_get_true_lb(rma_op->origin_datatype, &dt_true_lb);
-
- iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) & (rma_op->pkt);
- iov[0].MPID_IOV_LEN = sizeof(rma_op->pkt);
-
- if (target_dtp == NULL) {
- /* basic datatype on target */
- if (is_origin_contig) {
- /* origin data is contiguous */
- int iovcnt = 2;
-
- iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr + dt_true_lb);
- iov[1].MPID_IOV_LEN = rma_op->origin_count * origin_type_size;
-
- MPIU_THREAD_CS_ENTER(CH3COMM, vc);
- mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, iovcnt, &req);
- MPIU_THREAD_CS_EXIT(CH3COMM, vc);
- MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
-
- if (origin_dtp != NULL) {
- if (req == NULL) {
- MPID_Datatype_release(origin_dtp);
- }
- else {
- /* this will cause the datatype to be freed when the request
- * is freed. */
- req->dev.datatype_ptr = origin_dtp;
- }
- }
- }
- else {
- /* origin data is non-contiguous */
- req = MPID_Request_create();
- MPIU_ERR_CHKANDJUMP(req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
-
- MPIU_Object_set_ref(req, 2);
- req->kind = MPID_REQUEST_SEND;
-
- req->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1(req->dev.segment_ptr == NULL, mpi_errno,
- MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
-
- if (origin_dtp != NULL) {
- req->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, req->dev.segment_ptr, 0);
- req->dev.segment_first = 0;
- req->dev.segment_size = rma_op->origin_count * origin_type_size;
-
- req->dev.OnFinal = 0;
- req->dev.OnDataAvail = 0;
-
- MPIU_THREAD_CS_ENTER(CH3COMM, vc);
- mpi_errno = vc->sendNoncontig_fn(vc, req, 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");
- }
- }
- else {
- /* derived datatype on target */
- MPID_Datatype *combined_dtp = NULL;
-
- req = MPID_Request_create();
- if (req == NULL) {
- MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- }
-
- MPIU_Object_set_ref(req, 2);
- req->kind = MPID_REQUEST_SEND;
-
- req->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1(req->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 */
-
- count = 3;
- ints = (int *) MPIU_Malloc(sizeof(int) * (count + 1));
- blocklens = &ints[1];
- displaces = (MPI_Aint *) MPIU_Malloc(sizeof(MPI_Aint) * count);
- datatypes = (MPI_Datatype *) MPIU_Malloc(sizeof(MPI_Datatype) * count);
-
- ints[0] = count;
-
- displaces[0] = MPIU_PtrToAint(&(rma_op->dtype_info));
- blocklens[0] = sizeof(MPIDI_RMA_dtype_info);
- datatypes[0] = MPI_BYTE;
-
- displaces[1] = MPIU_PtrToAint(rma_op->dataloop);
- MPIU_Assign_trunc(blocklens[1], target_dtp->dataloop_size, int);
- datatypes[1] = MPI_BYTE;
-
- displaces[2] = MPIU_PtrToAint(rma_op->origin_addr);
- blocklens[2] = rma_op->origin_count;
- datatypes[2] = rma_op->origin_datatype;
-
- mpi_errno = create_datatype(ints, displaces, datatypes, &combined_dtp);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
-
- req->dev.datatype_ptr = combined_dtp;
- /* combined_datatype will be freed when request is freed */
-
- MPID_Segment_init(MPI_BOTTOM, 1, combined_dtp->handle, req->dev.segment_ptr, 0);
- req->dev.segment_first = 0;
- req->dev.segment_size = combined_dtp->size;
-
- req->dev.OnFinal = 0;
- req->dev.OnDataAvail = 0;
-
- MPIU_THREAD_CS_ENTER(CH3COMM, vc);
- mpi_errno = vc->sendNoncontig_fn(vc, req, 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");
-
- MPIU_Free(ints);
- MPIU_Free(displaces);
- MPIU_Free(datatypes);
-
- /* we're done with the datatypes */
- if (origin_dtp != NULL)
- MPID_Datatype_release(origin_dtp);
- MPID_Datatype_release(target_dtp);
- }
-
- (*req_ptr) = req;
-
- fn_exit:
- MPIDI_FUNC_EXIT(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
- return mpi_errno;
- fn_fail:
- if ((*req_ptr)) {
- if ((*req_ptr)->dev.datatype_ptr)
- MPID_Datatype_release((*req_ptr)->dev.datatype_ptr);
- MPID_Request_release((*req_ptr));
- }
- (*req_ptr) = NULL;
- goto fn_exit;
-}
-
-
-#undef FUNCNAME
-#define FUNCNAME issue_from_origin_buffer_stream
-#undef FCNAME
-#define FCNAME MPIDI_QUOTE(FUNCNAME)
-static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
- MPIDI_msg_sz_t stream_offset, MPIDI_msg_sz_t stream_size,
- MPID_Request ** req_ptr)
-{
MPI_Datatype target_datatype;
MPID_Datatype *target_dtp = NULL, *origin_dtp = NULL;
int is_origin_contig;
@@ -371,9 +180,9 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPI_Aint dt_true_lb;
MPIDI_CH3_Pkt_flags_t flags;
int mpi_errno = MPI_SUCCESS;
- MPIDI_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER_STREAM);
+ MPIDI_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
- MPIDI_FUNC_ENTER(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER_STREAM);
+ MPIDI_FUNC_ENTER(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
/* Judge if target datatype is derived datatype. */
MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE(rma_op->pkt, target_datatype, mpi_errno);
@@ -522,56 +331,76 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPIDI_msg_sz_t first = stream_offset;
MPIDI_msg_sz_t last = stream_offset + stream_size;
- req->dev.segment_ptr = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1(req->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 */
- segp = MPID_Segment_alloc();
- MPIU_ERR_CHKANDJUMP1(segp == NULL, mpi_errno, MPI_ERR_OTHER,
- "**nomem", "**nomem %s", "MPID_Segment_alloc");
- MPID_Segment_init(rma_op->origin_addr, rma_op->origin_count, rma_op->origin_datatype, segp,
- 0);
-
- MPID_Datatype_get_ptr(rma_op->origin_datatype, dtp);
- vec_len = dtp->max_contig_blocks * rma_op->origin_count + 1;
- dloop_vec = (DLOOP_VECTOR *) MPIU_Malloc(vec_len * sizeof(DLOOP_VECTOR));
- /* --BEGIN ERROR HANDLING-- */
- if (!dloop_vec) {
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
- FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", 0);
- goto fn_fail;
- }
- /* --END ERROR HANDLING-- */
+ if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ segp = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1(segp == NULL, mpi_errno, MPI_ERR_OTHER,
+ "**nomem", "**nomem %s", "MPID_Segment_alloc");
+
+ MPID_Segment_init(rma_op->origin_addr, rma_op->origin_count, rma_op->origin_datatype,
+ segp, 0);
+
+ MPID_Datatype_get_ptr(rma_op->origin_datatype, dtp);
+ vec_len = dtp->max_contig_blocks * rma_op->origin_count + 1;
+ dloop_vec = (DLOOP_VECTOR *) MPIU_Malloc(vec_len * sizeof(DLOOP_VECTOR));
+ /* --BEGIN ERROR HANDLING-- */
+ if (!dloop_vec) {
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
+ FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem", 0);
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
- MPID_Segment_pack_vector(segp, first, &last, dloop_vec, &vec_len);
+ MPID_Segment_pack_vector(segp, first, &last, dloop_vec, &vec_len);
- count = 2 + vec_len;
+ count = 2 + vec_len;
- ints = (int *) MPIU_Malloc(sizeof(int) * (count + 1));
- blocklens = &ints[1];
- displaces = (MPI_Aint *) MPIU_Malloc(sizeof(MPI_Aint) * count);
- datatypes = (MPI_Datatype *) MPIU_Malloc(sizeof(MPI_Datatype) * count);
+ ints = (int *) MPIU_Malloc(sizeof(int) * (count + 1));
+ blocklens = &ints[1];
+ displaces = (MPI_Aint *) MPIU_Malloc(sizeof(MPI_Aint) * count);
+ datatypes = (MPI_Datatype *) MPIU_Malloc(sizeof(MPI_Datatype) * count);
- ints[0] = count;
+ ints[0] = count;
- displaces[0] = MPIU_PtrToAint(&(rma_op->dtype_info));
- blocklens[0] = sizeof(MPIDI_RMA_dtype_info);
- datatypes[0] = MPI_BYTE;
+ displaces[0] = MPIU_PtrToAint(&(rma_op->dtype_info));
+ blocklens[0] = sizeof(MPIDI_RMA_dtype_info);
+ datatypes[0] = MPI_BYTE;
- displaces[1] = MPIU_PtrToAint(rma_op->dataloop);
- MPIU_Assign_trunc(blocklens[1], target_dtp->dataloop_size, int);
- datatypes[1] = MPI_BYTE;
+ displaces[1] = MPIU_PtrToAint(rma_op->dataloop);
+ MPIU_Assign_trunc(blocklens[1], target_dtp->dataloop_size, int);
+ datatypes[1] = MPI_BYTE;
+
+ for (i = 0; i < vec_len; i++) {
+ displaces[i + 2] = MPIU_PtrToAint(dloop_vec[i].DLOOP_VECTOR_BUF);
+ MPIU_Assign_trunc(blocklens[i + 2], dloop_vec[i].DLOOP_VECTOR_LEN, int);
+ datatypes[i + 2] = MPI_BYTE;
+ }
- for (i = 0; i < vec_len; i++) {
- displaces[i + 2] = MPIU_PtrToAint(dloop_vec[i].DLOOP_VECTOR_BUF);
- MPIU_Assign_trunc(blocklens[i + 2], dloop_vec[i].DLOOP_VECTOR_LEN, int);
- datatypes[i + 2] = MPI_BYTE;
+ MPID_Segment_free(segp);
+ MPIU_Free(dloop_vec);
}
+ else {
+ count = 3;
+ ints = (int *) MPIU_Malloc(sizeof(int) * (count + 1));
+ blocklens = &ints[1];
+ displaces = (MPI_Aint *) MPIU_Malloc(sizeof(MPI_Aint) * count);
+ datatypes = (MPI_Datatype *) MPIU_Malloc(sizeof(MPI_Datatype) * count);
+
+ ints[0] = count;
+
+ displaces[0] = MPIU_PtrToAint(&(rma_op->dtype_info));
+ blocklens[0] = sizeof(MPIDI_RMA_dtype_info);
+ datatypes[0] = MPI_BYTE;
- MPID_Segment_free(segp);
- MPIU_Free(dloop_vec);
+ displaces[1] = MPIU_PtrToAint(rma_op->dataloop);
+ MPIU_Assign_trunc(blocklens[1], target_dtp->dataloop_size, int);
+ datatypes[1] = MPI_BYTE;
+
+ displaces[2] = MPIU_PtrToAint(rma_op->origin_addr);
+ blocklens[2] = rma_op->origin_count;
+ datatypes[2] = rma_op->origin_datatype;
+ }
mpi_errno = create_datatype(ints, displaces, datatypes, &combined_dtp);
if (mpi_errno)
@@ -580,6 +409,10 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
req->dev.datatype_ptr = combined_dtp;
/* combined_datatype will be freed when request is freed */
+ req->dev.segment_ptr = MPID_Segment_alloc();
+ MPIU_ERR_CHKANDJUMP1(req->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER,
+ "**nomem", "**nomem %s", "MPID_Segment_alloc");
+
MPID_Segment_init(MPI_BOTTOM, 1, combined_dtp->handle, req->dev.segment_ptr, 0);
req->dev.segment_first = 0;
req->dev.segment_size = combined_dtp->size;
@@ -605,7 +438,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
fn_exit:
(*req_ptr) = req;
- MPIDI_FUNC_EXIT(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER_STREAM);
+ MPIDI_FUNC_EXIT(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
return mpi_errno;
fn_fail:
if ((*req_ptr)) {
@@ -648,7 +481,10 @@ static int issue_put_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
else {
- mpi_errno = issue_from_origin_buffer(rma_op, vc, &curr_req);
+ MPI_Aint origin_type_size;
+ MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_type_size);
+ mpi_errno = issue_from_origin_buffer(rma_op, vc, 0,
+ rma_op->origin_count * origin_type_size, &curr_req);
if (mpi_errno != MPI_SUCCESS)
MPIU_ERR_POP(mpi_errno);
}
@@ -785,8 +621,7 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
rest_len -= stream_size;
- mpi_errno =
- issue_from_origin_buffer_stream(rma_op, vc, stream_offset, stream_size, &curr_req);
+ mpi_errno = issue_from_origin_buffer(rma_op, vc, stream_offset, stream_size, &curr_req);
if (mpi_errno != MPI_SUCCESS)
MPIU_ERR_POP(mpi_errno);
@@ -1010,8 +845,7 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_offset;
}
- mpi_errno =
- issue_from_origin_buffer_stream(rma_op, vc, stream_offset, stream_size, &curr_req);
+ mpi_errno = issue_from_origin_buffer(rma_op, vc, stream_offset, stream_size, &curr_req);
if (mpi_errno != MPI_SUCCESS)
MPIU_ERR_POP(mpi_errno);
@@ -1332,7 +1166,9 @@ static int issue_fop_op(MPIDI_RMA_Op_t * rma_op,
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
}
else {
- mpi_errno = issue_from_origin_buffer(rma_op, vc, &curr_req);
+ MPI_Aint origin_dtp_size;
+ MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_dtp_size);
+ mpi_errno = issue_from_origin_buffer(rma_op, vc, 0, 1 * origin_dtp_size, &curr_req);
if (mpi_errno != MPI_SUCCESS)
MPIU_ERR_POP(mpi_errno);
}
http://git.mpich.org/mpich.git/commitdiff/bd08290f0948a00b571fef0257cd5de08…
commit bd08290f0948a00b571fef0257cd5de08aeebfb2
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Thu May 14 11:18:57 2015 -0500
Rename request handlers for ACC/GACC.
Here we rename the request handlers for ACC/GACC as follows:
MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete
--> MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete
MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete
--> MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete
Those handlers are originally triggered when the
target side receives complete derived datatype info.
Now we extended those handlers to be triggered when
extended packet header or derived datatype info is
arrived, therefore we rename them here.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h
index 46cb9a8..70c6ac5 100644
--- a/src/mpid/ch3/include/mpidimpl.h
+++ b/src/mpid/ch3/include/mpidimpl.h
@@ -1951,12 +1951,12 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete( MPIDI_VC_t *, MPID_Request *,
int * );
int MPIDI_CH3_ReqHandler_FOPRecvComplete( MPIDI_VC_t *, MPID_Request *,
int * );
-int MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete( MPIDI_VC_t *,
- MPID_Request *,
- int * );
-int MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete( MPIDI_VC_t *,
- MPID_Request *,
- int * );
+int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete( MPIDI_VC_t *,
+ MPID_Request *,
+ int * );
+int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete( MPIDI_VC_t *,
+ MPID_Request *,
+ int * );
int MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete( MPIDI_VC_t *,
MPID_Request *, int * );
int MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete( MPIDI_VC_t *,
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_req.c b/src/mpid/ch3/src/ch3u_handle_recv_req.c
index 4e4c2dc..e7aebdb 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_req.c
@@ -549,11 +549,11 @@ int MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unu
}
#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete
+#define FUNCNAME MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
+ MPID_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
MPID_Datatype *new_dtp = NULL;
@@ -562,9 +562,9 @@ int MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((u
MPI_Aint stream_offset;
MPI_Aint type_size;
MPI_Datatype basic_dtp;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMDERIVEDDTRECVCOMPLETE);
+ MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMDERIVEDDTRECVCOMPLETE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
@@ -644,17 +644,17 @@ int MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((u
*complete = FALSE;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMDERIVEDDTRECVCOMPLETE);
+ MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMMETADATARECVCOMPLETE);
return mpi_errno;
}
#undef FUNCNAME
-#define FUNCNAME MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete
+#define FUNCNAME MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
-int MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
- MPID_Request * rreq, int *complete)
+int MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((unused)),
+ MPID_Request * rreq, int *complete)
{
int mpi_errno = MPI_SUCCESS;
MPID_Datatype *new_dtp = NULL;
@@ -663,9 +663,9 @@ int MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((
MPI_Aint stream_offset;
MPI_Aint type_size;
MPI_Datatype basic_dtp;
- MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMDERIVEDDTRECVCOMPLETE);
+ MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
- MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMDERIVEDDTRECVCOMPLETE);
+ MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
@@ -745,7 +745,7 @@ int MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((
*complete = FALSE;
fn_fail:
- MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMDERIVEDDTRECVCOMPLETE);
+ MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMMETADATARECVCOMPLETE);
return mpi_errno;
}
diff --git a/src/mpid/ch3/src/ch3u_rma_pkthandler.c b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
index 70a2bc9..54e953b 100644
--- a/src/mpid/ch3/src/ch3u_rma_pkthandler.c
+++ b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
@@ -662,7 +662,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.datatype = accum_pkt->datatype;
if (req->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
- req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete;
+ req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete;
/* if this is a streamed op pkt, set iov to receive extended pkt header. */
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.ext_hdr_ptr;
@@ -722,7 +722,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
int metadata_sz = 0;
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_ACCUM_RECV_DERIVED_DT);
- req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete;
+ req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete;
req->dev.datatype = MPI_DATATYPE_NULL;
if (accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM)
@@ -765,7 +765,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
*buflen = sizeof(MPIDI_CH3_Pkt_t) + metadata_sz;
/* All dtype data has been received, call req handler */
- mpi_errno = MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(vc, req, &complete);
+ mpi_errno = MPIDI_CH3_ReqHandler_AccumMetadataRecvComplete(vc, req, &complete);
MPIU_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_ACCUMULATE");
if (complete) {
@@ -969,7 +969,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.datatype = get_accum_pkt->datatype;
if (req->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
- req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete;
+ req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete;
/* if this is a streamed op pkt, set iov to receive extended pkt header. */
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.ext_hdr_ptr;
@@ -1028,7 +1028,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
int metadata_sz = 0;
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_GET_ACCUM_RECV_DERIVED_DT);
- req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete;
+ req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete;
req->dev.datatype = MPI_DATATYPE_NULL;
if (get_accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM)
@@ -1071,7 +1071,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
*buflen = sizeof(MPIDI_CH3_Pkt_t) + metadata_sz;
/* All dtype data has been received, call req handler */
- mpi_errno = MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(vc, req, &complete);
+ mpi_errno = MPIDI_CH3_ReqHandler_GaccumMetadataRecvComplete(vc, req, &complete);
MPIU_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
"**ch3|postrecv %s", "MPIDI_CH3_ACCUMULATE");
if (complete) {
http://git.mpich.org/mpich.git/commitdiff/e50bec3af65eb54005dd0150599a387a5…
commit e50bec3af65eb54005dd0150599a387a52dd1fda
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Thu May 14 10:39:06 2015 -0500
Issue extended packet header in nemesis/netmod.
There are two APIs that are used to issue data with a request
created and passed:
iSendv() --- issue contiguous data;
sendNoncontig_fn() --- issue non-contiguous data;
In this patch, we modify the implementation of those two functions
in nemesis and netmod (tcp/mxm/ptl) to make them issue the extended
packet header stored in the request.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
index fbf2895..22baa82 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
@@ -19,15 +19,17 @@ static inline int MPID_nem_mpich_send_header (void* buf, int size, MPIDI_VC_t *v
static inline int MPID_nem_mpich_sendv (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again);
static inline void MPID_nem_mpich_dequeue_fastbox (int local_rank);
static inline void MPID_nem_mpich_enqueue_fastbox (int local_rank);
-static inline int MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again);
+static inline int MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov,
+ void *ext_header, MPIDI_msg_sz_t ext_header_sz,
+ MPIDI_VC_t *vc, int *again);
static inline int MPID_nem_recv_seqno_matches (MPID_nem_queue_ptr_t qhead);
static inline int MPID_nem_mpich_test_recv (MPID_nem_cell_ptr_t *cell, int *in_fbox, int in_blocking_progress);
static inline int MPID_nem_mpich_blocking_recv (MPID_nem_cell_ptr_t *cell, int *in_fbox, int completions);
static inline int MPID_nem_mpich_test_recv_wait (MPID_nem_cell_ptr_t *cell, int *in_fbox, int timeout);
static inline int MPID_nem_mpich_release_cell (MPID_nem_cell_ptr_t cell, MPIDI_VC_t *vc);
static inline void MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first,
- MPIDI_msg_sz_t segment_size, void *header, MPIDI_msg_sz_t header_sz,
- MPIDI_VC_t *vc, int *again);
+ MPIDI_msg_sz_t segment_size, void *header, MPIDI_msg_sz_t header_sz,
+ void *ext_header, MPIDI_msg_sz_t ext_header_sz, MPIDI_VC_t *vc, int *again);
static inline void MPID_nem_mpich_send_seg (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_size,
MPIDI_VC_t *vc, int *again);
@@ -271,7 +273,9 @@ MPID_nem_mpich_sendv (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again)
#undef FCNAME
#define FCNAME MPIDI_QUOTE(FUNCNAME)
static inline int
-MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *again)
+MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov,
+ void *ext_hdr_ptr, MPIDI_msg_sz_t ext_hdr_sz,
+ MPIDI_VC_t *vc, int *again)
{
int mpi_errno = MPI_SUCCESS;
MPID_nem_cell_ptr_t el;
@@ -279,6 +283,7 @@ MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *ag
MPIDI_msg_sz_t payload_len;
int my_rank;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
+ MPI_Aint buf_offset = 0;
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_MPICH_SENDV_HEADER);
@@ -291,7 +296,8 @@ MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *ag
my_rank = MPID_nem_mem_region.rank;
#ifdef USE_FASTBOX
- if (*n_iov == 2 && (*iov)[1].MPID_IOV_LEN + sizeof(MPIDI_CH3_Pkt_t) <= MPID_NEM_FBOX_DATALEN)
+ /* Note: use fastbox only when there is no streaming optimization. */
+ if (ext_hdr_sz == 0 && *n_iov == 2 && (*iov)[1].MPID_IOV_LEN + sizeof(MPIDI_CH3_Pkt_t) <= MPID_NEM_FBOX_DATALEN)
{
MPID_nem_fbox_mpich_t *pbox = vc_ch->fbox_out;
@@ -343,12 +349,19 @@ MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *ag
#endif /*PREFETCH_CELL */
MPIU_Memcpy((void *)el->pkt.mpich.p.payload, (*iov)->MPID_IOV_BUF, sizeof(MPIDI_CH3_Pkt_t));
+ buf_offset += sizeof(MPIDI_CH3_Pkt_t);
- cell_buf = (char *)(el->pkt.mpich.p.payload) + sizeof(MPIDI_CH3_Pkt_t);
+ if (ext_hdr_sz > 0) {
+ /* when extended packet header exists, copy it */
+ MPIU_Memcpy((void *)((char *)(el->pkt.mpich.p.payload) + buf_offset), ext_hdr_ptr, ext_hdr_sz);
+ buf_offset += ext_hdr_sz;
+ }
+
+ cell_buf = (char *)(el->pkt.mpich.p.payload) + buf_offset;
++(*iov);
--(*n_iov);
- payload_len = MPID_NEM_MPICH_DATA_LEN - sizeof(MPIDI_CH3_Pkt_t);
+ payload_len = MPID_NEM_MPICH_DATA_LEN - buf_offset;
while (*n_iov && payload_len >= (*iov)->MPID_IOV_LEN)
{
size_t _iov_len = (*iov)->MPID_IOV_LEN;
@@ -419,13 +432,15 @@ MPID_nem_mpich_sendv_header (MPID_IOV **iov, int *n_iov, MPIDI_VC_t *vc, int *ag
#define FCNAME MPIDI_QUOTE(FUNCNAME)
static inline void
MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_size,
- void *header, MPIDI_msg_sz_t header_sz, MPIDI_VC_t *vc, int *again)
+ void *header, MPIDI_msg_sz_t header_sz, void *ext_header, MPIDI_msg_sz_t ext_header_sz,
+ MPIDI_VC_t *vc, int *again)
{
MPID_nem_cell_ptr_t el;
MPIDI_msg_sz_t datalen;
int my_rank;
MPIDI_msg_sz_t last;
MPIDI_CH3I_VC *vc_ch = &vc->ch;
+ MPI_Aint buf_offset = 0;
MPIU_Assert(vc_ch->is_local); /* netmods will have their own implementation */
MPIU_Assert(header_sz <= sizeof(MPIDI_CH3_Pkt_t));
@@ -436,7 +451,7 @@ MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_f
my_rank = MPID_nem_mem_region.rank;
#ifdef USE_FASTBOX
- if (sizeof(MPIDI_CH3_Pkt_t) + segment_size <= MPID_NEM_FBOX_DATALEN)
+ if (ext_header_sz == 0 && sizeof(MPIDI_CH3_Pkt_t) + segment_size <= MPID_NEM_FBOX_DATALEN)
{
MPID_nem_fbox_mpich_t *pbox = vc_ch->fbox_out;
@@ -508,14 +523,22 @@ MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_f
/* copy header */
MPIU_Memcpy((void *)el->pkt.mpich.p.payload, header, header_sz);
+ buf_offset += sizeof(MPIDI_CH3_Pkt_t);
+
+ if (ext_header_sz > 0) {
+ /* when extended packet header exists, copy it */
+ MPIU_Memcpy((void *)((char *)(el->pkt.mpich.p.payload) + buf_offset), ext_header, ext_header_sz);
+ buf_offset += ext_header_sz;
+ }
+
/* copy data */
- if (segment_size - *segment_first <= MPID_NEM_MPICH_DATA_LEN - sizeof(MPIDI_CH3_Pkt_t))
+ if (segment_size - *segment_first <= MPID_NEM_MPICH_DATA_LEN - buf_offset)
last = segment_size;
else
- last = *segment_first + MPID_NEM_MPICH_DATA_LEN - sizeof(MPIDI_CH3_Pkt_t);
-
- MPID_Segment_pack(segment, *segment_first, &last, (char *)el->pkt.mpich.p.payload + sizeof(MPIDI_CH3_Pkt_t));
- datalen = sizeof(MPIDI_CH3_Pkt_t) + last - *segment_first;
+ last = *segment_first + MPID_NEM_MPICH_DATA_LEN - buf_offset;
+
+ MPID_Segment_pack(segment, *segment_first, &last, (char *)el->pkt.mpich.p.payload + buf_offset);
+ datalen = buf_offset + last - *segment_first;
*segment_first = last;
el->pkt.mpich.source = my_rank;
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h
index e06aecd..07415e9 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_post.h
@@ -95,10 +95,12 @@ int MPID_nem_mpich_getv (MPID_IOV **s_iov, int *s_niov, MPID_IOV **d_iov, int *d
#if !defined (MPID_NEM_INLINE) || !MPID_NEM_INLINE
int MPID_nem_mpich_send_header(void* buf, int size, struct MPIDI_VC *vc, int *again);
int MPID_nem_mpich_sendv(MPID_IOV **iov, int *n_iov, struct MPIDI_VC *vc, int *again);
-int MPID_nem_mpich_sendv_header(MPID_IOV **iov, int *n_iov, struct MPIDI_VC *vc, int *again);
+int MPID_nem_mpich_sendv_header(MPID_IOV **iov, int *n_iov, void *ext_header,
+ MPIDI_msg_sz_t ext_header_sz, struct MPIDI_VC *vc, int *again);
void MPID_nem_mpich_send_seg(MPID_Segment segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_sz, struct MPIDI_VC *vc, int *again);
void MPID_nem_mpich_send_seg_header(MPID_Segment segment, MPIDI_msg_sz_t *segment_first, MPIDI_msg_sz_t segment_size,
- void *header, MPIDI_msg_sz_t header_sz, struct MPIDI_VC *vc, int *again);
+ void *header, MPIDI_msg_sz_t header_sz, void *ext_header,
+ MPIDI_msg_sz_t ext_header_sz, struct MPIDI_VC *vc, int *again);
int MPID_nem_mpich_test_recv(MPID_nem_cell_ptr_t *cell, int *in_fbox, int in_blocking_progress);
int MPID_nem_mpich_test_recv_wait(MPID_nem_cell_ptr_t *cell, int *in_fbox, int timeout);
int MPID_nem_recv_seqno_matches(MPID_nem_queue_ptr_t qhead) ;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
index 43070da..e44a0a3 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_impl.h
@@ -132,7 +132,7 @@ static inline list_item_t *list_dequeue(list_head_t * list_head)
#define MXM_MPICH_MAX_ADDR_SIZE 512
#define MXM_MPICH_ENDPOINT_KEY "endpoint_id"
#define MXM_MPICH_MAX_REQ 100
-#define MXM_MPICH_MAX_IOV 2
+#define MXM_MPICH_MAX_IOV 3
/* The vc provides a generic buffer in which network modules can store
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
index 2c23d5e..c113413 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
@@ -54,13 +54,22 @@ int MPID_nem_mxm_iSendContig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr, MP
req_area->ctx = sreq;
req_area->iov_buf = req_area->tmp_buf;
- req_area->iov_count = 1;
- req_area->iov_buf[0].ptr = (void *) &(sreq->dev.pending_pkt);
- req_area->iov_buf[0].length = sizeof(MPIDI_CH3_Pkt_t);
+ req_area->iov_count = 0;
+
+ req_area->iov_buf[req_area->iov_count].ptr = (void *) &(sreq->dev.pending_pkt);
+ req_area->iov_buf[req_area->iov_count].length = sizeof(MPIDI_CH3_Pkt_t);
+ (req_area->iov_count)++;
+
+ if (sreq->dev.ext_hdr_sz != 0) {
+ req_area->iov_buf[req_area->iov_count].ptr = (void *) (sreq->dev.ext_hdr_ptr);
+ req_area->iov_buf[req_area->iov_count].length = sreq->dev.ext_hdr_sz;
+ (req_area->iov_count)++;
+ }
+
if (data_sz) {
- req_area->iov_count = 2;
- req_area->iov_buf[1].ptr = (void *) data;
- req_area->iov_buf[1].length = data_sz;
+ req_area->iov_buf[req_area->iov_count].ptr = (void *) data;
+ req_area->iov_buf[req_area->iov_count].length = data_sz;
+ (req_area->iov_count)++;
}
vc_area->pending_sends += 1;
@@ -175,9 +184,17 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
req_area->ctx = sreq;
req_area->iov_buf = req_area->tmp_buf;
- req_area->iov_count = 1;
- req_area->iov_buf[0].ptr = (void *) &(sreq->dev.pending_pkt);
- req_area->iov_buf[0].length = sizeof(MPIDI_CH3_Pkt_t);
+ req_area->iov_count = 0;
+
+ req_area->iov_buf[req_area->iov_count].ptr = (void *) &(sreq->dev.pending_pkt);
+ req_area->iov_buf[req_area->iov_count].length = sizeof(MPIDI_CH3_Pkt_t);
+ (req_area->iov_count)++;
+
+ if (sreq->dev.ext_hdr_ptr != NULL) {
+ req_area->iov_buf[req_area->iov_count].ptr = (void *) (sreq->dev.ext_hdr_ptr);
+ req_area->iov_buf[req_area->iov_count].length = sreq->dev.ext_hdr_sz;
+ (req_area->iov_count)++;
+ }
last = sreq->dev.segment_size;
@@ -193,9 +210,9 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
MPID_Segment_pack(sreq->dev.segment_ptr, sreq->dev.segment_first, &last, sreq->dev.tmpbuf);
MPIU_Assert(last == sreq->dev.segment_size);
- req_area->iov_count = 2;
- req_area->iov_buf[1].ptr = sreq->dev.tmpbuf;
- req_area->iov_buf[1].length = last - sreq->dev.segment_first;
+ req_area->iov_buf[req_area->iov_count].ptr = sreq->dev.tmpbuf;
+ req_area->iov_buf[req_area->iov_count].length = last - sreq->dev.segment_first;
+ (req_area->iov_count)++;
}
vc_area->pending_sends += 1;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
index 1766acb..d924954 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
@@ -96,6 +96,8 @@ static inline MPID_nem_ptl_req_area * REQ_PTL(MPID_Request *req) {
(sreq_)->dev.datatype_ptr = NULL; \
(sreq_)->dev.segment_ptr = NULL; \
(sreq_)->dev.tmpbuf = NULL; \
+ (sreq_)->dev.ext_hdr_ptr = NULL; \
+ (sreq_)->dev.ext_hdr_sz = 0; \
\
MPID_nem_ptl_init_req(sreq_); \
} while (0)
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c
index bb1d361..0f106c4 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_nm.c
@@ -152,8 +152,8 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_
MPID_nem_ptl_vc_area *const vc_ptl = VC_PTL(vc);
int ret;
char *sendbuf;
- const size_t sent_sz = data_sz < PAYLOAD_SIZE ? data_sz : PAYLOAD_SIZE;
- const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz);
+ const size_t sent_sz = data_sz < (PAYLOAD_SIZE-sreq->dev.ext_hdr_sz) ? data_sz : (PAYLOAD_SIZE-sreq->dev.ext_hdr_sz);
+ const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz+sreq->dev.ext_hdr_sz);
const size_t remaining = data_sz - sent_sz;
ptl_match_bits_t match_bits = NPTL_MATCH(CTL_TAG, 0, MPIDI_Process.my_pg_rank);
MPIDI_STATE_DECL(MPID_STATE_SEND_PKT);
@@ -163,12 +163,19 @@ static inline int send_pkt(MPIDI_VC_t *vc, void *hdr_p, void *data_p, MPIDI_msg_
sendbuf = MPIU_Malloc(sendbuf_sz);
MPIU_Assert(sendbuf != NULL);
MPIU_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t));
+
+ if (sreq->dev.ext_hdr_sz > 0) {
+ /* copy extended packet header to send buf */
+ MPIU_Memcpy(sendbuf + sizeof(MPIDI_CH3_Pkt_t),
+ sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
+ }
+
TMPBUF(sreq) = NULL;
REQ_PTL(sreq)->num_gets = 0;
REQ_PTL(sreq)->put_done = 0;
if (data_sz) {
- MPIU_Memcpy(sendbuf + sizeof(MPIDI_CH3_Pkt_t), data_p, sent_sz);
+ MPIU_Memcpy(sendbuf + sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz, data_p, sent_sz);
if (remaining) /* Post MEs for the remote gets */
mpi_errno = meappend_large(vc_ptl->id, sreq, NPTL_MATCH(GET_TAG, 0, MPIDI_Process.my_pg_rank),
(char *)data_p + sent_sz, remaining);
@@ -208,8 +215,8 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
int ret;
char *sendbuf;
const size_t data_sz = sreq->dev.segment_size - sreq->dev.segment_first;
- const size_t sent_sz = data_sz < PAYLOAD_SIZE ? data_sz : PAYLOAD_SIZE;
- const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz);
+ const size_t sent_sz = data_sz < (PAYLOAD_SIZE-sreq->dev.ext_hdr_sz) ? data_sz : (PAYLOAD_SIZE-sreq->dev.ext_hdr_sz);
+ const size_t sendbuf_sz = SENDBUF_SIZE(sent_sz+sreq->dev.ext_hdr_sz);
const size_t remaining = data_sz - sent_sz;
ptl_match_bits_t match_bits = NPTL_MATCH(CTL_TAG, 0, MPIDI_Process.my_pg_rank);
MPIDI_STATE_DECL(MPID_STATE_SEND_NONCONTIG_PKT);
@@ -218,6 +225,13 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
sendbuf = MPIU_Malloc(sendbuf_sz);
MPIU_Assert(sendbuf != NULL);
MPIU_Memcpy(sendbuf, hdr_p, sizeof(MPIDI_CH3_Pkt_t));
+
+ if (sreq->dev.ext_hdr_sz > 0) {
+ /* copy extended packet header to send buf */
+ MPIU_Memcpy(sendbuf + sizeof(MPIDI_CH3_Pkt_t),
+ sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz);
+ }
+
TMPBUF(sreq) = NULL;
REQ_PTL(sreq)->num_gets = 0;
REQ_PTL(sreq)->put_done = 0;
@@ -225,7 +239,7 @@ static int send_noncontig_pkt(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr_p)
if (data_sz) {
MPIDI_msg_sz_t first = sreq->dev.segment_first;
MPIDI_msg_sz_t last = sreq->dev.segment_first + sent_sz;
- MPID_Segment_pack(sreq->dev.segment_ptr, first, &last, sendbuf + sizeof(MPIDI_CH3_Pkt_t));
+ MPID_Segment_pack(sreq->dev.segment_ptr, first, &last, sendbuf + sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz);
if (remaining) { /* Post MEs for the remote gets */
TMPBUF(sreq) = MPIU_Malloc(remaining);
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c
index 80c503d..cc40a12 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_send.c
@@ -524,14 +524,24 @@ int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
{
if (MPIDI_CH3I_Sendq_empty(vc_tcp->send_queue))
{
- MPID_IOV iov[2];
-
- iov[0].MPID_IOV_BUF = hdr;
- iov[0].MPID_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
- iov[1].MPID_IOV_BUF = data;
- iov[1].MPID_IOV_LEN = data_sz;
+ MPID_IOV iov[3];
+ int iov_n = 0;
+
+ iov[iov_n].MPID_IOV_BUF = hdr;
+ iov[iov_n].MPID_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
+ iov_n++;
+
+ if (sreq->dev.ext_hdr_sz != 0) {
+ iov[iov_n].MPID_IOV_BUF = sreq->dev.ext_hdr_ptr;
+ iov[iov_n].MPID_IOV_LEN = sreq->dev.ext_hdr_sz;
+ iov_n++;
+ }
+
+ iov[iov_n].MPID_IOV_BUF = data;
+ iov[iov_n].MPID_IOV_LEN = data_sz;
+ iov_n++;
- offset = MPL_large_writev(sc->fd, iov, 2);
+ offset = MPL_large_writev(sc->fd, iov, iov_n);
if (offset == 0) {
int req_errno = MPI_SUCCESS;
@@ -556,7 +566,7 @@ int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
}
MPIU_DBG_MSG_D(CH3_CHANNEL, VERBOSE, "write " MPIDI_MSG_SZ_FMT, offset);
- if (offset == sizeof(MPIDI_CH3_Pkt_t) + data_sz)
+ if (offset == sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz + data_sz)
{
/* sent whole message */
int (*reqFn)(MPIDI_VC_t *, MPID_Request *, int *);
@@ -599,25 +609,45 @@ int MPID_nem_tcp_iSendContig(MPIDI_VC_t *vc, MPID_Request *sreq, void *hdr, MPID
/* save iov */
+ sreq->dev.iov_count = 0;
if (offset < sizeof(MPIDI_CH3_Pkt_t))
{
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *)hdr;
- sreq->dev.iov[0].MPID_IOV_BUF = (char *)&sreq->dev.pending_pkt + offset;
- sreq->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t) - offset;
+
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_BUF = (char *)&sreq->dev.pending_pkt + offset;
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t) - offset;
+ sreq->dev.iov_count++;
+
+ if (sreq->dev.ext_hdr_sz > 0) {
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_BUF = sreq->dev.ext_hdr_ptr;
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_LEN = sreq->dev.ext_hdr_sz;
+ sreq->dev.iov_count++;
+ }
+
if (data_sz)
{
- sreq->dev.iov[1].MPID_IOV_BUF = data;
- sreq->dev.iov[1].MPID_IOV_LEN = data_sz;
- sreq->dev.iov_count = 2;
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_BUF = data;
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_LEN = data_sz;
+ sreq->dev.iov_count++;
+ }
+ }
+ else if (offset < sizeof(MPIDI_CH3_Pkt_t) + sreq->dev.ext_hdr_sz) {
+ MPIU_Assert(sreq->dev.ext_hdr_sz > 0);
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_BUF = sreq->dev.ext_hdr_ptr;
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_LEN = sreq->dev.ext_hdr_sz;
+ sreq->dev.iov_count++;
+
+ if (data_sz) {
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_BUF = data;
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_LEN = data_sz;
+ sreq->dev.iov_count++;
}
- else
- sreq->dev.iov_count = 1;
}
else
{
- sreq->dev.iov[0].MPID_IOV_BUF = (char *)data + (offset - sizeof(MPIDI_CH3_Pkt_t));
- sreq->dev.iov[0].MPID_IOV_LEN = data_sz - (offset - sizeof(MPIDI_CH3_Pkt_t));
- sreq->dev.iov_count = 1;
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_BUF = (char *)data + (offset - sizeof(MPIDI_CH3_Pkt_t) - sreq->dev.ext_hdr_sz);
+ sreq->dev.iov[sreq->dev.iov_count].MPID_IOV_LEN = data_sz - (offset - sizeof(MPIDI_CH3_Pkt_t) - sreq->dev.ext_hdr_sz);
+ sreq->dev.iov_count++;
}
enqueue_request:
@@ -668,21 +698,31 @@ int MPID_nem_tcp_SendNoncontig(MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
MPIDI_msg_sz_t offset;
int complete;
MPID_nem_tcp_vc_area *vc_tcp = VC_TCP(vc);
+ int iov_offset;
MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_SENDNONCONTIG);
MPIU_DBG_MSG(CH3_CHANNEL, VERBOSE, "tcp_SendNoncontig");
MPIU_Assert(hdr_sz <= sizeof(MPIDI_CH3_Pkt_t));
-
- iov[0].MPID_IOV_BUF = header;
- iov[0].MPID_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
- iov_n = MPID_IOV_LIMIT - 1;
+ iov_n = 0;
+
+ iov[iov_n].MPID_IOV_BUF = header;
+ iov[iov_n].MPID_IOV_LEN = sizeof(MPIDI_CH3_Pkt_t);
+ iov_n++;
+
+ if (sreq->dev.ext_hdr_ptr != NULL) {
+ iov[iov_n].MPID_IOV_BUF = sreq->dev.ext_hdr_ptr;
+ iov[iov_n].MPID_IOV_LEN = sreq->dev.ext_hdr_sz;
+ iov_n++;
+ }
+
+ iov_offset = iov_n;
- mpi_errno = MPIDI_CH3U_Request_load_send_iov(sreq, &iov[1], &iov_n);
+ mpi_errno = MPIDI_CH3U_Request_load_send_iov(sreq, &iov[iov_offset], &iov_n);
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|loadsendiov");
- iov_n += 1;
+ iov_n += iov_offset;
offset = 0;
if (!MPID_nem_tcp_vc_send_paused(vc_tcp)) {
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c b/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c
index 15ac7c8..26125c5 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_isendv.c
@@ -72,7 +72,9 @@ int MPIDI_CH3_iSendv (MPIDI_VC_t *vc, MPID_Request *sreq, MPID_IOV *iov, int n_i
int remaining_n_iov = n_iov;
MPIU_DBG_MSG (CH3_CHANNEL, VERBOSE, "iSendv");
- mpi_errno = MPID_nem_mpich_sendv_header (&remaining_iov, &remaining_n_iov, vc, &again);
+ mpi_errno = MPID_nem_mpich_sendv_header (&remaining_iov, &remaining_n_iov,
+ sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz,
+ vc, &again);
if (mpi_errno) MPIU_ERR_POP (mpi_errno);
while (!again && remaining_n_iov > 0)
{
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c b/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c
index 10af38c..09e3c34 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c
@@ -89,7 +89,8 @@ int MPIDI_CH3_iStartMsgv (MPIDI_VC_t *vc, MPID_IOV *iov, int n_iov, MPID_Request
MPIU_DBG_MSG_D (CH3_CHANNEL, VERBOSE, " + len=%d ", total);
});
- mpi_errno = MPID_nem_mpich_sendv_header (&remaining_iov, &remaining_n_iov, vc, &again);
+ mpi_errno = MPID_nem_mpich_sendv_header (&remaining_iov, &remaining_n_iov,
+ NULL, 0, vc, &again);
if (mpi_errno) MPIU_ERR_POP (mpi_errno);
while (!again && (remaining_n_iov > 0))
{
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_progress.c b/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
index 351bf81..6e699b7 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_progress.c
@@ -195,7 +195,8 @@ int MPIDI_CH3I_Shm_send_progress(void)
iov = &sreq->dev.iov[sreq->dev.iov_offset];
n_iov = sreq->dev.iov_count;
- mpi_errno = MPID_nem_mpich_sendv_header(&iov, &n_iov, sreq->ch.vc, &again);
+ mpi_errno = MPID_nem_mpich_sendv_header(&iov, &n_iov, sreq->dev.ext_hdr_ptr,
+ sreq->dev.ext_hdr_sz, sreq->ch.vc, &again);
if (mpi_errno) MPIU_ERR_POP (mpi_errno);
if (!again)
{
@@ -219,7 +220,8 @@ int MPIDI_CH3I_Shm_send_progress(void)
else
{
MPID_nem_mpich_send_seg_header(sreq->dev.segment_ptr, &sreq->dev.segment_first, sreq->dev.segment_size,
- &sreq->dev.pending_pkt, sreq->ch.header_sz, sreq->ch.vc, &again);
+ &sreq->dev.pending_pkt, sreq->ch.header_sz, sreq->dev.ext_hdr_ptr,
+ sreq->dev.ext_hdr_sz, sreq->ch.vc, &again);
if (!again)
{
MPIDI_CH3I_shm_active_send = sreq;
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c b/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
index 24fccde..fb14c55 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
@@ -50,7 +50,8 @@ int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
}
/* send as many cells of data as you can */
- MPID_nem_mpich_send_seg_header(sreq->dev.segment_ptr, &sreq->dev.segment_first, sreq->dev.segment_size, header, hdr_sz, vc, &again);
+ MPID_nem_mpich_send_seg_header(sreq->dev.segment_ptr, &sreq->dev.segment_first, sreq->dev.segment_size,
+ header, hdr_sz, sreq->dev.ext_hdr_ptr, sreq->dev.ext_hdr_sz, vc, &again);
while(!again && sreq->dev.segment_first < sreq->dev.segment_size)
MPID_nem_mpich_send_seg(sreq->dev.segment_ptr, &sreq->dev.segment_first, sreq->dev.segment_size, vc, &again);
http://git.mpich.org/mpich.git/commitdiff/25e40e4358f3a5008f78d670b01a4c295…
commit 25e40e4358f3a5008f78d670b01a4c2951214b7c
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Mon May 18 15:00:37 2015 -0500
Add extended packet header in CH3 layer used by RMA messages
Here we added extended packet header in CH3 layer used to
transmit attributes that are only needed in RMA and are not
needed in two-sided communication. The key implementation
details are listed as follows:
Origin side:
(1) The extended packet header is stored in the request, and
the request is passed to the issuing function (iSendv() or
sendNoncontig_fn()) in the lower layer. The issuing function
checks if the extended packet header exists in the request,
if so, it will issue that header. (The modifications in lower
layer are in the next commit.)
(2) There is a fast path used when (origin data is contiguous &&
target data is predefined && extended packet header is not used).
In such case, we do not need to create a request beforehand
but can use iStartMsgv() issuing function which try to issue
the entire message as soon as possible.
Target side:
(1) There are two req handler being used when extended packet header
is used or target datatype is derived. The first req handler is
triggered when extended packet header / target datatype info is
arrived, and the second req handler is triggered when actual data
is arrived.
(2) When target side receives a stream unit which is piggybacked with
LOCK, it will drop the stream_offset in extended packet header, since
the stream unit must be the first one and stream_offset must be 0.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpid_rma_issue.h b/src/mpid/ch3/include/mpid_rma_issue.h
index 3ae5ab6..e6cc3f7 100644
--- a/src/mpid/ch3/include/mpid_rma_issue.h
+++ b/src/mpid/ch3/include/mpid_rma_issue.h
@@ -361,6 +361,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPID_Datatype *target_dtp = NULL, *origin_dtp = NULL;
int is_origin_contig;
MPID_IOV iov[MPID_IOV_LIMIT];
+ int iovcnt = 0;
MPID_Request *req = NULL;
int count;
int *ints = NULL;
@@ -368,6 +369,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPI_Aint *displaces = NULL;
MPI_Datatype *datatypes = NULL;
MPI_Aint dt_true_lb;
+ MPIDI_CH3_Pkt_flags_t flags;
int mpi_errno = MPI_SUCCESS;
MPIDI_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER_STREAM);
@@ -398,52 +400,104 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPID_Datatype_is_contig(rma_op->origin_datatype, &is_origin_contig);
MPID_Datatype_get_true_lb(rma_op->origin_datatype, &dt_true_lb);
- iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) & (rma_op->pkt);
- iov[0].MPID_IOV_LEN = sizeof(rma_op->pkt);
+ iov[iovcnt].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) & (rma_op->pkt);
+ iov[iovcnt].MPID_IOV_LEN = sizeof(rma_op->pkt);
+ iovcnt++;
+
+ MPIDI_CH3_PKT_RMA_GET_FLAGS(rma_op->pkt, flags, mpi_errno);
+ if (!(flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) && target_dtp == NULL && is_origin_contig) {
+ /* Fast path --- use iStartMsgv() to issue the data, which does not need a request
+ * to be passed in:
+ * (1) non-streamed op (do not need to send extended packet header);
+ * (2) target datatype is predefined (do not need to send derived datatype info);
+ * (3) origin datatype is contiguous (do not need to pack the data and send);
+ */
+
+ iov[iovcnt].MPID_IOV_BUF =
+ (MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr + dt_true_lb + stream_offset);
+ iov[iovcnt].MPID_IOV_LEN = stream_size;
+ iovcnt++;
+
+ MPIU_THREAD_CS_ENTER(CH3COMM, vc);
+ mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, iovcnt, &req);
+ MPIU_THREAD_CS_EXIT(CH3COMM, vc);
+ MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
+
+ if (origin_dtp != NULL) {
+ if (req == NULL) {
+ MPID_Datatype_release(origin_dtp);
+ }
+ else {
+ /* this will cause the datatype to be freed when the request
+ * is freed. */
+ req->dev.datatype_ptr = origin_dtp;
+ }
+ }
+
+ goto fn_exit;
+ }
+
+ /* Normal path: use iSendv() and sendNoncontig_fn() to issue the data, which
+ * always need a request to be passed in. */
+
+ /* create a new request */
+ req = MPID_Request_create();
+ MPIU_ERR_CHKANDJUMP(req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
+
+ MPIU_Object_set_ref(req, 2);
+ req->kind = MPID_REQUEST_SEND;
+
+ /* allocate and fill in extended packet header in the request */
+ if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ MPIU_Assert(rma_op->pkt.type == MPIDI_CH3_PKT_ACCUMULATE ||
+ rma_op->pkt.type == MPIDI_CH3_PKT_GET_ACCUM);
+ if (rma_op->pkt.type == MPIDI_CH3_PKT_ACCUMULATE) {
+ req->dev.ext_hdr_ptr = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_t));
+ if (!req->dev.ext_hdr_ptr) {
+ MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
+ "MPIDI_CH3_Ext_pkt_accum_t");
+ }
+ req->dev.ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_accum_t);
+ ((MPIDI_CH3_Ext_pkt_accum_t *) req->dev.ext_hdr_ptr)->stream_offset = stream_offset;
+ }
+ else {
+ req->dev.ext_hdr_ptr = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_get_accum_t));
+ if (!req->dev.ext_hdr_ptr) {
+ MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
+ "MPIDI_CH3_Ext_pkt_get_accum_t");
+ }
+ req->dev.ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
+ ((MPIDI_CH3_Ext_pkt_get_accum_t *) req->dev.ext_hdr_ptr)->stream_offset = stream_offset;
+ }
+ }
if (target_dtp == NULL) {
/* basic datatype on target */
+
+ if (origin_dtp != NULL) {
+ req->dev.datatype_ptr = origin_dtp;
+ /* this will cause the datatype to be freed when the request
+ * is freed. */
+ }
+
if (is_origin_contig) {
/* origin data is contiguous */
- int iovcnt = 2;
-
- iov[1].MPID_IOV_BUF =
+ iov[iovcnt].MPID_IOV_BUF =
(MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr + dt_true_lb + stream_offset);
- iov[1].MPID_IOV_LEN = stream_size;
+ iov[iovcnt].MPID_IOV_LEN = stream_size;
+ iovcnt++;
MPIU_THREAD_CS_ENTER(CH3COMM, vc);
- mpi_errno = MPIDI_CH3_iStartMsgv(vc, iov, iovcnt, &req);
+ mpi_errno = MPIDI_CH3_iSendv(vc, req, iov, iovcnt);
MPIU_THREAD_CS_EXIT(CH3COMM, vc);
MPIU_ERR_CHKANDJUMP(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|rmamsg");
-
- if (origin_dtp != NULL) {
- if (req == NULL) {
- MPID_Datatype_release(origin_dtp);
- }
- else {
- /* this will cause the datatype to be freed when the request
- * is freed. */
- req->dev.datatype_ptr = origin_dtp;
- }
- }
}
else {
/* origin data is non-contiguous */
- req = MPID_Request_create();
- MPIU_ERR_CHKANDJUMP(req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
-
- MPIU_Object_set_ref(req, 2);
- req->kind = MPID_REQUEST_SEND;
-
req->dev.segment_ptr = MPID_Segment_alloc();
MPIU_ERR_CHKANDJUMP1(req->dev.segment_ptr == NULL, mpi_errno,
MPI_ERR_OTHER, "**nomem", "**nomem %s", "MPID_Segment_alloc");
- if (origin_dtp != NULL) {
- req->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, req->dev.segment_ptr, 0);
req->dev.segment_first = stream_offset;
@@ -468,14 +522,6 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPIDI_msg_sz_t first = stream_offset;
MPIDI_msg_sz_t last = stream_offset + stream_size;
- req = MPID_Request_create();
- if (req == NULL) {
- MPIU_ERR_SETANDJUMP(mpi_errno, MPI_ERR_OTHER, "**nomemreq");
- }
-
- MPIU_Object_set_ref(req, 2);
- req->kind = MPID_REQUEST_SEND;
-
req->dev.segment_ptr = MPID_Segment_alloc();
MPIU_ERR_CHKANDJUMP1(req->dev.segment_ptr == NULL, mpi_errno, MPI_ERR_OTHER,
"**nomem", "**nomem %s", "MPID_Segment_alloc");
@@ -556,9 +602,9 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPID_Datatype_release(target_dtp);
}
+ fn_exit:
(*req_ptr) = req;
- fn_exit:
MPIDI_FUNC_EXIT(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER_STREAM);
return mpi_errno;
fn_fail:
@@ -709,6 +755,11 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ /* If there are more than one stream unit, mark the current packet
+ * as stream packet */
+ if (stream_unit_count > 1)
+ flags |= MPIDI_CH3_PKT_FLAG_RMA_STREAM;
+
rest_len = total_len;
MPIU_Assert(rma_op->issued_stream_count >= 0);
for (j = 0; j < stream_unit_count; j++) {
@@ -734,8 +785,6 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
rest_len -= stream_size;
- accum_pkt->info.metadata.stream_offset = stream_offset;
-
mpi_errno =
issue_from_origin_buffer_stream(rma_op, vc, stream_offset, stream_size, &curr_req);
if (mpi_errno != MPI_SUCCESS)
@@ -884,6 +933,11 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_unit_count = (predefined_dtp_count - 1) / stream_elem_count + 1;
MPIU_Assert(stream_elem_count > 0 && stream_unit_count > 0);
+ /* If there are more than one stream unit, mark the current packet
+ * as stream packet */
+ if (stream_unit_count > 1)
+ flags |= MPIDI_CH3_PKT_FLAG_RMA_STREAM;
+
rest_len = total_len;
rma_op->reqs_size = stream_unit_count;
@@ -943,9 +997,18 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
rest_len -= stream_size;
- get_accum_pkt->info.metadata.stream_offset = stream_offset;
+ if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ /* allocate extended packet header in request */
+ resp_req->dev.ext_hdr_ptr = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_get_accum_t));
+ if (!resp_req->dev.ext_hdr_ptr) {
+ MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
+ "MPIDI_CH3_Ext_pkt_get_accum_t");
+ }
+ resp_req->dev.ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
- resp_req->dev.stream_offset = stream_offset;
+ ((MPIDI_CH3_Ext_pkt_get_accum_t *) resp_req->dev.ext_hdr_ptr)->stream_offset =
+ stream_offset;
+ }
mpi_errno =
issue_from_origin_buffer_stream(rma_op, vc, stream_offset, stream_size, &curr_req);
diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h
index 061c0f2..46cb9a8 100644
--- a/src/mpid/ch3/include/mpidimpl.h
+++ b/src/mpid/ch3/include/mpidimpl.h
@@ -354,6 +354,8 @@ extern MPIDI_Process_t MPIDI_Process;
(sreq_)->dev.iov_count = 0; \
(sreq_)->dev.iov_offset = 0; \
(sreq_)->dev.tmpbuf = NULL; \
+ (sreq_)->dev.ext_hdr_ptr = NULL; \
+ (sreq_)->dev.ext_hdr_sz = 0; \
MPIDI_Request_clear_dbg(sreq_); \
}
@@ -388,6 +390,8 @@ extern MPIDI_Process_t MPIDI_Process;
(rreq_)->dev.OnFinal = NULL; \
(rreq_)->dev.drop_data = FALSE; \
(rreq_)->dev.tmpbuf = NULL; \
+ (rreq_)->dev.ext_hdr_ptr = NULL; \
+ (rreq_)->dev.ext_hdr_sz = 0; \
MPIDI_CH3_REQUEST_INIT(rreq_);\
}
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index ca5ed2d..1abc4b2 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -129,7 +129,8 @@ typedef enum {
MPIDI_CH3_PKT_FLAG_RMA_LOCK_QUEUED_DATA_DISCARDED = 1024,
MPIDI_CH3_PKT_FLAG_RMA_LOCK_DISCARDED = 2048,
MPIDI_CH3_PKT_FLAG_RMA_UNLOCK_NO_ACK = 4096,
- MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP = 8192
+ MPIDI_CH3_PKT_FLAG_RMA_IMMED_RESP = 8192,
+ MPIDI_CH3_PKT_FLAG_RMA_STREAM = 16384
} MPIDI_CH3_Pkt_flags_t;
typedef struct MPIDI_CH3_Pkt_send {
@@ -522,31 +523,16 @@ MPIDI_CH3_PKT_DEFS
err_ = MPI_SUCCESS; \
switch((pkt_).type) { \
case (MPIDI_CH3_PKT_PUT): \
- (pkt_).put.info.metadata.dataloop_size = (dataloop_size_); \
+ (pkt_).put.info.dataloop_size = (dataloop_size_); \
break; \
case (MPIDI_CH3_PKT_GET): \
- (pkt_).get.info.metadata.dataloop_size = (dataloop_size_); \
+ (pkt_).get.info.dataloop_size = (dataloop_size_); \
break; \
case (MPIDI_CH3_PKT_ACCUMULATE): \
- (pkt_).accum.info.metadata.dataloop_size = (dataloop_size_); \
+ (pkt_).accum.info.dataloop_size = (dataloop_size_); \
break; \
case (MPIDI_CH3_PKT_GET_ACCUM): \
- (pkt_).get_accum.info.metadata.dataloop_size = (dataloop_size_); \
- break; \
- default: \
- MPIU_ERR_SETANDJUMP1(err_, MPI_ERR_OTHER, "**invalidpkt", "**invalidpkt %d", (pkt_).type); \
- } \
- }
-
-#define MPIDI_CH3_PKT_RMA_GET_STREAM_OFFSET(pkt_, stream_offset_, err_) \
- { \
- err_ = MPI_SUCCESS; \
- switch((pkt_).type) { \
- case (MPIDI_CH3_PKT_ACCUMULATE): \
- (stream_offset_) = (pkt_).accum.info.metadata.stream_offset; \
- break; \
- case (MPIDI_CH3_PKT_GET_ACCUM): \
- (stream_offset_) = (pkt_).get_accum.info.metadata.stream_offset; \
+ (pkt_).get_accum.info.dataloop_size = (dataloop_size_); \
break; \
default: \
MPIU_ERR_SETANDJUMP1(err_, MPI_ERR_OTHER, "**invalidpkt", "**invalidpkt %d", (pkt_).type); \
@@ -609,12 +595,7 @@ typedef struct MPIDI_CH3_Pkt_put {
MPI_Win target_win_handle;
MPI_Win source_win_handle;
union {
- /* note that we use struct here in order
- * to consistently access dataloop_size
- * by "pkt->info.metadata.dataloop_size". */
- struct {
- int dataloop_size;
- } metadata;
+ int dataloop_size;
char data[MPIDI_RMA_IMMED_BYTES];
} info;
} MPIDI_CH3_Pkt_put_t;
@@ -626,12 +607,7 @@ typedef struct MPIDI_CH3_Pkt_get {
int count;
MPI_Datatype datatype;
struct {
- /* note that we use struct here in order
- * to consistently access dataloop_size
- * by "pkt->info.metadata.dataloop_size". */
- struct {
- int dataloop_size; /* for derived datatypes */
- } metadata;
+ int dataloop_size; /* for derived datatypes */
} info;
MPI_Request request_handle;
MPI_Win target_win_handle;
@@ -662,10 +638,7 @@ typedef struct MPIDI_CH3_Pkt_accum {
MPI_Win target_win_handle;
MPI_Win source_win_handle;
union {
- struct {
- int dataloop_size;
- MPI_Aint stream_offset;
- } metadata;
+ int dataloop_size;
char data[MPIDI_RMA_IMMED_BYTES];
} info;
} MPIDI_CH3_Pkt_accum_t;
@@ -680,10 +653,7 @@ typedef struct MPIDI_CH3_Pkt_get_accum {
MPI_Op op;
MPI_Win target_win_handle;
union {
- struct {
- int dataloop_size;
- MPI_Aint stream_offset;
- } metadata;
+ int dataloop_size;
char data[MPIDI_RMA_IMMED_BYTES];
} info;
} MPIDI_CH3_Pkt_get_accum_t;
@@ -865,6 +835,14 @@ typedef union MPIDI_CH3_Pkt {
#endif
} MPIDI_CH3_Pkt_t;
+typedef struct MPIDI_CH3_Ext_pkt_accum {
+ MPI_Aint stream_offset;
+} MPIDI_CH3_Ext_pkt_accum_t;
+
+typedef struct MPIDI_CH3_Ext_pkt_get_accum {
+ MPI_Aint stream_offset;
+} MPIDI_CH3_Ext_pkt_get_accum_t;
+
#if defined(MPID_USE_SEQUENCE_NUMBERS)
typedef struct MPIDI_CH3_Pkt_send_container {
MPIDI_CH3_Pkt_send_t pkt;
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 09d5d12..255b9d3 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -447,8 +447,8 @@ typedef struct MPIDI_Request {
struct MPIDI_RMA_Lock_entry *lock_queue_entry;
MPI_Request resp_request_handle; /* Handle for get_accumulate response */
- MPI_Aint stream_offset; /* used when streaming ACC/GACC packets, specifying the start
- location of the current streaming unit. */
+ void *ext_hdr_ptr; /* pointer to extended packet header */
+ MPIDI_msg_sz_t ext_hdr_sz;
MPIDI_REQUEST_SEQNUM
diff --git a/src/mpid/ch3/include/mpidrma.h b/src/mpid/ch3/include/mpidrma.h
index d6f4c15..3ddb28e 100644
--- a/src/mpid/ch3/include/mpidrma.h
+++ b/src/mpid/ch3/include/mpidrma.h
@@ -364,11 +364,13 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
int complete = 0;
MPIDI_msg_sz_t data_len;
char *data_buf = NULL;
+ MPIDI_CH3_Pkt_flags_t flags;
/* This is PUT, ACC, GACC, FOP */
MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE((*pkt), target_dtp, mpi_errno);
MPIDI_CH3_PKT_RMA_GET_TARGET_COUNT((*pkt), target_count, mpi_errno);
+ MPIDI_CH3_PKT_RMA_GET_FLAGS((*pkt), flags, mpi_errno);
MPID_Datatype_get_extent_macro(target_dtp, type_extent);
MPID_Datatype_get_size_macro(target_dtp, type_size);
@@ -378,17 +380,29 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
buf_size = type_extent * target_count;
}
else {
- MPI_Aint stream_offset, stream_elem_count;
- MPI_Aint total_len, rest_len;
+ MPI_Aint stream_elem_count;
+ MPI_Aint total_len;
- MPIDI_CH3_PKT_RMA_GET_STREAM_OFFSET((*pkt), stream_offset, mpi_errno);
stream_elem_count = MPIDI_CH3U_SRBuf_size / type_extent;
total_len = type_size * target_count;
- rest_len = total_len - stream_offset;
- recv_data_sz = MPIR_MIN(rest_len, type_size * stream_elem_count);
+ recv_data_sz = MPIR_MIN(total_len, type_size * stream_elem_count);
buf_size = type_extent * (recv_data_sz / type_size);
}
+ if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ MPIU_Assert(pkt->type == MPIDI_CH3_PKT_ACCUMULATE ||
+ pkt->type == MPIDI_CH3_PKT_GET_ACCUM);
+
+ if (pkt->type == MPIDI_CH3_PKT_ACCUMULATE) {
+ recv_data_sz += sizeof(MPIDI_CH3_Ext_pkt_accum_t);
+ buf_size += sizeof(MPIDI_CH3_Ext_pkt_accum_t);
+ }
+ else {
+ recv_data_sz += sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
+ buf_size += sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
+ }
+ }
+
if (new_ptr != NULL) {
if (win_ptr->current_lock_data_bytes + buf_size < MPIR_CVAR_CH3_RMA_LOCK_DATA_BYTES) {
new_ptr->data = MPIU_Malloc(buf_size);
@@ -404,10 +418,8 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
MPIDI_CH3_Pkt_t new_pkt;
MPIDI_CH3_Pkt_lock_t *lock_pkt = &new_pkt.lock;
MPI_Win target_win_handle;
- MPIDI_CH3_Pkt_flags_t flags;
MPIDI_CH3_PKT_RMA_GET_TARGET_WIN_HANDLE((*pkt), target_win_handle, mpi_errno);
- MPIDI_CH3_PKT_RMA_GET_FLAGS((*pkt), flags, mpi_errno);
if (pkt->type == MPIDI_CH3_PKT_PUT || pkt->type == MPIDI_CH3_PKT_ACCUMULATE) {
MPIDI_CH3_PKT_RMA_GET_SOURCE_WIN_HANDLE((*pkt), source_win_handle, mpi_errno);
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_req.c b/src/mpid/ch3/src/ch3u_handle_recv_req.c
index b39616f..4e4c2dc 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_req.c
@@ -139,6 +139,7 @@ int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq,
MPIDI_CH3_Pkt_flags_t flags = rreq->dev.flags;
MPI_Datatype basic_type;
MPI_Aint predef_count, predef_dtp_size;
+ MPI_Aint stream_offset;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMRECVCOMPLETE);
@@ -176,12 +177,19 @@ int MPIDI_CH3_ReqHandler_AccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq,
predef_count = rreq->dev.recv_data_sz / predef_dtp_size;
MPIU_Assert(predef_count > 0);
+ if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
+ stream_offset = ((MPIDI_CH3_Ext_pkt_accum_t *) rreq->dev.ext_hdr_ptr)->stream_offset;
+ }
+ else
+ stream_offset = 0;
+
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_LOCK(win_ptr);
/* accumulate data from tmp_buf into user_buf */
mpi_errno = do_accumulate_op(rreq->dev.user_buf, predef_count, basic_type,
rreq->dev.real_user_buf, rreq->dev.user_count, rreq->dev.datatype,
- rreq->dev.stream_offset, rreq->dev.op);
+ stream_offset, rreq->dev.op);
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
if (mpi_errno) {
@@ -233,6 +241,7 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
MPI_Datatype basic_type;
MPI_Aint predef_count, predef_dtp_size;
MPI_Aint dt_true_lb;
+ MPI_Aint stream_offset;
MPIU_CHKPMEM_DECL(1);
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
@@ -262,6 +271,14 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
(rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_UNLOCK))
get_accum_resp_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_FLUSH_ACK;
+ if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
+ stream_offset = ((MPIDI_CH3_Ext_pkt_get_accum_t *) rreq->dev.ext_hdr_ptr)->stream_offset;
+ }
+ else {
+ stream_offset = 0;
+ }
+
/* check if data is contiguous and get true lb */
MPID_Datatype_is_contig(rreq->dev.datatype, &is_contig);
MPID_Datatype_get_true_lb(rreq->dev.datatype, &dt_true_lb);
@@ -284,11 +301,11 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
if (is_contig) {
MPIU_Memcpy(resp_req->dev.user_buf,
(void *) ((char *) rreq->dev.real_user_buf + dt_true_lb +
- rreq->dev.stream_offset), rreq->dev.recv_data_sz);
+ stream_offset), rreq->dev.recv_data_sz);
}
else {
MPID_Segment *seg = MPID_Segment_alloc();
- MPI_Aint first = rreq->dev.stream_offset;
+ MPI_Aint first = stream_offset;
MPI_Aint last = first + rreq->dev.recv_data_sz;
if (seg == NULL) {
@@ -306,7 +323,7 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
/* accumulate data from tmp_buf into user_buf */
mpi_errno = do_accumulate_op(rreq->dev.user_buf, predef_count, basic_type,
rreq->dev.real_user_buf, rreq->dev.user_count, rreq->dev.datatype,
- rreq->dev.stream_offset, rreq->dev.op);
+ stream_offset, rreq->dev.op);
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
@@ -542,18 +559,49 @@ int MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((u
MPID_Datatype *new_dtp = NULL;
MPI_Aint basic_type_extent, basic_type_size;
MPI_Aint total_len, rest_len, stream_elem_count;
+ MPI_Aint stream_offset;
+ MPI_Aint type_size;
+ MPI_Datatype basic_dtp;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMDERIVEDDTRECVCOMPLETE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_ACCUMDERIVEDDTRECVCOMPLETE);
- /* create derived datatype */
- create_derived_datatype(rreq, &new_dtp);
+ if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
+ stream_offset = ((MPIDI_CH3_Ext_pkt_accum_t *) rreq->dev.ext_hdr_ptr)->stream_offset;
+ }
+ else
+ stream_offset = 0;
- /* update new request to get the data */
- MPIDI_Request_set_type(rreq, MPIDI_REQUEST_TYPE_ACCUM_RECV);
+ if (MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_ACCUM_RECV_DERIVED_DT) {
+ /* create derived datatype */
+ create_derived_datatype(rreq, &new_dtp);
- MPID_Datatype_get_size_macro(new_dtp->basic_type, basic_type_size);
- MPID_Datatype_get_extent_macro(new_dtp->basic_type, basic_type_extent);
+ /* update new request to get the data */
+ MPIDI_Request_set_type(rreq, MPIDI_REQUEST_TYPE_ACCUM_RECV);
+
+ MPIU_Assert(rreq->dev.datatype == MPI_DATATYPE_NULL);
+ rreq->dev.datatype = new_dtp->handle;
+ rreq->dev.datatype_ptr = new_dtp;
+ /* this will cause the datatype to be freed when the
+ * request is freed. free dtype_info here. */
+ MPIU_Free(rreq->dev.dtype_info);
+
+ type_size = new_dtp->size;
+
+ basic_dtp = new_dtp->basic_type;
+ }
+ else {
+ MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_ACCUM_RECV);
+ MPIU_Assert(rreq->dev.datatype != MPI_DATATYPE_NULL);
+
+ MPID_Datatype_get_size_macro(rreq->dev.datatype, type_size);
+
+ basic_dtp = rreq->dev.datatype;
+ }
+
+ MPID_Datatype_get_size_macro(basic_dtp, basic_type_size);
+ MPID_Datatype_get_extent_macro(basic_dtp, basic_type_extent);
MPIU_Assert(!MPIDI_Request_get_srbuf_flag(rreq));
/* allocate a SRBuf for receiving stream unit */
@@ -570,17 +618,12 @@ int MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((u
/* --END ERROR HANDLING-- */
rreq->dev.user_buf = rreq->dev.tmpbuf;
- rreq->dev.datatype = new_dtp->handle;
- total_len = new_dtp->size * rreq->dev.user_count;
- rest_len = total_len - rreq->dev.stream_offset;
+ total_len = type_size * rreq->dev.user_count;
+ rest_len = total_len - stream_offset;
stream_elem_count = MPIDI_CH3U_SRBuf_size / basic_type_extent;
rreq->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * basic_type_size);
- rreq->dev.datatype_ptr = new_dtp;
- /* this will cause the datatype to be freed when the
- * request is freed. free dtype_info here. */
- MPIU_Free(rreq->dev.dtype_info);
rreq->dev.segment_ptr = MPID_Segment_alloc();
MPIU_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
@@ -588,7 +631,7 @@ int MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((u
MPID_Segment_init(rreq->dev.user_buf,
(rreq->dev.recv_data_sz / basic_type_size),
- new_dtp->basic_type, rreq->dev.segment_ptr, 0);
+ basic_dtp, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = rreq->dev.recv_data_sz;
@@ -617,18 +660,49 @@ int MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((
MPID_Datatype *new_dtp = NULL;
MPI_Aint basic_type_extent, basic_type_size;
MPI_Aint total_len, rest_len, stream_elem_count;
+ MPI_Aint stream_offset;
+ MPI_Aint type_size;
+ MPI_Datatype basic_dtp;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMDERIVEDDTRECVCOMPLETE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMDERIVEDDTRECVCOMPLETE);
- /* create derived datatype */
- create_derived_datatype(rreq, &new_dtp);
+ if (rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ MPIU_Assert(rreq->dev.ext_hdr_ptr != NULL);
+ stream_offset = ((MPIDI_CH3_Ext_pkt_get_accum_t *) rreq->dev.ext_hdr_ptr)->stream_offset;
+ }
+ else
+ stream_offset = 0;
+
+ if (MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_GET_ACCUM_RECV_DERIVED_DT) {
+ /* create derived datatype */
+ create_derived_datatype(rreq, &new_dtp);
- /* update new request to get the data */
- MPIDI_Request_set_type(rreq, MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
+ /* update new request to get the data */
+ MPIDI_Request_set_type(rreq, MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
- MPID_Datatype_get_size_macro(new_dtp->basic_type, basic_type_size);
- MPID_Datatype_get_extent_macro(new_dtp->basic_type, basic_type_extent);
+ MPIU_Assert(rreq->dev.datatype == MPI_DATATYPE_NULL);
+ rreq->dev.datatype = new_dtp->handle;
+ rreq->dev.datatype_ptr = new_dtp;
+ /* this will cause the datatype to be freed when the
+ * request is freed. free dtype_info here. */
+ MPIU_Free(rreq->dev.dtype_info);
+
+ type_size = new_dtp->size;
+
+ basic_dtp = new_dtp->basic_type;
+ }
+ else {
+ MPIU_Assert(MPIDI_Request_get_type(rreq) == MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
+ MPIU_Assert(rreq->dev.datatype != MPI_DATATYPE_NULL);
+
+ MPID_Datatype_get_size_macro(rreq->dev.datatype, type_size);
+
+ basic_dtp = rreq->dev.datatype;
+ }
+
+ MPID_Datatype_get_size_macro(basic_dtp, basic_type_size);
+ MPID_Datatype_get_extent_macro(basic_dtp, basic_type_extent);
MPIU_Assert(!MPIDI_Request_get_srbuf_flag(rreq));
/* allocate a SRBuf for receiving stream unit */
@@ -645,17 +719,12 @@ int MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((
/* --END ERROR HANDLING-- */
rreq->dev.user_buf = rreq->dev.tmpbuf;
- rreq->dev.datatype = new_dtp->handle;
- total_len = new_dtp->size * rreq->dev.user_count;
- rest_len = total_len - rreq->dev.stream_offset;
+ total_len = type_size * rreq->dev.user_count;
+ rest_len = total_len - stream_offset;
stream_elem_count = MPIDI_CH3U_SRBuf_size / basic_type_extent;
rreq->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * basic_type_size);
- rreq->dev.datatype_ptr = new_dtp;
- /* this will cause the datatype to be freed when the
- * request is freed. free dtype_info here. */
- MPIU_Free(rreq->dev.dtype_info);
rreq->dev.segment_ptr = MPID_Segment_alloc();
MPIU_ERR_CHKANDJUMP1((rreq->dev.segment_ptr == NULL), mpi_errno, MPI_ERR_OTHER, "**nomem",
@@ -663,7 +732,7 @@ int MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(MPIDI_VC_t * vc ATTRIBUTE((
MPID_Segment_init(rreq->dev.user_buf,
(rreq->dev.recv_data_sz / basic_type_size),
- new_dtp->basic_type, rreq->dev.segment_ptr, 0);
+ basic_dtp, rreq->dev.segment_ptr, 0);
rreq->dev.segment_first = 0;
rreq->dev.segment_size = rreq->dev.recv_data_sz;
@@ -1122,19 +1191,20 @@ static inline int perform_acc_in_lock_queue(MPID_Win * win_ptr, MPIDI_RMA_Lock_e
else {
MPIU_Assert(acc_pkt->type == MPIDI_CH3_PKT_ACCUMULATE);
MPI_Aint type_size, type_extent;
- MPI_Aint total_len, rest_len, recv_count;
+ MPI_Aint total_len, recv_count;
MPID_Datatype_get_size_macro(acc_pkt->datatype, type_size);
MPID_Datatype_get_extent_macro(acc_pkt->datatype, type_extent);
total_len = type_size * acc_pkt->count;
- rest_len = total_len - acc_pkt->info.metadata.stream_offset;
- recv_count = MPIR_MIN((rest_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
+ recv_count = MPIR_MIN((total_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
MPIU_Assert(recv_count > 0);
+ /* Note: here stream_offset is 0 because when piggybacking LOCK, we must use
+ * the first stream unit. */
mpi_errno = do_accumulate_op(lock_entry->data, recv_count, acc_pkt->datatype,
acc_pkt->addr, acc_pkt->count, acc_pkt->datatype,
- acc_pkt->info.metadata.stream_offset, acc_pkt->op);
+ 0, acc_pkt->op);
}
if (win_ptr->shm_allocated == TRUE)
@@ -1169,7 +1239,7 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
int is_contig;
int mpi_errno = MPI_SUCCESS;
MPI_Aint type_extent;
- MPI_Aint total_len, rest_len, recv_count;
+ MPI_Aint total_len, recv_count;
/* Piggyback candidate should have basic datatype for target datatype. */
MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype));
@@ -1263,8 +1333,7 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, type_extent);
total_len = type_size * get_accum_pkt->count;
- rest_len = total_len - get_accum_pkt->info.metadata.stream_offset;
- recv_count = MPIR_MIN((rest_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
+ recv_count = MPIR_MIN((total_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
MPIU_Assert(recv_count > 0);
sreq->dev.user_buf = (void *) MPIU_Malloc(recv_count * type_size);
@@ -1278,14 +1347,15 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
/* Copy data from target window to temporary buffer */
+ /* Note: here stream_offset is 0 because when piggybacking LOCK, we must use
+ * the first stream unit. */
+
if (is_contig) {
- MPIU_Memcpy(sreq->dev.user_buf,
- (void *) ((char *) get_accum_pkt->addr +
- get_accum_pkt->info.metadata.stream_offset), recv_count * type_size);
+ MPIU_Memcpy(sreq->dev.user_buf, get_accum_pkt->addr, recv_count * type_size);
}
else {
MPID_Segment *seg = MPID_Segment_alloc();
- MPI_Aint first = get_accum_pkt->info.metadata.stream_offset;
+ MPI_Aint first = 0;
MPI_Aint last = first + type_size * recv_count;
if (seg == NULL) {
@@ -1304,7 +1374,7 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
mpi_errno = do_accumulate_op(lock_entry->data, recv_count, get_accum_pkt->datatype,
get_accum_pkt->addr, get_accum_pkt->count, get_accum_pkt->datatype,
- get_accum_pkt->info.metadata.stream_offset, get_accum_pkt->op);
+ 0, get_accum_pkt->op);
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
@@ -1815,6 +1885,26 @@ int MPIDI_CH3_ReqHandler_PiggybackLockOpRecvComplete(MPIDI_VC_t * vc,
mpi_errno);
MPID_Win_get_ptr(target_win_handle, win_ptr);
+ if (flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM && (rreq->dev.lock_queue_entry)->data != NULL) {
+
+ MPIU_Assert(lock_queue_entry->pkt.type == MPIDI_CH3_PKT_ACCUMULATE ||
+ lock_queue_entry->pkt.type == MPIDI_CH3_PKT_GET_ACCUM);
+
+ int ext_hdr_sz;
+
+ if (lock_queue_entry->pkt.type == MPIDI_CH3_PKT_ACCUMULATE)
+ ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_accum_t);
+ else
+ ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
+
+ /* here we drop the stream_offset received, because the stream unit that piggybacked with
+ * LOCK must be the first stream unit, with stream_offset equals to 0. */
+ rreq->dev.recv_data_sz -= ext_hdr_sz;
+ memmove((rreq->dev.lock_queue_entry)->data,
+ (void *) ((char *) ((rreq->dev.lock_queue_entry)->data) + ext_hdr_sz),
+ rreq->dev.recv_data_sz);
+ }
+
if (flags & MPIDI_CH3_PKT_FLAG_RMA_LOCK_SHARED) {
requested_lock = MPI_LOCK_SHARED;
}
diff --git a/src/mpid/ch3/src/ch3u_request.c b/src/mpid/ch3/src/ch3u_request.c
index 63b5f6e..0be196d 100644
--- a/src/mpid/ch3/src/ch3u_request.c
+++ b/src/mpid/ch3/src/ch3u_request.c
@@ -94,8 +94,9 @@ MPID_Request * MPID_Request_create(void)
req->dev.OnFinal = NULL;
req->dev.user_buf = NULL;
req->dev.drop_data = FALSE;
- req->dev.stream_offset = 0;
req->dev.tmpbuf = NULL;
+ req->dev.ext_hdr_ptr = NULL;
+ req->dev.ext_hdr_sz = 0;
#ifdef MPIDI_CH3_REQUEST_INIT
MPIDI_CH3_REQUEST_INIT(req);
#endif
@@ -171,6 +172,10 @@ void MPIDI_CH3_Request_destroy(MPID_Request * req)
MPIDI_CH3U_SRBuf_free(req);
}
+ if (req->dev.ext_hdr_ptr != NULL) {
+ MPIU_Free(req->dev.ext_hdr_ptr);
+ }
+
MPIU_Handle_obj_free(&MPID_Request_mem, req);
MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3_REQUEST_DESTROY);
diff --git a/src/mpid/ch3/src/ch3u_rma_ops.c b/src/mpid/ch3/src/ch3u_rma_ops.c
index 9611716..6a23a9f 100644
--- a/src/mpid/ch3/src/ch3u_rma_ops.c
+++ b/src/mpid/ch3/src/ch3u_rma_ops.c
@@ -198,7 +198,7 @@ int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
put_pkt->count = target_count;
put_pkt->datatype = target_datatype;
- put_pkt->info.metadata.dataloop_size = 0;
+ put_pkt->info.dataloop_size = 0;
put_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
put_pkt->source_win_handle = win_ptr->handle;
put_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
@@ -387,7 +387,7 @@ int MPIDI_CH3I_Get(void *origin_addr, int origin_count, MPI_Datatype
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_pkt->count = target_count;
get_pkt->datatype = target_datatype;
- get_pkt->info.metadata.dataloop_size = 0;
+ get_pkt->info.dataloop_size = 0;
get_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
get_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_resp_pkt)
@@ -612,11 +612,10 @@ int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatyp
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
accum_pkt->count = target_count;
accum_pkt->datatype = target_datatype;
- accum_pkt->info.metadata.dataloop_size = 0;
+ accum_pkt->info.dataloop_size = 0;
accum_pkt->op = op;
accum_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
accum_pkt->source_win_handle = win_ptr->handle;
- accum_pkt->info.metadata.stream_offset = 0;
accum_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
void *src = (void *) origin_addr, *dest = (void *) (accum_pkt->info.data);
@@ -810,7 +809,7 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_pkt->count = target_count;
get_pkt->datatype = target_datatype;
- get_pkt->info.metadata.dataloop_size = 0;
+ get_pkt->info.dataloop_size = 0;
get_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
get_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_resp_pkt == TRUE)
@@ -931,10 +930,9 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_accum_pkt->count = target_count;
get_accum_pkt->datatype = target_datatype;
- get_accum_pkt->info.metadata.dataloop_size = 0;
+ get_accum_pkt->info.dataloop_size = 0;
get_accum_pkt->op = op;
get_accum_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
- get_accum_pkt->info.metadata.stream_offset = 0;
get_accum_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
void *src = (void *) origin_addr, *dest = (void *) (get_accum_pkt->info.data);
@@ -1346,7 +1344,7 @@ int MPIDI_Fetch_and_op(const void *origin_addr, void *result_addr,
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_pkt->count = 1;
get_pkt->datatype = datatype;
- get_pkt->info.metadata.dataloop_size = 0;
+ get_pkt->info.dataloop_size = 0;
get_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
get_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_resp_pkt == TRUE)
diff --git a/src/mpid/ch3/src/ch3u_rma_pkthandler.c b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
index 120fb1b..70a2bc9 100644
--- a/src/mpid/ch3/src/ch3u_rma_pkthandler.c
+++ b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
@@ -293,24 +293,24 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
"MPIDI_RMA_dtype_info");
}
- req->dev.dataloop = MPIU_Malloc(put_pkt->info.metadata.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(put_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- put_pkt->info.metadata.dataloop_size);
+ put_pkt->info.dataloop_size);
}
/* if we received all of the dtype_info and dataloop, copy it
* now and call the handler, otherwise set the iov and let the
* channel copy it */
- if (data_len >= sizeof(MPIDI_RMA_dtype_info) + put_pkt->info.metadata.dataloop_size) {
+ if (data_len >= sizeof(MPIDI_RMA_dtype_info) + put_pkt->info.dataloop_size) {
/* copy all of dtype_info and dataloop */
MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- put_pkt->info.metadata.dataloop_size);
+ put_pkt->info.dataloop_size);
*buflen =
sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- put_pkt->info.metadata.dataloop_size;
+ put_pkt->info.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(vc, req, &complete);
@@ -325,7 +325,7 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) ((char *) req->dev.dtype_info);
req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = put_pkt->info.metadata.dataloop_size;
+ req->dev.iov[1].MPID_IOV_LEN = put_pkt->info.dataloop_size;
req->dev.iov_count = 2;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
@@ -519,24 +519,24 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
"MPIDI_RMA_dtype_info");
}
- req->dev.dataloop = MPIU_Malloc(get_pkt->info.metadata.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(get_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- get_pkt->info.metadata.dataloop_size);
+ get_pkt->info.dataloop_size);
}
/* if we received all of the dtype_info and dataloop, copy it
* now and call the handler, otherwise set the iov and let the
* channel copy it */
- if (data_len >= sizeof(MPIDI_RMA_dtype_info) + get_pkt->info.metadata.dataloop_size) {
+ if (data_len >= sizeof(MPIDI_RMA_dtype_info) + get_pkt->info.dataloop_size) {
/* copy all of dtype_info and dataloop */
MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- get_pkt->info.metadata.dataloop_size);
+ get_pkt->info.dataloop_size);
*buflen =
sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- get_pkt->info.metadata.dataloop_size;
+ get_pkt->info.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(vc, req, &complete);
@@ -549,7 +549,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = get_pkt->info.metadata.dataloop_size;
+ req->dev.iov[1].MPID_IOV_LEN = get_pkt->info.dataloop_size;
req->dev.iov_count = 2;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
@@ -582,7 +582,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
int acquire_lock_fail = 0;
int mpi_errno = MPI_SUCCESS;
MPI_Aint type_size;
- MPI_Aint stream_elem_count, rest_len, total_len;
+ MPI_Aint stream_elem_count, total_len;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
@@ -640,90 +640,129 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.target_win_handle = accum_pkt->target_win_handle;
req->dev.source_win_handle = accum_pkt->source_win_handle;
req->dev.flags = accum_pkt->flags;
- req->dev.stream_offset = accum_pkt->info.metadata.stream_offset;
req->dev.resp_request_handle = MPI_REQUEST_NULL;
- req->dev.OnFinal = MPIDI_CH3_ReqHandler_AccumRecvComplete;
/* get start location of data and length of data */
data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ if (req->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ /* allocate extended header in the request */
+ req->dev.ext_hdr_ptr = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_accum_t));
+ if (!req->dev.ext_hdr_ptr) {
+ MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
+ "MPIDI_CH3_Ext_pkt_accum_t");
+ }
+ req->dev.ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_accum_t);
+ }
+
if (MPIR_DATATYPE_IS_PREDEFINED(accum_pkt->datatype)) {
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_ACCUM_RECV);
req->dev.datatype = accum_pkt->datatype;
- MPID_Datatype_get_extent_macro(accum_pkt->datatype, extent);
+ if (req->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete;
- MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
- /* allocate a SRBuf for receiving stream unit */
- MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
- /* --BEGIN ERROR HANDLING-- */
- if (req->dev.tmpbuf_sz == 0) {
- MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
- FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
- "**nomem %d", MPIDI_CH3U_SRBuf_size);
- req->status.MPI_ERROR = mpi_errno;
- goto fn_fail;
+ /* if this is a streamed op pkt, set iov to receive extended pkt header. */
+ req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.ext_hdr_ptr;
+ req->dev.iov[0].MPID_IOV_LEN = req->dev.ext_hdr_sz;
+ req->dev.iov_count = 1;
+
+ *buflen = sizeof(MPIDI_CH3_Pkt_t);
}
- /* --END ERROR HANDLING-- */
+ else {
+ req->dev.OnFinal = MPIDI_CH3_ReqHandler_AccumRecvComplete;
+
+ MPID_Datatype_get_extent_macro(accum_pkt->datatype, extent);
+
+ MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
+ /* allocate a SRBuf for receiving stream unit */
+ MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
+ /* --BEGIN ERROR HANDLING-- */
+ if (req->dev.tmpbuf_sz == 0) {
+ MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
+ FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
+ "**nomem %d", MPIDI_CH3U_SRBuf_size);
+ req->status.MPI_ERROR = mpi_errno;
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
- req->dev.user_buf = req->dev.tmpbuf;
+ req->dev.user_buf = req->dev.tmpbuf;
- MPID_Datatype_get_size_macro(accum_pkt->datatype, type_size);
+ MPID_Datatype_get_size_macro(accum_pkt->datatype, type_size);
- total_len = type_size * accum_pkt->count;
- rest_len = total_len - req->dev.stream_offset;
- stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
+ total_len = type_size * accum_pkt->count;
+ stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
- req->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * type_size);
- MPIU_Assert(req->dev.recv_data_sz > 0);
+ req->dev.recv_data_sz = MPIR_MIN(total_len, stream_elem_count * type_size);
+ MPIU_Assert(req->dev.recv_data_sz > 0);
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
- MPIU_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
- "**ch3|postrecv %s", "MPIDI_CH3_PKT_ACCUMULATE");
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
+ MPIU_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
+ "**ch3|postrecv %s", "MPIDI_CH3_PKT_ACCUMULATE");
- /* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ /* return the number of bytes processed in this function */
+ *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
- if (complete) {
- mpi_errno = MPIDI_CH3_ReqHandler_AccumRecvComplete(vc, req, &complete);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
if (complete) {
- *rreqp = NULL;
- goto fn_exit;
+ mpi_errno = MPIDI_CH3_ReqHandler_AccumRecvComplete(vc, req, &complete);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+ if (complete) {
+ *rreqp = NULL;
+ goto fn_exit;
+ }
}
}
}
else {
+ int metadata_sz = 0;
+
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_ACCUM_RECV_DERIVED_DT);
req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete;
req->dev.datatype = MPI_DATATYPE_NULL;
+ if (accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM)
+ metadata_sz += sizeof(MPIDI_CH3_Ext_pkt_accum_t);
+
req->dev.dtype_info = (MPIDI_RMA_dtype_info *)
MPIU_Malloc(sizeof(MPIDI_RMA_dtype_info));
if (!req->dev.dtype_info) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
"MPIDI_RMA_dtype_info");
}
+ metadata_sz += sizeof(MPIDI_RMA_dtype_info);
- req->dev.dataloop = MPIU_Malloc(accum_pkt->info.metadata.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(accum_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- accum_pkt->info.metadata.dataloop_size);
+ accum_pkt->info.dataloop_size);
}
+ metadata_sz += accum_pkt->info.dataloop_size;
+
+ if (data_len >= metadata_sz) {
+ int buf_offset = 0;
+
+ if (accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ /* copy extended header */
+ MPIU_Memcpy(req->dev.ext_hdr_ptr, data_buf + buf_offset,
+ sizeof(MPIDI_CH3_Ext_pkt_accum_t));
+ buf_offset += sizeof(MPIDI_CH3_Ext_pkt_accum_t);
+ }
- if (data_len >= sizeof(MPIDI_RMA_dtype_info) + accum_pkt->info.metadata.dataloop_size) {
/* copy all of dtype_info and dataloop */
- MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
- MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- accum_pkt->info.metadata.dataloop_size);
+ MPIU_Memcpy(req->dev.dtype_info, data_buf + buf_offset,
+ sizeof(MPIDI_RMA_dtype_info));
+ buf_offset += sizeof(MPIDI_RMA_dtype_info);
- *buflen =
- sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- accum_pkt->info.metadata.dataloop_size;
+ MPIU_Memcpy(req->dev.dataloop, data_buf + buf_offset,
+ accum_pkt->info.dataloop_size);
+ buf_offset += accum_pkt->info.dataloop_size;
+
+ *buflen = sizeof(MPIDI_CH3_Pkt_t) + metadata_sz;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(vc, req, &complete);
@@ -735,11 +774,23 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
}
}
else {
- req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
- req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
- req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = accum_pkt->info.metadata.dataloop_size;
- req->dev.iov_count = 2;
+ int iov_n = 0;
+
+ if (accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ req->dev.iov[iov_n].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.ext_hdr_ptr;
+ req->dev.iov[iov_n].MPID_IOV_LEN = req->dev.ext_hdr_sz;
+ iov_n++;
+ }
+
+ req->dev.iov[iov_n].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
+ req->dev.iov[iov_n].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
+ iov_n++;
+
+ req->dev.iov[iov_n].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
+ req->dev.iov[iov_n].MPID_IOV_LEN = accum_pkt->info.dataloop_size;
+ iov_n++;
+
+ req->dev.iov_count = iov_n;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
}
@@ -776,7 +827,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPID_Win *win_ptr;
int acquire_lock_fail = 0;
int mpi_errno = MPI_SUCCESS;
- MPI_Aint stream_elem_count, rest_len, total_len;
+ MPI_Aint stream_elem_count, total_len;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
@@ -894,92 +945,130 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.real_user_buf = get_accum_pkt->addr;
req->dev.target_win_handle = get_accum_pkt->target_win_handle;
req->dev.flags = get_accum_pkt->flags;
- req->dev.stream_offset = get_accum_pkt->info.metadata.stream_offset;
req->dev.resp_request_handle = get_accum_pkt->request_handle;
- req->dev.OnFinal = MPIDI_CH3_ReqHandler_GaccumRecvComplete;
/* get start location of data and length of data */
data_len = *buflen - sizeof(MPIDI_CH3_Pkt_t);
data_buf = (char *) pkt + sizeof(MPIDI_CH3_Pkt_t);
+ if (req->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ /* allocate extended header in the request */
+ req->dev.ext_hdr_ptr = MPIU_Malloc(sizeof(MPIDI_CH3_Ext_pkt_get_accum_t));
+ if (!req->dev.ext_hdr_ptr) {
+ MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
+ "MPIDI_CH3_Ext_pkt_get_accum_t");
+ }
+ req->dev.ext_hdr_sz = sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
+ }
+
if (MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype)) {
MPI_Aint type_size;
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
req->dev.datatype = get_accum_pkt->datatype;
- MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, extent);
+ if (req->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete;
- MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
- /* allocate a SRBuf for receiving stream unit */
- MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
- /* --BEGIN ERROR HANDLING-- */
- if (req->dev.tmpbuf_sz == 0) {
- MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
- mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
- FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
- "**nomem %d", MPIDI_CH3U_SRBuf_size);
- req->status.MPI_ERROR = mpi_errno;
- goto fn_fail;
+ /* if this is a streamed op pkt, set iov to receive extended pkt header. */
+ req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.ext_hdr_ptr;
+ req->dev.iov[0].MPID_IOV_LEN = req->dev.ext_hdr_sz;
+ req->dev.iov_count = 1;
+
+ *buflen = sizeof(MPIDI_CH3_Pkt_t);
}
- /* --END ERROR HANDLING-- */
+ else {
+ req->dev.OnFinal = MPIDI_CH3_ReqHandler_GaccumRecvComplete;
+
+ MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, extent);
+
+ MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
+ /* allocate a SRBuf for receiving stream unit */
+ MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
+ /* --BEGIN ERROR HANDLING-- */
+ if (req->dev.tmpbuf_sz == 0) {
+ MPIU_DBG_MSG(CH3_CHANNEL, TYPICAL, "SRBuf allocation failure");
+ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
+ FCNAME, __LINE__, MPI_ERR_OTHER, "**nomem",
+ "**nomem %d", MPIDI_CH3U_SRBuf_size);
+ req->status.MPI_ERROR = mpi_errno;
+ goto fn_fail;
+ }
+ /* --END ERROR HANDLING-- */
- req->dev.user_buf = req->dev.tmpbuf;
+ req->dev.user_buf = req->dev.tmpbuf;
- MPID_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
- total_len = type_size * get_accum_pkt->count;
- rest_len = total_len - req->dev.stream_offset;
- stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
+ MPID_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
+ total_len = type_size * get_accum_pkt->count;
+ stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
- req->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * type_size);
- MPIU_Assert(req->dev.recv_data_sz > 0);
+ req->dev.recv_data_sz = MPIR_MIN(total_len, stream_elem_count * type_size);
+ MPIU_Assert(req->dev.recv_data_sz > 0);
- mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
- MPIU_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
- "**ch3|postrecv %s", "MPIDI_CH3_PKT_ACCUMULATE");
+ mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
+ MPIU_ERR_CHKANDJUMP1(mpi_errno, mpi_errno, MPI_ERR_OTHER, "**ch3|postrecv",
+ "**ch3|postrecv %s", "MPIDI_CH3_PKT_ACCUMULATE");
- /* return the number of bytes processed in this function */
- *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
+ /* return the number of bytes processed in this function */
+ *buflen = data_len + sizeof(MPIDI_CH3_Pkt_t);
- if (complete) {
- mpi_errno = MPIDI_CH3_ReqHandler_GaccumRecvComplete(vc, req, &complete);
- if (mpi_errno)
- MPIU_ERR_POP(mpi_errno);
if (complete) {
- *rreqp = NULL;
- goto fn_exit;
+ mpi_errno = MPIDI_CH3_ReqHandler_GaccumRecvComplete(vc, req, &complete);
+ if (mpi_errno)
+ MPIU_ERR_POP(mpi_errno);
+ if (complete) {
+ *rreqp = NULL;
+ goto fn_exit;
+ }
}
}
}
else {
+ int metadata_sz = 0;
+
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_GET_ACCUM_RECV_DERIVED_DT);
req->dev.OnDataAvail = MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete;
req->dev.datatype = MPI_DATATYPE_NULL;
+ if (get_accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM)
+ metadata_sz += sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
+
req->dev.dtype_info = (MPIDI_RMA_dtype_info *)
MPIU_Malloc(sizeof(MPIDI_RMA_dtype_info));
if (!req->dev.dtype_info) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %s",
"MPIDI_RMA_dtype_info");
}
+ metadata_sz += sizeof(MPIDI_RMA_dtype_info);
- req->dev.dataloop = MPIU_Malloc(get_accum_pkt->info.metadata.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(get_accum_pkt->info.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- get_accum_pkt->info.metadata.dataloop_size);
+ get_accum_pkt->info.dataloop_size);
}
+ metadata_sz += get_accum_pkt->info.dataloop_size;
+
+ if (data_len >= metadata_sz) {
+ int buf_offset = 0;
+
+ if (get_accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ /* copy extended header */
+ MPIU_Memcpy(req->dev.ext_hdr_ptr, data_buf + buf_offset,
+ sizeof(MPIDI_CH3_Ext_pkt_get_accum_t));
+ buf_offset += sizeof(MPIDI_CH3_Ext_pkt_get_accum_t);
+ }
- if (data_len >=
- sizeof(MPIDI_RMA_dtype_info) + get_accum_pkt->info.metadata.dataloop_size) {
/* copy all of dtype_info and dataloop */
- MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
- MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- get_accum_pkt->info.metadata.dataloop_size);
+ MPIU_Memcpy(req->dev.dtype_info, data_buf + buf_offset,
+ sizeof(MPIDI_RMA_dtype_info));
+ buf_offset += sizeof(MPIDI_RMA_dtype_info);
- *buflen =
- sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- get_accum_pkt->info.metadata.dataloop_size;
+ MPIU_Memcpy(req->dev.dataloop, data_buf + buf_offset,
+ get_accum_pkt->info.dataloop_size);
+ buf_offset += get_accum_pkt->info.dataloop_size;
+
+ *buflen = sizeof(MPIDI_CH3_Pkt_t) + metadata_sz;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(vc, req, &complete);
@@ -991,11 +1080,23 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
}
}
else {
- req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
- req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
- req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = get_accum_pkt->info.metadata.dataloop_size;
- req->dev.iov_count = 2;
+ int iov_n = 0;
+
+ if (get_accum_pkt->flags & MPIDI_CH3_PKT_FLAG_RMA_STREAM) {
+ req->dev.iov[iov_n].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.ext_hdr_ptr;
+ req->dev.iov[iov_n].MPID_IOV_LEN = req->dev.ext_hdr_sz;
+ iov_n++;
+ }
+
+ req->dev.iov[iov_n].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
+ req->dev.iov[iov_n].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
+ iov_n++;
+
+ req->dev.iov[iov_n].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
+ req->dev.iov[iov_n].MPID_IOV_LEN = get_accum_pkt->info.dataloop_size;
+ iov_n++;
+
+ req->dev.iov_count = iov_n;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
}
@@ -1518,6 +1619,7 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPI_Aint stream_elem_count;
MPI_Aint total_len, rest_len;
MPI_Aint real_stream_offset;
+ MPI_Aint contig_stream_offset = 0;
if (MPIR_DATATYPE_IS_PREDEFINED(req->dev.datatype)) {
basic_type = req->dev.datatype;
@@ -1530,12 +1632,16 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPID_Datatype_get_extent_macro(basic_type, basic_type_extent);
MPID_Datatype_get_size_macro(basic_type, basic_type_size);
+ if (req->dev.ext_hdr_ptr != NULL)
+ contig_stream_offset =
+ ((MPIDI_CH3_Ext_pkt_get_accum_t *) req->dev.ext_hdr_ptr)->stream_offset;
+
total_len = type_size * req->dev.user_count;
- rest_len = total_len - req->dev.stream_offset;
+ rest_len = total_len - contig_stream_offset;
stream_elem_count = MPIDI_CH3U_SRBuf_size / basic_type_extent;
req->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * basic_type_size);
- real_stream_offset = (req->dev.stream_offset / basic_type_size) * basic_type_extent;
+ real_stream_offset = (contig_stream_offset / basic_type_size) * basic_type_extent;
if (MPIR_DATATYPE_IS_PREDEFINED(req->dev.datatype)) {
req->dev.user_buf = (void *) ((char *) req->dev.user_buf + real_stream_offset);
@@ -1552,8 +1658,8 @@ int MPIDI_CH3_PktHandler_Get_AccumResp(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.segment_ptr = MPID_Segment_alloc();
MPID_Segment_init(req->dev.user_buf, req->dev.user_count, req->dev.datatype,
req->dev.segment_ptr, 0);
- req->dev.segment_first = req->dev.stream_offset;
- req->dev.segment_size = req->dev.stream_offset + req->dev.recv_data_sz;
+ req->dev.segment_first = contig_stream_offset;
+ req->dev.segment_size = contig_stream_offset + req->dev.recv_data_sz;
mpi_errno = MPIDI_CH3U_Request_load_recv_iov(req);
if (mpi_errno != MPI_SUCCESS) {
@@ -2007,7 +2113,7 @@ int MPIDI_CH3_PktPrint_Put(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->put.addr));
MPIU_DBG_PRINTF((" count ........ %d\n", pkt->put.count));
MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->put.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. 0x%08X\n", pkt->put.info.metadata.dataloop_size));
+ MPIU_DBG_PRINTF((" dataloop_size. 0x%08X\n", pkt->put.info.dataloop_size));
MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->put.target_win_handle));
MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->put.source_win_handle));
/*MPIU_DBG_PRINTF((" win_ptr ...... 0x%08X\n", pkt->put.win_ptr)); */
@@ -2020,7 +2126,7 @@ int MPIDI_CH3_PktPrint_Get(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->get.addr));
MPIU_DBG_PRINTF((" count ........ %d\n", pkt->get.count));
MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->get.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->get.info.metadata.dataloop_size));
+ MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->get.info.dataloop_size));
MPIU_DBG_PRINTF((" request ...... 0x%08X\n", pkt->get.request_handle));
MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->get.target_win_handle));
MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->get.source_win_handle));
@@ -2045,7 +2151,7 @@ int MPIDI_CH3_PktPrint_Accumulate(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->accum.addr));
MPIU_DBG_PRINTF((" count ........ %d\n", pkt->accum.count));
MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->accum.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->accum.info.metadata.dataloop_size));
+ MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->accum.info.dataloop_size));
MPIU_DBG_PRINTF((" op ........... 0x%08X\n", pkt->accum.op));
MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->accum.target_win_handle));
MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->accum.source_win_handle));
http://git.mpich.org/mpich.git/commitdiff/e0eaed63e0a2228215b67672386e7323e…
commit e0eaed63e0a2228215b67672386e7323eb2049d5
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Wed May 13 15:04:58 2015 -0500
Initialize tmpbuf in request to NULL when creating new request.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
index 30dcde9..1766acb 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
@@ -95,6 +95,7 @@ static inline MPID_nem_ptl_req_area * REQ_PTL(MPID_Request *req) {
(sreq_)->dev.state = 0; \
(sreq_)->dev.datatype_ptr = NULL; \
(sreq_)->dev.segment_ptr = NULL; \
+ (sreq_)->dev.tmpbuf = NULL; \
\
MPID_nem_ptl_init_req(sreq_); \
} while (0)
diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h
index 995a81f..061c0f2 100644
--- a/src/mpid/ch3/include/mpidimpl.h
+++ b/src/mpid/ch3/include/mpidimpl.h
@@ -353,6 +353,7 @@ extern MPIDI_Process_t MPIDI_Process;
(sreq_)->dev.OnFinal = NULL; \
(sreq_)->dev.iov_count = 0; \
(sreq_)->dev.iov_offset = 0; \
+ (sreq_)->dev.tmpbuf = NULL; \
MPIDI_Request_clear_dbg(sreq_); \
}
@@ -386,6 +387,7 @@ extern MPIDI_Process_t MPIDI_Process;
(rreq_)->dev.OnDataAvail = NULL; \
(rreq_)->dev.OnFinal = NULL; \
(rreq_)->dev.drop_data = FALSE; \
+ (rreq_)->dev.tmpbuf = NULL; \
MPIDI_CH3_REQUEST_INIT(rreq_);\
}
diff --git a/src/mpid/ch3/src/ch3u_request.c b/src/mpid/ch3/src/ch3u_request.c
index 6793ce8..63b5f6e 100644
--- a/src/mpid/ch3/src/ch3u_request.c
+++ b/src/mpid/ch3/src/ch3u_request.c
@@ -95,6 +95,7 @@ MPID_Request * MPID_Request_create(void)
req->dev.user_buf = NULL;
req->dev.drop_data = FALSE;
req->dev.stream_offset = 0;
+ req->dev.tmpbuf = NULL;
#ifdef MPIDI_CH3_REQUEST_INIT
MPIDI_CH3_REQUEST_INIT(req);
#endif
http://git.mpich.org/mpich.git/commitdiff/6f62c424b6add5339cdb295a794b8808a…
commit 6f62c424b6add5339cdb295a794b8808ac7d8f98
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Thu Apr 30 12:38:39 2015 -0700
Revert "Move 'stream_offset' out of RMA packet struct."
This reverts commit 19f29078c001ff4176330815b066eac3da7b9e52.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpid_rma_issue.h b/src/mpid/ch3/include/mpid_rma_issue.h
index d6ee801..3ae5ab6 100644
--- a/src/mpid/ch3/include/mpid_rma_issue.h
+++ b/src/mpid/ch3/include/mpid_rma_issue.h
@@ -501,7 +501,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPID_Segment_pack_vector(segp, first, &last, dloop_vec, &vec_len);
- count = 3 + vec_len;
+ count = 2 + vec_len;
ints = (int *) MPIU_Malloc(sizeof(int) * (count + 1));
blocklens = &ints[1];
@@ -518,16 +518,10 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPIU_Assign_trunc(blocklens[1], target_dtp->dataloop_size, int);
datatypes[1] = MPI_BYTE;
- req->dev.stream_offset = stream_offset;
-
- displaces[2] = MPIU_PtrToAint(&(req->dev.stream_offset));
- blocklens[2] = sizeof(req->dev.stream_offset);
- datatypes[2] = MPI_BYTE;
-
for (i = 0; i < vec_len; i++) {
- displaces[i + 3] = MPIU_PtrToAint(dloop_vec[i].DLOOP_VECTOR_BUF);
- MPIU_Assign_trunc(blocklens[i + 3], dloop_vec[i].DLOOP_VECTOR_LEN, int);
- datatypes[i + 3] = MPI_BYTE;
+ displaces[i + 2] = MPIU_PtrToAint(dloop_vec[i].DLOOP_VECTOR_BUF);
+ MPIU_Assign_trunc(blocklens[i + 2], dloop_vec[i].DLOOP_VECTOR_LEN, int);
+ datatypes[i + 2] = MPI_BYTE;
}
MPID_Segment_free(segp);
@@ -740,11 +734,7 @@ static int issue_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
rest_len -= stream_size;
- if (MPIR_DATATYPE_IS_PREDEFINED(accum_pkt->datatype)) {
- accum_pkt->addr = (void *) ((char *) rma_op->original_target_addr
- + j * stream_elem_count * predefined_dtp_extent);
- accum_pkt->count = stream_size / predefined_dtp_size;
- }
+ accum_pkt->info.metadata.stream_offset = stream_offset;
mpi_errno =
issue_from_origin_buffer_stream(rma_op, vc, stream_offset, stream_size, &curr_req);
@@ -953,11 +943,7 @@ static int issue_get_acc_op(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
stream_size = MPIR_MIN(stream_elem_count * predefined_dtp_size, rest_len);
rest_len -= stream_size;
- if (MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype)) {
- get_accum_pkt->addr = (void *) ((char *) rma_op->original_target_addr
- + j * stream_elem_count * predefined_dtp_extent);
- get_accum_pkt->count = stream_size / predefined_dtp_size;
- }
+ get_accum_pkt->info.metadata.stream_offset = stream_offset;
resp_req->dev.stream_offset = stream_offset;
diff --git a/src/mpid/ch3/include/mpid_rma_types.h b/src/mpid/ch3/include/mpid_rma_types.h
index ff8c63d..be0e869 100644
--- a/src/mpid/ch3/include/mpid_rma_types.h
+++ b/src/mpid/ch3/include/mpid_rma_types.h
@@ -60,9 +60,6 @@ typedef struct MPIDI_RMA_Op {
int result_count;
MPI_Datatype result_datatype;
- /* used in streaming ACCs */
- void *original_target_addr;
-
struct MPID_Request **reqs;
int reqs_size;
diff --git a/src/mpid/ch3/include/mpidpkt.h b/src/mpid/ch3/include/mpidpkt.h
index eec2083..ca5ed2d 100644
--- a/src/mpid/ch3/include/mpidpkt.h
+++ b/src/mpid/ch3/include/mpidpkt.h
@@ -522,16 +522,31 @@ MPIDI_CH3_PKT_DEFS
err_ = MPI_SUCCESS; \
switch((pkt_).type) { \
case (MPIDI_CH3_PKT_PUT): \
- (pkt_).put.info.dataloop_size = (dataloop_size_); \
+ (pkt_).put.info.metadata.dataloop_size = (dataloop_size_); \
break; \
case (MPIDI_CH3_PKT_GET): \
- (pkt_).get.info.dataloop_size = (dataloop_size_); \
+ (pkt_).get.info.metadata.dataloop_size = (dataloop_size_); \
break; \
case (MPIDI_CH3_PKT_ACCUMULATE): \
- (pkt_).accum.info.dataloop_size = (dataloop_size_); \
+ (pkt_).accum.info.metadata.dataloop_size = (dataloop_size_); \
break; \
case (MPIDI_CH3_PKT_GET_ACCUM): \
- (pkt_).get_accum.info.dataloop_size = (dataloop_size_); \
+ (pkt_).get_accum.info.metadata.dataloop_size = (dataloop_size_); \
+ break; \
+ default: \
+ MPIU_ERR_SETANDJUMP1(err_, MPI_ERR_OTHER, "**invalidpkt", "**invalidpkt %d", (pkt_).type); \
+ } \
+ }
+
+#define MPIDI_CH3_PKT_RMA_GET_STREAM_OFFSET(pkt_, stream_offset_, err_) \
+ { \
+ err_ = MPI_SUCCESS; \
+ switch((pkt_).type) { \
+ case (MPIDI_CH3_PKT_ACCUMULATE): \
+ (stream_offset_) = (pkt_).accum.info.metadata.stream_offset; \
+ break; \
+ case (MPIDI_CH3_PKT_GET_ACCUM): \
+ (stream_offset_) = (pkt_).get_accum.info.metadata.stream_offset; \
break; \
default: \
MPIU_ERR_SETANDJUMP1(err_, MPI_ERR_OTHER, "**invalidpkt", "**invalidpkt %d", (pkt_).type); \
@@ -594,7 +609,12 @@ typedef struct MPIDI_CH3_Pkt_put {
MPI_Win target_win_handle;
MPI_Win source_win_handle;
union {
- int dataloop_size;
+ /* note that we use struct here in order
+ * to consistently access dataloop_size
+ * by "pkt->info.metadata.dataloop_size". */
+ struct {
+ int dataloop_size;
+ } metadata;
char data[MPIDI_RMA_IMMED_BYTES];
} info;
} MPIDI_CH3_Pkt_put_t;
@@ -608,8 +628,10 @@ typedef struct MPIDI_CH3_Pkt_get {
struct {
/* note that we use struct here in order
* to consistently access dataloop_size
- * by "pkt->info.dataloop_size". */
- int dataloop_size; /* for derived datatypes */
+ * by "pkt->info.metadata.dataloop_size". */
+ struct {
+ int dataloop_size; /* for derived datatypes */
+ } metadata;
} info;
MPI_Request request_handle;
MPI_Win target_win_handle;
@@ -640,7 +662,10 @@ typedef struct MPIDI_CH3_Pkt_accum {
MPI_Win target_win_handle;
MPI_Win source_win_handle;
union {
- int dataloop_size;
+ struct {
+ int dataloop_size;
+ MPI_Aint stream_offset;
+ } metadata;
char data[MPIDI_RMA_IMMED_BYTES];
} info;
} MPIDI_CH3_Pkt_accum_t;
@@ -655,7 +680,10 @@ typedef struct MPIDI_CH3_Pkt_get_accum {
MPI_Op op;
MPI_Win target_win_handle;
union {
- int dataloop_size;
+ struct {
+ int dataloop_size;
+ MPI_Aint stream_offset;
+ } metadata;
char data[MPIDI_RMA_IMMED_BYTES];
} info;
} MPIDI_CH3_Pkt_get_accum_t;
diff --git a/src/mpid/ch3/include/mpidrma.h b/src/mpid/ch3/include/mpidrma.h
index 50ea300..d6f4c15 100644
--- a/src/mpid/ch3/include/mpidrma.h
+++ b/src/mpid/ch3/include/mpidrma.h
@@ -373,8 +373,21 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
MPID_Datatype_get_extent_macro(target_dtp, type_extent);
MPID_Datatype_get_size_macro(target_dtp, type_size);
- recv_data_sz = type_size * target_count;
- buf_size = type_extent * target_count;
+ if (pkt->type == MPIDI_CH3_PKT_PUT) {
+ recv_data_sz = type_size * target_count;
+ buf_size = type_extent * target_count;
+ }
+ else {
+ MPI_Aint stream_offset, stream_elem_count;
+ MPI_Aint total_len, rest_len;
+
+ MPIDI_CH3_PKT_RMA_GET_STREAM_OFFSET((*pkt), stream_offset, mpi_errno);
+ stream_elem_count = MPIDI_CH3U_SRBuf_size / type_extent;
+ total_len = type_size * target_count;
+ rest_len = total_len - stream_offset;
+ recv_data_sz = MPIR_MIN(rest_len, type_size * stream_elem_count);
+ buf_size = type_extent * (recv_data_sz / type_size);
+ }
if (new_ptr != NULL) {
if (win_ptr->current_lock_data_bytes + buf_size < MPIR_CVAR_CH3_RMA_LOCK_DATA_BYTES) {
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_req.c b/src/mpid/ch3/src/ch3u_handle_recv_req.c
index 33ecb54..b39616f 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_req.c
@@ -1115,20 +1115,26 @@ static inline int perform_acc_in_lock_queue(MPID_Win * win_ptr, MPIDI_RMA_Lock_e
if (acc_pkt->type == MPIDI_CH3_PKT_ACCUMULATE_IMMED) {
/* All data fits in packet header */
- /* NOTE: here we pass 0 as stream_offset to do_accumulate_op(), because the unit
- that is piggybacked with LOCK flag must be the first stream unit */
mpi_errno = do_accumulate_op(acc_pkt->info.data, acc_pkt->count, acc_pkt->datatype,
acc_pkt->addr, acc_pkt->count, acc_pkt->datatype,
- 0/* stream offset */, acc_pkt->op);
+ 0, acc_pkt->op);
}
else {
MPIU_Assert(acc_pkt->type == MPIDI_CH3_PKT_ACCUMULATE);
+ MPI_Aint type_size, type_extent;
+ MPI_Aint total_len, rest_len, recv_count;
- /* NOTE: here we pass 0 as stream_offset to do_accumulate_op(), because the unit
- that is piggybacked with LOCK flag must be the first stream unit */
- mpi_errno = do_accumulate_op(lock_entry->data, acc_pkt->count, acc_pkt->datatype,
+ MPID_Datatype_get_size_macro(acc_pkt->datatype, type_size);
+ MPID_Datatype_get_extent_macro(acc_pkt->datatype, type_extent);
+
+ total_len = type_size * acc_pkt->count;
+ rest_len = total_len - acc_pkt->info.metadata.stream_offset;
+ recv_count = MPIR_MIN((rest_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
+ MPIU_Assert(recv_count > 0);
+
+ mpi_errno = do_accumulate_op(lock_entry->data, recv_count, acc_pkt->datatype,
acc_pkt->addr, acc_pkt->count, acc_pkt->datatype,
- 0/* stream offset */, acc_pkt->op);
+ acc_pkt->info.metadata.stream_offset, acc_pkt->op);
}
if (win_ptr->shm_allocated == TRUE)
@@ -1162,6 +1168,8 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
MPID_IOV iov[MPID_IOV_LIMIT];
int is_contig;
int mpi_errno = MPI_SUCCESS;
+ MPI_Aint type_extent;
+ MPI_Aint total_len, rest_len, recv_count;
/* Piggyback candidate should have basic datatype for target datatype. */
MPIU_Assert(MPIR_DATATYPE_IS_PREDEFINED(get_accum_pkt->datatype));
@@ -1221,12 +1229,10 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
/* Perform ACCUMULATE OP */
/* All data fits in packet header */
- /* NOTE: here we pass 0 as stream_offset to do_accumulate_op(), because the unit
- that is piggybacked with LOCK flag must be the first stream unit */
mpi_errno =
do_accumulate_op(get_accum_pkt->info.data, get_accum_pkt->count,
get_accum_pkt->datatype, get_accum_pkt->addr, get_accum_pkt->count,
- get_accum_pkt->datatype, 0/* stream offset */, get_accum_pkt->op);
+ get_accum_pkt->datatype, 0, get_accum_pkt->op);
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
@@ -1254,7 +1260,14 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
MPIU_Assert(get_accum_pkt->type == MPIDI_CH3_PKT_GET_ACCUM);
- sreq->dev.user_buf = (void *) MPIU_Malloc(get_accum_pkt->count * type_size);
+ MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, type_extent);
+
+ total_len = type_size * get_accum_pkt->count;
+ rest_len = total_len - get_accum_pkt->info.metadata.stream_offset;
+ recv_count = MPIR_MIN((rest_len / type_size), (MPIDI_CH3U_SRBuf_size / type_extent));
+ MPIU_Assert(recv_count > 0);
+
+ sreq->dev.user_buf = (void *) MPIU_Malloc(recv_count * type_size);
MPID_Datatype_is_contig(get_accum_pkt->datatype, &is_contig);
@@ -1265,16 +1278,15 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
/* Copy data from target window to temporary buffer */
- /* NOTE: here we copy data from stream_offset = 0, because
- the unit that is piggybacked with LOCK flag must be the
- first stream unit. */
if (is_contig) {
- MPIU_Memcpy(sreq->dev.user_buf, get_accum_pkt->addr, get_accum_pkt->count * type_size);
+ MPIU_Memcpy(sreq->dev.user_buf,
+ (void *) ((char *) get_accum_pkt->addr +
+ get_accum_pkt->info.metadata.stream_offset), recv_count * type_size);
}
else {
MPID_Segment *seg = MPID_Segment_alloc();
- MPI_Aint first = 0;
- MPI_Aint last = first + type_size * get_accum_pkt->count;
+ MPI_Aint first = get_accum_pkt->info.metadata.stream_offset;
+ MPI_Aint last = first + type_size * recv_count;
if (seg == NULL) {
if (win_ptr->shm_allocated == TRUE)
@@ -1290,11 +1302,9 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
/* Perform ACCUMULATE OP */
- /* NOTE: here we pass 0 as stream_offset to do_accumulate_op(), because the unit
- that is piggybacked with LOCK flag must be the first stream unit */
- mpi_errno = do_accumulate_op(lock_entry->data, get_accum_pkt->count, get_accum_pkt->datatype,
+ mpi_errno = do_accumulate_op(lock_entry->data, recv_count, get_accum_pkt->datatype,
get_accum_pkt->addr, get_accum_pkt->count, get_accum_pkt->datatype,
- 0/* stream offset */, get_accum_pkt->op);
+ get_accum_pkt->info.metadata.stream_offset, get_accum_pkt->op);
if (win_ptr->shm_allocated == TRUE)
MPIDI_CH3I_SHM_MUTEX_UNLOCK(win_ptr);
@@ -1320,7 +1330,7 @@ static inline int perform_get_acc_in_lock_queue(MPID_Win * win_ptr,
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) get_accum_resp_pkt;
iov[0].MPID_IOV_LEN = sizeof(*get_accum_resp_pkt);
iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) ((char *) sreq->dev.user_buf);
- iov[1].MPID_IOV_LEN = get_accum_pkt->count * type_size;
+ iov[1].MPID_IOV_LEN = recv_count * type_size;
iovcnt = 2;
mpi_errno = MPIDI_CH3_iSendv(lock_entry->vc, sreq, iov, iovcnt);
diff --git a/src/mpid/ch3/src/ch3u_rma_ops.c b/src/mpid/ch3/src/ch3u_rma_ops.c
index 136c260..9611716 100644
--- a/src/mpid/ch3/src/ch3u_rma_ops.c
+++ b/src/mpid/ch3/src/ch3u_rma_ops.c
@@ -198,7 +198,7 @@ int MPIDI_CH3I_Put(const void *origin_addr, int origin_count, MPI_Datatype
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
put_pkt->count = target_count;
put_pkt->datatype = target_datatype;
- put_pkt->info.dataloop_size = 0;
+ put_pkt->info.metadata.dataloop_size = 0;
put_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
put_pkt->source_win_handle = win_ptr->handle;
put_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
@@ -387,7 +387,7 @@ int MPIDI_CH3I_Get(void *origin_addr, int origin_count, MPI_Datatype
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_pkt->count = target_count;
get_pkt->datatype = target_datatype;
- get_pkt->info.dataloop_size = 0;
+ get_pkt->info.metadata.dataloop_size = 0;
get_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
get_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_resp_pkt)
@@ -612,10 +612,11 @@ int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatyp
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
accum_pkt->count = target_count;
accum_pkt->datatype = target_datatype;
- accum_pkt->info.dataloop_size = 0;
+ accum_pkt->info.metadata.dataloop_size = 0;
accum_pkt->op = op;
accum_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
accum_pkt->source_win_handle = win_ptr->handle;
+ accum_pkt->info.metadata.stream_offset = 0;
accum_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
void *src = (void *) origin_addr, *dest = (void *) (accum_pkt->info.data);
@@ -624,12 +625,6 @@ int MPIDI_CH3I_Accumulate(const void *origin_addr, int origin_count, MPI_Datatyp
MPIU_ERR_POP(mpi_errno);
}
- /* NOTE: here we backup the original starting address for the entire operation
- on target window in 'original_target_addr', because when actually issuing
- this operation, we may stream this operation and overwrite 'addr' with the
- starting address for the streaming unit. */
- new_ptr->original_target_addr = accum_pkt->addr;
-
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
mpi_errno = MPIDI_CH3I_Win_enqueue_op(win_ptr, new_ptr);
@@ -815,7 +810,7 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_pkt->count = target_count;
get_pkt->datatype = target_datatype;
- get_pkt->info.dataloop_size = 0;
+ get_pkt->info.metadata.dataloop_size = 0;
get_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
get_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_resp_pkt == TRUE)
@@ -936,9 +931,10 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_accum_pkt->count = target_count;
get_accum_pkt->datatype = target_datatype;
- get_accum_pkt->info.dataloop_size = 0;
+ get_accum_pkt->info.metadata.dataloop_size = 0;
get_accum_pkt->op = op;
get_accum_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
+ get_accum_pkt->info.metadata.stream_offset = 0;
get_accum_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_pkt) {
void *src = (void *) origin_addr, *dest = (void *) (get_accum_pkt->info.data);
@@ -946,12 +942,6 @@ int MPIDI_CH3I_Get_accumulate(const void *origin_addr, int origin_count,
if (mpi_errno != MPI_SUCCESS)
MPIU_ERR_POP(mpi_errno);
}
-
- /* NOTE: here we backup the original starting address for the entire operation
- on target window in 'original_target_addr', because when actually issuing
- this operation, we may stream this operation and overwrite 'addr' with the
- starting address for the streaming unit. */
- new_ptr->original_target_addr = get_accum_pkt->addr;
}
MPIR_T_PVAR_TIMER_END(RMA, rma_rmaqueue_set);
@@ -1356,7 +1346,7 @@ int MPIDI_Fetch_and_op(const void *origin_addr, void *result_addr,
win_ptr->basic_info_table[target_rank].disp_unit * target_disp;
get_pkt->count = 1;
get_pkt->datatype = datatype;
- get_pkt->info.dataloop_size = 0;
+ get_pkt->info.metadata.dataloop_size = 0;
get_pkt->target_win_handle = win_ptr->basic_info_table[target_rank].win_handle;
get_pkt->flags = MPIDI_CH3_PKT_FLAG_NONE;
if (use_immed_resp_pkt == TRUE)
diff --git a/src/mpid/ch3/src/ch3u_rma_pkthandler.c b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
index 5ec61a4..120fb1b 100644
--- a/src/mpid/ch3/src/ch3u_rma_pkthandler.c
+++ b/src/mpid/ch3/src/ch3u_rma_pkthandler.c
@@ -293,24 +293,24 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
"MPIDI_RMA_dtype_info");
}
- req->dev.dataloop = MPIU_Malloc(put_pkt->info.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(put_pkt->info.metadata.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- put_pkt->info.dataloop_size);
+ put_pkt->info.metadata.dataloop_size);
}
/* if we received all of the dtype_info and dataloop, copy it
* now and call the handler, otherwise set the iov and let the
* channel copy it */
- if (data_len >= sizeof(MPIDI_RMA_dtype_info) + put_pkt->info.dataloop_size) {
+ if (data_len >= sizeof(MPIDI_RMA_dtype_info) + put_pkt->info.metadata.dataloop_size) {
/* copy all of dtype_info and dataloop */
MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- put_pkt->info.dataloop_size);
+ put_pkt->info.metadata.dataloop_size);
*buflen =
sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- put_pkt->info.dataloop_size;
+ put_pkt->info.metadata.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_PutDerivedDTRecvComplete(vc, req, &complete);
@@ -325,7 +325,7 @@ int MPIDI_CH3_PktHandler_Put(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) ((char *) req->dev.dtype_info);
req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = put_pkt->info.dataloop_size;
+ req->dev.iov[1].MPID_IOV_LEN = put_pkt->info.metadata.dataloop_size;
req->dev.iov_count = 2;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
@@ -519,24 +519,24 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
"MPIDI_RMA_dtype_info");
}
- req->dev.dataloop = MPIU_Malloc(get_pkt->info.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(get_pkt->info.metadata.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- get_pkt->info.dataloop_size);
+ get_pkt->info.metadata.dataloop_size);
}
/* if we received all of the dtype_info and dataloop, copy it
* now and call the handler, otherwise set the iov and let the
* channel copy it */
- if (data_len >= sizeof(MPIDI_RMA_dtype_info) + get_pkt->info.dataloop_size) {
+ if (data_len >= sizeof(MPIDI_RMA_dtype_info) + get_pkt->info.metadata.dataloop_size) {
/* copy all of dtype_info and dataloop */
MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- get_pkt->info.dataloop_size);
+ get_pkt->info.metadata.dataloop_size);
*buflen =
sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- get_pkt->info.dataloop_size;
+ get_pkt->info.metadata.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_GetDerivedDTRecvComplete(vc, req, &complete);
@@ -549,7 +549,7 @@ int MPIDI_CH3_PktHandler_Get(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = get_pkt->info.dataloop_size;
+ req->dev.iov[1].MPID_IOV_LEN = get_pkt->info.metadata.dataloop_size;
req->dev.iov_count = 2;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
@@ -574,6 +574,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
{
MPIDI_CH3_Pkt_accum_t *accum_pkt = &pkt->accum;
MPID_Request *req = NULL;
+ MPI_Aint extent;
int complete = 0;
char *data_buf = NULL;
MPIDI_msg_sz_t data_len;
@@ -581,6 +582,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
int acquire_lock_fail = 0;
int mpi_errno = MPI_SUCCESS;
MPI_Aint type_size;
+ MPI_Aint stream_elem_count, rest_len, total_len;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_ACCUMULATE);
@@ -638,6 +640,7 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.target_win_handle = accum_pkt->target_win_handle;
req->dev.source_win_handle = accum_pkt->source_win_handle;
req->dev.flags = accum_pkt->flags;
+ req->dev.stream_offset = accum_pkt->info.metadata.stream_offset;
req->dev.resp_request_handle = MPI_REQUEST_NULL;
req->dev.OnFinal = MPIDI_CH3_ReqHandler_AccumRecvComplete;
@@ -650,6 +653,8 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_ACCUM_RECV);
req->dev.datatype = accum_pkt->datatype;
+ MPID_Datatype_get_extent_macro(accum_pkt->datatype, extent);
+
MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
/* allocate a SRBuf for receiving stream unit */
MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
@@ -668,7 +673,11 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPID_Datatype_get_size_macro(accum_pkt->datatype, type_size);
- req->dev.recv_data_sz = type_size * accum_pkt->count;
+ total_len = type_size * accum_pkt->count;
+ rest_len = total_len - req->dev.stream_offset;
+ stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
+
+ req->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * type_size);
MPIU_Assert(req->dev.recv_data_sz > 0);
mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
@@ -700,25 +709,21 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
"MPIDI_RMA_dtype_info");
}
- req->dev.dataloop = MPIU_Malloc(accum_pkt->info.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(accum_pkt->info.metadata.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- accum_pkt->info.dataloop_size);
+ accum_pkt->info.metadata.dataloop_size);
}
- if (data_len >= sizeof(MPIDI_RMA_dtype_info) + accum_pkt->info.dataloop_size +
- sizeof(req->dev.stream_offset)) {
+ if (data_len >= sizeof(MPIDI_RMA_dtype_info) + accum_pkt->info.metadata.dataloop_size) {
/* copy all of dtype_info and dataloop */
MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- accum_pkt->info.dataloop_size);
- MPIU_Memcpy(&(req->dev.stream_offset),
- data_buf + sizeof(MPIDI_RMA_dtype_info) + accum_pkt->info.dataloop_size,
- sizeof(req->dev.stream_offset));
+ accum_pkt->info.metadata.dataloop_size);
*buflen =
sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- accum_pkt->info.dataloop_size + sizeof(req->dev.stream_offset);
+ accum_pkt->info.metadata.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_AccumDerivedDTRecvComplete(vc, req, &complete);
@@ -733,10 +738,8 @@ int MPIDI_CH3_PktHandler_Accumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = accum_pkt->info.dataloop_size;
- req->dev.iov[2].MPID_IOV_BUF = &(req->dev.stream_offset);
- req->dev.iov[2].MPID_IOV_LEN = sizeof(req->dev.stream_offset);
- req->dev.iov_count = 3;
+ req->dev.iov[1].MPID_IOV_LEN = accum_pkt->info.metadata.dataloop_size;
+ req->dev.iov_count = 2;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
}
@@ -766,12 +769,14 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
{
MPIDI_CH3_Pkt_get_accum_t *get_accum_pkt = &pkt->get_accum;
MPID_Request *req = NULL;
+ MPI_Aint extent;
int complete = 0;
char *data_buf = NULL;
MPIDI_msg_sz_t data_len;
MPID_Win *win_ptr;
int acquire_lock_fail = 0;
int mpi_errno = MPI_SUCCESS;
+ MPI_Aint stream_elem_count, rest_len, total_len;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3_PKTHANDLER_GETACCUMULATE);
@@ -889,6 +894,7 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.real_user_buf = get_accum_pkt->addr;
req->dev.target_win_handle = get_accum_pkt->target_win_handle;
req->dev.flags = get_accum_pkt->flags;
+ req->dev.stream_offset = get_accum_pkt->info.metadata.stream_offset;
req->dev.resp_request_handle = get_accum_pkt->request_handle;
req->dev.OnFinal = MPIDI_CH3_ReqHandler_GaccumRecvComplete;
@@ -903,6 +909,8 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
MPIDI_Request_set_type(req, MPIDI_REQUEST_TYPE_GET_ACCUM_RECV);
req->dev.datatype = get_accum_pkt->datatype;
+ MPID_Datatype_get_extent_macro(get_accum_pkt->datatype, extent);
+
MPIU_Assert(!MPIDI_Request_get_srbuf_flag(req));
/* allocate a SRBuf for receiving stream unit */
MPIDI_CH3U_SRBuf_alloc(req, MPIDI_CH3U_SRBuf_size);
@@ -920,7 +928,11 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.user_buf = req->dev.tmpbuf;
MPID_Datatype_get_size_macro(get_accum_pkt->datatype, type_size);
- req->dev.recv_data_sz = type_size * get_accum_pkt->count;
+ total_len = type_size * get_accum_pkt->count;
+ rest_len = total_len - req->dev.stream_offset;
+ stream_elem_count = MPIDI_CH3U_SRBuf_size / extent;
+
+ req->dev.recv_data_sz = MPIR_MIN(rest_len, stream_elem_count * type_size);
MPIU_Assert(req->dev.recv_data_sz > 0);
mpi_errno = MPIDI_CH3U_Receive_data_found(req, data_buf, &data_len, &complete);
@@ -952,26 +964,22 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
"MPIDI_RMA_dtype_info");
}
- req->dev.dataloop = MPIU_Malloc(get_accum_pkt->info.dataloop_size);
+ req->dev.dataloop = MPIU_Malloc(get_accum_pkt->info.metadata.dataloop_size);
if (!req->dev.dataloop) {
MPIU_ERR_SETANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**nomem", "**nomem %d",
- get_accum_pkt->info.dataloop_size);
+ get_accum_pkt->info.metadata.dataloop_size);
}
if (data_len >=
- sizeof(MPIDI_RMA_dtype_info) + get_accum_pkt->info.dataloop_size +
- sizeof(req->dev.stream_offset)) {
+ sizeof(MPIDI_RMA_dtype_info) + get_accum_pkt->info.metadata.dataloop_size) {
/* copy all of dtype_info and dataloop */
MPIU_Memcpy(req->dev.dtype_info, data_buf, sizeof(MPIDI_RMA_dtype_info));
MPIU_Memcpy(req->dev.dataloop, data_buf + sizeof(MPIDI_RMA_dtype_info),
- get_accum_pkt->info.dataloop_size);
- MPIU_Memcpy(&(req->dev.stream_offset),
- data_buf + sizeof(MPIDI_RMA_dtype_info) +
- get_accum_pkt->info.dataloop_size, sizeof(req->dev.stream_offset));
+ get_accum_pkt->info.metadata.dataloop_size);
*buflen =
sizeof(MPIDI_CH3_Pkt_t) + sizeof(MPIDI_RMA_dtype_info) +
- get_accum_pkt->info.dataloop_size + sizeof(req->dev.stream_offset);
+ get_accum_pkt->info.metadata.dataloop_size;
/* All dtype data has been received, call req handler */
mpi_errno = MPIDI_CH3_ReqHandler_GaccumDerivedDTRecvComplete(vc, req, &complete);
@@ -986,10 +994,8 @@ int MPIDI_CH3_PktHandler_GetAccumulate(MPIDI_VC_t * vc, MPIDI_CH3_Pkt_t * pkt,
req->dev.iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dtype_info;
req->dev.iov[0].MPID_IOV_LEN = sizeof(MPIDI_RMA_dtype_info);
req->dev.iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) req->dev.dataloop;
- req->dev.iov[1].MPID_IOV_LEN = get_accum_pkt->info.dataloop_size;
- req->dev.iov[2].MPID_IOV_BUF = &(req->dev.stream_offset);
- req->dev.iov[2].MPID_IOV_LEN = sizeof(req->dev.stream_offset);
- req->dev.iov_count = 3;
+ req->dev.iov[1].MPID_IOV_LEN = get_accum_pkt->info.metadata.dataloop_size;
+ req->dev.iov_count = 2;
*buflen = sizeof(MPIDI_CH3_Pkt_t);
}
@@ -2001,7 +2007,7 @@ int MPIDI_CH3_PktPrint_Put(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->put.addr));
MPIU_DBG_PRINTF((" count ........ %d\n", pkt->put.count));
MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->put.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. 0x%08X\n", pkt->put.info.dataloop_size));
+ MPIU_DBG_PRINTF((" dataloop_size. 0x%08X\n", pkt->put.info.metadata.dataloop_size));
MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->put.target_win_handle));
MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->put.source_win_handle));
/*MPIU_DBG_PRINTF((" win_ptr ...... 0x%08X\n", pkt->put.win_ptr)); */
@@ -2014,7 +2020,7 @@ int MPIDI_CH3_PktPrint_Get(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->get.addr));
MPIU_DBG_PRINTF((" count ........ %d\n", pkt->get.count));
MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->get.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->get.info.dataloop_size));
+ MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->get.info.metadata.dataloop_size));
MPIU_DBG_PRINTF((" request ...... 0x%08X\n", pkt->get.request_handle));
MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->get.target_win_handle));
MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->get.source_win_handle));
@@ -2039,7 +2045,7 @@ int MPIDI_CH3_PktPrint_Accumulate(FILE * fp, MPIDI_CH3_Pkt_t * pkt)
MPIU_DBG_PRINTF((" addr ......... %p\n", pkt->accum.addr));
MPIU_DBG_PRINTF((" count ........ %d\n", pkt->accum.count));
MPIU_DBG_PRINTF((" datatype ..... 0x%08X\n", pkt->accum.datatype));
- MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->accum.info.dataloop_size));
+ MPIU_DBG_PRINTF((" dataloop_size. %d\n", pkt->accum.info.metadata.dataloop_size));
MPIU_DBG_PRINTF((" op ........... 0x%08X\n", pkt->accum.op));
MPIU_DBG_PRINTF((" target ....... 0x%08X\n", pkt->accum.target_win_handle));
MPIU_DBG_PRINTF((" source ....... 0x%08X\n", pkt->accum.source_win_handle));
http://git.mpich.org/mpich.git/commitdiff/caeb3b3a60bc89616c0ccb28d0127f964…
commit caeb3b3a60bc89616c0ccb28d0127f96459607c9
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Wed Apr 29 06:39:24 2015 -0500
Modify comments about piggybacking LOCK with op.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpidrma.h b/src/mpid/ch3/include/mpidrma.h
index 4c90166..50ea300 100644
--- a/src/mpid/ch3/include/mpidrma.h
+++ b/src/mpid/ch3/include/mpidrma.h
@@ -365,7 +365,7 @@ static inline int enqueue_lock_origin(MPID_Win * win_ptr, MPIDI_VC_t * vc,
MPIDI_msg_sz_t data_len;
char *data_buf = NULL;
- /* This is PUT, ACC, GACC */
+ /* This is PUT, ACC, GACC, FOP */
MPIDI_CH3_PKT_RMA_GET_TARGET_DATATYPE((*pkt), target_dtp, mpi_errno);
MPIDI_CH3_PKT_RMA_GET_TARGET_COUNT((*pkt), target_count, mpi_errno);
http://git.mpich.org/mpich.git/commitdiff/a5a9c964a00179191ad9a4446a3e07422…
commit a5a9c964a00179191ad9a4446a3e074227fdff2b
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Mon May 18 14:30:43 2015 -0500
Modify comments about issuing origin data in RMA.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpid_rma_issue.h b/src/mpid/ch3/include/mpid_rma_issue.h
index 9345b70..d6ee801 100644
--- a/src/mpid/ch3/include/mpid_rma_issue.h
+++ b/src/mpid/ch3/include/mpid_rma_issue.h
@@ -213,7 +213,7 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
if (target_dtp == NULL) {
/* basic datatype on target */
if (is_origin_contig) {
- /* basic datatype on origin */
+ /* origin data is contiguous */
int iovcnt = 2;
iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr + dt_true_lb);
@@ -236,7 +236,7 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
}
}
else {
- /* derived datatype on origin */
+ /* origin data is non-contiguous */
req = MPID_Request_create();
MPIU_ERR_CHKANDJUMP(req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
@@ -404,7 +404,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
if (target_dtp == NULL) {
/* basic datatype on target */
if (is_origin_contig) {
- /* basic datatype on origin */
+ /* origin data is contiguous */
int iovcnt = 2;
iov[1].MPID_IOV_BUF =
@@ -428,7 +428,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
}
}
else {
- /* derived datatype on origin */
+ /* origin data is non-contiguous */
req = MPID_Request_create();
MPIU_ERR_CHKANDJUMP(req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
http://git.mpich.org/mpich.git/commitdiff/b0668be93a65729668b9987a27b7171b4…
commit b0668be93a65729668b9987a27b7171b472b3f59
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Mon May 18 14:29:57 2015 -0500
Bug-fix: add true_lb when directly issuing contiguous derived data.
In RMA communication, when data to be sent is derived datatype but
contiguous, we can avoid copy/packing but directly issue it from
the user buffer. However, the data may have non-zero lb and we should
add the true lb when calculating the starting address. This patch
fixes this issue.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/include/mpid_rma_issue.h b/src/mpid/ch3/include/mpid_rma_issue.h
index ff6005a..9345b70 100644
--- a/src/mpid/ch3/include/mpid_rma_issue.h
+++ b/src/mpid/ch3/include/mpid_rma_issue.h
@@ -176,6 +176,7 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
int *blocklens = NULL;
MPI_Aint *displaces = NULL;
MPI_Datatype *datatypes = NULL;
+ MPI_Aint dt_true_lb;
int mpi_errno = MPI_SUCCESS;
MPIDI_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER);
@@ -201,7 +202,10 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
}
MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_type_size);
+
+ /* check if origin data is contiguous and get true lb */
MPID_Datatype_is_contig(rma_op->origin_datatype, &is_origin_contig);
+ MPID_Datatype_get_true_lb(rma_op->origin_datatype, &dt_true_lb);
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) & (rma_op->pkt);
iov[0].MPID_IOV_LEN = sizeof(rma_op->pkt);
@@ -212,7 +216,7 @@ static int issue_from_origin_buffer(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t * vc,
/* basic datatype on origin */
int iovcnt = 2;
- iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr);
+ iov[1].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr + dt_true_lb);
iov[1].MPID_IOV_LEN = rma_op->origin_count * origin_type_size;
MPIU_THREAD_CS_ENTER(CH3COMM, vc);
@@ -363,6 +367,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
int *blocklens = NULL;
MPI_Aint *displaces = NULL;
MPI_Datatype *datatypes = NULL;
+ MPI_Aint dt_true_lb;
int mpi_errno = MPI_SUCCESS;
MPIDI_STATE_DECL(MPID_STATE_ISSUE_FROM_ORIGIN_BUFFER_STREAM);
@@ -389,7 +394,9 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
MPID_Datatype_get_ptr(rma_op->origin_datatype, origin_dtp);
}
+ /* check if origin data is contiguous and get true lb */
MPID_Datatype_is_contig(rma_op->origin_datatype, &is_origin_contig);
+ MPID_Datatype_get_true_lb(rma_op->origin_datatype, &dt_true_lb);
iov[0].MPID_IOV_BUF = (MPID_IOV_BUF_CAST) & (rma_op->pkt);
iov[0].MPID_IOV_LEN = sizeof(rma_op->pkt);
@@ -401,7 +408,7 @@ static int issue_from_origin_buffer_stream(MPIDI_RMA_Op_t * rma_op, MPIDI_VC_t *
int iovcnt = 2;
iov[1].MPID_IOV_BUF =
- (MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr + stream_offset);
+ (MPID_IOV_BUF_CAST) ((char *) rma_op->origin_addr + dt_true_lb + stream_offset);
iov[1].MPID_IOV_LEN = stream_size;
MPIU_THREAD_CS_ENTER(CH3COMM, vc);
diff --git a/src/mpid/ch3/src/ch3u_handle_recv_req.c b/src/mpid/ch3/src/ch3u_handle_recv_req.c
index 5e62e66..33ecb54 100644
--- a/src/mpid/ch3/src/ch3u_handle_recv_req.c
+++ b/src/mpid/ch3/src/ch3u_handle_recv_req.c
@@ -232,6 +232,7 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
int is_contig;
MPI_Datatype basic_type;
MPI_Aint predef_count, predef_dtp_size;
+ MPI_Aint dt_true_lb;
MPIU_CHKPMEM_DECL(1);
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3_REQHANDLER_GACCUMRECVCOMPLETE);
@@ -261,7 +262,9 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
(rreq->dev.flags & MPIDI_CH3_PKT_FLAG_RMA_UNLOCK))
get_accum_resp_pkt->flags |= MPIDI_CH3_PKT_FLAG_RMA_FLUSH_ACK;
+ /* check if data is contiguous and get true lb */
MPID_Datatype_is_contig(rreq->dev.datatype, &is_contig);
+ MPID_Datatype_get_true_lb(rreq->dev.datatype, &dt_true_lb);
resp_req = MPID_Request_create();
MPIU_ERR_CHKANDJUMP(resp_req == NULL, mpi_errno, MPI_ERR_OTHER, "**nomemreq");
@@ -280,8 +283,8 @@ int MPIDI_CH3_ReqHandler_GaccumRecvComplete(MPIDI_VC_t * vc, MPID_Request * rreq
if (is_contig) {
MPIU_Memcpy(resp_req->dev.user_buf,
- (void *) ((char *) rreq->dev.real_user_buf + rreq->dev.stream_offset),
- rreq->dev.recv_data_sz);
+ (void *) ((char *) rreq->dev.real_user_buf + dt_true_lb +
+ rreq->dev.stream_offset), rreq->dev.recv_data_sz);
}
else {
MPID_Segment *seg = MPID_Segment_alloc();
diff --git a/src/mpid/common/datatype/mpid_datatype.h b/src/mpid/common/datatype/mpid_datatype.h
index 7af878d..7fd50be 100644
--- a/src/mpid/common/datatype/mpid_datatype.h
+++ b/src/mpid/common/datatype/mpid_datatype.h
@@ -565,6 +565,20 @@ do { \
} \
} while (0)
+/* helper macro: takes an MPI_Datatype handle value and returns true_lb in
+ * (*true_lb_) */
+#define MPID_Datatype_get_true_lb(dtype_, true_lb_) \
+ do { \
+ if (HANDLE_GET_KIND(dtype_) == HANDLE_KIND_BUILTIN) { \
+ *(true_lb_) = 0; \
+ } \
+ else { \
+ MPID_Datatype *dtp_ = NULL; \
+ MPID_Datatype_get_ptr((dtype_), dtp_); \
+ *(true_lb_) = dtp_->true_lb; \
+ } \
+ } while (0)
+
/* Datatype functions */
int MPID_Type_commit(MPI_Datatype *type);
http://git.mpich.org/mpich.git/commitdiff/c292eca93f2035d2cfcfb616f7f7acbb5…
commit c292eca93f2035d2cfcfb616f7f7acbb59766e15
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Thu May 28 20:38:51 2015 -0500
Correct usage of req's segment_first and segment_size in Nemesis
Originally the implementation of sendNoncontig() in Nemesis
assume that req->dev.segment_first is 0 and req->dev.segment_size
is the size of data, which potentially asssumes that the data passed
from upper layer must be the entire data, prohibiting the possibility
of streaming that data in the upper layer. The general way to use them
should be that req->dev.segment_first specifies the current starting
location and req->dev.segment_size specifies the current ending location.
We fixed this issue in commit 5132e070e0499b3a6fa2955710bef4c699d531fc, but
there are some places missed in that fixing. Here we fixed those places.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c b/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
index a45950f..24fccde 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3i_eagernoncontig.c
@@ -22,6 +22,7 @@ int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
{
int mpi_errno = MPI_SUCCESS;
int again = 0;
+ int orig_segment_first = sreq->dev.segment_first;
MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SENDNONCONTIG);
@@ -58,7 +59,7 @@ int MPIDI_CH3I_SendNoncontig( MPIDI_VC_t *vc, MPID_Request *sreq, void *header,
/* we didn't finish sending everything */
sreq->ch.noncontig = TRUE;
sreq->ch.vc = vc;
- if (sreq->dev.segment_first == 0) /* nothing was sent, save header */
+ if (sreq->dev.segment_first == orig_segment_first) /* nothing was sent, save header */
{
sreq->dev.pending_pkt = *(MPIDI_CH3_Pkt_t *)header;
sreq->ch.header_sz = hdr_sz;
http://git.mpich.org/mpich.git/commitdiff/19bdecfa2485036f82118608f58bbc171…
commit 19bdecfa2485036f82118608f58bbc171d9c2596
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Thu May 28 20:48:53 2015 -0500
Add asserts and comments in Nemesis and MXM netmod about streaming offset.
Note that here we move the definition of streaming unit size to
mpidimpl.h in CH3, so that Nemesis can see it and do assert check on it.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h b/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
index e537dc2..fbf2895 100644
--- a/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
+++ b/src/mpid/ch3/channels/nemesis/include/mpid_nem_inline.h
@@ -440,6 +440,16 @@ MPID_nem_mpich_send_seg_header (MPID_Segment *segment, MPIDI_msg_sz_t *segment_f
{
MPID_nem_fbox_mpich_t *pbox = vc_ch->fbox_out;
+ /* Add a compiler time check on streaming unit size and FASTBOX size */
+ MPIU_Static_assert((MPIDI_CH3U_Acc_stream_size > MPID_NEM_FBOX_DATALEN),
+ "RMA ACC Streaming unit size <= FASTBOX size in Nemesis.");
+
+ /* NOTE: when FASTBOX is being used, streaming optimization is never triggered,
+ * because streaming unit size is larger than FASTBOX size. In such case,
+ * first offset (*segment_first) is zero, and last offset (segment_size)
+ * is the data size */
+ MPIU_Assert(*segment_first == 0);
+
if (MPID_nem_fbox_is_full((MPID_nem_fbox_common_ptr_t)pbox))
goto usequeue_l;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
index fd52108..2c23d5e 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/mxm/mxm_send.c
@@ -180,6 +180,13 @@ int MPID_nem_mxm_SendNoncontig(MPIDI_VC_t * vc, MPID_Request * sreq, void *hdr,
req_area->iov_buf[0].length = sizeof(MPIDI_CH3_Pkt_t);
last = sreq->dev.segment_size;
+
+ /* NOTE: currently upper layer never pass packet with data that has
+ * either "last <= 0" or "last-sreq->dev.segment_first <=0" to this
+ * layer. In future, if upper layer passes such kind of packet, the
+ * judgement of the following IF branch needs to be modified. */
+ MPIU_Assert(last > 0 && last - sreq->dev.segment_first > 0);
+
if (last > 0) {
sreq->dev.tmpbuf = MPIU_Malloc((size_t) (sreq->dev.segment_size - sreq->dev.segment_first));
MPIU_Assert(sreq->dev.tmpbuf);
diff --git a/src/mpid/ch3/include/mpid_rma_issue.h b/src/mpid/ch3/include/mpid_rma_issue.h
index 17c6930..ff6005a 100644
--- a/src/mpid/ch3/include/mpid_rma_issue.h
+++ b/src/mpid/ch3/include/mpid_rma_issue.h
@@ -10,9 +10,6 @@
#include "mpl_utlist.h"
#include "mpid_rma_types.h"
-/* define ACC stream size as the SRBuf size */
-#define MPIDI_CH3U_Acc_stream_size MPIDI_CH3U_SRBuf_size
-
/* =========================================================== */
/* auxiliary functions */
/* =========================================================== */
diff --git a/src/mpid/ch3/include/mpid_rma_shm.h b/src/mpid/ch3/include/mpid_rma_shm.h
index 103e8cc..a34e64f 100644
--- a/src/mpid/ch3/include/mpid_rma_shm.h
+++ b/src/mpid/ch3/include/mpid_rma_shm.h
@@ -10,9 +10,6 @@
#include "mpl_utlist.h"
#include "mpid_rma_types.h"
-/* define ACC stream size as the SRBuf size */
-#define MPIDI_CH3U_Acc_stream_size MPIDI_CH3U_SRBuf_size
-
static inline int do_accumulate_op(void *source_buf, int source_count, MPI_Datatype source_dtp,
void *target_buf, int target_count, MPI_Datatype target_dtp,
MPI_Aint stream_offset, MPI_Op acc_op);
diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h
index b9d6a75..995a81f 100644
--- a/src/mpid/ch3/include/mpidimpl.h
+++ b/src/mpid/ch3/include/mpidimpl.h
@@ -925,6 +925,11 @@ extern MPIDI_CH3U_SRBuf_element_t * MPIDI_CH3U_SRBuf_pool;
END SEND/RECEIVE BUFFER SECTION
-------------------------------*/
+/* define ACC stream size as the SRBuf size */
+#if !defined(MPIDI_CH3U_Acc_stream_size)
+#define MPIDI_CH3U_Acc_stream_size MPIDI_CH3U_SRBuf_size
+#endif
+
/*----------------------------
BEGIN DEBUGGING TOOL SECTION
----------------------------*/
http://git.mpich.org/mpich.git/commitdiff/08d72e3790144b3058b6c9aaebe44f70a…
commit 08d72e3790144b3058b6c9aaebe44f70a4329282
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Tue May 19 15:10:11 2015 -0500
Add a test for derived ACCs working with MPI_Win_flush_local.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/test/mpi/rma/Makefile.am b/test/mpi/rma/Makefile.am
index 50785e9..5c6de78 100644
--- a/test/mpi/rma/Makefile.am
+++ b/test/mpi/rma/Makefile.am
@@ -145,7 +145,8 @@ noinst_PROGRAMS = \
atomic_rmw_cas \
atomic_rmw_gacc \
acc-pairtype \
- manyget
+ manyget \
+ derived-acc-flush_local
if BUILD_MPIX_TESTS
noinst_PROGRAMS += aint
diff --git a/test/mpi/rma/derived-acc-flush_local.c b/test/mpi/rma/derived-acc-flush_local.c
new file mode 100644
index 0000000..97668db
--- /dev/null
+++ b/test/mpi/rma/derived-acc-flush_local.c
@@ -0,0 +1,125 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2015 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+/* This code tests the case when one process issues large number
+ * of MPI_Accumulate operations (with large derived datatype) and
+ * issues a MPI_Win_flush_local at end. */
+
+/* FIXME: we should merge this into a comprehensive test for RMA
+ * operations + MPI_Win_flush_local. */
+
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#define DATA_SIZE 1000000
+#define COUNT 5000
+#define BLOCKLENGTH (DATA_SIZE/COUNT)
+#define STRIDE BLOCKLENGTH
+#define OPS_NUM 500
+
+int main(int argc, char *argv[])
+{
+ int rank, nproc;
+ int i, j;
+ MPI_Win win;
+ int *tar_buf = NULL;
+ int *orig_buf = NULL;
+ MPI_Datatype derived_dtp;
+ int errors = 0;
+
+ MPI_Init(&argc, &argv);
+
+ MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+ MPI_Alloc_mem(sizeof(int) * DATA_SIZE, MPI_INFO_NULL, &orig_buf);
+ MPI_Alloc_mem(sizeof(int) * DATA_SIZE, MPI_INFO_NULL, &tar_buf);
+
+ for (i = 0; i < DATA_SIZE; i++) {
+ orig_buf[i] = 1;
+ tar_buf[i] = 0;
+ }
+
+ MPI_Type_vector(COUNT, BLOCKLENGTH - 1, STRIDE, MPI_INT, &derived_dtp);
+ MPI_Type_commit(&derived_dtp);
+
+ MPI_Win_create(tar_buf, sizeof(int) * DATA_SIZE, sizeof(int),
+ MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+ /***** test between rank 0 and rank 1 *****/
+
+ if (rank == 1) {
+ MPI_Win_lock(MPI_LOCK_SHARED, 0, 0, win);
+
+ for (i = 0; i < OPS_NUM; i++) {
+ MPI_Accumulate(orig_buf, 1, derived_dtp,
+ 0, 0, DATA_SIZE - COUNT, MPI_INT, MPI_SUM, win);
+ MPI_Win_flush_local(0, win);
+ }
+
+ MPI_Win_unlock(0, win);
+ }
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* check results */
+ if (rank == 0) {
+ for (i = 0; i < DATA_SIZE - COUNT; i++) {
+ if (tar_buf[i] != OPS_NUM) {
+ printf("tar_buf[%d] = %d, expected %d\n", i, tar_buf[i], OPS_NUM);
+ errors++;
+ }
+ }
+ }
+
+ for (i = 0; i < DATA_SIZE; i++) {
+ tar_buf[i] = 0;
+ }
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /***** test between rank 0 and rank 2 *****/
+
+ if (rank == 2) {
+ MPI_Win_lock(MPI_LOCK_SHARED, 0, 0, win);
+
+ for (i = 0; i < OPS_NUM; i++) {
+ MPI_Accumulate(orig_buf, 1, derived_dtp,
+ 0, 0, DATA_SIZE - COUNT, MPI_INT, MPI_SUM, win);
+ MPI_Win_flush_local(0, win);
+ }
+
+ MPI_Win_unlock(0, win);
+ }
+
+ MPI_Barrier(MPI_COMM_WORLD);
+
+ /* check results */
+ if (rank == 0) {
+ for (i = 0; i < DATA_SIZE - COUNT; i++) {
+ if (tar_buf[i] != OPS_NUM) {
+ printf("tar_buf[%d] = %d, expected %d\n", i, tar_buf[i], OPS_NUM);
+ errors++;
+ }
+ }
+
+ if (errors == 0)
+ printf(" No Errors\n");
+ }
+
+ MPI_Win_free(&win);
+
+ MPI_Type_free(&derived_dtp);
+
+ MPI_Free_mem(orig_buf);
+ MPI_Free_mem(tar_buf);
+
+ MPI_Finalize();
+
+ return 0;
+}
diff --git a/test/mpi/rma/testlist.in b/test/mpi/rma/testlist.in
index 649e88a..c707b6c 100644
--- a/test/mpi/rma/testlist.in
+++ b/test/mpi/rma/testlist.in
@@ -134,6 +134,7 @@ atomic_rmw_gacc 3
@mpix@aint 2 strict=false
acc-pairtype 2
manyget 2 xfail=ticket2264
+derived-acc-flush_local 3 mpiversion=3.0
## This test is not strictly correct. This was meant to test out the
## case when MPI_Test is not nonblocking. However, we ended up
http://git.mpich.org/mpich.git/commitdiff/6b693f72fdafb07962dc1be996c1b9fcb…
commit 6b693f72fdafb07962dc1be996c1b9fcb2c19f8d
Author: Min Si <msi(a)il.is.s.u-tokyo.ac.jp>
Date: Tue May 19 13:16:14 2015 -0500
Added contig derived dt tests in mtest datatype.
The original mtest routine only generated tests for noncontiguous
derived datatypes. This patch added two tests for every derived
datatype: (1) contiguous ddt (stride=block length) without lower-bound;
(2) contiguous ddt with lower-bound.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/test/mpi/util/mtest_datatype_gen.c b/test/mpi/util/mtest_datatype_gen.c
index 315ef81..dfacdbd 100644
--- a/test/mpi/util/mtest_datatype_gen.c
+++ b/test/mpi/util/mtest_datatype_gen.c
@@ -54,6 +54,8 @@ static int verbose = 0; /* Message level (0 is none) */
* L count & S block length & L stride
* S count & L block length & L stride
* S count & L block length & S stride & S lower-bound
+ * contiguous (stride = block length)
+ * contiguous (stride = block length) & S lower-bound
*
* How to add a new structure for each datatype:
* 1. Add structure definition in function MTestDdtStructDefine.
@@ -97,7 +99,7 @@ static int datatype_index = 0;
/* Routine and internal parameters to define the range of datatype tests */
/* ------------------------------------------------------------------------ */
-#define MTEST_DDT_NUM_SUBTESTS 5 /* 5 kinds of derived datatype structure */
+#define MTEST_DDT_NUM_SUBTESTS 7 /* 7 kinds of derived datatype structure */
static MTestDdtCreator mtestDdtCreators[MTEST_DDT_MAX];
static int MTEST_BDT_START_IDX = -1;
@@ -295,6 +297,19 @@ static inline int MTestDdtStructDefine(int ddt_index, MPI_Aint tot_count, MPI_Ai
_stride = _blen * 2;
_lb = _short / 2; /* make sure lb < blen */
break;
+ case 5:
+ /* Contig ddt (stride = block length) without lb */
+ _count = _align_tot_count / _short;
+ _blen = _short;
+ _stride = _blen;
+ break;
+ case 6:
+ /* Contig ddt (stride = block length) with lb */
+ _count = _short;
+ _blen = _align_tot_count / _short;
+ _stride = _blen;
+ _lb = _short / 2; /* make sure lb < blen */
+ break;
default:
/* Undefined index */
merr = 1;
http://git.mpich.org/mpich.git/commitdiff/e595d1ec065faa03c43c7c750b9b1b0c8…
commit e595d1ec065faa03c43c7c750b9b1b0c81abc11d
Author: Min Si <msi(a)il.is.s.u-tokyo.ac.jp>
Date: Tue May 19 13:02:09 2015 -0500
Added lower-bound tests in mtest datatype routine.
The original mtest routine only generated datatype tests with zero
lower-bound. This patch added a test for every derived datatype that
checks datatype structure with non-zero lower-bound.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/test/mpi/util/mtest_datatype.c b/test/mpi/util/mtest_datatype.c
index ea59d50..249dedf 100644
--- a/test/mpi/util/mtest_datatype.c
+++ b/test/mpi/util/mtest_datatype.c
@@ -623,9 +623,10 @@ static int MTestTypeSubarrayCheckbuf(MTestDatatype * mtype)
* nblock: Number of blocks.
* blocklen: Number of elements in each block. The total number of elements in
* this datatype is set as (nblock * blocklen).
+ * lb: Lower bound of the new datatype (ignored).
* oldtype: Datatype of element.
*/
-static int MTestTypeContiguousCreate(int nblock, int blocklen, int stride,
+static int MTestTypeContiguousCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -667,9 +668,10 @@ static int MTestTypeContiguousCreate(int nblock, int blocklen, int stride,
* nblock: Number of blocks.
* blocklen: Number of elements in each block.
* stride: Strided number of elements between blocks.
+ * lb: Lower bound of the new datatype (ignored).
* oldtype: Datatype of element.
*/
-static int MTestTypeVectorCreate(int nblock, int blocklen, int stride,
+static int MTestTypeVectorCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -715,9 +717,10 @@ static int MTestTypeVectorCreate(int nblock, int blocklen, int stride,
* nblock: Number of blocks.
* blocklen: Number of elements in each block.
* stride: Strided number of elements between blocks.
+ * lb: Lower bound of the new datatype (ignored).
* oldtype: Datatype of element.
*/
-static int MTestTypeHvectorCreate(int nblock, int blocklen, int stride,
+static int MTestTypeHvectorCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -766,9 +769,10 @@ static int MTestTypeHvectorCreate(int nblock, int blocklen, int stride,
* blocklen: Number of elements in each block. Each block has the same length.
* stride: Strided number of elements between two adjacent blocks. The
* displacement of each block is set as (index of current block * stride).
+ * lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride,
+static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -794,8 +798,8 @@ static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride,
mtype->nblock = nblock;
for (i = 0; i < nblock; i++) {
mtype->index[i] = blocklen;
- mtype->displs[i] = stride * i; /*stride between the start of two blocks */
- mtype->displ_in_bytes[i] = stride * i * mtype->basesize;
+ mtype->displs[i] = lb + stride * i; /*stride between the start of two blocks */
+ mtype->displ_in_bytes[i] = (lb + stride * i) * mtype->basesize;
}
/* Indexed uses displacement in oldtypes */
@@ -807,8 +811,8 @@ static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride)", typename_prefix, "index", nblock,
- blocklen, stride);
+ sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ "index", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
MTestPrintError(merr);
@@ -828,9 +832,10 @@ static int MTestTypeIndexedCreate(int nblock, int blocklen, int stride,
* blocklen: Number of elements in each block. Each block has the same length.
* stride: Strided number of elements between two adjacent blocks. The byte
* displacement of each block is set as (index of current block * stride * size of oldtype).
+ * lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride,
+static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -855,7 +860,7 @@ static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride,
mtype->nblock = nblock;
for (i = 0; i < nblock; i++) {
mtype->index[i] = blocklen;
- mtype->displ_in_bytes[i] = stride * i * mtype->basesize;
+ mtype->displ_in_bytes[i] = (lb + stride * i) * mtype->basesize;
}
/* Hindexed uses displacement in bytes */
@@ -868,8 +873,8 @@ static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride)", typename_prefix, "hindex", nblock,
- blocklen, stride);
+ sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ "hindex", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
MTestPrintError(merr);
@@ -891,9 +896,10 @@ static inline int MTestTypeHindexedCreate(int nblock, int blocklen, int stride,
* blocklen: Number of elements in each block.
* stride: Strided number of elements between two adjacent blocks. The
* displacement of each block is set as (index of current block * stride).
+ * lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride,
+static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -918,8 +924,8 @@ static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride,
mtype->nblock = nblock;
mtype->blksize = blocklen * mtype->basesize;
for (i = 0; i < nblock; i++) {
- mtype->displs[i] = stride * i;
- mtype->displ_in_bytes[i] = stride * i * mtype->basesize;
+ mtype->displs[i] = lb + stride * i;
+ mtype->displ_in_bytes[i] = (lb + stride * i) * mtype->basesize;
}
/* Indexed-block uses displacement in oldtypes */
@@ -932,8 +938,8 @@ static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride)", typename_prefix, "index_block",
- nblock, blocklen, stride);
+ sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ "index_block", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
MTestPrintError(merr);
@@ -953,9 +959,10 @@ static int MTestTypeIndexedBlockCreate(int nblock, int blocklen, int stride,
* blocklen: Number of elements in each block.
* stride: Strided number of elements between two adjacent blocks. The byte
* displacement of each block is set as (index of current block * stride * size of oldtype).
+ * lb: Lower bound of the new datatype.
* oldtype: Datatype of element.
*/
-static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride,
+static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -979,7 +986,7 @@ static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride,
mtype->nblock = nblock;
mtype->blksize = blocklen * mtype->basesize;
for (i = 0; i < nblock; i++) {
- mtype->displ_in_bytes[i] = stride * i * mtype->basesize;
+ mtype->displ_in_bytes[i] = (lb + stride * i) * mtype->basesize;
}
/* Hindexed-block uses displacement in bytes */
@@ -992,8 +999,8 @@ static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride)", typename_prefix, "hindex_block",
- nblock, blocklen, stride);
+ sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ "hindex_block", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
MTestPrintError(merr);
@@ -1014,9 +1021,10 @@ static int MTestTypeHindexedBlockCreate(int nblock, int blocklen, int stride,
* blocklen: Number of elements in each block. Each block has the same length.
* stride: Strided number of elements between two adjacent blocks. The byte
* displacement of each block is set as (index of current block * stride * size of oldtype).
+ * lb: Lower bound of the new datatype.
* oldtype: Datatype of element. Each block has the same oldtype.
*/
-static int MTestTypeStructCreate(int nblock, int blocklen, int stride,
+static int MTestTypeStructCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -1042,7 +1050,7 @@ static int MTestTypeStructCreate(int nblock, int blocklen, int stride,
mtype->nblock = nblock;
mtype->blksize = blocklen * mtype->basesize;
for (i = 0; i < nblock; i++) {
- mtype->displ_in_bytes[i] = stride * i * mtype->basesize;
+ mtype->displ_in_bytes[i] = (lb + stride * i) * mtype->basesize;
mtype->old_datatypes[i] = oldtype;
mtype->index[i] = blocklen;
}
@@ -1057,8 +1065,8 @@ static int MTestTypeStructCreate(int nblock, int blocklen, int stride,
MTestPrintError(merr);
memset(type_name, 0, sizeof(type_name));
- sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride)", typename_prefix, "struct",
- nblock, blocklen, stride);
+ sprintf(type_name, "%s %s (%d nblock %d blocklen %d stride %d lb)", typename_prefix,
+ "struct", nblock, blocklen, stride, lb);
merr = MPI_Type_set_name(mtype->datatype, (char *) type_name);
if (merr)
MTestPrintError(merr);
@@ -1074,15 +1082,15 @@ static int MTestTypeStructCreate(int nblock, int blocklen, int stride,
/*
* Setup order-C subarray type info and handlers.
*
- * A 2D-subarray datatype specified with order C and located in the left-middle
+ * A 2D-subarray datatype specified with order C and located in the right-bottom
* of the full array is created by using input parameters.
- * Number of elements in the dimensions of the full array: {nblock + 2, stride}
+ * Number of elements in the dimensions of the full array: {nblock + lb, stride}
* Number of elements in the dimensions of the subarray: {nblock, blocklen}
* Starting of the subarray in each dimension: {1, stride - blocklen}
* order: MPI_ORDER_C
* oldtype: oldtype
*/
-static int MTestTypeSubArrayOrderCCreate(int nblock, int blocklen, int stride,
+static int MTestTypeSubArrayOrderCCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -1095,11 +1103,11 @@ static int MTestTypeSubArrayOrderCCreate(int nblock, int blocklen, int stride,
if (merr)
MTestPrintError(merr);
- mtype->arr_sizes[0] = nblock + 2; /* {row, col} */
+ mtype->arr_sizes[0] = nblock + lb; /* {row, col} */
mtype->arr_sizes[1] = stride;
mtype->arr_subsizes[0] = nblock; /* {row, col} */
mtype->arr_subsizes[1] = blocklen;
- mtype->arr_starts[0] = 1; /* {row, col} */
+ mtype->arr_starts[0] = lb; /* {row, col} */
mtype->arr_starts[1] = stride - blocklen;
mtype->order = MPI_ORDER_C;
@@ -1131,15 +1139,15 @@ static int MTestTypeSubArrayOrderCCreate(int nblock, int blocklen, int stride,
/*
* Setup order-Fortran subarray type info and handlers.
*
- * A 2D-subarray datatype specified with order Fortran and located in the middle
+ * A 2D-subarray datatype specified with order Fortran and located in the right
* bottom of the full array is created by using input parameters.
- * Number of elements in the dimensions of the full array: {stride, nblock + 2}
+ * Number of elements in the dimensions of the full array: {stride, nblock + lb}
* Number of elements in the dimensions of the subarray: {blocklen, nblock}
- * Starting of the subarray in each dimension: {stride - blocklen, 1}
+ * Starting of the subarray in each dimension: {stride - blocklen, lb}
* order: MPI_ORDER_FORTRAN
* oldtype: oldtype
*/
-static int MTestTypeSubArrayOrderFortranCreate(int nblock, int blocklen, int stride,
+static int MTestTypeSubArrayOrderFortranCreate(int nblock, int blocklen, int stride, int lb,
MPI_Datatype oldtype, const char *typename_prefix,
MTestDatatype * mtype)
{
@@ -1154,11 +1162,11 @@ static int MTestTypeSubArrayOrderFortranCreate(int nblock, int blocklen, int str
/* use the same row and col as that of order-c subarray for buffer
* initialization and check because we access buffer in order-c */
- mtype->arr_sizes[0] = nblock + 2; /* {row, col} */
+ mtype->arr_sizes[0] = nblock + lb; /* {row, col} */
mtype->arr_sizes[1] = stride;
mtype->arr_subsizes[0] = nblock; /* {row, col} */
mtype->arr_subsizes[1] = blocklen;
- mtype->arr_starts[0] = 1; /* {row, col} */
+ mtype->arr_starts[0] = lb; /* {row, col} */
mtype->arr_starts[1] = stride - blocklen;
mtype->order = MPI_ORDER_FORTRAN;
diff --git a/test/mpi/util/mtest_datatype.h b/test/mpi/util/mtest_datatype.h
index c33a8e4..e549406 100644
--- a/test/mpi/util/mtest_datatype.h
+++ b/test/mpi/util/mtest_datatype.h
@@ -50,7 +50,7 @@ enum MTEST_MIN_DERIVED_DT {
MTEST_MIN_DDT_MAX
};
-typedef int (*MTestDdtCreator) (int, int, int, MPI_Datatype, const char *, MTestDatatype *);
+typedef int (*MTestDdtCreator) (int, int, int, int, MPI_Datatype, const char *, MTestDatatype *);
extern void MTestTypeCreatorInit(MTestDdtCreator * creators);
extern void MTestTypeMinCreatorInit(MTestDdtCreator * creators);
diff --git a/test/mpi/util/mtest_datatype_gen.c b/test/mpi/util/mtest_datatype_gen.c
index 5c12371..315ef81 100644
--- a/test/mpi/util/mtest_datatype_gen.c
+++ b/test/mpi/util/mtest_datatype_gen.c
@@ -53,6 +53,7 @@ static int verbose = 0; /* Message level (0 is none) */
* S count & L block length & S stride
* L count & S block length & L stride
* S count & L block length & L stride
+ * S count & L block length & S stride & S lower-bound
*
* How to add a new structure for each datatype:
* 1. Add structure definition in function MTestDdtStructDefine.
@@ -95,7 +96,8 @@ static int datatype_index = 0;
/* ------------------------------------------------------------------------ */
/* Routine and internal parameters to define the range of datatype tests */
/* ------------------------------------------------------------------------ */
-#define MTEST_DDT_NUM_SUBTESTS 4 /* 4 kinds of derived datatype structure */
+
+#define MTEST_DDT_NUM_SUBTESTS 5 /* 5 kinds of derived datatype structure */
static MTestDdtCreator mtestDdtCreators[MTEST_DDT_MAX];
static int MTEST_BDT_START_IDX = -1;
@@ -236,12 +238,15 @@ static inline void MTestInitDatatypeEnv()
/* Routine to define various sets of blocklen/count/stride for derived datatypes. */
/* ------------------------------------------------------------------------------ */
-static inline int MTestDdtStructDefine(int ddt_index, MPI_Aint tot_count, MPI_Aint *count,
- MPI_Aint *blen, MPI_Aint *stride, MPI_Aint *align_tot_count)
+static inline int MTestDdtStructDefine(int ddt_index, MPI_Aint tot_count, MPI_Aint * count,
+ MPI_Aint * blen, MPI_Aint * stride,
+ MPI_Aint * align_tot_count, MPI_Aint * lb)
{
int merr = 0;
int ddt_c_st;
MPI_Aint _short = 0, _align_tot_count = 0, _count = 0, _blen = 0, _stride = 0;
+ MPI_Aint _lb = 0;
+
ddt_c_st = ddt_index % MTEST_DDT_NUM_SUBTESTS;
/* Get short value according to user specified tot_count.
@@ -283,6 +288,13 @@ static inline int MTestDdtStructDefine(int ddt_index, MPI_Aint tot_count, MPI_Ai
_blen = _short;
_stride = _blen * 10;
break;
+ case 4:
+ /* Large block length with lb */
+ _count = _short;
+ _blen = _align_tot_count / _short;
+ _stride = _blen * 2;
+ _lb = _short / 2; /* make sure lb < blen */
+ break;
default:
/* Undefined index */
merr = 1;
@@ -293,6 +305,7 @@ static inline int MTestDdtStructDefine(int ddt_index, MPI_Aint tot_count, MPI_Ai
*count = _count;
*blen = _blen;
*stride = _stride;
+ *lb = _lb;
return merr;
}
@@ -366,7 +379,7 @@ static inline int MTestGetSendDerivedDatatypes(MTestDatatype * sendtype,
int merr = 0;
int ddt_datatype_index, ddt_c_dt;
MPI_Count tsize = 1;
- MPI_Aint blen, stride, count, align_tot_count;;
+ MPI_Aint blen, stride, count, align_tot_count, lb;
MPI_Datatype old_type = MPI_DOUBLE;
/* Check index */
@@ -381,7 +394,7 @@ static inline int MTestGetSendDerivedDatatypes(MTestDatatype * sendtype,
/* Set datatype structure */
merr = MTestDdtStructDefine(ddt_datatype_index, tot_count, &count, &blen,
- &stride, &align_tot_count);
+ &stride, &align_tot_count, &lb);
if (merr) {
printf("Wrong index: global %d, send %d send-ddt %d, or undefined ddt structure in %s\n",
datatype_index, ddt_datatype_index, ddt_c_dt, __FUNCTION__);
@@ -390,7 +403,7 @@ static inline int MTestGetSendDerivedDatatypes(MTestDatatype * sendtype,
}
/* Create send datatype */
- merr = mtestDdtCreators[ddt_c_dt] (count, blen, stride, old_type, "send", sendtype);
+ merr = mtestDdtCreators[ddt_c_dt] (count, blen, stride, lb, old_type, "send", sendtype);
if (merr)
return merr;
@@ -412,7 +425,7 @@ static inline int MTestGetRecvDerivedDatatypes(MTestDatatype * sendtype,
int merr = 0;
int ddt_datatype_index, ddt_c_dt;
MPI_Count tsize;
- MPI_Aint blen, stride, count, align_tot_count;
+ MPI_Aint blen, stride, count, align_tot_count, lb;
MPI_Datatype old_type = MPI_DOUBLE;
/* Check index */
@@ -427,7 +440,7 @@ static inline int MTestGetRecvDerivedDatatypes(MTestDatatype * sendtype,
/* Set datatype structure */
merr = MTestDdtStructDefine(ddt_datatype_index, tot_count, &count, &blen,
- &stride, &align_tot_count);
+ &stride, &align_tot_count, &lb);
if (merr) {
printf("Wrong index: global %d, recv %d recv-ddt %d, or undefined ddt structure in %s\n",
datatype_index, ddt_datatype_index, ddt_c_dt, __FUNCTION__);
@@ -435,7 +448,7 @@ static inline int MTestGetRecvDerivedDatatypes(MTestDatatype * sendtype,
}
/* Create receive datatype */
- merr = mtestDdtCreators[ddt_c_dt] (count, blen, stride, old_type, "recv", recvtype);
+ merr = mtestDdtCreators[ddt_c_dt] (count, blen, stride, lb, old_type, "recv", recvtype);
if (merr)
return merr;
@@ -504,15 +517,19 @@ int MTestGetDatatypes(MTestDatatype * sendtype, MTestDatatype * recvtype, MPI_Ai
if (verbose >= 2 && datatype_index > 0) {
MPI_Count ssize, rsize;
+ MPI_Aint slb, rlb, sextent, rextent;
const char *sendtype_nm = MTestGetDatatypeName(sendtype);
const char *recvtype_nm = MTestGetDatatypeName(recvtype);
MPI_Type_size_x(sendtype->datatype, &ssize);
MPI_Type_size_x(recvtype->datatype, &rsize);
- MTestPrintfMsg(2, "Get datatypes: send = %s(size %d count %d basesize %d), "
- "recv = %s(size %d count %d basesize %d), tot_count=%d\n",
- sendtype_nm, ssize, sendtype->count, sendtype->basesize,
- recvtype_nm, rsize, recvtype->count, recvtype->basesize,
+ MPI_Type_get_extent(sendtype->datatype, &slb, &sextent);
+ MPI_Type_get_extent(recvtype->datatype, &rlb, &rextent);
+
+ MTestPrintfMsg(2, "Get datatypes: send = %s(size %d ext %ld lb %ld count %d basesize %d), "
+ "recv = %s(size %d ext %ld lb %ld count %d basesize %d), tot_count=%d\n",
+ sendtype_nm, ssize, sextent, slb, sendtype->count, sendtype->basesize,
+ recvtype_nm, rsize, rextent, rlb, recvtype->count, recvtype->basesize,
tot_count);
fflush(stdout);
}
http://git.mpich.org/mpich.git/commitdiff/6155592fbfd62974c157320016e333a89…
commit 6155592fbfd62974c157320016e333a8913eec3e
Author: Min Si <msi(a)il.is.s.u-tokyo.ac.jp>
Date: Tue May 19 23:15:12 2015 -0500
Bug fix: use lb + extent for derived dt in mtest datatype.
The original mtest routine used extent as the space required by
derived datatypes (i.e., to calculate the offset per datatype in a
data buffer). However, it is incorrect if the lower-bound is not zero.
The space must be lower-bound + extent. This patch fixed it.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/test/mpi/util/mtest_datatype.c b/test/mpi/util/mtest_datatype.c
index 39e3ceb..ea59d50 100644
--- a/test/mpi/util/mtest_datatype.c
+++ b/test/mpi/util/mtest_datatype.c
@@ -77,15 +77,17 @@ static inline void MTestTypeReset(MTestDatatype * mtype)
*/
static void *MTestTypeContigInit(MTestDatatype * mtype)
{
- MPI_Aint size;
+ MPI_Aint extent = 0, lb = 0, size;
int merr;
if (mtype->count > 0) {
unsigned char *p;
MPI_Aint i, totsize;
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+
+ size = extent + lb;
totsize = size * mtype->count;
if (!mtype->buf) {
mtype->buf = (void *) malloc(totsize);
@@ -117,13 +119,15 @@ static int MTestTypeContigCheckbuf(MTestDatatype * mtype)
unsigned char *p;
unsigned char expected;
int err = 0, merr;
- MPI_Aint i, totsize, size;
+ MPI_Aint i, totsize, size, extent = 0, lb = 0;
p = (unsigned char *) mtype->buf;
if (p) {
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+
+ size = lb + extent;
totsize = size * mtype->count;
for (i = 0; i < totsize; i++) {
expected = (unsigned char) (0xff ^ (i & 0xff));
@@ -149,7 +153,7 @@ static int MTestTypeContigCheckbuf(MTestDatatype * mtype)
*/
static void *MTestTypeVectorInit(MTestDatatype * mtype)
{
- MPI_Aint size, totsize, dt_offset, byte_offset;
+ MPI_Aint extent = 0, lb = 0, size, totsize, dt_offset, byte_offset;
int merr;
if (mtype->count > 0) {
@@ -157,9 +161,11 @@ static void *MTestTypeVectorInit(MTestDatatype * mtype)
int j, k, nc;
MPI_Aint i;
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+
+ size = extent + lb;
totsize = mtype->count * size;
if (!mtype->buf) {
mtype->buf = (void *) malloc(totsize);
@@ -207,15 +213,16 @@ static int MTestTypeVectorCheckbuf(MTestDatatype * mtype)
unsigned char *p;
unsigned char expected;
int i, err = 0, merr;
- MPI_Aint size = 0, byte_offset, dt_offset;
+ MPI_Aint size = 0, byte_offset, dt_offset, extent, lb;
p = (unsigned char *) mtype->buf;
if (p) {
int j, k, nc;
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+ size = extent + lb;
nc = 0;
dt_offset = 0;
/* For each datatype */
@@ -253,7 +260,7 @@ static int MTestTypeVectorCheckbuf(MTestDatatype * mtype)
*/
static void *MTestTypeIndexedInit(MTestDatatype * mtype)
{
- MPI_Aint size = 0, totsize, dt_offset, offset;
+ MPI_Aint extent = 0, lb = 0, size, totsize, dt_offset, offset;
int merr;
if (mtype->count > 0) {
@@ -262,9 +269,11 @@ static void *MTestTypeIndexedInit(MTestDatatype * mtype)
MPI_Aint i;
/* Allocate buffer */
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+
+ size = extent + lb;
totsize = size * mtype->count;
if (!mtype->buf) {
@@ -320,15 +329,16 @@ static int MTestTypeIndexedCheckbuf(MTestDatatype * mtype)
unsigned char *p;
unsigned char expected;
int err = 0, merr;
- MPI_Aint size = 0, offset, dt_offset;
+ MPI_Aint size = 0, offset, dt_offset, extent = 0, lb = 0;
p = (unsigned char *) mtype->buf;
if (p) {
int i, j, k, b, nc;
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+ size = lb + extent;
nc = 0;
dt_offset = 0;
/* For each datatype */
@@ -368,7 +378,7 @@ static int MTestTypeIndexedCheckbuf(MTestDatatype * mtype)
*/
static void *MTestTypeIndexedBlockInit(MTestDatatype * mtype)
{
- MPI_Aint size = 0, totsize, offset, dt_offset;
+ MPI_Aint extent = 0, lb = 0, size, totsize, offset, dt_offset;
int merr;
if (mtype->count > 0) {
@@ -377,9 +387,10 @@ static void *MTestTypeIndexedBlockInit(MTestDatatype * mtype)
MPI_Aint i;
/* Allocate the send/recv buffer */
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+ size = extent + lb;
totsize = size * mtype->count;
if (!mtype->buf) {
@@ -431,15 +442,16 @@ static int MTestTypeIndexedBlockCheckbuf(MTestDatatype * mtype)
unsigned char *p;
unsigned char expected;
int err = 0, merr;
- MPI_Aint size = 0, offset, dt_offset;
+ MPI_Aint size = 0, offset, dt_offset, lb = 0, extent = 0;
p = (unsigned char *) mtype->buf;
if (p) {
int i, j, k, nc;
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+ size = lb + extent;
nc = 0;
dt_offset = 0;
/* For each datatype */
@@ -475,7 +487,7 @@ static int MTestTypeIndexedBlockCheckbuf(MTestDatatype * mtype)
*/
static void *MTestTypeSubarrayInit(MTestDatatype * mtype)
{
- MPI_Aint size = 0, totsize, offset, dt_offset, byte_offset;
+ MPI_Aint extent = 0, lb = 0, size, totsize, offset, dt_offset, byte_offset;
int merr;
if (mtype->count > 0) {
@@ -484,9 +496,11 @@ static void *MTestTypeSubarrayInit(MTestDatatype * mtype)
MPI_Aint i;
/* Allocate the send/recv buffer */
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+
+ size = extent + lb;
totsize = size * mtype->count;
if (!mtype->buf) {
@@ -548,15 +562,17 @@ static int MTestTypeSubarrayCheckbuf(MTestDatatype * mtype)
unsigned char *p;
unsigned char expected;
int err = 0, merr;
- MPI_Aint size, offset, dt_offset, byte_offset;
+ MPI_Aint size, offset, dt_offset, byte_offset, lb = 0, extent = 0;
p = (unsigned char *) mtype->buf;
if (p) {
int j, k, i, b, nc;
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+ size = lb + extent;
+
int ncol, sub_ncol, sub_nrow, sub_col_start, sub_row_start;
ncol = mtype->arr_sizes[1];
sub_nrow = mtype->arr_subsizes[0];
@@ -1239,15 +1255,17 @@ int MTestTypeDupCreate(MPI_Datatype oldtype, MTestDatatype * mtype)
*/
void *MTestTypeInitRecv(MTestDatatype * mtype)
{
- MPI_Aint size;
+ MPI_Aint size, extent = 0, lb = 0;
int merr;
if (mtype->count > 0) {
signed char *p;
MPI_Aint i, totsize;
- merr = MPI_Type_extent(mtype->datatype, &size);
+ merr = MPI_Type_get_extent(mtype->datatype, &lb, &extent);
if (merr)
MTestPrintError(merr);
+
+ size = extent + lb;
totsize = size * mtype->count;
if (!mtype->buf) {
mtype->buf = (void *) malloc(totsize);
-----------------------------------------------------------------------
Summary of changes:
.../ch3/channels/nemesis/include/mpid_nem_inline.h | 61 ++-
.../ch3/channels/nemesis/include/mpid_nem_post.h | 6 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_impl.h | 2 +-
.../ch3/channels/nemesis/netmod/mxm/mxm_send.c | 48 ++-
.../channels/nemesis/netmod/portals4/ptl_impl.h | 3 +
.../ch3/channels/nemesis/netmod/portals4/ptl_nm.c | 26 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_send.c | 88 +++-
src/mpid/ch3/channels/nemesis/src/ch3_isendv.c | 4 +-
src/mpid/ch3/channels/nemesis/src/ch3_istartmsgv.c | 3 +-
src/mpid/ch3/channels/nemesis/src/ch3_progress.c | 6 +-
.../ch3/channels/nemesis/src/ch3i_eagernoncontig.c | 6 +-
src/mpid/ch3/include/mpid_rma_issue.h | 469 ++++++++------------
src/mpid/ch3/include/mpid_rma_shm.h | 3 -
src/mpid/ch3/include/mpid_rma_types.h | 3 -
src/mpid/ch3/include/mpidimpl.h | 23 +-
src/mpid/ch3/include/mpidpkt.h | 14 +-
src/mpid/ch3/include/mpidpre.h | 4 +-
src/mpid/ch3/include/mpidrma.h | 35 ++-
src/mpid/ch3/src/ch3u_handle_recv_req.c | 235 +++++++---
src/mpid/ch3/src/ch3u_request.c | 8 +-
src/mpid/ch3/src/ch3u_rma_ops.c | 12 -
src/mpid/ch3/src/ch3u_rma_pkthandler.c | 310 +++++++++----
src/mpid/common/datatype/mpid_datatype.h | 14 +
test/mpi/rma/Makefile.am | 3 +-
test/mpi/rma/derived-acc-flush_local.c | 125 ++++++
test/mpi/rma/testlist.in | 1 +
test/mpi/util/mtest_datatype.c | 142 ++++---
test/mpi/util/mtest_datatype.h | 2 +-
test/mpi/util/mtest_datatype_gen.c | 58 ++-
29 files changed, 1085 insertions(+), 629 deletions(-)
create mode 100644 test/mpi/rma/derived-acc-flush_local.c
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-53-gccf8bcb
by noreply@mpich.org 30 May '15
by noreply@mpich.org 30 May '15
30 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via ccf8bcb8e35debb869eb1508d4748d89c22b3286 (commit)
from cd8dd87a4ab8b92c76b679cb78aabbbb9295f679 (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/ccf8bcb8e35debb869eb1508d4748d89c…
commit ccf8bcb8e35debb869eb1508d4748d89c22b3286
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Sat May 30 09:42:55 2015 -0500
tsuite: mark manyget test as xfail
No reviewer.
diff --git a/test/mpi/rma/testlist.in b/test/mpi/rma/testlist.in
index fa8acee..649e88a 100644
--- a/test/mpi/rma/testlist.in
+++ b/test/mpi/rma/testlist.in
@@ -133,7 +133,7 @@ atomic_rmw_cas 3
atomic_rmw_gacc 3
@mpix@aint 2 strict=false
acc-pairtype 2
-manyget 2
+manyget 2 xfail=ticket2264
## This test is not strictly correct. This was meant to test out the
## case when MPI_Test is not nonblocking. However, we ended up
-----------------------------------------------------------------------
Summary of changes:
test/mpi/rma/testlist.in | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-52-gcd8dd87
by noreply@mpich.org 29 May '15
by noreply@mpich.org 29 May '15
29 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via cd8dd87a4ab8b92c76b679cb78aabbbb9295f679 (commit)
from c3184ef2f6fff86503d2892142add19060bf94a1 (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/cd8dd87a4ab8b92c76b679cb78aabbbb9…
commit cd8dd87a4ab8b92c76b679cb78aabbbb9295f679
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Fri May 29 10:17:52 2015 -0500
tsuite: move file errhandler test to io bucket
Ensures this test runs only when ROMIO is enabled.
Signed-off-by: Rob Latham <robl(a)mcs.anl.gov>
diff --git a/test/mpi/.gitignore b/test/mpi/.gitignore
index 1b35005..a16a496 100644
--- a/test/mpi/.gitignore
+++ b/test/mpi/.gitignore
@@ -231,6 +231,7 @@
/errors/f77/testlist
/errors/group/rerr
/errors/io/fileerrret
+/errors/io/file_errhdl
/errors/pt2pt/proberank
/errors/pt2pt/truncmsg2
/errors/spawn/badport
diff --git a/test/mpi/errhan/Makefile.am b/test/mpi/errhan/Makefile.am
index 866112f..2098592 100644
--- a/test/mpi/errhan/Makefile.am
+++ b/test/mpi/errhan/Makefile.am
@@ -20,7 +20,6 @@ noinst_PROGRAMS = \
errfatal \
predef_eh \
errstring2 \
- file_errhdl \
dynamic_errcode_predefined_errclass
EXTRA_PROGRAMS = errcode errring errstring
diff --git a/test/mpi/errhan/testlist b/test/mpi/errhan/testlist
index 47e3381..ebd60ff 100644
--- a/test/mpi/errhan/testlist
+++ b/test/mpi/errhan/testlist
@@ -5,4 +5,3 @@ predef_eh 1
predef_eh 2
errstring2 1
dynamic_errcode_predefined_errclass 1
-file_errhdl 1
diff --git a/test/mpi/errors/io/Makefile.am b/test/mpi/errors/io/Makefile.am
index 75cc59a..f90c371 100644
--- a/test/mpi/errors/io/Makefile.am
+++ b/test/mpi/errors/io/Makefile.am
@@ -12,5 +12,5 @@ EXTRA_DIST = testlist
## for all programs that are just built from the single corresponding source
## file, we don't need per-target _SOURCES rules, automake will infer them
## correctly
-noinst_PROGRAMS = fileerrret openerr
+noinst_PROGRAMS = fileerrret openerr file_errhdl
diff --git a/test/mpi/errhan/file_errhdl.c b/test/mpi/errors/io/file_errhdl.c
similarity index 100%
rename from test/mpi/errhan/file_errhdl.c
rename to test/mpi/errors/io/file_errhdl.c
diff --git a/test/mpi/errors/io/testlist b/test/mpi/errors/io/testlist
index 61f9bce..015950b 100644
--- a/test/mpi/errors/io/testlist
+++ b/test/mpi/errors/io/testlist
@@ -1,2 +1,3 @@
fileerrret 1
openerr 1
+file_errhdl 1
-----------------------------------------------------------------------
Summary of changes:
test/mpi/.gitignore | 1 +
test/mpi/errhan/Makefile.am | 1 -
test/mpi/errhan/testlist | 1 -
test/mpi/errors/io/Makefile.am | 2 +-
test/mpi/{errhan => errors/io}/file_errhdl.c | 0
test/mpi/errors/io/testlist | 1 +
6 files changed, 3 insertions(+), 3 deletions(-)
rename test/mpi/{errhan => errors/io}/file_errhdl.c (100%)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.2b2-51-gc3184ef
by noreply@mpich.org 28 May '15
by noreply@mpich.org 28 May '15
28 May '15
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via c3184ef2f6fff86503d2892142add19060bf94a1 (commit)
from 914f461b1a171c3a29043b548af842fb6159379b (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/c3184ef2f6fff86503d2892142add1906…
commit c3184ef2f6fff86503d2892142add19060bf94a1
Author: Huiwei Lu <huiweilu(a)mcs.anl.gov>
Date: Wed May 27 12:08:16 2015 -0500
Fix threaded MPI_Comm_idup
Removes unnecessary thread yielding in threaded nonblocking context id
allocation algorithm. The error was introduced by "copy-pasting" from
the blocking context id allocation algorithm
(MPIR_Get_contextid_sparse_group) when implementing the nonblocking
algorithm. Note the subtle difference on thread handling between the
two. In the blocking algorithm, yield is needed to allow another thread
to make progress. In nonblocking algorithm, there is no need to yield to
another thread because this thread will not block the progress. On the
contrary, unnecessary yield will allow other threads to execute and
insert wrong order of entries to the nonblocking schedule and cause
errors.
Fixes #2183
Signed-off-by: Junchao Zhang <jczhang(a)mcs.anl.gov>
diff --git a/src/mpi/comm/commutil.c b/src/mpi/comm/commutil.c
index cbe659e..4628a41 100644
--- a/src/mpi/comm/commutil.c
+++ b/src/mpi/comm/commutil.c
@@ -1277,6 +1277,19 @@ fn_fail:
return mpi_errno;
}
+/* Try to find a valid context id.
+ *
+ * If the context id is found, then broadcast it; if not, then retry the
+ * nonblocking context id allocation algorithm again.
+ *
+ * Note the subtle difference on thread handling between the nonblocking
+ * algorithm (sched_cb_gcn_allocate_cid) and the blocking algorithm
+ * (MPIR_Get_contextid_sparse_group). In nonblocking algorithm, there is no
+ * need to yield to another thread because this thread will not block the
+ * progress. On the contrary, unnecessary yield will allow other threads to
+ * execute and insert wrong order of entries to the nonblocking schedule and
+ * cause errors.
+ */
#undef FUNCNAME
#define FUNCNAME sched_cb_gcn_allocate_cid
#undef FCNAME
@@ -1287,7 +1300,6 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm *comm, int tag, void *state)
struct gcn_state *st = state;
MPIR_Context_id_t newctxid;
- MPIU_THREAD_CS_ENTER(CONTEXTID,);
if (st->own_eager_mask) {
newctxid = MPIR_Find_and_allocate_context_id(st->local_mask);
if (st->ctx0)
@@ -1297,14 +1309,6 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm *comm, int tag, void *state)
st->own_eager_mask = 0;
eager_in_use = 0;
-
- if (newctxid <= 0) {
- /* else we did not find a context id. Give up the mask in case
- * there is another thread (with a lower input context id)
- * waiting for it. We need to ensure that any other threads
- * have the opportunity to run, hence yielding */
- MPIU_THREAD_CS_YIELD(CONTEXTID,);
- }
} else if (st->own_mask) {
newctxid = MPIR_Find_and_allocate_context_id(st->local_mask);
@@ -1319,16 +1323,7 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm *comm, int tag, void *state)
if (newctxid > 0) {
if (lowestContextId == st->comm_ptr->context_id)
lowestContextId = MPIR_MAXID;
- } else {
- /* else we did not find a context id. Give up the mask in case
- * there is another thread (with a lower input context id)
- * waiting for it. We need to ensure that any other threads
- * have the opportunity to run, hence yielding */
- MPIU_THREAD_CS_YIELD(CONTEXTID,);
}
- } else {
- /* As above, force this thread to yield */
- MPIU_THREAD_CS_YIELD(CONTEXTID,);
}
if (*st->ctx0 == 0) {
@@ -1343,8 +1338,6 @@ static int sched_cb_gcn_allocate_cid(MPID_Comm *comm, int tag, void *state)
MPID_SCHED_BARRIER(st->s);
}
- MPIU_THREAD_CS_EXIT(CONTEXTID,);
-
/* --BEGIN ERROR HANDLING-- */
/* --END ERROR HANDLING-- */
fn_fail:
@@ -1360,7 +1353,6 @@ static int sched_cb_gcn_copy_mask(MPID_Comm *comm, int tag, void *state)
int mpi_errno = MPI_SUCCESS;
struct gcn_state *st = state;
- MPIU_THREAD_CS_ENTER(CONTEXTID,);
if (st->first_iter) {
memset(st->local_mask, 0, MPIR_MAX_CONTEXT_MASK * sizeof(int));
st->own_eager_mask = 0;
@@ -1394,7 +1386,6 @@ static int sched_cb_gcn_copy_mask(MPID_Comm *comm, int tag, void *state)
st->own_mask = 1;
}
}
- MPIU_THREAD_CS_EXIT(CONTEXTID,);
mpi_errno = st->comm_ptr->coll_fns->Iallreduce_sched(MPI_IN_PLACE, st->local_mask, MPIR_MAX_CONTEXT_MASK,
MPI_UINT32_T, MPI_BAND, st->comm_ptr, st->s);
@@ -1457,7 +1448,6 @@ static int sched_get_cid_nonblock(MPID_Comm *comm_ptr, MPIR_Context_id_t *ctx0,
struct gcn_state *st = NULL;
MPIU_CHKPMEM_DECL(1);
- MPIU_THREAD_CS_ENTER(CONTEXTID,);
if (initialize_context_mask) {
MPIR_Init_contextid();
}
@@ -1483,7 +1473,6 @@ static int sched_get_cid_nonblock(MPID_Comm *comm_ptr, MPIR_Context_id_t *ctx0,
MPIU_Assert( MPIR_CVAR_CTXID_EAGER_SIZE >= 0 && MPIR_CVAR_CTXID_EAGER_SIZE < MPIR_MAX_CONTEXT_MASK-1 );
eager_nelem = MPIR_CVAR_CTXID_EAGER_SIZE;
}
- MPIU_THREAD_CS_EXIT(CONTEXTID,);
mpi_errno = MPID_Sched_cb(&sched_cb_gcn_copy_mask, st, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-----------------------------------------------------------------------
Summary of changes:
src/mpi/comm/commutil.c | 37 +++++++++++++------------------------
1 files changed, 13 insertions(+), 24 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0