LLVM OpenMP 20.0.0git
omp_task.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
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 {
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)
48
49 for(i = 0; i < REPETITIONS; i++) {
50 if(!test_omp_task()) {
51 num_failed++;
52 }
53 }
54 return num_failed;
55}
#define i
Definition: kmp_stub.cpp:87
#define omp_set_num_threads
Definition: kmp_stub.cpp:34
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
int test_omp_task()
Definition: omp_task.c:7
int main()
Definition: omp_task.c:41
#define SLEEPTIME
Definition: omp_testsuite.h:16
#define NUM_TASKS
Definition: omp_testsuite.h:20
#define REPETITIONS
Definition: omp_testsuite.h:13
int omp_get_max_threads()