Hi! On Thu, 13 Apr 2017 19:45:05 +0200, I wrote: > On Fri, 10 Oct 2014 12:42:06 +0200, I wrote: > > In the OpenACC Runtime Library, acc_pcopyin and acc_pcreate are to be > > aliases for acc_present_or_copyin and acc_present_or_create, > > respectively. > > > > This is implemented in openacc.f90 as follows: [...]
> The following patch seems to do the right thing (that is, "divert" calls > of "acc_pcopyin" to the existing "acc_present_or_copyin_*_h", and > likewise for "acc_pcreate"). Is that the correct way of doing this? Building on <https://gcc.gnu.org/ml/gcc-patches/2017-05/msg01678.html>, OK to commit the following to trunk? commit e5f5715556a30a0fff71243ad136d6ec29556f92 Author: Thomas Schwinge <tho...@codesourcery.com> Date: Wed Apr 19 21:12:33 2017 +0200 Fortran OpenACC "openacc_lib.h": acc_pcopyin, acc_pcreate libgomp/ * openacc_lib.h (acc_pcopyin, acc_pcreate): Route to acc_present_or_copyin and acc_present_or_create procedures, respectively. * testsuite/libgomp.oacc-fortran/lib-32-1.f: Exercise these, and generally different variants of OpenACC Runtime Library functions. * testsuite/libgomp.oacc-fortran/lib-32-2.f: Likewise. --- libgomp/openacc_lib.h | 42 ++++------------------- libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f | 36 ++++++++----------- libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f | 26 +++++++------- 3 files changed, 35 insertions(+), 69 deletions(-) diff --git libgomp/openacc_lib.h libgomp/openacc_lib.h index 65f47a8..7818bd7 100644 --- libgomp/openacc_lib.h +++ libgomp/openacc_lib.h @@ -191,23 +191,9 @@ end interface interface acc_pcopyin - subroutine acc_pcopyin_32_h (a, len) - use iso_c_binding, only: c_int32_t - !GCC$ ATTRIBUTES NO_ARG_CHECK :: a - type (*), dimension (*) :: a - integer (c_int32_t) len - end subroutine - - subroutine acc_pcopyin_64_h (a, len) - use iso_c_binding, only: c_int64_t - !GCC$ ATTRIBUTES NO_ARG_CHECK :: a - type (*), dimension (*) :: a - integer (c_int64_t) len - end subroutine - - subroutine acc_pcopyin_array_h (a) - type (*), dimension (..), contiguous :: a - end subroutine + procedure :: acc_present_or_copyin_32_h + procedure :: acc_present_or_copyin_64_h + procedure :: acc_present_or_copyin_array_h end interface interface acc_create @@ -251,23 +237,9 @@ end interface interface acc_pcreate - subroutine acc_pcreate_32_h (a, len) - use iso_c_binding, only: c_int32_t - !GCC$ ATTRIBUTES NO_ARG_CHECK :: a - type (*), dimension (*) :: a - integer (c_int32_t) len - end subroutine - - subroutine acc_pcreate_64_h (a, len) - use iso_c_binding, only: c_int64_t - !GCC$ ATTRIBUTES NO_ARG_CHECK :: a - type (*), dimension (*) :: a - integer (c_int64_t) len - end subroutine - - subroutine acc_pcreate_array_h (a) - type (*), dimension (..), contiguous :: a - end subroutine + procedure :: acc_present_or_create_32_h + procedure :: acc_present_or_create_64_h + procedure :: acc_present_or_create_array_h end interface interface acc_copyout @@ -353,7 +325,7 @@ ! acc_map_data: Only available in C/C++ ! acc_unmap_data: Only available in C/C++ ! acc_deviceptr: Only available in C/C++ - ! acc_ostptr: Only available in C/C++ + ! acc_hostptr: Only available in C/C++ interface acc_is_present function acc_is_present_32_h (a, len) diff --git libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f index 4606d77..177e4fb 100644 --- libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f +++ libgomp/testsuite/libgomp.oacc-fortran/lib-32-1.f @@ -20,8 +20,8 @@ SHARED_MEM = ACC_IS_PRESENT (H) - CALL ACC_PRESENT_OR_CREATE (H) - IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + CALL ACC_PRESENT_OR_CREATE (H, INT (SIZEOF (H), 4)) + IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) CALL ABORT !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -48,8 +48,7 @@ H(I) = I + 4 END DO -! CALL ACC_PCREATE (H) - CALL ACC_PRESENT_OR_CREATE (H) + CALL ACC_PCREATE (H, INT (SIZEOF (H), 4)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -63,7 +62,7 @@ H(I) = I + 6 END DO - CALL ACC_PRESENT_OR_COPYIN (H) + CALL ACC_PRESENT_OR_COPYIN (H, INT (SIZEOF (H), 8)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -77,8 +76,7 @@ H(I) = I + 8 END DO -! CALL ACC_PCOPYIN (H) - CALL ACC_PRESENT_OR_COPYIN (H) + CALL ACC_PCOPYIN (H, INT (SIZEOF (H), 4)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -92,18 +90,17 @@ H(I) = I + 10 END DO - CALL ACC_COPYOUT (H) + CALL ACC_COPYOUT (H, INT (SIZEOF (H), 4)) IF (.NOT. SHARED_MEM) THEN - IF (ACC_IS_PRESENT (H)) CALL ABORT + IF (ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) CALL ABORT ENDIF DO I = 1, N IF (H(I) .NE. I + MERGE (10, 9, SHARED_MEM)) CALL ABORT END DO -! CALL ACC_PCOPYIN (H) - CALL ACC_PRESENT_OR_COPYIN (H) - IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + CALL ACC_PCOPYIN (H) + IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 4))) CALL ABORT !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -117,8 +114,7 @@ H(I) = I + 12 END DO -! CALL ACC_PCOPYIN (H) - CALL ACC_PRESENT_OR_COPYIN (H) + CALL ACC_PCOPYIN (H, INT (SIZEOF (H), 8)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -132,8 +128,7 @@ H(I) = I + 14 END DO -! CALL ACC_PCREATE (H) - CALL ACC_PRESENT_OR_CREATE (H) + CALL ACC_PCREATE (H) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -147,8 +142,7 @@ H(I) = I + 16 END DO -! CALL ACC_PCREATE (H) - CALL ACC_PRESENT_OR_CREATE (H) + CALL ACC_PCREATE (H, INT (SIZEOF (H), 8)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -162,8 +156,8 @@ H(I) = I + 18 END DO - CALL ACC_UPDATE_SELF (H) - IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + CALL ACC_UPDATE_SELF (H, INT (SIZEOF (H), 4)) + IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) CALL ABORT DO I = 1, N IF (H(I) .NE. I + MERGE (18, 17, SHARED_MEM)) CALL ABORT @@ -171,7 +165,7 @@ CALL ACC_DELETE (H) IF (.NOT. SHARED_MEM) THEN - IF (ACC_IS_PRESENT (H)) CALL ABORT + IF (ACC_IS_PRESENT (H, INT (SIZEOF (H), 4))) CALL ABORT ENDIF DEALLOCATE (H) diff --git libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f index 88f5566..a08eb84 100644 --- libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f +++ libgomp/testsuite/libgomp.oacc-fortran/lib-32-2.f @@ -20,8 +20,8 @@ SHARED_MEM = ACC_IS_PRESENT (H) - CALL ACC_PRESENT_OR_CREATE (H) - IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + CALL ACC_PRESENT_OR_CREATE (H, INT (SIZEOF (H), 4)) + IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) CALL ABORT !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -48,7 +48,7 @@ H(I) = I + 4 END DO - CALL ACC_PCREATE (H) + CALL ACC_PCREATE (H, INT (SIZEOF (H), 4)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -62,7 +62,7 @@ H(I) = I + 6 END DO - CALL ACC_PRESENT_OR_COPYIN (H) + CALL ACC_PRESENT_OR_COPYIN (H, INT (SIZEOF (H), 8)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -76,7 +76,7 @@ H(I) = I + 8 END DO - CALL ACC_PCOPYIN (H) + CALL ACC_PCOPYIN (H, INT (SIZEOF (H), 4)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -90,9 +90,9 @@ H(I) = I + 10 END DO - CALL ACC_COPYOUT (H) + CALL ACC_COPYOUT (H, INT (SIZEOF (H), 4)) IF (.NOT. SHARED_MEM) THEN - IF (ACC_IS_PRESENT (H)) CALL ABORT + IF (ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) CALL ABORT ENDIF DO I = 1, N @@ -100,7 +100,7 @@ END DO CALL ACC_PCOPYIN (H) - IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 4))) CALL ABORT !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -114,7 +114,7 @@ H(I) = I + 12 END DO - CALL ACC_PCOPYIN (H) + CALL ACC_PCOPYIN (H, INT (SIZEOF (H), 8)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -142,7 +142,7 @@ H(I) = I + 16 END DO - CALL ACC_PCREATE (H) + CALL ACC_PCREATE (H, INT (SIZEOF (H), 8)) !$ACC PARALLEL LOOP DEFAULT (PRESENT) DO I = 1, N @@ -156,8 +156,8 @@ H(I) = I + 18 END DO - CALL ACC_UPDATE_SELF (H) - IF (.NOT. ACC_IS_PRESENT (H)) CALL ABORT + CALL ACC_UPDATE_SELF (H, INT (SIZEOF (H), 4)) + IF (.NOT. ACC_IS_PRESENT (H, INT (SIZEOF (H), 8))) CALL ABORT DO I = 1, N IF (H(I) .NE. I + MERGE (18, 17, SHARED_MEM)) CALL ABORT @@ -165,7 +165,7 @@ CALL ACC_DELETE (H) IF (.NOT. SHARED_MEM) THEN - IF (ACC_IS_PRESENT (H)) CALL ABORT + IF (ACC_IS_PRESENT (H, INT (SIZEOF (H), 4))) CALL ABORT ENDIF DEALLOCATE (H) Grüße Thomas