]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add 'libgomp.c++/target-std__[...]-concurrent-usm.C' test cases for C++ 'std::unorder...
authorThomas Schwinge <tschwinge@baylibre.com>
Fri, 30 May 2025 09:37:46 +0000 (11:37 +0200)
committerThomas Schwinge <tschwinge@baylibre.com>
Wed, 14 Jan 2026 15:00:56 +0000 (16:00 +0100)
libgomp/
* testsuite/libgomp.c++/target-std__unordered_map-concurrent-usm.C:
New.
* testsuite/libgomp.c++/target-std__unordered_multimap-concurrent-usm.C:
Likewise.
* testsuite/libgomp.c++/target-std__unordered_multiset-concurrent-usm.C:
Likewise.
* testsuite/libgomp.c++/target-std__unordered_set-concurrent-usm.C:
Likewise.
* testsuite/libgomp.c++/target-std__unordered_map-concurrent.C:
Adjust.
* testsuite/libgomp.c++/target-std__unordered_multimap-concurrent.C:
Likewise.
* testsuite/libgomp.c++/target-std__unordered_multiset-concurrent.C:
Likewise.
* testsuite/libgomp.c++/target-std__unordered_set-concurrent.C:
Likewise.

libgomp/testsuite/libgomp.c++/target-std__unordered_map-concurrent-usm.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/target-std__unordered_map-concurrent.C
libgomp/testsuite/libgomp.c++/target-std__unordered_multimap-concurrent-usm.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/target-std__unordered_multimap-concurrent.C
libgomp/testsuite/libgomp.c++/target-std__unordered_multiset-concurrent-usm.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/target-std__unordered_multiset-concurrent.C
libgomp/testsuite/libgomp.c++/target-std__unordered_set-concurrent-usm.C [new file with mode: 0644]
libgomp/testsuite/libgomp.c++/target-std__unordered_set-concurrent.C

diff --git a/libgomp/testsuite/libgomp.c++/target-std__unordered_map-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__unordered_map-concurrent-usm.C
new file mode 100644 (file)
index 0000000..0823724
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-require-effective-target omp_usm } */
+#pragma omp requires unified_shared_memory self_maps
+#define OMP_USM
+#define MEM_SHARED
+
+#include "target-std__unordered_map-concurrent.C"
index 3b259c4a1415ddb3fda984a973cd6b9c9041a81f..2643f2662ca3db22cc8296af2974847f236e20ae 100644 (file)
@@ -38,7 +38,9 @@ int main (void)
   init (keys, true);
   init (data, false);
 
+#ifndef MEM_SHARED
   #pragma omp target enter data map (to: keys[ :N], data[ :N]) map (alloc: _map)
+#endif
 
   #pragma omp target
     {
@@ -54,12 +56,22 @@ int main (void)
     for (int i = 0; i < N; ++i)
       sum += (long long) keys[i] * _map[keys[i]];
 
+#ifdef OMP_USM
+  #pragma omp target
+    /* Restore the object into pristine state.  In particular, deallocate
+       any memory allocated during device execution, which otherwise, back
+       on the host, we'd SIGSEGV on, when attempting to deallocate during
+       destruction of the object.  */
+    __typeof__ (_map){}.swap (_map);
+#endif
 #ifndef MEM_SHARED
   #pragma omp target
     _map.~unordered_map ();
 #endif
 
+#ifndef MEM_SHARED
   #pragma omp target exit data map (release: _map)
+#endif
 
   bool ok = validate (sum, keys, data);
   return ok ? 0 : 1;
diff --git a/libgomp/testsuite/libgomp.c++/target-std__unordered_multimap-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__unordered_multimap-concurrent-usm.C
new file mode 100644 (file)
index 0000000..72a247b
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-require-effective-target omp_usm } */
+#pragma omp requires unified_shared_memory self_maps
+#define OMP_USM
+#define MEM_SHARED
+
+#include "target-std__unordered_multimap-concurrent.C"
index d36d95d4944064cffcebc105f6d7b31a66cc54e5..4edce7e7d881bd74698d0f560b710a859c70120d 100644 (file)
@@ -32,7 +32,9 @@ int main (void)
   init (keys, KEY_MAX);
   init (data, RAND_MAX);
 
