]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[og9] Add 'ephemeral' parameter to GOMP_OFFLOAD_openacc_async_host2dev
authorJulian Brown <julian@codesourcery.com>
Thu, 19 Sep 2019 12:26:44 +0000 (05:26 -0700)
committerThomas Schwinge <thomas@codesourcery.com>
Tue, 3 Mar 2020 11:51:25 +0000 (12:51 +0100)
libgomp/
* plugin/plugin-nvptx.c (GOMP_OFFLOAD_openacc_async_host2dev):
Add EPHEMERAL parameter, and FIXME function comment.

(cherry picked from openacc-gcc-9-branch commit
3e8fcd5d0dafe0a83ce51c30d908de0318d13672)

libgomp/ChangeLog.omp
libgomp/plugin/plugin-nvptx.c

index 943a9e4a93339f7f0c0e74dac6c13bcf1685fe8b..7813760e64253472b166ad04dda5da740d7c36e2 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-19  Julian Brown  <julian@codesourcery.com>
+
+       * plugin/plugin-nvptx.c (GOMP_OFFLOAD_openacc_async_host2dev):
+       Add EPHEMERAL parameter, and FIXME function comment.
+
 2019-09-18  Tobias Burnus  <tobias@codesourcery.com>
 
        * testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Fix dg-warning
index 4beb3222e8f887992bbdb9493ec1a093f7b34365..452415e1879540d593aa62f69b2b96e678031fe0 100644 (file)
@@ -1868,9 +1868,20 @@ GOMP_OFFLOAD_dev2dev (int ord, void *dst, const void *src, size_t n)
   return true;
 }
 
+/* FIXME: It is unknown whether the cuMemcpyHtoDAsync API call caches source
+   data before the asynchronous copy takes place.  Either way there is a data
+   race associated with ignoring the EPHEMERAL parameter here -- either if it
+   is TRUE (because we are copying uncached data that may disappear before the
+   async copy takes place) or if it is FALSE (because the source data may be
+   cached/snapshotted here before it is modified by an earlier async operation,
+   so stale data gets copied to the target).
+   Neither problem has been observed in practice, so far.  */
+
 bool
 GOMP_OFFLOAD_openacc_async_host2dev (int ord, void *dst, const void *src,
-                                    size_t n, struct goacc_asyncqueue *aq)
+                                    size_t n,
+                                    bool ephemeral __attribute__((unused)),
+                                    struct goacc_asyncqueue *aq)
 {
   if (!nvptx_attach_host_thread_to_device (ord)
       || !cuda_memcpy_sanity_check (src, dst, n))