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