OpenACC 1.0 compatibility: acc_async_wait, acc_async_wait_all
authorThomas Schwinge <thomas@codesourcery.com>
Wed, 24 May 2017 13:25:01 +0000 (15:25 +0200)
committerThomas Schwinge <tschwinge@gcc.gnu.org>
Wed, 24 May 2017 13:25:01 +0000 (15:25 +0200)
libgomp/
* openacc.h (acc_async_wait, acc_async_wait_all): New prototypes.
* libgomp.map (OACC_2.0.1): Add these.
* oacc-async.c (acc_async_wait, acc_async_wait_all): New aliases
for "acc_wait", and "acc_wait_all", respectively.
* openacc.f90 (acc_async_wait, acc_async_wait_all): New interfaces
for "acc_wait", and "acc_wait_all", respectively.
* openacc_lib.h (acc_async_wait, acc_async_wait_all): Likewise.
* libgomp.texi (acc_wait, acc_wait_all): Update.
* testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c: Update.
* testsuite/libgomp.oacc-fortran/par-reduction-2-1.f: New file.
* testsuite/libgomp.oacc-fortran/par-reduction-2-2.f: Likewise.

From-SVN: r248413

libgomp/ChangeLog
libgomp/libgomp.map
libgomp/libgomp.texi
libgomp/oacc-async.c
libgomp/openacc.f90
libgomp/openacc.h
libgomp/openacc_lib.h
libgomp/testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c
libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f [new file with mode: 0644]
libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f [new file with mode: 0644]

index 55869d2bfbca836b36f5032818a5787a16596976..8adc10b3614fc3623cfb35c470f4aca866ffd778 100644 (file)
@@ -1,5 +1,17 @@
 2017-05-24  Thomas Schwinge  <thomas@codesourcery.com>
 
+       * openacc.h (acc_async_wait, acc_async_wait_all): New prototypes.
+       * libgomp.map (OACC_2.0.1): Add these.
+       * oacc-async.c (acc_async_wait, acc_async_wait_all): New aliases
+       for "acc_wait", and "acc_wait_all", respectively.
+       * openacc.f90 (acc_async_wait, acc_async_wait_all): New interfaces
+       for "acc_wait", and "acc_wait_all", respectively.
+       * openacc_lib.h (acc_async_wait, acc_async_wait_all): Likewise.
+       * libgomp.texi (acc_wait, acc_wait_all): Update.
+       * testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c: Update.
+       * testsuite/libgomp.oacc-fortran/par-reduction-2-1.f: New file.
+       * testsuite/libgomp.oacc-fortran/par-reduction-2-2.f: Likewise.
+
        * openacc_lib.h (acc_pcopyin, acc_pcreate): Route to
        acc_present_or_copyin and acc_present_or_create procedures,
        respectively.
index b43c6deb8515d4dbb6ed6751fdd2d581bb486793..f9044ae273b0f1cf4010253759a1491fc4dba2fe 100644 (file)
@@ -380,6 +380,8 @@ OACC_2.0 {
 
 OACC_2.0.1 {
   global:
+       acc_async_wait;
+       acc_async_wait_all;
        acc_pcopyin;
        acc_pcreate;
 } OACC_2.0;
index cc5ee1cd6b1ff0e71ef8fead027025992d80fb37..230720f94b435a3144d141118988bef4844443f7 100644 (file)
@@ -2095,12 +2095,15 @@ specified in @var{arg}.
 @item @emph{C/C++}:
 @multitable @columnfractions .20 .80
 @item @emph{Prototype}: @tab @code{acc_wait(arg);}
+@item @emph{Prototype (OpenACC 1.0 compatibility)}: @tab @code{acc_async_wait(arg);}
 @end multitable
 
 @item @emph{Fortran}:
 @multitable @columnfractions .20 .80
 @item @emph{Interface}: @tab @code{subroutine acc_wait(arg)}
 @item                   @tab @code{integer(acc_handle_kind) arg}
+@item @emph{Interface (OpenACC 1.0 compatibility)}: @tab @code{subroutine acc_async_wait(arg)}
+@item                                               @tab @code{integer(acc_handle_kind) arg}
 @end multitable
 
 @item @emph{Reference}:
@@ -2119,11 +2122,13 @@ This function waits for the completion of all asynchronous operations.
 @item @emph{C/C++}:
 @multitable @columnfractions .20 .80
 @item @emph{Prototype}: @tab @code{acc_wait_all(void);}
+@item @emph{Prototype (OpenACC 1.0 compatibility)}: @tab @code{acc_async_wait_all(void);}
 @end multitable
 
 @item @emph{Fortran}:
 @multitable @columnfractions .20 .80
-@item @emph{Interface}: @tab @code{subroutine acc_wait_async()}
+@item @emph{Interface}: @tab @code{subroutine acc_wait_all()}
+@item @emph{Interface (OpenACC 1.0 compatibility)}: @tab @code{subroutine acc_async_wait_all()}
 @end multitable
 
 @item @emph{Reference}:
index b68c84d641bbb2e6a0bd2fe43a20c690f86766e6..1334f99b4108edcc72b1cb88b001e550b641690f 100644 (file)
@@ -70,6 +70,17 @@ acc_wait (int async)
   thr->dev->openacc.async_wait_func (async);
 }
 
