LLVM OpenMP
22.0.0git
Toggle main menu visibility
Main Page
Related Pages
Topics
Namespaces
Namespace List
Namespace Members
All
a
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
Functions
c
d
e
f
g
i
m
n
o
p
r
s
t
u
Variables
Enumerations
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
~
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
Typedefs
Enumerations
Enumerator
Related Symbols
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
Typedefs
_
a
b
c
d
e
i
k
l
m
n
o
p
r
t
u
Enumerations
_
b
c
d
f
k
l
n
o
s
t
Enumerator
_
a
b
c
d
e
f
k
l
n
o
p
r
s
t
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
runtime
test
tasking
omp_task_red_taskloop.c
Go to the documentation of this file.
1
// RUN: %libomp-compile-and-run
2
3
// Parsing error until gcc8:
4
// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-8
5
6
// Parsing error until clang11:
7
// UNSUPPORTED: clang-10, clang-9, clang-8, clang-7
8
9
// No icc compiler support yet
10
// XFAIL: icc
11
12
#include <stdio.h>
13
#include <omp.h>
14
15
int
r
;
16
17
int
work
(
int
k,
int
l)
18
{
19
return
k + l + 1;
20
}
17
int
work
(
int
k,
int
l) {
…
}
21
void
bar
(
int
i
) {
22
#pragma omp taskgroup task_reduction(+:r)
23
{
int
th_gen = omp_get_thread_num();
24
#pragma omp task in_reduction(+:r) firstprivate(i, th_gen)
25
{
26
r
+=
work
(
i
, 0);
27
printf(
"executing task (%d, 0), th %d (gen by th %d)\n"
,
i
, omp_get_thread_num(), th_gen);
28
}
29
#pragma omp task in_reduction(+:r) firstprivate(i, th_gen)
30
{
31
r
+=
work
(
i
, 1);
32
printf(
"executing task (%d, 1), th %d (gen by th %d)\n"
,
i
, omp_get_thread_num(), th_gen);
33
}
34
}
35
}
21
void
bar
(
int
i
) {
…
}
36
int
foo
() {
37
int
i
;
38
int
th_gen = omp_get_thread_num();
39
#pragma omp taskgroup task_reduction(+:r)
40
{
41
bar
(0);
42
}
43
printf(
"th %d passed bar0\n"
, th_gen);
44
#pragma omp taskloop reduction(+:r) firstprivate(th_gen)
45
for
(
i
= 1;
i
< 4; ++
i
) {
46
bar
(
i
);
47
printf(
"th %d (gen by th %d) passed bar%d in taskloop\n"
, omp_get_thread_num(), th_gen,
i
);
48
#pragma omp task in_reduction(+:r)
49
r
+=
i
;
50
}
51
return
0;
52
}
36
int
foo
() {
…
}
53
// res = ((1+2)+(2+3)+(3+4)+(4+5)+1+2+3) = 30
54
#define res 30
55
int
main
()
56
{
57
r
= 0;
58
#pragma omp parallel num_threads(2)
59
{
// barrier ensures threads have started before tasks creation
60
#pragma omp barrier
61
// single ensures no race condition between taskgroup reductions
62
#pragma omp single nowait
63
foo
();
64
}
65
if
(
r
==
res
) {
66
return
0;
67
}
else
{
68
printf(
"error r = %d (!= %d)\n"
,
r
,
res
);
69
return
1;
70
}
71
}
55
int
main
() {
…
}
i
#define i
Definition
kmp_stub.cpp:87
foo
int foo()
Definition
omp_task_red_taskloop.c:36
bar
void bar(int i)
Definition
omp_task_red_taskloop.c:21
res
#define res
Definition
omp_task_red_taskloop.c:54
work
int work(int k, int l)
Definition
omp_task_red_taskloop.c:17
r
int r
Definition
omp_task_red_taskloop.c:15
main
int main()
Definition
omp_task_red_taskloop.c:55
Generated on
for LLVM OpenMP by
1.14.0