mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
Add 'libgomp.c++/target-std__[...]-concurrent-usm.C' test cases for C++ 'std::flat_map', 'std::flat_multimap', 'std::flat_multiset', 'std::flat_set'
libgomp/ * testsuite/libgomp.c++/target-std__flat_map-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__flat_multimap-concurrent-usm.C: Likewise. * testsuite/libgomp.c++/target-std__flat_multiset-concurrent-usm.C: Likewise. * testsuite/libgomp.c++/target-std__flat_set-concurrent-usm.C: Likewise. * testsuite/libgomp.c++/target-std__flat_map-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__flat_multimap-concurrent.C: Likewise. * testsuite/libgomp.c++/target-std__flat_multiset-concurrent.C: Likewise. * testsuite/libgomp.c++/target-std__flat_set-concurrent.C: Likewise.
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
// { dg-additional-options "-std=c++23" }
|
||||
|
||||
/* { dg-require-effective-target omp_usm } */
|
||||
#pragma omp requires unified_shared_memory self_maps
|
||||
#define OMP_USM
|
||||
#define MEM_SHARED
|
||||
|
||||
#include "target-std__flat_map-concurrent.C"
|
||||
@@ -39,7 +39,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
|
||||
{
|
||||
@@ -55,12 +57,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.~flat_map ();
|
||||
#endif
|
||||
|
||||
#ifndef MEM_SHARED
|
||||
#pragma omp target exit data map (release: _map)
|
||||
#endif
|
||||
|
||||
bool ok = validate (sum, keys, data);
|
||||
return ok ? 0 : 1;
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// { dg-additional-options "-std=c++23" }
|
||||
|
||||
/* { dg-require-effective-target omp_usm } */
|
||||
#pragma omp requires unified_shared_memory self_maps
|
||||
#define OMP_USM
|
||||
#define MEM_SHARED
|
||||
|
||||
#include "target-std__flat_multimap-concurrent.C"
|
||||
@@ -33,7 +33,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
|
||||
{
|
||||
@@ -54,12 +56,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.~flat_multimap ();
|
||||
#endif
|
||||
|
||||
#ifndef MEM_SHARED
|
||||
#pragma omp target exit data map (release: _map)
|
||||
#endif
|
||||
|
||||
bool ok = validate (sum, keys, data);
|
||||
return ok ? 0 : 1;
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// { dg-additional-options "-std=c++23" }
|
||||
|
||||
/* { dg-require-effective-target omp_usm } */
|
||||
#pragma omp requires unified_shared_memory self_maps
|
||||
#define OMP_USM
|
||||
#define MEM_SHARED
|
||||
|
||||
#include "target-std__flat_multiset-concurrent.C"
|
||||
@@ -34,7 +34,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
|
||||
{
|
||||
@@ -49,6 +51,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.~flat_multiset ();
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// { dg-additional-options "-std=c++23" }
|
||||
|
||||
/* { dg-require-effective-target omp_usm } */
|
||||
#pragma omp requires unified_shared_memory self_maps
|
||||
#define OMP_USM
|
||||
#define MEM_SHARED
|
||||
|
||||
#include "target-std__flat_set-concurrent.C"
|
||||
@@ -40,7 +40,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
|
||||
{
|
||||
@@ -56,6 +58,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.~flat_set ();
|
||||
|
||||
Reference in New Issue
Block a user