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 
test_omp_task()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 
main()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