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() |
8 | { |
9 | int tids[NUM_TASKS]; |
10 | int i; |
11 | |
12 | #pragma omp parallel |
13 | { |
14 | #pragma omp single |
15 | { |
16 | for (i = 0; i < NUM_TASKS; i++) { |
17 | /* First we have to store the value of the loop index in a new variable |
18 | * which will be private for each task because otherwise it will be overwritten |
19 | * if the execution of the task takes longer than the time which is needed to |
20 | * enter the next step of the loop! |
21 | */ |
22 | int myi; |
23 | myi = i; |
24 | #pragma omp task |
25 | { |
26 | my_sleep (SLEEPTIME); |
27 | tids[myi] = omp_get_thread_num(); |
28 | } /* end of omp task */ |
29 | } /* end of for */ |
30 | } /* end of single */ |
31 | } /*end of parallel */ |
32 | |
33 | /* Now we ckeck if more than one thread executed the tasks. */ |
34 | for (i = 1; i < NUM_TASKS; i++) { |
35 | if (tids[0] != tids[i]) |
36 | return 1; |
37 | } |
38 | return 0; |
39 | } /* end of check_parallel_for_private */ |
40 | |
41 | int main() |
42 | { |
43 | int i; |
44 | int num_failed=0; |
45 | |
46 | if (omp_get_max_threads() < 2) |
47 | omp_set_num_threads(8); |
48 | |
49 | for(i = 0; i < REPETITIONS; i++) { |
50 | if(!test_omp_task()) { |
51 | num_failed++; |
52 | } |
53 | } |
54 | return num_failed; |
55 | } |
56 | |