]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Tweak error return value for acc_set_cuda_stream.
authorJulian Brown <julian@codesourcery.com>
Tue, 12 Feb 2019 14:36:03 +0000 (06:36 -0800)
committerThomas Schwinge <thomas@codesourcery.com>
Tue, 3 Mar 2020 11:13:10 +0000 (12:13 +0100)
The return value of acc_set_cuda_stream is unspecified in OpenACC 2.6.
The testsuite changes might be unnecessary with the current async code.

libgomp/
* oacc-cuda.c (acc_set_cuda_stream): Return 0 on error/invalid
arguments.
* testsuite/libgomp.oacc-c-c++-common/lib-84.c: Handle unnumbered
async stream being an alias for a numbered async stream.
* testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.

(cherry picked from openacc-gcc-9-branch commit
6b0f72aad2030b3efa651652d75ad3d3cc9a76f6)

libgomp/ChangeLog.omp
libgomp/oacc-cuda.c
libgomp/testsuite/libgomp.oacc-c-c++-common/lib-84.c
libgomp/testsuite/libgomp.oacc-c-c++-common/lib-85.c

index f5c8a47a9c55a9836ae99aa9edfda00f3a3f138a..2da291cca004d40def00bfea376944ed06ccb8fd 100644 (file)
@@ -1,3 +1,11 @@
+2019-02-12  Julian Brown <julian@codesourcery.com>
+
+       * oacc-cuda.c (acc_set_cuda_stream): Return 0 on error/invalid
+       arguments.
+       * testsuite/libgomp.oacc-c-c++-common/lib-84.c: Handle unnumbered
+       async stream being an alias for a numbered async stream.
+       * testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.
+
 2018-10-02  Thomas Schwinge  <thomas@codesourcery.com>
            Cesar Philippidis  <cesar@codesourcery.com>
 
index 1a6946c5ddabc208a9fd7be78cc98632c77a634a..1ca714975f23869295e1a062400ed2b4074e67ba 100644 (file)
@@ -72,6 +72,9 @@ acc_get_cuda_stream (int async)
   return NULL;
 }
 
+/* As of OpenACC 2.6, the return code of this function appears to be
+   unspecified.  We choose to return 1 for success, or 0 for failure.  */
+
 int
 acc_set_cuda_stream (int async, void *stream)
 {
@@ -84,7 +87,7 @@ acc_set_cuda_stream (int async, void *stream)
 
   thr = goacc_thread ();
 
-  int ret = -1;
+  int ret = 0;
   if (thr && thr->dev && thr->dev->openacc.cuda.set_stream_func)
     {
       goacc_aq aq = get_goacc_asyncqueue (async);
index d793c743630044bcdcfbbcdbbbb9e670ff724e4f..e2d86dee61c8fe9d11267ca26d80fe046badd7db 100644 (file)
@@ -38,6 +38,12 @@ main (int argc, char **argv)
       if (streams[i] != NULL)
        abort ();
 
+      /* The no-value async may be an alias for a numbered async stream.
+        Skip over setting it below else the above NULL check will fail for
+        the aliased stream.  */
+      if (i == acc_async_noval)
+       continue;
+
       r = cuStreamCreate (&streams[i], CU_STREAM_DEFAULT);
       if (r != CUDA_SUCCESS)
        {
index 141c83b53dd69578823792c4f3a20f47772ee9b0..22982415d459b6140b2513db408bf31baa5b9e01 100644 (file)
@@ -38,6 +38,12 @@ main (int argc, char **argv)
       if (streams[i] != NULL)
        abort ();
 
+      /* The no-value async may be an alias for a numbered async stream.
+         Skip over setting it below else the above NULL check will fail for
+         the aliased stream.  */
+      if (i == acc_async_noval)
+       continue;
+
       r = cuStreamCreate (&streams[i], CU_STREAM_DEFAULT);
       if (r != CUDA_SUCCESS)
        {