145
|
1 int foo (int, int, int *);
|
|
2 int bar (int, int, int *);
|
|
3 #pragma omp declare variant (foo) \
|
|
4 match (construct={parallel,for},\
|
|
5 device={isa(avx512f,avx512vl),kind(host,cpu)},\
|
|
6 implementation={vendor(score(0):gnu),unified_shared_memory},\
|
|
7 user={condition(score(0):0)})
|
|
8 #pragma omp declare variant (bar) \
|
|
9 match (device={arch(x86_64,powerpc64),isa(avx512f,popcntb)}, \
|
|
10 implementation={atomic_default_mem_order(seq_cst),made_up_selector("foo", 13, "bar")}, \
|
|
11 user={condition(3-3)})
|
|
12 int baz (int, int, int *);
|
|
13
|
|
14 int
|
|
15 qux (void)
|
|
16 {
|
|
17 int i = 3;
|
|
18 return baz (1, 2, &i);
|
|
19 }
|
|
20
|
|
21 int quux (int);
|
|
22
|
|
23 void
|
|
24 corge (void)
|
|
25 {
|
|
26 int i;
|
|
27 #pragma omp declare variant (quux) match (construct={parallel,for})
|
|
28 extern int waldo (int);
|
|
29 waldo (5);
|
|
30 #pragma omp parallel for
|
|
31 for (i = 0; i < 3; i++)
|
|
32 waldo (6);
|
|
33 #pragma omp parallel
|
|
34 #pragma omp taskgroup
|
|
35 #pragma omp for
|
|
36 for (i = 0; i < 3; i++)
|
|
37 waldo (7);
|
|
38 #pragma omp parallel
|
|
39 #pragma omp master
|
|
40 waldo (8);
|
|
41 }
|
|
42
|
|
43 #pragma omp declare variant (bar) match \
|
|
44 (implementation={atomic_default_mem_order(relaxed), \
|
|
45 unified_address, unified_shared_memory, \
|
|
46 dynamic_allocators, reverse_offload})
|
|
47 int baz2 (int x, int y, int *z)
|
|
48 {
|
|
49 return x + y + *z;
|
|
50 }
|
|
51
|
|
52 #pragma omp declare variant (bar) match \
|
|
53 (implementation={atomic_default_mem_order(score(3): acq_rel)})
|
|
54 int baz3 (int, int, int *);
|