0
|
1 #include <stdlib.h>
|
|
2 #include <omp.h>
|
|
3
|
|
4 int
|
|
5 main (void)
|
|
6 {
|
|
7 double d, e;
|
|
8 int l;
|
|
9 omp_lock_t lck;
|
|
10 omp_nest_lock_t nlck;
|
|
11
|
|
12 d = omp_get_wtime ();
|
|
13
|
|
14 omp_init_lock (&lck);
|
|
15 omp_set_lock (&lck);
|
|
16 if (omp_test_lock (&lck))
|
|
17 abort ();
|
|
18 omp_unset_lock (&lck);
|
|
19 if (! omp_test_lock (&lck))
|
|
20 abort ();
|
|
21 if (omp_test_lock (&lck))
|
|
22 abort ();
|
|
23 omp_unset_lock (&lck);
|
|
24 omp_destroy_lock (&lck);
|
|
25
|
|
26 omp_init_nest_lock (&nlck);
|
|
27 if (omp_test_nest_lock (&nlck) != 1)
|
|
28 abort ();
|
|
29 omp_set_nest_lock (&nlck);
|
|
30 if (omp_test_nest_lock (&nlck) != 3)
|
|
31 abort ();
|
|
32 omp_unset_nest_lock (&nlck);
|
|
33 omp_unset_nest_lock (&nlck);
|
|
34 if (omp_test_nest_lock (&nlck) != 2)
|
|
35 abort ();
|
|
36 omp_unset_nest_lock (&nlck);
|
|
37 omp_unset_nest_lock (&nlck);
|
|
38 omp_destroy_nest_lock (&nlck);
|
|
39
|
|
40 omp_set_dynamic (1);
|
|
41 if (! omp_get_dynamic ())
|
|
42 abort ();
|
|
43 omp_set_dynamic (0);
|
|
44 if (omp_get_dynamic ())
|
|
45 abort ();
|
|
46
|
|
47 omp_set_nested (1);
|
|
48 if (! omp_get_nested ())
|
|
49 abort ();
|
|
50 omp_set_nested (0);
|
|
51 if (omp_get_nested ())
|
|
52 abort ();
|
|
53
|
|
54 omp_set_num_threads (5);
|
|
55 if (omp_get_num_threads () != 1)
|
|
56 abort ();
|
|
57 if (omp_get_max_threads () != 5)
|
|
58 abort ();
|
|
59 if (omp_get_thread_num () != 0)
|
|
60 abort ();
|
|
61 omp_set_num_threads (3);
|
|
62 if (omp_get_num_threads () != 1)
|
|
63 abort ();
|
|
64 if (omp_get_max_threads () != 3)
|
|
65 abort ();
|
|
66 if (omp_get_thread_num () != 0)
|
|
67 abort ();
|
|
68 l = 0;
|
|
69 #pragma omp parallel reduction (|:l)
|
|
70 {
|
|
71 l = omp_get_num_threads () != 3;
|
|
72 l |= omp_get_thread_num () < 0;
|
|
73 l |= omp_get_thread_num () >= 3;
|
|
74 #pragma omp master
|
|
75 l |= omp_get_thread_num () != 0;
|
|
76 }
|
|
77 if (l)
|
|
78 abort ();
|
|
79
|
|
80 if (omp_get_num_procs () <= 0)
|
|
81 abort ();
|
|
82 if (omp_in_parallel ())
|
|
83 abort ();
|
|
84 #pragma omp parallel reduction (|:l)
|
|
85 l = ! omp_in_parallel ();
|
|
86 #pragma omp parallel reduction (|:l) if (1)
|
|
87 l = ! omp_in_parallel ();
|
111
|
88 if (l)
|
|
89 abort ();
|
0
|
90
|
|
91 e = omp_get_wtime ();
|
|
92 if (d > e)
|
|
93 abort ();
|
|
94 d = omp_get_wtick ();
|
|
95 /* Negative precision is definitely wrong,
|
|
96 bigger than 1s clock resolution is also strange. */
|
|
97 if (d <= 0 || d > 1)
|
|
98 abort ();
|
|
99
|
|
100 return 0;
|
|
101 }
|