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