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_display_env(verbose) bind(c)
508            use omp_lib_kinds
509            logical (kind=omp_logical_kind), value :: verbose
510          end subroutine omp_display_env
511
512
513          function omp_target_alloc(size, device_num) bind(c)
514            use omp_lib_kinds
515            type(c_ptr) omp_target_alloc
516            integer(c_size_t), value :: size
517            integer(c_int), value :: device_num
518          end function omp_target_alloc
519
520          subroutine omp_target_free(device_ptr, device_num) bind(c)
521            use omp_lib_kinds
522            type(c_ptr), value :: device_ptr
523            integer(c_int), value :: device_num
524          end subroutine omp_target_free
525
526          function omp_target_is_present(ptr, device_num) bind(c)
527            use omp_lib_kinds
528            integer(c_int) omp_target_is_present
529            type(c_ptr), value :: ptr
530            integer(c_int), value :: device_num
531          end function omp_target_is_present
532
533          function omp_target_memcpy(dst, src, length, dst_offset, src_offset, &
534              dst_device_num, src_device_num) bind(c)
535            use omp_lib_kinds
536            integer(c_int) omp_target_memcpy
537            type(c_ptr), value :: dst, src
538            integer(c_size_t), value :: length, dst_offset, src_offset
539            integer(c_int), value :: dst_device_num, src_device_num
540          end function omp_target_memcpy
541
542          function omp_target_memcpy_rect(dst, src, element_size, num_dims,    &
543              volume, dst_offsets, src_offsets, dst_dimensions,                &
544              src_dimensions, dst_device_num, src_device_num) bind(c)
545            use omp_lib_kinds
546            integer(c_int) omp_target_memcpy_rect
547            type(c_ptr), value :: dst, src
548            integer(c_size_t), value :: element_size
549            integer(c_int), value :: num_dims, dst_device_num, src_device_num
550            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
551                src_offsets(*), dst_dimensions(*), src_dimensions(*)
552          end function omp_target_memcpy_rect
553
554          function omp_target_memcpy_async(dst, src, length, dst_offset,       &
555              src_offset, dst_device_num, src_device_num, depobj_count,        &
556              depobj_list) bind(c)
557            use omp_lib_kinds
558            integer(c_int) omp_target_memcpy_async
559            type(c_ptr), value :: dst, src
560            integer(c_size_t), value :: length, dst_offset, src_offset
561            integer(c_int), value :: dst_device_num, src_device_num,           &
562                depobj_count
563            integer(omp_depend_kind), optional :: depobj_list(*)
564          end function omp_target_memcpy_async
565
566          function omp_target_memcpy_rect_async(dst, src, element_size,        &
567              num_dims, volume, dst_offsets, src_offsets, dst_dimensions,      &
568              src_dimensions, dst_device_num, src_device_num, depobj_count,    &
569              depobj_list) bind(c)
570            use omp_lib_kinds
571            integer(c_int) omp_target_memcpy_rect_async
572            type(c_ptr), value :: dst, src
573            integer(c_size_t), value :: element_size
574            integer(c_int), value :: num_dims, dst_device_num, src_device_num, &
575                depobj_count
576            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
577                src_offsets(*), dst_dimensions(*), src_dimensions(*)
578            integer (omp_depend_kind), optional :: depobj_list(*)
579          end function omp_target_memcpy_rect_async
580
581          function omp_target_associate_ptr(host_ptr, device_ptr, size,        &
582              device_offset, device_num) bind(c)
583            use omp_lib_kinds
584            integer(c_int) omp_target_associate_ptr
585            type(c_ptr), value :: host_ptr, device_ptr
586            integer(c_size_t), value :: size, device_offset
587            integer(c_int), value :: device_num
588          end function omp_target_associate_ptr
589
590          function omp_get_mapped_ptr(ptr, device_num) bind(c)
591            use omp_lib_kinds
592            type(c_ptr) omp_get_mapped_ptr
593            type(c_ptr), value :: ptr
594            integer(c_int), value :: device_num
595          end function omp_get_mapped_ptr
596
597          function omp_target_disassociate_ptr(ptr, device_num) bind(c)
598            use omp_lib_kinds
599            integer(c_int) omp_target_disassociate_ptr
600            type(c_ptr), value :: ptr
601            integer(c_int), value :: device_num
602          end function omp_target_disassociate_ptr
603
604!         ***
605!         *** kmp_* entry points
606!         ***
607
608          subroutine kmp_set_stacksize(size) bind(c)
609            use omp_lib_kinds
610            integer (kind=omp_integer_kind), value :: size
611          end subroutine kmp_set_stacksize
612
613          subroutine kmp_set_stacksize_s(size) bind(c)
614            use omp_lib_kinds
615            integer (kind=kmp_size_t_kind), value :: size
616          end subroutine kmp_set_stacksize_s
617
618          subroutine kmp_set_blocktime(msec) bind(c)
619            use omp_lib_kinds
620            integer (kind=omp_integer_kind), value :: msec
621          end subroutine kmp_set_blocktime
622
623          subroutine kmp_set_library_serial() bind(c)
624          end subroutine kmp_set_library_serial
625
626          subroutine kmp_set_library_turnaround() bind(c)
627          end subroutine kmp_set_library_turnaround
628
629          subroutine kmp_set_library_throughput() bind(c)
630          end subroutine kmp_set_library_throughput
631
632          subroutine kmp_set_library(libnum) bind(c)
633            use omp_lib_kinds
634            integer (kind=omp_integer_kind), value :: libnum
635          end subroutine kmp_set_library
636
637          subroutine kmp_set_defaults(string) bind(c)
638            use, intrinsic :: iso_c_binding
639            character (kind=c_char) :: string(*)
640          end subroutine kmp_set_defaults
641
642          function kmp_get_stacksize() bind(c)
643            use omp_lib_kinds
644            integer (kind=omp_integer_kind) kmp_get_stacksize
645          end function kmp_get_stacksize
646
647          function kmp_get_stacksize_s() bind(c)
648            use omp_lib_kinds
649            integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
650          end function kmp_get_stacksize_s
651
652          function kmp_get_blocktime() bind(c)
653            use omp_lib_kinds
654            integer (kind=omp_integer_kind) kmp_get_blocktime
655          end function kmp_get_blocktime
656
657          function kmp_get_library() bind(c)
658            use omp_lib_kinds
659            integer (kind=omp_integer_kind) kmp_get_library
660          end function kmp_get_library
661
662          subroutine kmp_set_disp_num_buffers(num) bind(c)
663            use omp_lib_kinds
664            integer (kind=omp_integer_kind), value :: num
665          end subroutine kmp_set_disp_num_buffers
666
667          function kmp_set_affinity(mask) bind(c)
668            use omp_lib_kinds
669            integer (kind=omp_integer_kind) kmp_set_affinity
670            integer (kind=kmp_affinity_mask_kind) mask
671          end function kmp_set_affinity
672
673          function kmp_get_affinity(mask) bind(c)
674            use omp_lib_kinds
675            integer (kind=omp_integer_kind) kmp_get_affinity
676            integer (kind=kmp_affinity_mask_kind) mask
677          end function kmp_get_affinity
678
679          function kmp_get_affinity_max_proc() bind(c)
680            use omp_lib_kinds
681            integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
682          end function kmp_get_affinity_max_proc
683
684          subroutine kmp_create_affinity_mask(mask) bind(c)
685            use omp_lib_kinds
686            integer (kind=kmp_affinity_mask_kind) mask
687          end subroutine kmp_create_affinity_mask
688
689          subroutine kmp_destroy_affinity_mask(mask) bind(c)
690            use omp_lib_kinds
691            integer (kind=kmp_affinity_mask_kind) mask
692          end subroutine kmp_destroy_affinity_mask
693
694          function kmp_set_affinity_mask_proc(proc, mask) bind(c)
695            use omp_lib_kinds
696            integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
697            integer (kind=omp_integer_kind), value :: proc
698            integer (kind=kmp_affinity_mask_kind) mask
699          end function kmp_set_affinity_mask_proc
700
701          function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
702            use omp_lib_kinds
703            integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
704            integer (kind=omp_integer_kind), value :: proc
705            integer (kind=kmp_affinity_mask_kind) mask
706          end function kmp_unset_affinity_mask_proc
707
708          function kmp_get_affinity_mask_proc(proc, mask) bind(c)
709            use omp_lib_kinds
710            integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
711            integer (kind=omp_integer_kind), value :: proc
712            integer (kind=kmp_affinity_mask_kind) mask
713          end function kmp_get_affinity_mask_proc
714
715          function kmp_malloc(size) bind(c)
716            use omp_lib_kinds
717            integer (kind=kmp_pointer_kind) kmp_malloc
718            integer (kind=kmp_size_t_kind), value :: size
719          end function kmp_malloc
720
721          function kmp_aligned_malloc(size, alignment) bind(c)
722            use omp_lib_kinds
723            integer (kind=kmp_pointer_kind) kmp_aligned_malloc
724            integer (kind=kmp_size_t_kind), value :: size
725            integer (kind=kmp_size_t_kind), value :: alignment
726          end function kmp_aligned_malloc
727
728          function kmp_calloc(nelem, elsize) bind(c)
729            use omp_lib_kinds
730            integer (kind=kmp_pointer_kind) kmp_calloc
731            integer (kind=kmp_size_t_kind), value :: nelem
732            integer (kind=kmp_size_t_kind), value :: elsize
733          end function kmp_calloc
734
735          function kmp_realloc(ptr, size) bind(c)
736            use omp_lib_kinds
737            integer (kind=kmp_pointer_kind) kmp_realloc
738            integer (kind=kmp_pointer_kind), value :: ptr
739            integer (kind=kmp_size_t_kind), value :: size
740          end function kmp_realloc
741
742          subroutine kmp_free(ptr) bind(c)
743            use omp_lib_kinds
744            integer (kind=kmp_pointer_kind), value :: ptr
745          end subroutine kmp_free
746
747          subroutine kmp_set_warnings_on() bind(c)
748          end subroutine kmp_set_warnings_on
749
750          subroutine kmp_set_warnings_off() bind(c)
751          end subroutine kmp_set_warnings_off
752
753          function kmp_get_cancellation_status(cancelkind) bind(c)
754            use omp_lib_kinds
755            integer (kind=kmp_cancel_kind), value :: cancelkind
756            logical (kind=omp_logical_kind) kmp_get_cancellation_status
757          end function kmp_get_cancellation_status
758
759          subroutine omp_init_lock_with_hint(svar, hint) bind(c)
760            use omp_lib_kinds
761            integer (kind=omp_lock_kind) svar
762            integer (kind=omp_lock_hint_kind), value :: hint
763          end subroutine omp_init_lock_with_hint
764
765          subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
766            use omp_lib_kinds
767            integer (kind=omp_nest_lock_kind) nvar
768            integer (kind=omp_lock_hint_kind), value :: hint
769          end subroutine omp_init_nest_lock_with_hint
770
771          function omp_control_tool(command, modifier, arg) bind(c)
772            use omp_lib_kinds
773            integer (kind=omp_integer_kind) omp_control_tool
774            integer (kind=omp_control_tool_kind), value :: command
775            integer (kind=omp_control_tool_kind), value :: modifier
776            integer (kind=kmp_pointer_kind), optional :: arg
777          end function omp_control_tool
778
779        end interface
780
781      end module omp_lib
782