+#ifndef MEM_SHARED
   #pragma omp target enter data map (to: keys[ :N], data[ :N]) map (alloc: _map)
+#endif
 
   #pragma omp target
     {
@@ -53,12 +55,22 @@ int main (void)
        }
       }
 
+#ifdef OMP_USM
+  #pragma omp target
+    /* Restore the object into pristine state.  In particular, deallocate
+       any memory allocated during device execution, which otherwise, back
+       on the host, we'd SIGSEGV on, when attempting to deallocate during
+       destruction of the object.  */
+    __typeof__ (_map){}.swap (_map);
+#endif
 #ifndef MEM_SHARED
   #pragma omp target
     _map.~unordered_multimap ();
 #endif
 
+#ifndef MEM_SHARED
   #pragma omp target exit data map (release: _map)
+#endif
 
   bool ok = validate (sum, keys, data);
   return ok ? 0 : 1;
diff --git a/libgomp/testsuite/libgomp.c++/target-std__unordered_multiset-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__unordered_multiset-concurrent-usm.C
new file mode 100644 (file)
index 0000000..a9b733e
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-require-effective-target omp_usm } */
+#pragma omp requires unified_shared_memory self_maps
+#define OMP_USM
+#define MEM_SHARED
+
+#include "target-std__unordered_multiset-concurrent.C"
index 3a3df2203fde1e831ef10d62a294e2dbe1059e5b..e461408fdbcd55125cf5a9f3e84b69d8ecbf94db 100644 (file)
@@ -33,7 +33,9 @@ int main (void)
   srand (time (NULL));
   init (data);
 
+#ifndef MEM_SHARED
   #pragma omp target data map (to: data[ :N]) map (alloc: set)
+#endif
     {
       #pragma omp target
        {
@@ -48,6 +50,14 @@ int main (void)
        for (int i = 0; i < MAX; ++i)
          sum += i * set.count (i);
 
+#ifdef OMP_USM
+      #pragma omp target
+       /* Restore the object into pristine state.  In particular, deallocate
+          any memory allocated during device execution, which otherwise, back
+          on the host, we'd SIGSEGV on, when attempting to deallocate during
+          destruction of the object.  */
+       __typeof__ (set){}.swap (set);
+#endif
 #ifndef MEM_SHARED
       #pragma omp target
        set.~unordered_multiset ();
diff --git a/libgomp/testsuite/libgomp.c++/target-std__unordered_set-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__unordered_set-concurrent-usm.C
new file mode 100644 (file)
index 0000000..093f235
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-require-effective-target omp_usm } */
+#pragma omp requires unified_shared_memory self_maps
+#define OMP_USM
+#define MEM_SHARED
+
+#include "target-std__unordered_set-concurrent.C"
index ca38d33a0504f39e708aedf6703220c6d895d2ad..b672b9638412237a95acb8c6596f1f0b6135963e 100644 (file)
@@ -39,7 +39,9 @@ int main (void)
   srand (time (NULL));
   init (data);
 
+#ifndef MEM_SHARED
   #pragma omp target data map (to: data[ :N]) map (alloc: _set)
+#endif
     {
       #pragma omp target
        {
@@ -55,6 +57,14 @@ int main (void)
          if (_set.count (i) > 0)
            sum += i;
 
+#ifdef OMP_USM
+      #pragma omp target
+       /* Restore the object into pristine state.  In particular, deallocate
+          any memory allocated during device execution, which otherwise, back
+          on the host, we'd SIGSEGV on, when attempting to deallocate during
+          destruction of the object.  */
+       __typeof__ (_set){}.swap (_set);
+#endif
 #ifndef MEM_SHARED
       #pragma omp target
        _set.~unordered_set ();