+/* acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.  */
+#ifdef HAVE_ATTRIBUTE_ALIAS
+strong_alias (acc_wait, acc_async_wait)
+#else
+void
+acc_async_wait (int async)
+{
+  acc_wait (async);
+}
+#endif
+
 void
 acc_wait_async (int async1, int async2)
 {
@@ -92,6 +103,17 @@ acc_wait_all (void)
   thr->dev->openacc.async_wait_all_func ();
 }
 
+/* acc_async_wait_all is an OpenACC 1.0 compatibility name for acc_wait_all.  */
+#ifdef HAVE_ATTRIBUTE_ALIAS
+strong_alias (acc_wait_all, acc_async_wait_all)
+#else
+void
+acc_async_wait_all (void)
+{
+  acc_wait_all ();
+}
+#endif
+
 void
 acc_wait_all_async (int async)
 {
index a4422d4fb778ff337c6b7ebdb4ae1ed60b5980ef..0eb34fff734d714ef353cbe6430e723bbf64e884 100644 (file)
@@ -470,8 +470,10 @@ module openacc
 
   public :: acc_get_num_devices, acc_set_device_type, acc_get_device_type
   public :: acc_set_device_num, acc_get_device_num, acc_async_test
-  public :: acc_async_test_all, acc_wait, acc_wait_async, acc_wait_all
-  public :: acc_wait_all_async, acc_init, acc_shutdown, acc_on_device
+  public :: acc_async_test_all
+  public :: acc_wait, acc_async_wait, acc_wait_async
+  public :: acc_wait_all, acc_async_wait_all, acc_wait_all_async
+  public :: acc_init, acc_shutdown, acc_on_device
   public :: acc_copyin, acc_present_or_copyin, acc_pcopyin, acc_create
   public :: acc_present_or_create, acc_pcreate, acc_copyout, acc_delete
   public :: acc_update_device, acc_update_self, acc_is_present
@@ -510,6 +512,11 @@ module openacc
     procedure :: acc_wait_h
   end interface
 
+  ! acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
+  interface acc_async_wait
+    procedure :: acc_wait_h
+  end interface
+
   interface acc_wait_async
     procedure :: acc_wait_async_h
   end interface
@@ -518,6 +525,11 @@ module openacc
     procedure :: acc_wait_all_h
   end interface
 
+  ! acc_async_wait_all is an OpenACC 1.0 compatibility name for acc_wait_all.
+  interface acc_async_wait_all
+    procedure :: acc_wait_all_h
+  end interface
+
   interface acc_wait_all_async
     procedure :: acc_wait_all_async_h
   end interface
index ebccb1856d77877e21a56be1ed02a2c09a567bb2..137e2c1f7bef2bc8c6a18de1d20e5b785c0399f1 100644 (file)
@@ -75,8 +75,10 @@ int acc_get_device_num (acc_device_t) __GOACC_NOTHROW;
 int acc_async_test (int) __GOACC_NOTHROW;
 int acc_async_test_all (void) __GOACC_NOTHROW;
 void acc_wait (int) __GOACC_NOTHROW;
+void acc_async_wait (int) __GOACC_NOTHROW;
 void acc_wait_async (int, int) __GOACC_NOTHROW;
 void acc_wait_all (void) __GOACC_NOTHROW;
+void acc_async_wait_all (void) __GOACC_NOTHROW;
 void acc_wait_all_async (int) __GOACC_NOTHROW;
 void acc_init (acc_device_t) __GOACC_NOTHROW;
 void acc_shutdown (acc_device_t) __GOACC_NOTHROW;
index 7818bd7efad5bf92cdf0836da525a5ef4feb9b2d..289b5512bcc60978ff7c447de855d2b0703e52a1 100644 (file)
         end subroutine
       end interface
 
+!     acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
+      interface acc_async_wait
+        procedure :: acc_wait_h
+      end interface
+
       interface acc_wait_async
         subroutine acc_wait_async_h (a1, a2)
           integer a1, a2
         end subroutine
       end interface
 
+!     acc_async_wait_all is an OpenACC 1.0 compatibility name for
+!     acc_wait_all.
+      interface acc_async_wait_all
+        procedure :: acc_wait_all_h
+      end interface
+
       interface acc_wait_all_async
         subroutine acc_wait_all_async_h (a)
           integer a
index 911b76cc9bea22c77e844b3cf339fd439969081c..5ab52e97009386d03a568fb8d3c8408ec5b3b8fd 100644 (file)
@@ -1,10 +1,11 @@
+/* Test of reduction on parallel directive (with async).  */
+/* See also Fortran variants in "../libgomp.oacc-fortran/par-reduction-2*".  */
+
 /* { dg-additional-options "-w" } */
 
 #include <assert.h>
 #include <openacc.h>
 
-/* Test of reduction on parallel directive (with async).  */
-
 int
 main (int argc, char *argv[])
 {
@@ -25,7 +26,7 @@ main (int argc, char *argv[])
   }
   res = GANGS * 5;
 
-  acc_wait (1);
+  acc_async_wait (1);
 
   assert (res == res1);
   assert (res == res2);
@@ -49,7 +50,7 @@ main (int argc, char *argv[])
   for (int i = 0; i < GANGS; ++i)
     res *= 5;
 
-  acc_wait (1);
+  acc_async_wait_all ();
 
   assert (res == res1);
   assert (res == res2);
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f b/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-1.f
new file mode 100644 (file)
index 0000000..dcd6592
--- /dev/null
@@ -0,0 +1,57 @@
+!     Test of reduction on parallel directive (with async).
+!     Variant of "../libgomp.oacc-c-c++-common/par-reduction-2.c".
+!     Variant using "openacc_lib.h".
+
+!     { dg-do run }
+
+      PROGRAM MAIN
+      IMPLICIT NONE
+      INCLUDE "openacc_lib.h"
+
+      INTEGER RES, RES1, RES2
+
+      RES1 = 0
+      RES2 = 0
+
+!$ACC PARALLEL NUM_GANGS(256) NUM_WORKERS(32) VECTOR_LENGTH(32)
+!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1)
+      res1 = res1 + 5
+
+!$ACC ATOMIC
+      res2 = res2 + 5
+!$ACC END PARALLEL
+
+      IF (ACC_GET_DEVICE_TYPE () .EQ. ACC_DEVICE_HOST) THEN
+         RES = 1 * 5
+      ELSE
+         RES = 256 * 5
+      END IF
+
+      CALL ACC_ASYNC_WAIT (1)
+
+      IF (RES .NE. RES1) CALL ABORT
+      IF (RES .NE. RES2) CALL ABORT
+
+      RES1 = 1
+      RES2 = 1
+
+!$ACC PARALLEL NUM_GANGS(8) NUM_WORKERS(32) VECTOR_LENGTH(32)
+!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1)
+      res1 = res1 * 5
+
+!$ACC ATOMIC
+      res2 = res2 * 5
+!$ACC END PARALLEL
+
+      IF (ACC_GET_DEVICE_TYPE () .EQ. ACC_DEVICE_HOST) THEN
+         RES = 5 ** 1
+      ELSE
+         RES = 5 ** 8
+      END IF
+
+      CALL ACC_ASYNC_WAIT_ALL
+
+      IF (RES .NE. RES1) CALL ABORT
+      IF (RES .NE. RES2) CALL ABORT
+
+      END PROGRAM
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f b/libgomp/testsuite/libgomp.oacc-fortran/par-reduction-2-2.f
new file mode 100644 (file)
index 0000000..bf72002
--- /dev/null
@@ -0,0 +1,57 @@
+!     Test of reduction on parallel directive (with async).
+!     Variant of "../libgomp.oacc-c-c++-common/par-reduction-2.c".
+!     Variant using the "openacc" module.
+
+!     { dg-do run }
+
+      PROGRAM MAIN
+      USE OPENACC
+      IMPLICIT NONE
+
+      INTEGER RES, RES1, RES2
+
+      RES1 = 0
+      RES2 = 0
+
+!$ACC PARALLEL NUM_GANGS(256) NUM_WORKERS(32) VECTOR_LENGTH(32)
+!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1)
+      res1 = res1 + 5
+
+!$ACC ATOMIC
+      res2 = res2 + 5
+!$ACC END PARALLEL
+
+      IF (ACC_GET_DEVICE_TYPE () .EQ. ACC_DEVICE_HOST) THEN
+         RES = 1 * 5
+      ELSE
+         RES = 256 * 5
+      END IF
+
+      CALL ACC_ASYNC_WAIT (1)
+
+      IF (RES .NE. RES1) CALL ABORT
+      IF (RES .NE. RES2) CALL ABORT
+
+      RES1 = 1
+      RES2 = 1
+
+!$ACC PARALLEL NUM_GANGS(8) NUM_WORKERS(32) VECTOR_LENGTH(32)
+!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1)
+      res1 = res1 * 5
+
+!$ACC ATOMIC
+      res2 = res2 * 5
+!$ACC END PARALLEL
+
+      IF (ACC_GET_DEVICE_TYPE () .EQ. ACC_DEVICE_HOST) THEN
+         RES = 5 ** 1
+      ELSE
+         RES = 5 ** 8
+      END IF
+
+      CALL ACC_ASYNC_WAIT_ALL
+
+      IF (RES .NE. RES1) CALL ABORT
+      IF (RES .NE. RES2) CALL ABORT
+
+      END PROGRAM