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()7int 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()41int 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