56 lines · c
1// RUN: %libomp-compile-and-run2#include <stdio.h>3#include <math.h>4#include "omp_testsuite.h"5#include "omp_my_sleep.h"6 7int test_omp_task()8{9 int tids[NUM_TASKS];10 int i;11 12 #pragma omp parallel13 {14 #pragma omp single15 {16 for (i = 0; i < NUM_TASKS; i++) {17 /* First we have to store the value of the loop index in a new variable18 * which will be private for each task because otherwise it will be overwritten19 * if the execution of the task takes longer than the time which is needed to20 * enter the next step of the loop!21 */22 int myi;23 myi = i;24 #pragma omp task25 {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 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