]>
Commit | Line | Data |
---|---|---|
8d9254fc | 1 | /* Copyright (C) 2005-2020 Free Software Foundation, Inc. |
6103184e AM |
2 | Contributed by Richard Henderson <rth@redhat.com>. |
3 | ||
4 | This file is part of the GNU Offloading and Multi Processing Library | |
5 | (libgomp). | |
6 | ||
7 | Libgomp is free software; you can redistribute it and/or modify it | |
8 | under the terms of the GNU General Public License as published by | |
9 | the Free Software Foundation; either version 3, or (at your option) | |
10 | any later version. | |
11 | ||
12 | Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
14 | FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
15 | more details. | |
16 | ||
17 | Under Section 7 of GPL version 3, you are granted additional | |
18 | permissions described in the GCC Runtime Library Exception, version | |
19 | 3.1, as published by the Free Software Foundation. | |
20 | ||
21 | You should have received a copy of the GNU General Public License and | |
22 | a copy of the GCC Runtime Library Exception along with this program; | |
23 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
24 | <http://www.gnu.org/licenses/>. */ | |
25 | ||
630e3c3a AM |
26 | /* This file defines the OpenMP API entry points that operate on internal |
27 | control variables. */ | |
6103184e AM |
28 | |
29 | #include "libgomp.h" | |
30 | #include "gomp-constants.h" | |
31 | #include <limits.h> | |
32 | ||
6103184e AM |
33 | void |
34 | omp_set_num_threads (int n) | |
35 | { | |
36 | struct gomp_task_icv *icv = gomp_icv (true); | |
37 | icv->nthreads_var = (n > 0 ? n : 1); | |
38 | } | |
39 | ||
40 | void | |
41 | omp_set_dynamic (int val) | |
42 | { | |
43 | struct gomp_task_icv *icv = gomp_icv (true); | |
44 | icv->dyn_var = val; | |
45 | } | |
46 | ||
47 | int | |
48 | omp_get_dynamic (void) | |
49 | { | |
50 | struct gomp_task_icv *icv = gomp_icv (false); | |
51 | return icv->dyn_var; | |
52 | } | |
53 | ||
54 | void | |
55 | omp_set_nested (int val) | |
56 | { | |
57 | struct gomp_task_icv *icv = gomp_icv (true); | |
58 | icv->nest_var = val; | |
59 | } | |
60 | ||
61 | int | |
62 | omp_get_nested (void) | |
63 | { | |
64 | struct gomp_task_icv *icv = gomp_icv (false); | |
65 | return icv->nest_var; | |
66 | } | |
67 | ||
68 | void | |
69 | omp_set_schedule (omp_sched_t kind, int chunk_size) | |
70 | { | |
71 | struct gomp_task_icv *icv = gomp_icv (true); | |
28567c40 | 72 | switch (kind & ~omp_sched_monotonic) |
6103184e AM |
73 | { |
74 | case omp_sched_static: | |
75 | if (chunk_size < 1) | |
76 | chunk_size = 0; | |
77 | icv->run_sched_chunk_size = chunk_size; | |
78 | break; | |
79 | case omp_sched_dynamic: | |
80 | case omp_sched_guided: | |
81 | if (chunk_size < 1) | |
82 | chunk_size = 1; | |
83 | icv->run_sched_chunk_size = chunk_size; | |
84 | break; | |
85 | case omp_sched_auto: | |
86 | break; | |
87 | default: | |
88 | return; | |
89 | } | |
90 | icv->run_sched_var = kind; | |
91 | } | |
92 | ||
93 | void | |
94 | omp_get_schedule (omp_sched_t *kind, int *chunk_size) | |
95 | { | |
96 | struct gomp_task_icv *icv = gomp_icv (false); | |
97 | *kind = icv->run_sched_var; | |
98 | *chunk_size = icv->run_sched_chunk_size; | |
99 | } | |
100 | ||
101 | int | |
102 | omp_get_max_threads (void) | |
103 | { | |
104 | struct gomp_task_icv *icv = gomp_icv (false); | |
105 | return icv->nthreads_var; | |
106 | } | |
107 | ||
108 | int | |
109 | omp_get_thread_limit (void) | |
110 | { | |
111 | struct gomp_task_icv *icv = gomp_icv (false); | |
112 | return icv->thread_limit_var > INT_MAX ? INT_MAX : icv->thread_limit_var; | |
113 | } | |
114 | ||
115 | void | |
116 | omp_set_max_active_levels (int max_levels) | |
117 | { | |
118 | if (max_levels >= 0) | |
119 | gomp_max_active_levels_var = max_levels; | |
120 | } | |
121 | ||
122 | int | |
123 | omp_get_max_active_levels (void) | |
124 | { | |
125 | return gomp_max_active_levels_var; | |
126 | } | |
127 | ||
128 | int | |
129 | omp_get_cancellation (void) | |
130 | { | |
131 | return gomp_cancel_var; | |
132 | } | |
133 | ||
134 | int | |
135 | omp_get_max_task_priority (void) | |
136 | { | |
137 | return gomp_max_task_priority_var; | |
138 | } | |
139 | ||
140 | omp_proc_bind_t | |
141 | omp_get_proc_bind (void) | |
142 | { | |
143 | struct gomp_task_icv *icv = gomp_icv (false); | |
144 | return icv->bind_var; | |
145 | } | |
146 | ||
147 | int | |
148 | omp_get_initial_device (void) | |
149 | { | |
150 | return GOMP_DEVICE_HOST_FALLBACK; | |
151 | } | |
152 | ||
153 | int | |
154 | omp_get_num_places (void) | |
155 | { | |
156 | return gomp_places_list_len; | |
157 | } | |
158 | ||
159 | int | |
160 | omp_get_place_num (void) | |
161 | { | |
162 | if (gomp_places_list == NULL) | |
163 | return -1; | |
164 | ||
165 | struct gomp_thread *thr = gomp_thread (); | |
166 | if (thr->place == 0) | |
167 | gomp_init_affinity (); | |
168 | ||
169 | return (int) thr->place - 1; | |
170 | } | |
171 | ||
172 | int | |
173 | omp_get_partition_num_places (void) | |
174 | { | |
175 | if (gomp_places_list == NULL) | |
176 | return 0; | |
177 | ||
178 | struct gomp_thread *thr = gomp_thread (); | |
179 | if (thr->place == 0) | |
180 | gomp_init_affinity (); | |
181 | ||
182 | return thr->ts.place_partition_len; | |
183 | } | |
184 | ||
185 | void | |
186 | omp_get_partition_place_nums (int *place_nums) | |
187 | { | |
188 | if (gomp_places_list == NULL) | |
189 | return; | |
190 | ||
191 | struct gomp_thread *thr = gomp_thread (); | |
192 | if (thr->place == 0) | |
193 | gomp_init_affinity (); | |
194 | ||
195 | unsigned int i; | |
196 | for (i = 0; i < thr->ts.place_partition_len; i++) | |
197 | *place_nums++ = thr->ts.place_partition_off + i; | |
198 | } | |
199 | ||
200 | ialias (omp_set_dynamic) | |
201 | ialias (omp_set_nested) | |
202 | ialias (omp_set_num_threads) | |
203 | ialias (omp_get_dynamic) | |
204 | ialias (omp_get_nested) | |
205 | ialias (omp_set_schedule) | |
206 | ialias (omp_get_schedule) | |
207 | ialias (omp_get_max_threads) | |
208 | ialias (omp_get_thread_limit) | |
209 | ialias (omp_set_max_active_levels) | |
210 | ialias (omp_get_max_active_levels) | |
211 | ialias (omp_get_cancellation) | |
212 | ialias (omp_get_proc_bind) | |
213 | ialias (omp_get_initial_device) | |
214 | ialias (omp_get_max_task_priority) | |
215 | ialias (omp_get_num_places) | |
216 | ialias (omp_get_place_num) | |
217 | ialias (omp_get_partition_num_places) | |
218 | ialias (omp_get_partition_place_nums) |