Add 'libgomp.c++/target-std__[...]-concurrent-usm.C' test cases for C++ 'std::unordered_map', 'std::unordered_multimap', 'std::unordered_multiset', 'std::unordered_set'

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.
This commit is contained in:
Thomas Schwinge
2025-05-30 11:37:46 +02:00
parent 4b60a4da49
commit b4eb45a15d
8 changed files with 68 additions and 0 deletions

View File

@@ -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"

View 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;

View File

@@ -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"

View 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;

View File

@@ -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"

View 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 ();

View File

@@ -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"

View 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 ();