1! include/45/omp_lib.f90.var
2
3!
4!//===----------------------------------------------------------------------===//
5!//
6!//                     The LLVM Compiler Infrastructure
7!//
8!// This file is dual licensed under the MIT and the University of Illinois Open
9!// Source Licenses. See LICENSE.txt for details.
10!//
11!//===----------------------------------------------------------------------===//
12!
13
14      module omp_lib_kinds
15
16        use, intrinsic :: iso_c_binding
17
18        integer, parameter :: omp_integer_kind       = c_int
19        integer, parameter :: omp_logical_kind       = 4
20        integer, parameter :: omp_real_kind          = c_float
21        integer, parameter :: kmp_double_kind        = c_double
22        integer, parameter :: omp_lock_kind          = c_intptr_t
23        integer, parameter :: omp_nest_lock_kind     = c_intptr_t
24        integer, parameter :: omp_sched_kind         = omp_integer_kind
25        integer, parameter :: omp_proc_bind_kind     = omp_integer_kind
26        integer, parameter :: kmp_pointer_kind       = c_intptr_t
27        integer, parameter :: kmp_size_t_kind        = c_size_t
28        integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
29        integer, parameter :: kmp_cancel_kind        = omp_integer_kind
30        integer, parameter :: omp_lock_hint_kind     = omp_integer_kind
31
32      end module omp_lib_kinds
33
34      module omp_lib
35
36        use omp_lib_kinds
37
38        integer (kind=omp_integer_kind), parameter :: openmp_version    = @LIBOMP_OMP_YEAR_MONTH@
39        integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
40        integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
41        integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
42        character(*)               kmp_build_date
43        parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
44
45        integer(kind=omp_sched_kind), parameter :: omp_sched_static  = 1
46        integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
47        integer(kind=omp_sched_kind), parameter :: omp_sched_guided  = 3
48        integer(kind=omp_sched_kind), parameter :: omp_sched_auto    = 4
49
50
51        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
52        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
53        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
54        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
55        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
56
57        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
58        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
59        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
60        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
61
62        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none           = 0
63        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended    = 1
64        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended      = 2
65        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = 4
66        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative    = 8
67        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle            = 65536
68        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm            = 131072
69        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive       = 262144
70
71        interface
72
73!         ***
74!         *** omp_* entry points
75!         ***
76
77          subroutine omp_set_num_threads(num_threads) bind(c)
78            use omp_lib_kinds
79            integer (kind=omp_integer_kind), value :: num_threads
80          end subroutine omp_set_num_threads
81
82          subroutine omp_set_dynamic(dynamic_threads) bind(c)
83            use omp_lib_kinds
84            logical (kind=omp_logical_kind), value :: dynamic_threads
85          end subroutine omp_set_dynamic
86
87          subroutine omp_set_nested(nested) bind(c)
88            use omp_lib_kinds
89            logical (kind=omp_logical_kind), value :: nested
90          end subroutine omp_set_nested
91
92          function omp_get_num_threads() bind(c)
93            use omp_lib_kinds
94            integer (kind=omp_integer_kind) omp_get_num_threads
95          end function omp_get_num_threads
96
97          function omp_get_max_threads() bind(c)
98            use omp_lib_kinds
99            integer (kind=omp_integer_kind) omp_get_max_threads
100          end function omp_get_max_threads
101
102          function omp_get_thread_num() bind(c)
103            use omp_lib_kinds
104            integer (kind=omp_integer_kind) omp_get_thread_num
105          end function omp_get_thread_num
106
107          function omp_get_num_procs() bind(c)
108            use omp_lib_kinds
109            integer (kind=omp_integer_kind) omp_get_num_procs
110          end function omp_get_num_procs
111
112          function omp_in_parallel() bind(c)
113            use omp_lib_kinds
114            logical (kind=omp_logical_kind) omp_in_parallel
115          end function omp_in_parallel
116
117          function omp_in_final() bind(c)
118            use omp_lib_kinds
119            logical (kind=omp_logical_kind) omp_in_final
120          end function omp_in_final
121
122          function omp_get_dynamic() bind(c)
123            use omp_lib_kinds
124            logical (kind=omp_logical_kind) omp_get_dynamic
125          end function omp_get_dynamic
126
127          function omp_get_nested() bind(c)
128            use omp_lib_kinds
129            logical (kind=omp_logical_kind) omp_get_nested
130          end function omp_get_nested
131
132          function omp_get_thread_limit() bind(c)
133            use omp_lib_kinds
134            integer (kind=omp_integer_kind) omp_get_thread_limit
135          end function omp_get_thread_limit
136
137          subroutine omp_set_max_active_levels(max_levels) bind(c)
138            use omp_lib_kinds
139            integer (kind=omp_integer_kind), value :: max_levels
140          end subroutine omp_set_max_active_levels
141
142          function omp_get_max_active_levels() bind(c)
143            use omp_lib_kinds
144            integer (kind=omp_integer_kind) omp_get_max_active_levels
145          end function omp_get_max_active_levels
146
147          function omp_get_level() bind(c)
148            use omp_lib_kinds
149            integer (kind=omp_integer_kind) omp_get_level
150          end function omp_get_level
151
152          function omp_get_active_level() bind(c)
153            use omp_lib_kinds
154            integer (kind=omp_integer_kind) omp_get_active_level
155          end function omp_get_active_level
156
157          function omp_get_ancestor_thread_num(level) bind(c)
158            use omp_lib_kinds
159            integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
160            integer (kind=omp_integer_kind), value :: level
161          end function omp_get_ancestor_thread_num
162
163          function omp_get_team_size(level) bind(c)
164            use omp_lib_kinds
165            integer (kind=omp_integer_kind) omp_get_team_size
166            integer (kind=omp_integer_kind), value :: level
167          end function omp_get_team_size
168
169          subroutine omp_set_schedule(kind, chunk_size) bind(c)
170            use omp_lib_kinds
171            integer (kind=omp_sched_kind), value :: kind
172            integer (kind=omp_integer_kind), value :: chunk_size
173          end subroutine omp_set_schedule
174
175          subroutine omp_get_schedule(kind, chunk_size) bind(c)
176            use omp_lib_kinds
177            integer (kind=omp_sched_kind) kind
178            integer (kind=omp_integer_kind) chunk_size
179          end subroutine omp_get_schedule
180
181          function omp_get_proc_bind() bind(c)
182            use omp_lib_kinds
183            integer (kind=omp_proc_bind_kind) omp_get_proc_bind
184          end function omp_get_proc_bind
185
186          function omp_get_num_places() bind(c)
187            use omp_lib_kinds
188            integer (kind=omp_integer_kind) omp_get_num_places
189          end function omp_get_num_places
190
191          function omp_get_place_num_procs(place_num) bind(c)
192            use omp_lib_kinds
193            integer (kind=omp_integer_kind), value :: place_num
194            integer (kind=omp_integer_kind) omp_get_place_num_procs
195          end function omp_get_place_num_procs
196
197          subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
198            use omp_lib_kinds
199            integer (kind=omp_integer_kind), value :: place_num
200            integer (kind=omp_integer_kind) ids(*)
201          end subroutine omp_get_place_proc_ids
202
203          function omp_get_place_num() bind(c)
204            use omp_lib_kinds
205            integer (kind=omp_integer_kind) omp_get_place_num
206          end function omp_get_place_num
207
208          function omp_get_partition_num_places() bind(c)
209            use omp_lib_kinds
210            integer (kind=omp_integer_kind) omp_get_partition_num_places
211          end function omp_get_partition_num_places
212
213          subroutine omp_get_partition_place_nums(place_nums) bind(c)
214            use omp_lib_kinds
215            integer (kind=omp_integer_kind) place_nums(*)
216          end subroutine omp_get_partition_place_nums
217
218          function omp_get_wtime() bind(c)
219            use omp_lib_kinds
220            real (kind=kmp_double_kind) omp_get_wtime
221          end function omp_get_wtime
222
223          function omp_get_wtick() bind(c)
224            use omp_lib_kinds
225            real (kind=kmp_double_kind) omp_get_wtick
226          end function omp_get_wtick
227
228          function omp_get_default_device() bind(c)
229            use omp_lib_kinds
230            integer (kind=omp_integer_kind) omp_get_default_device
231          end function omp_get_default_device
232
233          subroutine omp_set_default_device(device_num) bind(c)
234            use omp_lib_kinds
235            integer (kind=omp_integer_kind), value :: device_num
236          end subroutine omp_set_default_device
237
238          function omp_get_num_devices() bind(c)
239            use omp_lib_kinds
240            integer (kind=omp_integer_kind) omp_get_num_devices
241          end function omp_get_num_devices
242
243          function omp_get_num_teams() bind(c)
244            use omp_lib_kinds
245            integer (kind=omp_integer_kind) omp_get_num_teams
246          end function omp_get_num_teams
247
248          function omp_get_team_num() bind(c)
249            use omp_lib_kinds
250            integer (kind=omp_integer_kind) omp_get_team_num
251          end function omp_get_team_num
252
253          function omp_get_cancellation() bind(c)
254            use omp_lib_kinds
255            integer (kind=omp_integer_kind) omp_get_cancellation
256          end function omp_get_cancellation
257
258          function omp_is_initial_device() bind(c)
259            use omp_lib_kinds
260            logical (kind=omp_logical_kind) omp_is_initial_device
261          end function omp_is_initial_device
262
263          function omp_get_initial_device() bind(c)
264            use omp_lib_kinds
265            integer (kind=omp_integer_kind) omp_get_initial_device
266          end function omp_get_initial_device
267
268          subroutine omp_init_lock(svar) bind(c)
269!DIR$ IF(__INTEL_COMPILER.GE.1400)
270!DIR$ attributes known_intrinsic :: omp_init_lock
271!DIR$ ENDIF
272            use omp_lib_kinds
273            integer (kind=omp_lock_kind) svar
274          end subroutine omp_init_lock
275
276          subroutine omp_destroy_lock(svar) bind(c)
277!DIR$ IF(__INTEL_COMPILER.GE.1400)
278!DIR$ attributes known_intrinsic :: omp_destroy_lock
279!DIR$ ENDIF
280            use omp_lib_kinds
281            integer (kind=omp_lock_kind) svar
282          end subroutine omp_destroy_lock
283
284          subroutine omp_set_lock(svar) bind(c)
285!DIR$ IF(__INTEL_COMPILER.GE.1400)
286!DIR$ attributes known_intrinsic :: omp_set_lock
287!DIR$ ENDIF
288            use omp_lib_kinds
289            integer (kind=omp_lock_kind) svar
290          end subroutine omp_set_lock
291
292          subroutine omp_unset_lock(svar) bind(c)
293!DIR$ IF(__INTEL_COMPILER.GE.1400)
294!DIR$ attributes known_intrinsic :: omp_unset_lock
295!DIR$ ENDIF
296            use omp_lib_kinds
297            integer (kind=omp_lock_kind) svar
298          end subroutine omp_unset_lock
299
300          function omp_test_lock(svar) bind(c)
301!DIR$ IF(__INTEL_COMPILER.GE.1400)
302!DIR$ attributes known_intrinsic :: omp_test_lock
303!DIR$ ENDIF
304            use omp_lib_kinds
305            logical (kind=omp_logical_kind) omp_test_lock
306            integer (kind=omp_lock_kind) svar
307          end function omp_test_lock
308
309          subroutine omp_init_nest_lock(nvar) bind(c)
310!DIR$ IF(__INTEL_COMPILER.GE.1400)
311!DIR$ attributes known_intrinsic :: omp_init_nest_lock
312!DIR$ ENDIF
313            use omp_lib_kinds
314            integer (kind=omp_nest_lock_kind) nvar
315          end subroutine omp_init_nest_lock
316
317          subroutine omp_destroy_nest_lock(nvar) bind(c)
318!DIR$ IF(__INTEL_COMPILER.GE.1400)
319!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
320!DIR$ ENDIF
321            use omp_lib_kinds
322            integer (kind=omp_nest_lock_kind) nvar
323          end subroutine omp_destroy_nest_lock
324
325          subroutine omp_set_nest_lock(nvar) bind(c)
326!DIR$ IF(__INTEL_COMPILER.GE.1400)
327!DIR$ attributes known_intrinsic :: omp_set_nest_lock
328!DIR$ ENDIF
329            use omp_lib_kinds
330            integer (kind=omp_nest_lock_kind) nvar
331          end subroutine omp_set_nest_lock
332
333          subroutine omp_unset_nest_lock(nvar) bind(c)
334!DIR$ IF(__INTEL_COMPILER.GE.1400)
335!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
336!DIR$ ENDIF
337            use omp_lib_kinds
338            integer (kind=omp_nest_lock_kind) nvar
339          end subroutine omp_unset_nest_lock
340
341          function omp_test_nest_lock(nvar) bind(c)
342!DIR$ IF(__INTEL_COMPILER.GE.1400)
343!DIR$ attributes known_intrinsic :: omp_test_nest_lock
344!DIR$ ENDIF
345            use omp_lib_kinds
346            integer (kind=omp_integer_kind) omp_test_nest_lock
347            integer (kind=omp_nest_lock_kind) nvar
348          end function omp_test_nest_lock
349
350          function omp_get_max_task_priority() bind(c)
351            use omp_lib_kinds
352            integer (kind=omp_integer_kind) omp_get_max_task_priority
353          end function omp_get_max_task_priority
354
355!         ***
356!         *** kmp_* entry points
357!         ***
358
359          subroutine kmp_set_stacksize(size) bind(c)
360            use omp_lib_kinds
361            integer (kind=omp_integer_kind), value :: size
362          end subroutine kmp_set_stacksize
363
364          subroutine kmp_set_stacksize_s(size) bind(c)
365            use omp_lib_kinds
366            integer (kind=kmp_size_t_kind), value :: size
367          end subroutine kmp_set_stacksize_s
368
369          subroutine kmp_set_blocktime(msec) bind(c)
370            use omp_lib_kinds
371            integer (kind=omp_integer_kind), value :: msec
372          end subroutine kmp_set_blocktime
373
374          subroutine kmp_set_library_serial() bind(c)
375          end subroutine kmp_set_library_serial
376
377          subroutine kmp_set_library_turnaround() bind(c)
378          end subroutine kmp_set_library_turnaround
379
380          subroutine kmp_set_library_throughput() bind(c)
381          end subroutine kmp_set_library_throughput
382
383          subroutine kmp_set_library(libnum) bind(c)
384            use omp_lib_kinds
385            integer (kind=omp_integer_kind), value :: libnum
386          end subroutine kmp_set_library
387
388          subroutine kmp_set_defaults(string) bind(c)
389            use, intrinsic :: iso_c_binding
390            character (kind=c_char) :: string(*)
391          end subroutine kmp_set_defaults
392
393          function kmp_get_stacksize() bind(c)
394            use omp_lib_kinds
395            integer (kind=omp_integer_kind) kmp_get_stacksize
396          end function kmp_get_stacksize
397
398          function kmp_get_stacksize_s() bind(c)
399            use omp_lib_kinds
400            integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
401          end function kmp_get_stacksize_s
402
403          function kmp_get_blocktime() bind(c)
404            use omp_lib_kinds
405            integer (kind=omp_integer_kind) kmp_get_blocktime
406          end function kmp_get_blocktime
407
408          function kmp_get_library() bind(c)
409            use omp_lib_kinds
410            integer (kind=omp_integer_kind) kmp_get_library
411          end function kmp_get_library
412
413          subroutine kmp_set_disp_num_buffers(num) bind(c)
414            use omp_lib_kinds
415            integer (kind=omp_integer_kind), value :: num
416          end subroutine kmp_set_disp_num_buffers
417
418          function kmp_set_affinity(mask) bind(c)
419            use omp_lib_kinds
420            integer (kind=omp_integer_kind) kmp_set_affinity
421            integer (kind=kmp_affinity_mask_kind) mask
422          end function kmp_set_affinity
423
424          function kmp_get_affinity(mask) bind(c)
425            use omp_lib_kinds
426            integer (kind=omp_integer_kind) kmp_get_affinity
427            integer (kind=kmp_affinity_mask_kind) mask
428          end function kmp_get_affinity
429
430          function kmp_get_affinity_max_proc() bind(c)
431            use omp_lib_kinds
432            integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
433          end function kmp_get_affinity_max_proc
434
435          subroutine kmp_create_affinity_mask(mask) bind(c)
436            use omp_lib_kinds
437            integer (kind=kmp_affinity_mask_kind) mask
438          end subroutine kmp_create_affinity_mask
439
440          subroutine kmp_destroy_affinity_mask(mask) bind(c)
441            use omp_lib_kinds
442            integer (kind=kmp_affinity_mask_kind) mask
443          end subroutine kmp_destroy_affinity_mask
444
445          function kmp_set_affinity_mask_proc(proc, mask) bind(c)
446            use omp_lib_kinds
447            integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
448            integer (kind=omp_integer_kind), value :: proc
449            integer (kind=kmp_affinity_mask_kind) mask
450          end function kmp_set_affinity_mask_proc
451
452          function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
453            use omp_lib_kinds
454            integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
455            integer (kind=omp_integer_kind), value :: proc
456            integer (kind=kmp_affinity_mask_kind) mask
457          end function kmp_unset_affinity_mask_proc
458
459          function kmp_get_affinity_mask_proc(proc, mask) bind(c)
460            use omp_lib_kinds
461            integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
462            integer (kind=omp_integer_kind), value :: proc
463            integer (kind=kmp_affinity_mask_kind) mask
464          end function kmp_get_affinity_mask_proc
465
466          function kmp_malloc(size) bind(c)
467            use omp_lib_kinds
468            integer (kind=kmp_pointer_kind) kmp_malloc
469            integer (kind=kmp_size_t_kind), value :: size
470          end function kmp_malloc
471
472          function kmp_aligned_malloc(size, alignment) bind(c)
473            use omp_lib_kinds
474            integer (kind=kmp_pointer_kind) kmp_aligned_malloc
475            integer (kind=kmp_size_t_kind), value :: size
476            integer (kind=kmp_size_t_kind), value :: alignment
477          end function kmp_aligned_malloc
478
479          function kmp_calloc(nelem, elsize) bind(c)
480            use omp_lib_kinds
481            integer (kind=kmp_pointer_kind) kmp_calloc
482            integer (kind=kmp_size_t_kind), value :: nelem
483            integer (kind=kmp_size_t_kind), value :: elsize
484          end function kmp_calloc
485
486          function kmp_realloc(ptr, size) bind(c)
487            use omp_lib_kinds
488            integer (kind=kmp_pointer_kind) kmp_realloc
489            integer (kind=kmp_pointer_kind), value :: ptr
490            integer (kind=kmp_size_t_kind), value :: size
491          end function kmp_realloc
492
493          subroutine kmp_free(ptr) bind(c)
494            use omp_lib_kinds
495            integer (kind=kmp_pointer_kind), value :: ptr
496          end subroutine kmp_free
497
498          subroutine kmp_set_warnings_on() bind(c)
499          end subroutine kmp_set_warnings_on
500
501          subroutine kmp_set_warnings_off() bind(c)
502          end subroutine kmp_set_warnings_off
503
504          function kmp_get_cancellation_status(cancelkind) bind(c)
505            use omp_lib_kinds
506            integer (kind=kmp_cancel_kind), value :: cancelkind
507            logical (kind=omp_logical_kind) kmp_get_cancellation_status
508          end function kmp_get_cancellation_status
509
510          subroutine omp_init_lock_with_hint(svar, hint) bind(c)
511            use omp_lib_kinds
512            integer (kind=omp_lock_kind) svar
513            integer (kind=omp_lock_hint_kind), value :: hint
514          end subroutine omp_init_lock_with_hint
515
516          subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
517            use omp_lib_kinds
518            integer (kind=omp_nest_lock_kind) nvar
519            integer (kind=omp_lock_hint_kind), value :: hint
520          end subroutine omp_init_nest_lock_with_hint
521
522        end interface
523
524      end module omp_lib
525