LLVM OpenMP
20.0.0git
runtime
test
tasking
omp_task_final.c
Go to the documentation of this file.
1
// RUN: %libomp-compile-and-run
2
#include <stdio.h>
3
#include <math.h>
4
#include "
omp_testsuite.h
"
5
#include "
omp_my_sleep.h
"
6
7
int
test_omp_task_final
()
8
{
9
int
tids[
NUM_TASKS
];
10
int
includedtids[
NUM_TASKS
];
11
int
i
;
12
int
error = 0;
13
#pragma omp parallel
14
{
15
#pragma omp single
16
{
17
for
(
i
= 0;
i
<
NUM_TASKS
;
i
++) {
18
/* First we have to store the value of the loop index in a new variable
19
* which will be private for each task because otherwise it will be overwritten
20
* if the execution of the task takes longer than the time which is needed to
21
* enter the next step of the loop!
22
*/
23
int
myi;
24
myi =
i
;
25
26
#pragma omp task final(i>=10)
27
{
28
tids[myi] = omp_get_thread_num();
29
/* we generate included tasks for final tasks */
30
if
(myi >= 10) {
31
int
included = myi;
32
#pragma omp task
33
{
34
my_sleep
(
SLEEPTIME
);
35
includedtids[included] = omp_get_thread_num();
36
}
/* end of omp included task of the final task */
37
my_sleep
(
SLEEPTIME
);
38
}
/* end of if it is a final task*/
39
}
/* end of omp task */
40
}
/* end of for */
41
}
/* end of single */
42
}
/*end of parallel */
43
44
/* Now we ckeck if more than one thread executed the final task and its included task. */
45
for
(
i
= 10;
i
<
NUM_TASKS
;
i
++) {
46
if
(tids[
i
] != includedtids[
i
]) {
47
error++;
48
}
49
}
50
return
(error==0);
51
}
/* end of check_paralel_for_private */
52
53
int
main
()
54
{
55
int
i
;
56
int
num_failed=0;
57
58
for
(
i
= 0;
i
<
REPETITIONS
;
i
++) {
59
if
(!
test_omp_task_final
()) {
60
num_failed++;
61
}
62
}
63
return
num_failed;
64
}
65
i
#define i
Definition:
kmp_stub.cpp:87
omp_my_sleep.h
my_sleep
static void my_sleep(double sleeptime)
Utility function to have a sleep function with better resolution and which only stops one thread.
Definition:
omp_my_sleep.h:24
test_omp_task_final
int test_omp_task_final()
Definition:
omp_task_final.c:7
main
int main()
Definition:
omp_task_final.c:53
omp_testsuite.h
SLEEPTIME
#define SLEEPTIME
Definition:
omp_testsuite.h:16
NUM_TASKS
#define NUM_TASKS
Definition:
omp_testsuite.h:20
REPETITIONS
#define REPETITIONS
Definition:
omp_testsuite.h:13
Generated on Wed Jan 29 2025 20:58:02 for LLVM OpenMP by
1.9.6