1! include/omp_lib.f90.var
2
3!
4!//===----------------------------------------------------------------------===//
5!//
6!// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
7!// See https://llvm.org/LICENSE.txt for license information.
8!// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9!//
10!//===----------------------------------------------------------------------===//
11!
12
13      module omp_lib_kinds
14
15        use, intrinsic :: iso_c_binding
16
17        integer, parameter :: omp_integer_kind       = c_int
18        integer, parameter :: omp_logical_kind       = 4
19        integer, parameter :: omp_real_kind          = c_float
20        integer, parameter :: kmp_double_kind        = c_double
21        integer, parameter :: omp_lock_kind          = c_intptr_t
22        integer, parameter :: omp_nest_lock_kind     = c_intptr_t
23        integer, parameter :: omp_sched_kind         = omp_integer_kind
24        integer, parameter :: omp_proc_bind_kind     = omp_integer_kind
25        integer, parameter :: kmp_pointer_kind       = c_intptr_t
26        integer, parameter :: kmp_size_t_kind        = c_size_t
27        integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
28        integer, parameter :: kmp_cancel_kind        = omp_integer_kind
29        integer, parameter :: omp_sync_hint_kind     = omp_integer_kind
30        integer, parameter :: omp_lock_hint_kind     = omp_sync_hint_kind
31        integer, parameter :: omp_control_tool_kind  = omp_integer_kind
32        integer, parameter :: omp_control_tool_result_kind = omp_integer_kind
33        integer, parameter :: omp_allocator_handle_kind = c_intptr_t
34        integer, parameter :: omp_memspace_handle_kind = c_intptr_t
35        integer, parameter :: omp_alloctrait_key_kind = omp_integer_kind
36        integer, parameter :: omp_alloctrait_val_kind = c_intptr_t
37
38        type omp_alloctrait
39          integer(kind=omp_alloctrait_key_kind) key
40          integer(kind=omp_alloctrait_val_kind) value
41        end type omp_alloctrait
42
43        integer, parameter :: omp_pause_resource_kind = omp_integer_kind
44        integer, parameter :: omp_depend_kind = c_intptr_t
45        integer, parameter :: omp_event_handle_kind = c_intptr_t
46
47      end module omp_lib_kinds
48
49      module omp_lib
50
51        use omp_lib_kinds
52
53        integer (kind=omp_integer_kind), parameter :: openmp_version    = @LIBOMP_OMP_YEAR_MONTH@
54        integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
55        integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
56        integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
57        character(*)               kmp_build_date
58        parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
59
60        integer(kind=omp_sched_kind), parameter :: omp_sched_static  = 1
61        integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
62        integer(kind=omp_sched_kind), parameter :: omp_sched_guided  = 3
63        integer(kind=omp_sched_kind), parameter :: omp_sched_auto    = 4
64        integer(kind=omp_sched_kind), parameter :: omp_sched_monotonic = int(Z'80000000', kind=omp_sched_kind)
65
66        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
67        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
68        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
69        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
70        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
71
72        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
73        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
74        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
75        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
76
77        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_none           = 0
78        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_uncontended    = 1
79        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_contended      = 2
80        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_nonspeculative = 4
81        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_speculative    = 8
82        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = omp_sync_hint_none
83        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = omp_sync_hint_uncontended
84        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = omp_sync_hint_contended
85        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative
86        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = omp_sync_hint_speculative
87        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle         = 65536
88        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm         = 131072
89        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive    = 262144
90
91        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_start = 1
92        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_pause = 2
93        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_flush = 3
94        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_end = 4
95
96        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_notool = -2
97        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_nocallback = -1
98        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_success = 0
99        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_ignored = 1
100
101        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_sync_hint = 1
102        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_alignment = 2
103        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_access = 3
104        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pool_size = 4
105        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fallback = 5
106        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fb_data = 6
107        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pinned = 7
108        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_partition = 8
109
110        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default = -1
111        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_false = 0
112        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_true = 1
113        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_contended = 3
114        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_uncontended = 4
115        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_serialized = 5
116        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_sequential = omp_atv_serialized
117        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_private = 6
118        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_all = 7
119        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_thread = 8
120        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_pteam = 9
121        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_cgroup = 10
122        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default_mem_fb = 11
123        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_null_fb = 12
124        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_abort_fb = 13
125        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_allocator_fb = 14
126        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_environment = 15
127        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_nearest = 16
128        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_blocked = 17
129        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_interleaved = 18
130
131        integer (kind=omp_allocator_handle_kind), parameter :: omp_null_allocator = 0
132        integer (kind=omp_allocator_handle_kind), parameter :: omp_default_mem_alloc = 1
133        integer (kind=omp_allocator_handle_kind), parameter :: omp_large_cap_mem_alloc = 2
134        integer (kind=omp_allocator_handle_kind), parameter :: omp_const_mem_alloc = 3
135        integer (kind=omp_allocator_handle_kind), parameter :: omp_high_bw_mem_alloc = 4
136        integer (kind=omp_allocator_handle_kind), parameter :: omp_low_lat_mem_alloc = 5
137        integer (kind=omp_allocator_handle_kind), parameter :: omp_cgroup_mem_alloc = 6
138        integer (kind=omp_allocator_handle_kind), parameter :: omp_pteam_mem_alloc = 7
139        integer (kind=omp_allocator_handle_kind), parameter :: omp_thread_mem_alloc = 8
140
141        integer (kind=omp_memspace_handle_kind), parameter :: omp_default_mem_space = 0
142        integer (kind=omp_memspace_handle_kind), parameter :: omp_large_cap_mem_space = 1
143        integer (kind=omp_memspace_handle_kind), parameter :: omp_const_mem_space = 2
144        integer (kind=omp_memspace_handle_kind), parameter :: omp_high_bw_mem_space = 3
145        integer (kind=omp_memspace_handle_kind), parameter :: omp_low_lat_mem_space = 4
146
147        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_resume = 0
148        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_soft = 1
149        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_hard = 2
150
151        interface
152
153!         ***
154!         *** omp_* entry points
155!         ***
156
157          subroutine omp_set_num_threads(num_threads) bind(c)
158            use omp_lib_kinds
159            integer (kind=omp_integer_kind), value :: num_threads
160          end subroutine omp_set_num_threads
161
162          subroutine omp_set_dynamic(dynamic_threads) bind(c)
163            use omp_lib_kinds
164            logical (kind=omp_logical_kind), value :: dynamic_threads
165          end subroutine omp_set_dynamic
166
167          subroutine omp_set_nested(nested) bind(c)
168            use omp_lib_kinds
169            logical (kind=omp_logical_kind), value :: nested
170          end subroutine omp_set_nested
171
172          function omp_get_num_threads() bind(c)
173            use omp_lib_kinds
174            integer (kind=omp_integer_kind) omp_get_num_threads
175          end function omp_get_num_threads
176
177          function omp_get_max_threads() bind(c)
178            use omp_lib_kinds
179            integer (kind=omp_integer_kind) omp_get_max_threads
180          end function omp_get_max_threads
181
182          function omp_get_thread_num() bind(c)
183            use omp_lib_kinds
184            integer (kind=omp_integer_kind) omp_get_thread_num
185          end function omp_get_thread_num
186
187          function omp_get_num_procs() bind(c)
188            use omp_lib_kinds
189            integer (kind=omp_integer_kind) omp_get_num_procs
190          end function omp_get_num_procs
191
192          function omp_in_parallel() bind(c)
193            use omp_lib_kinds
194            logical (kind=omp_logical_kind) omp_in_parallel
195          end function omp_in_parallel
196
197          function omp_in_final() bind(c)
198            use omp_lib_kinds
199            logical (kind=omp_logical_kind) omp_in_final
200          end function omp_in_final
201
202          function omp_get_dynamic() bind(c)
203            use omp_lib_kinds
204            logical (kind=omp_logical_kind) omp_get_dynamic
205          end function omp_get_dynamic
206
207          function omp_get_nested() bind(c)
208            use omp_lib_kinds
209            logical (kind=omp_logical_kind) omp_get_nested
210          end function omp_get_nested
211
212          function omp_get_thread_limit() bind(c)
213            use omp_lib_kinds
214            integer (kind=omp_integer_kind) omp_get_thread_limit
215          end function omp_get_thread_limit
216
217          subroutine omp_set_max_active_levels(max_levels) bind(c)
218            use omp_lib_kinds
219            integer (kind=omp_integer_kind), value :: max_levels
220          end subroutine omp_set_max_active_levels
221
222          function omp_get_max_active_levels() bind(c)
223            use omp_lib_kinds
224            integer (kind=omp_integer_kind) omp_get_max_active_levels
225          end function omp_get_max_active_levels
226
227          function omp_get_level() bind(c)
228            use omp_lib_kinds
229            integer (kind=omp_integer_kind) omp_get_level
230          end function omp_get_level
231
232          function omp_get_active_level() bind(c)
233            use omp_lib_kinds
234            integer (kind=omp_integer_kind) omp_get_active_level
235          end function omp_get_active_level
236
237          function omp_get_ancestor_thread_num(level) bind(c)
238            use omp_lib_kinds
239            integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
240            integer (kind=omp_integer_kind), value :: level
241          end function omp_get_ancestor_thread_num
242
243          function omp_get_team_size(level) bind(c)
244            use omp_lib_kinds
245            integer (kind=omp_integer_kind) omp_get_team_size
246            integer (kind=omp_integer_kind), value :: level
247          end function omp_get_team_size
248
249          subroutine omp_set_schedule(kind, chunk_size) bind(c)
250            use omp_lib_kinds
251            integer (kind=omp_sched_kind), value :: kind
252            integer (kind=omp_integer_kind), value :: chunk_size
253          end subroutine omp_set_schedule
254
255          subroutine omp_get_schedule(kind, chunk_size) bind(c)
256            use omp_lib_kinds
257            integer (kind=omp_sched_kind) kind
258            integer (kind=omp_integer_kind) chunk_size
259          end subroutine omp_get_schedule
260
261          function omp_get_proc_bind() bind(c)
262            use omp_lib_kinds
263            integer (kind=omp_proc_bind_kind) omp_get_proc_bind
264          end function omp_get_proc_bind
265
266          function omp_get_num_places() bind(c)
267            use omp_lib_kinds
268            integer (kind=omp_integer_kind) omp_get_num_places
269          end function omp_get_num_places
270
271          function omp_get_place_num_procs(place_num) bind(c)
272            use omp_lib_kinds
273            integer (kind=omp_integer_kind), value :: place_num
274            integer (kind=omp_integer_kind) omp_get_place_num_procs
275          end function omp_get_place_num_procs
276
277          subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
278            use omp_lib_kinds
279            integer (kind=omp_integer_kind), value :: place_num
280            integer (kind=omp_integer_kind) ids(*)
281          end subroutine omp_get_place_proc_ids
282
283          function omp_get_place_num() bind(c)
284            use omp_lib_kinds
285            integer (kind=omp_integer_kind) omp_get_place_num
286          end function omp_get_place_num
287
288          function omp_get_partition_num_places() bind(c)
289            use omp_lib_kinds
290            integer (kind=omp_integer_kind) omp_get_partition_num_places
291          end function omp_get_partition_num_places
292
293          subroutine omp_get_partition_place_nums(place_nums) bind(c)
294            use omp_lib_kinds
295            integer (kind=omp_integer_kind) place_nums(*)
296          end subroutine omp_get_partition_place_nums
297
298          function omp_get_wtime() bind(c)
299            use omp_lib_kinds
300            real (kind=kmp_double_kind) omp_get_wtime
301          end function omp_get_wtime
302
303          function omp_get_wtick() bind(c)
304            use omp_lib_kinds
305            real (kind=kmp_double_kind) omp_get_wtick
306          end function omp_get_wtick
307
308          function omp_get_default_device() bind(c)
309            use omp_lib_kinds
310            integer (kind=omp_integer_kind) omp_get_default_device
311          end function omp_get_default_device
312
313          subroutine omp_set_default_device(device_num) bind(c)
314            use omp_lib_kinds
315            integer (kind=omp_integer_kind), value :: device_num
316          end subroutine omp_set_default_device
317
318          function omp_get_num_devices() bind(c)
319            use omp_lib_kinds
320            integer (kind=omp_integer_kind) omp_get_num_devices
321          end function omp_get_num_devices
322
323          function omp_get_num_teams() bind(c)
324            use omp_lib_kinds
325            integer (kind=omp_integer_kind) omp_get_num_teams
326          end function omp_get_num_teams
327
328          function omp_get_team_num() bind(c)
329            use omp_lib_kinds
330            integer (kind=omp_integer_kind) omp_get_team_num
331          end function omp_get_team_num
332
333          function omp_get_cancellation() bind(c)
334            use omp_lib_kinds
335            integer (kind=omp_integer_kind) omp_get_cancellation
336          end function omp_get_cancellation
337
338          function omp_is_initial_device() bind(c)
339            use omp_lib_kinds
340            logical (kind=omp_logical_kind) omp_is_initial_device
341          end function omp_is_initial_device
342
343          function omp_get_initial_device() bind(c)
344            use omp_lib_kinds
345            integer (kind=omp_integer_kind) omp_get_initial_device
346          end function omp_get_initial_device
347
348          function omp_get_device_num() bind(c)
349            use omp_lib_kinds
350            integer (kind=omp_integer_kind) omp_get_device_num
351          end function omp_get_device_num
352
353          function omp_pause_resource(kind, device_num) bind(c)
354            use omp_lib_kinds
355            integer (kind=omp_pause_resource_kind), value :: kind
356            integer (kind=omp_integer_kind), value :: device_num
357            integer (kind=omp_integer_kind) omp_pause_resource
358          end function omp_pause_resource
359
360          function omp_pause_resource_all(kind) bind(c)
361            use omp_lib_kinds
362            integer (kind=omp_pause_resource_kind), value :: kind
363            integer (kind=omp_integer_kind) omp_pause_resource_all
364          end function omp_pause_resource_all
365
366          function omp_get_supported_active_levels() bind(c)
367            use omp_lib_kinds
368            integer (kind=omp_integer_kind) omp_get_supported_active_levels
369          end function omp_get_supported_active_levels
370
371          subroutine omp_fulfill_event(event) bind(c)
372            use omp_lib_kinds
373            integer (kind=omp_event_handle_kind), value :: event
374          end subroutine omp_fulfill_event
375
376          subroutine omp_init_lock(svar) bind(c)
377!DIR$ IF(__INTEL_COMPILER.GE.1400)
378!DIR$ attributes known_intrinsic :: omp_init_lock
379!DIR$ ENDIF
380            use omp_lib_kinds
381            integer (kind=omp_lock_kind) svar
382          end subroutine omp_init_lock
383
384          subroutine omp_destroy_lock(svar) bind(c)
385!DIR$ IF(__INTEL_COMPILER.GE.1400)
386!DIR$ attributes known_intrinsic :: omp_destroy_lock
387!DIR$ ENDIF
388            use omp_lib_kinds
389            integer (kind=omp_lock_kind) svar
390          end subroutine omp_destroy_lock
391
392          subroutine omp_set_lock(svar) bind(c)
393!DIR$ IF(__INTEL_COMPILER.GE.1400)
394!DIR$ attributes known_intrinsic :: omp_set_lock
395!DIR$ ENDIF
396            use omp_lib_kinds
397            integer (kind=omp_lock_kind) svar
398          end subroutine omp_set_lock
399
400          subroutine omp_unset_lock(svar) bind(c)
401!DIR$ IF(__INTEL_COMPILER.GE.1400)
402!DIR$ attributes known_intrinsic :: omp_unset_lock
403!DIR$ ENDIF
404            use omp_lib_kinds
405            integer (kind=omp_lock_kind) svar
406          end subroutine omp_unset_lock
407
408          function omp_test_lock(svar) bind(c)
409!DIR$ IF(__INTEL_COMPILER.GE.1400)
410!DIR$ attributes known_intrinsic :: omp_test_lock
411!DIR$ ENDIF
412            use omp_lib_kinds
413            logical (kind=omp_logical_kind) omp_test_lock
414            integer (kind=omp_lock_kind) svar
415          end function omp_test_lock
416
417          subroutine omp_init_nest_lock(nvar) bind(c)
418!DIR$ IF(__INTEL_COMPILER.GE.1400)
419!DIR$ attributes known_intrinsic :: omp_init_nest_lock
420!DIR$ ENDIF
421            use omp_lib_kinds
422            integer (kind=omp_nest_lock_kind) nvar
423          end subroutine omp_init_nest_lock
424
425          subroutine omp_destroy_nest_lock(nvar) bind(c)
426!DIR$ IF(__INTEL_COMPILER.GE.1400)
427!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
428!DIR$ ENDIF
429            use omp_lib_kinds
430            integer (kind=omp_nest_lock_kind) nvar
431          end subroutine omp_destroy_nest_lock
432
433          subroutine omp_set_nest_lock(nvar) bind(c)
434!DIR$ IF(__INTEL_COMPILER.GE.1400)
435!DIR$ attributes known_intrinsic :: omp_set_nest_lock
436!DIR$ ENDIF
437            use omp_lib_kinds
438            integer (kind=omp_nest_lock_kind) nvar
439          end subroutine omp_set_nest_lock
440
441          subroutine omp_unset_nest_lock(nvar) bind(c)
442!DIR$ IF(__INTEL_COMPILER.GE.1400)
443!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
444!DIR$ ENDIF
445            use omp_lib_kinds
446            integer (kind=omp_nest_lock_kind) nvar
447          end subroutine omp_unset_nest_lock
448
449          function omp_test_nest_lock(nvar) bind(c)
450!DIR$ IF(__INTEL_COMPILER.GE.1400)
451!DIR$ attributes known_intrinsic :: omp_test_nest_lock
452!DIR$ ENDIF
453            use omp_lib_kinds
454            integer (kind=omp_integer_kind) omp_test_nest_lock
455            integer (kind=omp_nest_lock_kind) nvar
456          end function omp_test_nest_lock
457
458          function omp_get_max_task_priority() bind(c)
459            use omp_lib_kinds
460            integer (kind=omp_integer_kind) omp_get_max_task_priority
461          end function omp_get_max_task_priority
462
463          function omp_init_allocator(memspace, ntraits, traits)
464            use omp_lib_kinds
465            integer (kind=omp_allocator_handle_kind) omp_init_allocator
466            integer (kind=omp_memspace_handle_kind) :: memspace
467            integer (kind=omp_integer_kind) :: ntraits
468            type(omp_alloctrait), intent(in) :: traits(*)
469          end function omp_init_allocator
470
471          subroutine omp_destroy_allocator(allocator) bind(c)
472            use omp_lib_kinds
473            integer (kind=omp_allocator_handle_kind), value :: allocator
474          end subroutine omp_destroy_allocator
475
476          subroutine omp_set_default_allocator(allocator) bind(c)
477            use omp_lib_kinds
478            integer (kind=omp_allocator_handle_kind), value :: allocator
479          end subroutine omp_set_default_allocator
480
481          function omp_get_default_allocator() bind(c)
482            use omp_lib_kinds
483            integer (kind=omp_allocator_handle_kind) omp_get_default_allocator
484          end function omp_get_default_allocator
485
486          subroutine omp_set_affinity_format(format)
487            character (len=*) :: format
488          end subroutine omp_set_affinity_format
489
490          function omp_get_affinity_format(buffer)
491            use omp_lib_kinds
492            character (len=*) :: buffer
493            integer (kind=kmp_size_t_kind) :: omp_get_affinity_format
494          end function omp_get_affinity_format
495
496          subroutine omp_display_affinity(format)
497            character (len=*) :: format
498          end subroutine omp_display_affinity
499
500          function omp_capture_affinity(buffer, format)
501            use omp_lib_kinds
502            character (len=*) :: format
503            character (len=*) :: buffer
504            integer (kind=kmp_size_t_kind) :: omp_capture_affinity
505          end function omp_capture_affinity
506
507          subroutine omp_set_num_teams(num_teams) bind(c)
508            use omp_lib_kinds
509            integer (kind=omp_integer_kind), value :: num_teams
510          end subroutine omp_set_num_teams
511
512          function omp_get_max_teams() bind(c)
513            use omp_lib_kinds
514            integer (kind=omp_integer_kind) omp_get_max_teams
515          end function omp_get_max_teams
516
517          subroutine omp_set_teams_thread_limit(thread_limit) bind(c)
518            use omp_lib_kinds
519            integer (kind=omp_integer_kind), value :: thread_limit
520          end subroutine omp_set_teams_thread_limit
521
522          function omp_get_teams_thread_limit() bind(c)
523            use omp_lib_kinds
524            integer (kind=omp_integer_kind) omp_get_teams_thread_limit
525          end function omp_get_teams_thread_limit
526
527          subroutine omp_display_env(verbose) bind(c)
528            use omp_lib_kinds
529            logical (kind=omp_logical_kind), value :: verbose
530          end subroutine omp_display_env
531
532
533          function omp_target_alloc(size, device_num) bind(c)
534            use omp_lib_kinds
535            type(c_ptr) omp_target_alloc
536            integer(c_size_t), value :: size
537            integer(c_int), value :: device_num
538          end function omp_target_alloc
539
540          subroutine omp_target_free(device_ptr, device_num) bind(c)
541            use omp_lib_kinds
542            type(c_ptr), value :: device_ptr
543            integer(c_int), value :: device_num
544          end subroutine omp_target_free
545
546          function omp_target_is_present(ptr, device_num) bind(c)
547            use omp_lib_kinds
548            integer(c_int) omp_target_is_present
549            type(c_ptr), value :: ptr
550            integer(c_int), value :: device_num
551          end function omp_target_is_present
552
553          function omp_target_memcpy(dst, src, length, dst_offset, src_offset, &
554              dst_device_num, src_device_num) bind(c)
555            use omp_lib_kinds
556            integer(c_int) omp_target_memcpy
557            type(c_ptr), value :: dst, src
558            integer(c_size_t), value :: length, dst_offset, src_offset
559            integer(c_int), value :: dst_device_num, src_device_num
560          end function omp_target_memcpy
561
562          function omp_target_memcpy_rect(dst, src, element_size, num_dims,    &
563              volume, dst_offsets, src_offsets, dst_dimensions,                &
564              src_dimensions, dst_device_num, src_device_num) bind(c)
565            use omp_lib_kinds
566            integer(c_int) omp_target_memcpy_rect
567            type(c_ptr), value :: dst, src
568            integer(c_size_t), value :: element_size
569            integer(c_int), value :: num_dims, dst_device_num, src_device_num
570            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
571                src_offsets(*), dst_dimensions(*), src_dimensions(*)
572          end function omp_target_memcpy_rect
573
574          function omp_target_memcpy_async(dst, src, length, dst_offset,       &
575              src_offset, dst_device_num, src_device_num, depobj_count,        &
576              depobj_list) bind(c)
577            use omp_lib_kinds
578            integer(c_int) omp_target_memcpy_async
579            type(c_ptr), value :: dst, src
580            integer(c_size_t), value :: length, dst_offset, src_offset
581            integer(c_int), value :: dst_device_num, src_device_num,           &
582                depobj_count
583            integer(omp_depend_kind), optional :: depobj_list(*)
584          end function omp_target_memcpy_async
585
586          function omp_target_memcpy_rect_async(dst, src, element_size,        &
587              num_dims, volume, dst_offsets, src_offsets, dst_dimensions,      &
588              src_dimensions, dst_device_num, src_device_num, depobj_count,    &
589              depobj_list) bind(c)
590            use omp_lib_kinds
591            integer(c_int) omp_target_memcpy_rect_async
592            type(c_ptr), value :: dst, src
593            integer(c_size_t), value :: element_size
594            integer(c_int), value :: num_dims, dst_device_num, src_device_num, &
595                depobj_count
596            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
597                src_offsets(*), dst_dimensions(*), src_dimensions(*)
598            integer (omp_depend_kind), optional :: depobj_list(*)
599          end function omp_target_memcpy_rect_async
600
601          function omp_target_associate_ptr(host_ptr, device_ptr, size,        &
602              device_offset, device_num) bind(c)
603            use omp_lib_kinds
604            integer(c_int) omp_target_associate_ptr
605            type(c_ptr), value :: host_ptr, device_ptr
606            integer(c_size_t), value :: size, device_offset
607            integer(c_int), value :: device_num
608          end function omp_target_associate_ptr
609
610          function omp_get_mapped_ptr(ptr, device_num) bind(c)
611            use omp_lib_kinds
612            type(c_ptr) omp_get_mapped_ptr
613            type(c_ptr), value :: ptr
614            integer(c_int), value :: device_num
615          end function omp_get_mapped_ptr
616
617          function omp_target_disassociate_ptr(ptr, device_num) bind(c)
618            use omp_lib_kinds
619            integer(c_int) omp_target_disassociate_ptr
620            type(c_ptr), value :: ptr
621            integer(c_int), value :: device_num
622          end function omp_target_disassociate_ptr
623
624!         ***
625!         *** kmp_* entry points
626!         ***
627
628          subroutine kmp_set_stacksize(size) bind(c)
629            use omp_lib_kinds
630            integer (kind=omp_integer_kind), value :: size
631          end subroutine kmp_set_stacksize
632
633          subroutine kmp_set_stacksize_s(size) bind(c)
634            use omp_lib_kinds
635            integer (kind=kmp_size_t_kind), value :: size
636          end subroutine kmp_set_stacksize_s
637
638          subroutine kmp_set_blocktime(msec) bind(c)
639            use omp_lib_kinds
640            integer (kind=omp_integer_kind), value :: msec
641          end subroutine kmp_set_blocktime
642
643          subroutine kmp_set_library_serial() bind(c)
644          end subroutine kmp_set_library_serial
645
646          subroutine kmp_set_library_turnaround() bind(c)
647          end subroutine kmp_set_library_turnaround
648
649          subroutine kmp_set_library_throughput() bind(c)
650          end subroutine kmp_set_library_throughput
651
652          subroutine kmp_set_library(libnum) bind(c)
653            use omp_lib_kinds
654            integer (kind=omp_integer_kind), value :: libnum
655          end subroutine kmp_set_library
656
657          subroutine kmp_set_defaults(string) bind(c)
658            use, intrinsic :: iso_c_binding
659            character (kind=c_char) :: string(*)
660          end subroutine kmp_set_defaults
661
662          function kmp_get_stacksize() bind(c)
663            use omp_lib_kinds
664            integer (kind=omp_integer_kind) kmp_get_stacksize
665          end function kmp_get_stacksize
666
667          function kmp_get_stacksize_s() bind(c)
668            use omp_lib_kinds
669            integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
670          end function kmp_get_stacksize_s
671
672          function kmp_get_blocktime() bind(c)
673            use omp_lib_kinds
674            integer (kind=omp_integer_kind) kmp_get_blocktime
675          end function kmp_get_blocktime
676
677          function kmp_get_library() bind(c)
678            use omp_lib_kinds
679            integer (kind=omp_integer_kind) kmp_get_library
680          end function kmp_get_library
681
682          subroutine kmp_set_disp_num_buffers(num) bind(c)
683            use omp_lib_kinds
684            integer (kind=omp_integer_kind), value :: num
685          end subroutine kmp_set_disp_num_buffers
686
687          function kmp_set_affinity(mask) bind(c)
688            use omp_lib_kinds
689            integer (kind=omp_integer_kind) kmp_set_affinity
690            integer (kind=kmp_affinity_mask_kind) mask
691          end function kmp_set_affinity
692
693          function kmp_get_affinity(mask) bind(c)
694            use omp_lib_kinds
695            integer (kind=omp_integer_kind) kmp_get_affinity
696            integer (kind=kmp_affinity_mask_kind) mask
697          end function kmp_get_affinity
698
699          function kmp_get_affinity_max_proc() bind(c)
700            use omp_lib_kinds
701            integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
702          end function kmp_get_affinity_max_proc
703
704          subroutine kmp_create_affinity_mask(mask) bind(c)
705            use omp_lib_kinds
706            integer (kind=kmp_affinity_mask_kind) mask
707          end subroutine kmp_create_affinity_mask
708
709          subroutine kmp_destroy_affinity_mask(mask) bind(c)
710            use omp_lib_kinds
711            integer (kind=kmp_affinity_mask_kind) mask
712          end subroutine kmp_destroy_affinity_mask
713
714          function kmp_set_affinity_mask_proc(proc, mask) bind(c)
715            use omp_lib_kinds
716            integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
717            integer (kind=omp_integer_kind), value :: proc
718            integer (kind=kmp_affinity_mask_kind) mask
719          end function kmp_set_affinity_mask_proc
720
721          function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
722            use omp_lib_kinds
723            integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
724            integer (kind=omp_integer_kind), value :: proc
725            integer (kind=kmp_affinity_mask_kind) mask
726          end function kmp_unset_affinity_mask_proc
727
728          function kmp_get_affinity_mask_proc(proc, mask) bind(c)
729            use omp_lib_kinds
730            integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
731            integer (kind=omp_integer_kind), value :: proc
732            integer (kind=kmp_affinity_mask_kind) mask
733          end function kmp_get_affinity_mask_proc
734
735          function kmp_malloc(size) bind(c)
736            use omp_lib_kinds
737            integer (kind=kmp_pointer_kind) kmp_malloc
738            integer (kind=kmp_size_t_kind), value :: size
739          end function kmp_malloc
740
741          function kmp_aligned_malloc(size, alignment) bind(c)
742            use omp_lib_kinds
743            integer (kind=kmp_pointer_kind) kmp_aligned_malloc
744            integer (kind=kmp_size_t_kind), value :: size
745            integer (kind=kmp_size_t_kind), value :: alignment
746          end function kmp_aligned_malloc
747
748          function kmp_calloc(nelem, elsize) bind(c)
749            use omp_lib_kinds
750            integer (kind=kmp_pointer_kind) kmp_calloc
751            integer (kind=kmp_size_t_kind), value :: nelem
752            integer (kind=kmp_size_t_kind), value :: elsize
753          end function kmp_calloc
754
755          function kmp_realloc(ptr, size) bind(c)
756            use omp_lib_kinds
757            integer (kind=kmp_pointer_kind) kmp_realloc
758            integer (kind=kmp_pointer_kind), value :: ptr
759            integer (kind=kmp_size_t_kind), value :: size
760          end function kmp_realloc
761
762          subroutine kmp_free(ptr) bind(c)
763            use omp_lib_kinds
764            integer (kind=kmp_pointer_kind), value :: ptr
765          end subroutine kmp_free
766
767          subroutine kmp_set_warnings_on() bind(c)
768          end subroutine kmp_set_warnings_on
769
770          subroutine kmp_set_warnings_off() bind(c)
771          end subroutine kmp_set_warnings_off
772
773          function kmp_get_cancellation_status(cancelkind) bind(c)
774            use omp_lib_kinds
775            integer (kind=kmp_cancel_kind), value :: cancelkind
776            logical (kind=omp_logical_kind) kmp_get_cancellation_status
777          end function kmp_get_cancellation_status
778
779          subroutine omp_init_lock_with_hint(svar, hint) bind(c)
780            use omp_lib_kinds
781            integer (kind=omp_lock_kind) svar
782            integer (kind=omp_lock_hint_kind), value :: hint
783          end subroutine omp_init_lock_with_hint
784
785          subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
786            use omp_lib_kinds
787            integer (kind=omp_nest_lock_kind) nvar
788            integer (kind=omp_lock_hint_kind), value :: hint
789          end subroutine omp_init_nest_lock_with_hint
790
791          function omp_control_tool(command, modifier, arg) bind(c)
792            use omp_lib_kinds
793            integer (kind=omp_integer_kind) omp_control_tool
794            integer (kind=omp_control_tool_kind), value :: command
795            integer (kind=omp_control_tool_kind), value :: modifier
796            integer (kind=kmp_pointer_kind), optional :: arg
797          end function omp_control_tool
798
799        end interface
800
801      end module omp_lib
802