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