Home | History | Annotate | Line # | Download | only in libgomp
      1  1.14  mrg This is libgomp.info, produced by makeinfo version 6.5 from
      2  1.11  mrg libgomp.texi.
      3   1.1  mrg 
      4  1.15  mrg Copyright (C) 2006-2022 Free Software Foundation, Inc.
      5   1.1  mrg 
      6   1.1  mrg    Permission is granted to copy, distribute and/or modify this document
      7   1.3  mrg under the terms of the GNU Free Documentation License, Version 1.3 or
      8   1.1  mrg any later version published by the Free Software Foundation; with the
      9   1.1  mrg Invariant Sections being "Funding Free Software", the Front-Cover texts
     10   1.1  mrg being (a) (see below), and with the Back-Cover Texts being (b) (see
     11   1.1  mrg below).  A copy of the license is included in the section entitled "GNU
     12   1.1  mrg Free Documentation License".
     13   1.1  mrg 
     14   1.1  mrg    (a) The FSF's Front-Cover Text is:
     15   1.1  mrg 
     16   1.1  mrg    A GNU Manual
     17   1.1  mrg 
     18   1.1  mrg    (b) The FSF's Back-Cover Text is:
     19   1.1  mrg 
     20   1.1  mrg    You have freedom to copy and modify this GNU Manual, like GNU
     21  1.11  mrg software.  Copies published by the Free Software Foundation raise funds
     22  1.11  mrg for GNU development.
     23   1.1  mrg INFO-DIR-SECTION GNU Libraries
     24   1.1  mrg START-INFO-DIR-ENTRY
     25   1.5  mrg * libgomp: (libgomp).          GNU Offloading and Multi Processing Runtime Library.
     26   1.1  mrg END-INFO-DIR-ENTRY
     27   1.1  mrg 
     28   1.5  mrg    This manual documents libgomp, the GNU Offloading and Multi
     29   1.5  mrg Processing Runtime library.  This is the GNU implementation of the
     30   1.5  mrg OpenMP and OpenACC APIs for parallel and accelerator programming in
     31   1.5  mrg C/C++ and Fortran.
     32   1.1  mrg 
     33   1.1  mrg    Published by the Free Software Foundation 51 Franklin Street, Fifth
     34   1.1  mrg Floor Boston, MA 02110-1301 USA
     35   1.1  mrg 
     36  1.15  mrg    Copyright (C) 2006-2022 Free Software Foundation, Inc.
     37   1.1  mrg 
     38   1.1  mrg    Permission is granted to copy, distribute and/or modify this document
     39   1.3  mrg under the terms of the GNU Free Documentation License, Version 1.3 or
     40   1.1  mrg any later version published by the Free Software Foundation; with the
     41   1.1  mrg Invariant Sections being "Funding Free Software", the Front-Cover texts
     42   1.1  mrg being (a) (see below), and with the Back-Cover Texts being (b) (see
     43   1.1  mrg below).  A copy of the license is included in the section entitled "GNU
     44   1.1  mrg Free Documentation License".
     45   1.1  mrg 
     46   1.1  mrg    (a) The FSF's Front-Cover Text is:
     47   1.1  mrg 
     48   1.1  mrg    A GNU Manual
     49   1.1  mrg 
     50   1.1  mrg    (b) The FSF's Back-Cover Text is:
     51   1.1  mrg 
     52   1.1  mrg    You have freedom to copy and modify this GNU Manual, like GNU
     53  1.11  mrg software.  Copies published by the Free Software Foundation raise funds
     54  1.11  mrg for GNU development.
     55   1.1  mrg 
     56   1.1  mrg 
     57  1.15  mrg File: libgomp.info,  Node: Top,  Next: Enabling OpenMP
     58   1.1  mrg 
     59   1.1  mrg Introduction
     60   1.1  mrg ************
     61   1.1  mrg 
     62  1.11  mrg This manual documents the usage of libgomp, the GNU Offloading and Multi
     63  1.11  mrg Processing Runtime Library.  This includes the GNU implementation of the
     64  1.12  mrg OpenMP (https://www.openmp.org) Application Programming Interface (API)
     65  1.11  mrg for multi-platform shared-memory parallel programming in C/C++ and
     66  1.11  mrg Fortran, and the GNU implementation of the OpenACC
     67  1.11  mrg (https://www.openacc.org) Application Programming Interface (API) for
     68   1.5  mrg offloading of code to accelerator devices in C/C++ and Fortran.
     69   1.5  mrg 
     70   1.5  mrg    Originally, libgomp implemented the GNU OpenMP Runtime Library.
     71   1.5  mrg Based on this, support for OpenACC and offloading (both OpenACC and
     72   1.5  mrg OpenMP 4's target construct) has been added later on, and the library's
     73   1.5  mrg name changed to GNU Offloading and Multi Processing Runtime Library.
     74   1.1  mrg 
     75   1.1  mrg * Menu:
     76   1.1  mrg 
     77   1.1  mrg * Enabling OpenMP::            How to enable OpenMP for your applications.
     78  1.15  mrg * OpenMP Implementation Status:: List of implemented features by OpenMP version
     79  1.12  mrg * OpenMP Runtime Library Routines: Runtime Library Routines.
     80  1.12  mrg                                The OpenMP runtime application programming
     81   1.1  mrg                                interface.
     82  1.12  mrg * OpenMP Environment Variables: Environment Variables.
     83  1.12  mrg                                Influencing OpenMP runtime behavior with
     84  1.12  mrg                                environment variables.
     85   1.7  mrg * Enabling OpenACC::           How to enable OpenACC for your
     86   1.7  mrg                                applications.
     87   1.7  mrg * OpenACC Runtime Library Routines:: The OpenACC runtime application
     88   1.7  mrg                                programming interface.
     89   1.7  mrg * OpenACC Environment Variables:: Influencing OpenACC runtime behavior with
     90   1.7  mrg                                environment variables.
     91   1.7  mrg * CUDA Streams Usage::         Notes on the implementation of
     92   1.7  mrg                                asynchronous operations.
     93   1.7  mrg * OpenACC Library Interoperability:: OpenACC library interoperability with the
     94   1.7  mrg                                NVIDIA CUBLAS library.
     95  1.13  mrg * OpenACC Profiling Interface::
     96   1.1  mrg * The libgomp ABI::            Notes on the external ABI presented by libgomp.
     97   1.5  mrg * Reporting Bugs::             How to report bugs in the GNU Offloading and
     98   1.5  mrg                                Multi Processing Runtime Library.
     99   1.1  mrg * Copying::                    GNU general public license says
    100   1.1  mrg                                how you can copy and share libgomp.
    101   1.1  mrg * GNU Free Documentation License::
    102   1.1  mrg                                How you can copy and share this manual.
    103   1.1  mrg * Funding::                    How to help assure continued work for free
    104   1.1  mrg                                software.
    105   1.3  mrg * Library Index::              Index of this documentation.
    106   1.1  mrg 
    107   1.1  mrg 
    108  1.15  mrg File: libgomp.info,  Node: Enabling OpenMP,  Next: OpenMP Implementation Status,  Up: Top
    109   1.1  mrg 
    110   1.1  mrg 1 Enabling OpenMP
    111   1.1  mrg *****************
    112   1.1  mrg 
    113   1.1  mrg To activate the OpenMP extensions for C/C++ and Fortran, the
    114  1.11  mrg compile-time flag '-fopenmp' must be specified.  This enables the OpenMP
    115  1.11  mrg directive '#pragma omp' in C/C++ and '!$omp' directives in free form,
    116  1.11  mrg 'c$omp', '*$omp' and '!$omp' directives in fixed form, '!$' conditional
    117  1.11  mrg compilation sentinels in free form and 'c$', '*$' and '!$' sentinels in
    118  1.11  mrg fixed form, for Fortran.  The flag also arranges for automatic linking
    119  1.11  mrg of the OpenMP runtime library (*note Runtime Library Routines::).
    120  1.11  mrg 
    121  1.15  mrg    A complete description of all OpenMP directives may be found in the
    122  1.15  mrg OpenMP Application Program Interface (https://www.openmp.org) manuals.
    123  1.15  mrg See also *note OpenMP Implementation Status::.
    124   1.1  mrg 
    125   1.1  mrg 
    126  1.15  mrg File: libgomp.info,  Node: OpenMP Implementation Status,  Next: Runtime Library Routines,  Prev: Enabling OpenMP,  Up: Top
    127   1.1  mrg 
    128  1.15  mrg 2 OpenMP Implementation Status
    129  1.15  mrg ******************************
    130  1.15  mrg 
    131  1.15  mrg * Menu:
    132  1.15  mrg 
    133  1.15  mrg * OpenMP 4.5:: Feature completion status to 4.5 specification
    134  1.15  mrg * OpenMP 5.0:: Feature completion status to 5.0 specification
    135  1.15  mrg * OpenMP 5.1:: Feature completion status to 5.1 specification
    136  1.15  mrg 
    137  1.15  mrg The '_OPENMP' preprocessor macro and Fortran's 'openmp_version'
    138  1.15  mrg parameter, provided by 'omp_lib.h' and the 'omp_lib' module, have the
    139  1.15  mrg value '201511' (i.e.  OpenMP 4.5).
    140  1.15  mrg 
    141  1.15  mrg 
    142  1.15  mrg File: libgomp.info,  Node: OpenMP 4.5,  Next: OpenMP 5.0,  Up: OpenMP Implementation Status
    143  1.15  mrg 
    144  1.15  mrg 2.1 OpenMP 4.5
    145  1.15  mrg ==============
    146  1.15  mrg 
    147  1.15  mrg The OpenMP 4.5 specification is fully supported.
    148  1.15  mrg 
    149  1.15  mrg 
    150  1.15  mrg File: libgomp.info,  Node: OpenMP 5.0,  Next: OpenMP 5.1,  Prev: OpenMP 4.5,  Up: OpenMP Implementation Status
    151  1.15  mrg 
    152  1.15  mrg 2.2 OpenMP 5.0
    153  1.15  mrg ==============
    154  1.15  mrg 
    155  1.15  mrg New features listed in Appendix B of the OpenMP specification
    156  1.15  mrg -------------------------------------------------------------
    157  1.15  mrg 
    158  1.15  mrg Description                                 Status  Comments
    159  1.15  mrg -----------------------------------------------------------------------
    160  1.15  mrg Array shaping                               N
    161  1.15  mrg Array sections with non-unit strides in C   N
    162  1.15  mrg and C++
    163  1.15  mrg Iterators                                   Y
    164  1.15  mrg 'metadirective' directive                   N
    165  1.15  mrg 'declare variant' directive                 P       simd traits not
    166  1.15  mrg                                                     handled
    167  1.15  mrg                                                     correctly
    168  1.15  mrg _target-offload-var_ ICV and                Y
    169  1.15  mrg 'OMP_TARGET_OFFLOAD' env variable
    170  1.15  mrg Nested-parallel changes to                  Y
    171  1.15  mrg _max-active-levels-var_ ICV
    172  1.15  mrg 'requires' directive                        P       Only fulfillable
    173  1.15  mrg                                                     requirement are
    174  1.15  mrg                                                     'atomic_default_mem_order'
    175  1.15  mrg                                                     and
    176  1.15  mrg                                                     'dynamic_allocators'
    177  1.15  mrg 'teams' construct outside an enclosing      Y
    178  1.15  mrg target region
    179  1.15  mrg Non-rectangular loop nests                  P       Only C/C++
    180  1.15  mrg '!=' as relational-op in canonical loop     Y
    181  1.15  mrg form for C/C++
    182  1.15  mrg 'nonmonotonic' as default loop schedule     Y
    183  1.15  mrg modifier for worksharing-loop constructs
    184  1.15  mrg Collapse of associated loops that are       N
    185  1.15  mrg imperfectly nested loops
    186  1.15  mrg Clauses 'if', 'nontemporal' and             Y
    187  1.15  mrg 'order(concurrent)' in 'simd' construct
    188  1.15  mrg 'atomic' constructs in 'simd'               Y
    189  1.15  mrg 'loop' construct                            Y
    190  1.15  mrg 'order(concurrent)' clause                  Y
    191  1.15  mrg 'scan' directive and 'in_scan' modifier     Y
    192  1.15  mrg for the 'reduction' clause
    193  1.15  mrg 'in_reduction' clause on 'task'             Y
    194  1.15  mrg constructs
    195  1.15  mrg 'in_reduction' clause on 'target'           P       'nowait' only
    196  1.15  mrg constructs                                          stub
    197  1.15  mrg 'task_reduction' clause with 'taskgroup'    Y
    198  1.15  mrg 'task' modifier to 'reduction' clause       Y
    199  1.15  mrg 'affinity' clause to 'task' construct       Y       Stub only
    200  1.15  mrg 'detach' clause to 'task' construct         Y
    201  1.15  mrg 'omp_fulfill_event' runtime routine         Y
    202  1.15  mrg 'reduction' and 'in_reduction' clauses on   Y
    203  1.15  mrg 'taskloop' and 'taskloop simd' constructs
    204  1.15  mrg 'taskloop' construct cancelable by          Y
    205  1.15  mrg 'cancel' construct
    206  1.15  mrg 'mutexinoutset' _dependence-type_ for       Y
    207  1.15  mrg 'depend' clause
    208  1.15  mrg Predefined memory spaces, memory            Y       Some are only
    209  1.15  mrg allocators, allocator traits                        stubs
    210  1.15  mrg Memory management routines                  Y
    211  1.15  mrg 'allocate' directive                        N
    212  1.15  mrg 'allocate' clause                           P       initial support
    213  1.15  mrg 'use_device_addr' clause on 'target data'   Y
    214  1.15  mrg 'ancestor' modifier on 'device' clause      P       Reverse offload
    215  1.15  mrg                                                     unsupported
    216  1.15  mrg Implicit declare target directive           Y
    217  1.15  mrg Discontiguous array section with 'target    N
    218  1.15  mrg update' construct
    219  1.15  mrg C/C++'s lvalue expressions in 'to',         N
    220  1.15  mrg 'from' and 'map' clauses
    221  1.15  mrg C/C++'s lvalue expressions in 'depend'      Y
    222  1.15  mrg clauses
    223  1.15  mrg Nested 'declare target' directive           Y
    224  1.15  mrg Combined 'master' constructs                Y
    225  1.15  mrg 'depend' clause on 'taskwait'               Y
    226  1.15  mrg Weak memory ordering clauses on 'atomic'    Y
    227  1.15  mrg and 'flush' construct
    228  1.15  mrg 'hint' clause on the 'atomic' construct     Y       Stub only
    229  1.15  mrg 'depobj' construct and depend objects       Y
    230  1.15  mrg Lock hints were renamed to                  Y
    231  1.15  mrg synchronization hints
    232  1.15  mrg 'conditional' modifier to 'lastprivate'     Y
    233  1.15  mrg clause
    234  1.15  mrg Map-order clarifications                    P
    235  1.15  mrg 'close' _map-type-modifier_                 Y
    236  1.15  mrg Mapping C/C++ pointer variables and to      P
    237  1.15  mrg assign the address of device memory
    238  1.15  mrg mapped by an array section
    239  1.15  mrg Mapping of Fortran pointer and              P       Mapping of vars
    240  1.15  mrg allocatable variables, including pointer            with allocatable
    241  1.15  mrg and allocatable components of variables             components
    242  1.15  mrg                                                     unsupported
    243  1.15  mrg 'defaultmap' extensions                     Y
    244  1.15  mrg 'declare mapper' directive                  N
    245  1.15  mrg 'omp_get_supported_active_levels' routine   Y
    246  1.15  mrg Runtime routines and environment            Y
    247  1.15  mrg variables to display runtime thread
    248  1.15  mrg affinity information
    249  1.15  mrg 'omp_pause_resource' and                    Y
    250  1.15  mrg 'omp_pause_resource_all' runtime routines
    251  1.15  mrg 'omp_get_device_num' runtime routine        Y
    252  1.15  mrg OMPT interface                              N
    253  1.15  mrg OMPD interface                              N
    254  1.15  mrg 
    255  1.15  mrg Other new OpenMP 5.0 features
    256  1.15  mrg -----------------------------
    257  1.15  mrg 
    258  1.15  mrg Description                                 Status  Comments
    259  1.15  mrg -----------------------------------------------------------------------
    260  1.15  mrg Supporting C++'s range-based for loop       Y
    261  1.15  mrg 
    262  1.15  mrg 
    263  1.15  mrg File: libgomp.info,  Node: OpenMP 5.1,  Prev: OpenMP 5.0,  Up: OpenMP Implementation Status
    264  1.15  mrg 
    265  1.15  mrg 2.3 OpenMP 5.1
    266  1.15  mrg ==============
    267  1.15  mrg 
    268  1.15  mrg New features listed in Appendix B of the OpenMP specification
    269  1.15  mrg -------------------------------------------------------------
    270  1.15  mrg 
    271  1.15  mrg Description                                 Status  Comments
    272  1.15  mrg -----------------------------------------------------------------------
    273  1.15  mrg OpenMP directive as C++ attribute           Y
    274  1.15  mrg specifiers
    275  1.15  mrg 'omp_all_memory' reserved locator           N
    276  1.15  mrg _target_device trait_ in OpenMP Context     N
    277  1.15  mrg 'target_device' selector set in context     N
    278  1.15  mrg selectors
    279  1.15  mrg C/C++'s 'declare variant' directive:        N
    280  1.15  mrg elision support of preprocessed code
    281  1.15  mrg 'declare variant': new clauses              N
    282  1.15  mrg 'adjust_args' and 'append_args'
    283  1.15  mrg 'dispatch' construct                        N
    284  1.15  mrg device-specific ICV settings the            N
    285  1.15  mrg environment variables
    286  1.15  mrg assume directive                            N
    287  1.15  mrg 'nothing' directive                         Y
    288  1.15  mrg 'error' directive                           Y
    289  1.15  mrg 'masked' construct                          Y
    290  1.15  mrg 'scope' directive                           Y
    291  1.15  mrg Loop transformation constructs              N
    292  1.15  mrg 'strict' modifier in the 'grainsize' and    Y
    293  1.15  mrg 'num_tasks' clauses of the taskloop
    294  1.15  mrg construct
    295  1.15  mrg 'align' clause/modifier in 'allocate'       P       C/C++ on clause
    296  1.15  mrg directive/clause and 'allocator'                    only
    297  1.15  mrg directive
    298  1.15  mrg 'thread_limit' clause to 'target'           Y
    299  1.15  mrg construct
    300  1.15  mrg 'has_device_addr' clause to 'target'        Y
    301  1.15  mrg construct
    302  1.15  mrg iterators in 'target update' motion         N
    303  1.15  mrg clauses and 'map' clauses
    304  1.15  mrg indirect calls to the device version of a   N
    305  1.15  mrg procedure or function in 'target' regions
    306  1.15  mrg 'interop' directive                         N
    307  1.15  mrg 'omp_interop_t' object support in runtime   N
    308  1.15  mrg routines
    309  1.15  mrg 'nowait' clause in 'taskwait' directive     N
    310  1.15  mrg Extensions to the 'atomic' directive        Y
    311  1.15  mrg 'seq_cst' clause on a 'flush' construct     Y
    312  1.15  mrg 'inoutset' argument to the 'depend'         N
    313  1.15  mrg clause
    314  1.15  mrg 'private' and 'firstprivate' argument to    Y
    315  1.15  mrg 'default' clause in C and C++
    316  1.15  mrg 'present' argument to 'defaultmap' clause   N
    317  1.15  mrg 'omp_set_num_teams',                        Y
    318  1.15  mrg 'omp_set_teams_thread_limit',
    319  1.15  mrg 'omp_get_max_teams',
    320  1.15  mrg 'omp_get_teams_thread_limit' runtime
    321  1.15  mrg routines
    322  1.15  mrg 'omp_target_is_accessible' runtime          N
    323  1.15  mrg routine
    324  1.15  mrg 'omp_target_memcpy_async' and               N
    325  1.15  mrg 'omp_target_memcpy_rect_async' runtime
    326  1.15  mrg routines
    327  1.15  mrg 'omp_get_mapped_ptr' runtime routine        N
    328  1.15  mrg 'omp_calloc', 'omp_realloc',                Y
    329  1.15  mrg 'omp_aligned_alloc' and
    330  1.15  mrg 'omp_aligned_calloc' runtime routines
    331  1.15  mrg 'omp_alloctrait_key_t' enum:                Y
    332  1.15  mrg 'omp_atv_serialized' added,
    333  1.15  mrg 'omp_atv_default' changed
    334  1.15  mrg 'omp_display_env' runtime routine           Y
    335  1.15  mrg 'ompt_scope_endpoint_t' enum:               N
    336  1.15  mrg 'ompt_scope_beginend'
    337  1.15  mrg 'ompt_sync_region_t' enum additions         N
    338  1.15  mrg 'ompt_state_t' enum:                        N
    339  1.15  mrg 'ompt_state_wait_barrier_implementation'
    340  1.15  mrg and 'ompt_state_wait_barrier_teams'
    341  1.15  mrg 'ompt_callback_target_data_op_emi_t',       N
    342  1.15  mrg 'ompt_callback_target_emi_t',
    343  1.15  mrg 'ompt_callback_target_map_emi_t' and
    344  1.15  mrg 'ompt_callback_target_submit_emi_t'
    345  1.15  mrg 'ompt_callback_error_t' type                N
    346  1.15  mrg 'OMP_PLACES' syntax extensions              Y
    347  1.15  mrg 'OMP_NUM_TEAMS' and                         Y
    348  1.15  mrg 'OMP_TEAMS_THREAD_LIMIT' environment
    349  1.15  mrg variables
    350  1.15  mrg 
    351  1.15  mrg Other new OpenMP 5.1 features
    352  1.15  mrg -----------------------------
    353  1.15  mrg 
    354  1.15  mrg Description                                 Status  Comments
    355  1.15  mrg -----------------------------------------------------------------------
    356  1.15  mrg Support of strictly structured blocks in    Y
    357  1.15  mrg Fortran
    358  1.15  mrg Support of structured block sequences in    Y
    359  1.15  mrg C/C++
    360  1.15  mrg 'unconstrained' and 'reproducible'          Y
    361  1.15  mrg modifiers on 'order' clause
    362  1.15  mrg 
    363  1.15  mrg 
    364  1.15  mrg File: libgomp.info,  Node: Runtime Library Routines,  Next: Environment Variables,  Prev: OpenMP Implementation Status,  Up: Top
    365  1.15  mrg 
    366  1.15  mrg 3 OpenMP Runtime Library Routines
    367  1.12  mrg *********************************
    368   1.1  mrg 
    369   1.5  mrg The runtime routines described here are defined by Section 3 of the
    370   1.7  mrg OpenMP specification in version 4.5.  The routines are structured in
    371   1.1  mrg following three parts:
    372   1.1  mrg 
    373   1.5  mrg * Menu:
    374   1.1  mrg 
    375   1.5  mrg Control threads, processors and the parallel environment.  They have C
    376   1.5  mrg linkage, and do not throw exceptions.
    377   1.1  mrg 
    378   1.1  mrg * omp_get_active_level::        Number of active parallel regions
    379   1.1  mrg * omp_get_ancestor_thread_num:: Ancestor thread ID
    380   1.5  mrg * omp_get_cancellation::        Whether cancellation support is enabled
    381   1.5  mrg * omp_get_default_device::      Get the default device for target regions
    382  1.15  mrg * omp_get_device_num::          Get device that current thread is running on
    383   1.1  mrg * omp_get_dynamic::             Dynamic teams setting
    384  1.15  mrg * omp_get_initial_device::      Device number of host device
    385   1.1  mrg * omp_get_level::               Number of parallel regions
    386  1.15  mrg * omp_get_max_active_levels::   Current maximum number of active regions
    387   1.7  mrg * omp_get_max_task_priority::   Maximum task priority value that can be set
    388  1.15  mrg * omp_get_max_teams::           Maximum number of teams for teams region
    389   1.3  mrg * omp_get_max_threads::         Maximum number of threads of parallel region
    390   1.1  mrg * omp_get_nested::              Nested parallel regions
    391   1.5  mrg * omp_get_num_devices::         Number of target devices
    392   1.1  mrg * omp_get_num_procs::           Number of processors online
    393   1.5  mrg * omp_get_num_teams::           Number of teams
    394   1.1  mrg * omp_get_num_threads::         Size of the active team
    395  1.14  mrg * omp_get_proc_bind::           Whether threads may be moved between CPUs
    396   1.1  mrg * omp_get_schedule::            Obtain the runtime scheduling method
    397  1.15  mrg * omp_get_supported_active_levels:: Maximum number of active regions supported
    398   1.5  mrg * omp_get_team_num::            Get team number
    399   1.1  mrg * omp_get_team_size::           Number of threads in a team
    400  1.15  mrg * omp_get_teams_thread_limit::  Maximum number of threads imposed by teams
    401   1.3  mrg * omp_get_thread_limit::        Maximum number of threads
    402   1.1  mrg * omp_get_thread_num::          Current thread ID
    403   1.1  mrg * omp_in_parallel::             Whether a parallel region is active
    404   1.3  mrg * omp_in_final::                Whether in final or included task region
    405   1.5  mrg * omp_is_initial_device::       Whether executing on the host device
    406   1.5  mrg * omp_set_default_device::      Set the default device for target regions
    407   1.1  mrg * omp_set_dynamic::             Enable/disable dynamic teams
    408   1.1  mrg * omp_set_max_active_levels::   Limits the number of active parallel regions
    409   1.1  mrg * omp_set_nested::              Enable/disable nested parallel regions
    410  1.15  mrg * omp_set_num_teams::           Set upper teams limit for teams region
    411   1.1  mrg * omp_set_num_threads::         Set upper team size limit
    412   1.1  mrg * omp_set_schedule::            Set the runtime scheduling method
    413  1.15  mrg * omp_set_teams_thread_limit::  Set upper thread limit for teams construct
    414   1.1  mrg 
    415   1.5  mrg Initialize, set, test, unset and destroy simple and nested locks.
    416   1.1  mrg 
    417   1.1  mrg * omp_init_lock::            Initialize simple lock
    418   1.1  mrg * omp_set_lock::             Wait for and set simple lock
    419   1.1  mrg * omp_test_lock::            Test and set simple lock if available
    420   1.1  mrg * omp_unset_lock::           Unset simple lock
    421   1.1  mrg * omp_destroy_lock::         Destroy simple lock
    422   1.1  mrg * omp_init_nest_lock::       Initialize nested lock
    423   1.1  mrg * omp_set_nest_lock::        Wait for and set simple lock
    424   1.1  mrg * omp_test_nest_lock::       Test and set nested lock if available
    425   1.1  mrg * omp_unset_nest_lock::      Unset nested lock
    426   1.1  mrg * omp_destroy_nest_lock::    Destroy nested lock
    427   1.1  mrg 
    428   1.5  mrg Portable, thread-based, wall clock timer.
    429   1.1  mrg 
    430   1.1  mrg * omp_get_wtick::            Get timer precision.
    431   1.1  mrg * omp_get_wtime::            Elapsed wall clock time.
    432   1.1  mrg 
    433  1.15  mrg Support for event objects.
    434  1.15  mrg 
    435  1.15  mrg * omp_fulfill_event::        Fulfill and destroy an OpenMP event.
    436  1.15  mrg 
    437   1.1  mrg 
    438   1.1  mrg File: libgomp.info,  Node: omp_get_active_level,  Next: omp_get_ancestor_thread_num,  Up: Runtime Library Routines
    439   1.1  mrg 
    440  1.15  mrg 3.1 'omp_get_active_level' - Number of parallel regions
    441   1.1  mrg =======================================================
    442   1.1  mrg 
    443   1.1  mrg _Description_:
    444   1.1  mrg      This function returns the nesting level for the active parallel
    445   1.1  mrg      blocks, which enclose the calling call.
    446   1.1  mrg 
    447   1.1  mrg _C/C++_
    448  1.11  mrg      _Prototype_:   'int omp_get_active_level(void);'
    449   1.1  mrg 
    450   1.1  mrg _Fortran_:
    451  1.11  mrg      _Interface_:   'integer function omp_get_active_level()'
    452   1.1  mrg 
    453   1.1  mrg _See also_:
    454   1.1  mrg      *note omp_get_level::, *note omp_get_max_active_levels::, *note
    455   1.1  mrg      omp_set_max_active_levels::
    456   1.1  mrg 
    457   1.1  mrg _Reference_:
    458  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.20.
    459   1.1  mrg 
    460   1.1  mrg 
    461   1.5  mrg File: libgomp.info,  Node: omp_get_ancestor_thread_num,  Next: omp_get_cancellation,  Prev: omp_get_active_level,  Up: Runtime Library Routines
    462   1.1  mrg 
    463  1.15  mrg 3.2 'omp_get_ancestor_thread_num' - Ancestor thread ID
    464   1.1  mrg ======================================================
    465   1.1  mrg 
    466   1.1  mrg _Description_:
    467   1.1  mrg      This function returns the thread identification number for the
    468   1.5  mrg      given nesting level of the current thread.  For values of LEVEL
    469  1.11  mrg      outside zero to 'omp_get_level' -1 is returned; if LEVEL is
    470  1.11  mrg      'omp_get_level' the result is identical to 'omp_get_thread_num'.
    471   1.1  mrg 
    472   1.1  mrg _C/C++_
    473  1.11  mrg      _Prototype_:   'int omp_get_ancestor_thread_num(int level);'
    474   1.1  mrg 
    475   1.1  mrg _Fortran_:
    476  1.11  mrg      _Interface_:   'integer function omp_get_ancestor_thread_num(level)'
    477  1.11  mrg                     'integer level'
    478   1.1  mrg 
    479   1.1  mrg _See also_:
    480   1.1  mrg      *note omp_get_level::, *note omp_get_thread_num::, *note
    481   1.1  mrg      omp_get_team_size::
    482   1.1  mrg 
    483   1.1  mrg _Reference_:
    484  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.18.
    485   1.1  mrg 
    486   1.1  mrg 
    487   1.5  mrg File: libgomp.info,  Node: omp_get_cancellation,  Next: omp_get_default_device,  Prev: omp_get_ancestor_thread_num,  Up: Runtime Library Routines
    488   1.5  mrg 
    489  1.15  mrg 3.3 'omp_get_cancellation' - Whether cancellation support is enabled
    490   1.5  mrg ====================================================================
    491   1.5  mrg 
    492   1.5  mrg _Description_:
    493  1.11  mrg      This function returns 'true' if cancellation is activated, 'false'
    494  1.11  mrg      otherwise.  Here, 'true' and 'false' represent their
    495  1.11  mrg      language-specific counterparts.  Unless 'OMP_CANCELLATION' is set
    496   1.5  mrg      true, cancellations are deactivated.
    497   1.5  mrg 
    498   1.5  mrg _C/C++_:
    499  1.11  mrg      _Prototype_:   'int omp_get_cancellation(void);'
    500   1.5  mrg 
    501   1.5  mrg _Fortran_:
    502  1.11  mrg      _Interface_:   'logical function omp_get_cancellation()'
    503   1.5  mrg 
    504   1.5  mrg _See also_:
    505   1.5  mrg      *note OMP_CANCELLATION::
    506   1.5  mrg 
    507   1.5  mrg _Reference_:
    508  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.9.
    509   1.5  mrg 
    510   1.5  mrg 
    511  1.15  mrg File: libgomp.info,  Node: omp_get_default_device,  Next: omp_get_device_num,  Prev: omp_get_cancellation,  Up: Runtime Library Routines
    512   1.5  mrg 
    513  1.15  mrg 3.4 'omp_get_default_device' - Get the default device for target regions
    514   1.5  mrg ========================================================================
    515   1.5  mrg 
    516   1.5  mrg _Description_:
    517   1.5  mrg      Get the default device for target regions without device clause.
    518   1.5  mrg 
    519   1.5  mrg _C/C++_:
    520  1.11  mrg      _Prototype_:   'int omp_get_default_device(void);'
    521   1.1  mrg 
    522   1.5  mrg _Fortran_:
    523  1.11  mrg      _Interface_:   'integer function omp_get_default_device()'
    524   1.5  mrg 
    525   1.5  mrg _See also_:
    526   1.5  mrg      *note OMP_DEFAULT_DEVICE::, *note omp_set_default_device::
    527   1.5  mrg 
    528   1.5  mrg _Reference_:
    529  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.30.
    530   1.5  mrg 
    531   1.5  mrg 
    532  1.15  mrg File: libgomp.info,  Node: omp_get_device_num,  Next: omp_get_dynamic,  Prev: omp_get_default_device,  Up: Runtime Library Routines
    533  1.15  mrg 
    534  1.15  mrg 3.5 'omp_get_device_num' - Return device number of current device
    535  1.15  mrg =================================================================
    536  1.15  mrg 
    537  1.15  mrg _Description_:
    538  1.15  mrg      This function returns a device number that represents the device
    539  1.15  mrg      that the current thread is executing on.  For OpenMP 5.0, this must
    540  1.15  mrg      be equal to the value returned by the 'omp_get_initial_device'
    541  1.15  mrg      function when called from the host.
    542  1.15  mrg 
    543  1.15  mrg _C/C++_
    544  1.15  mrg      _Prototype_:   'int omp_get_device_num(void);'
    545  1.15  mrg 
    546  1.15  mrg _Fortran_:
    547  1.15  mrg      _Interface_:   'integer function omp_get_device_num()'
    548  1.15  mrg 
    549  1.15  mrg _See also_:
    550  1.15  mrg      *note omp_get_initial_device::
    551  1.15  mrg 
    552  1.15  mrg _Reference_:
    553  1.15  mrg      OpenMP specification v5.0 (https://www.openmp.org), Section 3.2.37.
    554   1.5  mrg 
    555  1.15  mrg 
    556  1.15  mrg File: libgomp.info,  Node: omp_get_dynamic,  Next: omp_get_initial_device,  Prev: omp_get_device_num,  Up: Runtime Library Routines
    557  1.15  mrg 
    558  1.15  mrg 3.6 'omp_get_dynamic' - Dynamic teams setting
    559   1.1  mrg =============================================
    560   1.1  mrg 
    561   1.1  mrg _Description_:
    562  1.11  mrg      This function returns 'true' if enabled, 'false' otherwise.  Here,
    563  1.11  mrg      'true' and 'false' represent their language-specific counterparts.
    564   1.1  mrg 
    565   1.1  mrg      The dynamic team setting may be initialized at startup by the
    566  1.11  mrg      'OMP_DYNAMIC' environment variable or at runtime using
    567  1.11  mrg      'omp_set_dynamic'.  If undefined, dynamic adjustment is disabled by
    568  1.11  mrg      default.
    569   1.1  mrg 
    570   1.1  mrg _C/C++_:
    571  1.11  mrg      _Prototype_:   'int omp_get_dynamic(void);'
    572   1.1  mrg 
    573   1.1  mrg _Fortran_:
    574  1.11  mrg      _Interface_:   'logical function omp_get_dynamic()'
    575   1.1  mrg 
    576   1.1  mrg _See also_:
    577   1.1  mrg      *note omp_set_dynamic::, *note OMP_DYNAMIC::
    578   1.1  mrg 
    579   1.1  mrg _Reference_:
    580  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.8.
    581   1.1  mrg 
    582   1.1  mrg 
    583  1.15  mrg File: libgomp.info,  Node: omp_get_initial_device,  Next: omp_get_level,  Prev: omp_get_dynamic,  Up: Runtime Library Routines
    584  1.15  mrg 
    585  1.15  mrg 3.7 'omp_get_initial_device' - Return device number of initial device
    586  1.15  mrg =====================================================================
    587  1.15  mrg 
    588  1.15  mrg _Description_:
    589  1.15  mrg      This function returns a device number that represents the host
    590  1.15  mrg      device.  For OpenMP 5.1, this must be equal to the value returned
    591  1.15  mrg      by the 'omp_get_num_devices' function.
    592  1.15  mrg 
    593  1.15  mrg _C/C++_
    594  1.15  mrg      _Prototype_:   'int omp_get_initial_device(void);'
    595  1.15  mrg 
    596  1.15  mrg _Fortran_:
    597  1.15  mrg      _Interface_:   'integer function omp_get_initial_device()'
    598  1.15  mrg 
    599  1.15  mrg _See also_:
    600  1.15  mrg      *note omp_get_num_devices::
    601  1.15  mrg 
    602  1.15  mrg _Reference_:
    603  1.15  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.35.
    604  1.15  mrg 
    605  1.15  mrg 
    606  1.15  mrg File: libgomp.info,  Node: omp_get_level,  Next: omp_get_max_active_levels,  Prev: omp_get_initial_device,  Up: Runtime Library Routines
    607   1.1  mrg 
    608  1.15  mrg 3.8 'omp_get_level' - Obtain the current nesting level
    609   1.1  mrg ======================================================
    610   1.1  mrg 
    611   1.1  mrg _Description_:
    612   1.1  mrg      This function returns the nesting level for the parallel blocks,
    613   1.1  mrg      which enclose the calling call.
    614   1.1  mrg 
    615   1.1  mrg _C/C++_
    616  1.11  mrg      _Prototype_:   'int omp_get_level(void);'
    617   1.1  mrg 
    618   1.1  mrg _Fortran_:
    619  1.11  mrg      _Interface_:   'integer function omp_level()'
    620   1.1  mrg 
    621   1.1  mrg _See also_:
    622   1.1  mrg      *note omp_get_active_level::
    623   1.1  mrg 
    624   1.1  mrg _Reference_:
    625  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.17.
    626   1.1  mrg 
    627   1.1  mrg 
    628   1.7  mrg File: libgomp.info,  Node: omp_get_max_active_levels,  Next: omp_get_max_task_priority,  Prev: omp_get_level,  Up: Runtime Library Routines
    629   1.1  mrg 
    630  1.15  mrg 3.9 'omp_get_max_active_levels' - Current maximum number of active regions
    631  1.15  mrg ==========================================================================
    632   1.1  mrg 
    633   1.1  mrg _Description_:
    634   1.3  mrg      This function obtains the maximum allowed number of nested, active
    635   1.3  mrg      parallel regions.
    636   1.1  mrg 
    637   1.1  mrg _C/C++_
    638  1.11  mrg      _Prototype_:   'int omp_get_max_active_levels(void);'
    639   1.1  mrg 
    640   1.1  mrg _Fortran_:
    641  1.11  mrg      _Interface_:   'integer function omp_get_max_active_levels()'
    642   1.1  mrg 
    643   1.1  mrg _See also_:
    644   1.1  mrg      *note omp_set_max_active_levels::, *note omp_get_active_level::
    645   1.1  mrg 
    646   1.1  mrg _Reference_:
    647  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.16.
    648   1.1  mrg 
    649   1.1  mrg 
    650  1.15  mrg File: libgomp.info,  Node: omp_get_max_task_priority,  Next: omp_get_max_teams,  Prev: omp_get_max_active_levels,  Up: Runtime Library Routines
    651   1.7  mrg 
    652  1.15  mrg 3.10 'omp_get_max_task_priority' - Maximum priority value
    653  1.15  mrg =========================================================
    654   1.7  mrg 
    655   1.7  mrg that can be set for tasks.
    656   1.7  mrg _Description_:
    657   1.7  mrg      This function obtains the maximum allowed priority number for
    658   1.7  mrg      tasks.
    659   1.7  mrg 
    660   1.7  mrg _C/C++_
    661  1.11  mrg      _Prototype_:   'int omp_get_max_task_priority(void);'
    662   1.1  mrg 
    663   1.7  mrg _Fortran_:
    664  1.11  mrg      _Interface_:   'integer function omp_get_max_task_priority()'
    665   1.7  mrg 
    666   1.7  mrg _Reference_:
    667  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.29.
    668   1.7  mrg 
    669   1.7  mrg 
    670  1.15  mrg File: libgomp.info,  Node: omp_get_max_teams,  Next: omp_get_max_threads,  Prev: omp_get_max_task_priority,  Up: Runtime Library Routines
    671  1.15  mrg 
    672  1.15  mrg 3.11 'omp_get_max_teams' - Maximum number of teams of teams region
    673  1.15  mrg ==================================================================
    674  1.15  mrg 
    675  1.15  mrg _Description_:
    676  1.15  mrg      Return the maximum number of teams used for the teams region that
    677  1.15  mrg      does not use the clause 'num_teams'.
    678  1.15  mrg 
    679  1.15  mrg _C/C++_:
    680  1.15  mrg      _Prototype_:   'int omp_get_max_teams(void);'
    681  1.15  mrg 
    682  1.15  mrg _Fortran_:
    683  1.15  mrg      _Interface_:   'integer function omp_get_max_teams()'
    684  1.15  mrg 
    685  1.15  mrg _See also_:
    686  1.15  mrg      *note omp_set_num_teams::, *note omp_get_num_teams::
    687  1.15  mrg 
    688  1.15  mrg _Reference_:
    689  1.15  mrg      OpenMP specification v5.1 (https://www.openmp.org), Section 3.4.4.
    690  1.15  mrg 
    691  1.15  mrg 
    692  1.15  mrg File: libgomp.info,  Node: omp_get_max_threads,  Next: omp_get_nested,  Prev: omp_get_max_teams,  Up: Runtime Library Routines
    693   1.7  mrg 
    694  1.15  mrg 3.12 'omp_get_max_threads' - Maximum number of threads of parallel region
    695  1.15  mrg =========================================================================
    696   1.1  mrg 
    697   1.1  mrg _Description_:
    698   1.3  mrg      Return the maximum number of threads used for the current parallel
    699  1.11  mrg      region that does not use the clause 'num_threads'.
    700   1.1  mrg 
    701   1.1  mrg _C/C++_:
    702  1.11  mrg      _Prototype_:   'int omp_get_max_threads(void);'
    703   1.1  mrg 
    704   1.1  mrg _Fortran_:
    705  1.11  mrg      _Interface_:   'integer function omp_get_max_threads()'
    706   1.1  mrg 
    707   1.1  mrg _See also_:
    708   1.1  mrg      *note omp_set_num_threads::, *note omp_set_dynamic::, *note
    709   1.1  mrg      omp_get_thread_limit::
    710   1.1  mrg 
    711   1.1  mrg _Reference_:
    712  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.3.
    713   1.1  mrg 
    714   1.1  mrg 
    715   1.5  mrg File: libgomp.info,  Node: omp_get_nested,  Next: omp_get_num_devices,  Prev: omp_get_max_threads,  Up: Runtime Library Routines
    716   1.1  mrg 
    717  1.15  mrg 3.13 'omp_get_nested' - Nested parallel regions
    718   1.7  mrg ===============================================
    719   1.1  mrg 
    720   1.1  mrg _Description_:
    721  1.11  mrg      This function returns 'true' if nested parallel regions are
    722  1.11  mrg      enabled, 'false' otherwise.  Here, 'true' and 'false' represent
    723   1.1  mrg      their language-specific counterparts.
    724   1.1  mrg 
    725  1.15  mrg      The state of nested parallel regions at startup depends on several
    726  1.15  mrg      environment variables.  If 'OMP_MAX_ACTIVE_LEVELS' is defined and
    727  1.15  mrg      is set to greater than one, then nested parallel regions will be
    728  1.15  mrg      enabled.  If not defined, then the value of the 'OMP_NESTED'
    729  1.15  mrg      environment variable will be followed if defined.  If neither are
    730  1.15  mrg      defined, then if either 'OMP_NUM_THREADS' or 'OMP_PROC_BIND' are
    731  1.15  mrg      defined with a list of more than one value, then nested parallel
    732  1.15  mrg      regions are enabled.  If none of these are defined, then nested
    733  1.15  mrg      parallel regions are disabled by default.
    734  1.15  mrg 
    735  1.15  mrg      Nested parallel regions can be enabled or disabled at runtime using
    736  1.15  mrg      'omp_set_nested', or by setting the maximum number of nested
    737  1.15  mrg      regions with 'omp_set_max_active_levels' to one to disable, or
    738  1.15  mrg      above one to enable.
    739   1.1  mrg 
    740   1.1  mrg _C/C++_:
    741  1.11  mrg      _Prototype_:   'int omp_get_nested(void);'
    742   1.1  mrg 
    743   1.1  mrg _Fortran_:
    744  1.11  mrg      _Interface_:   'logical function omp_get_nested()'
    745   1.1  mrg 
    746   1.1  mrg _See also_:
    747  1.15  mrg      *note omp_set_max_active_levels::, *note omp_set_nested::, *note
    748  1.15  mrg      OMP_MAX_ACTIVE_LEVELS::, *note OMP_NESTED::
    749   1.1  mrg 
    750   1.1  mrg _Reference_:
    751  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.11.
    752   1.1  mrg 
    753   1.1  mrg 
    754   1.5  mrg File: libgomp.info,  Node: omp_get_num_devices,  Next: omp_get_num_procs,  Prev: omp_get_nested,  Up: Runtime Library Routines
    755   1.1  mrg 
    756  1.15  mrg 3.14 'omp_get_num_devices' - Number of target devices
    757   1.1  mrg =====================================================
    758   1.1  mrg 
    759   1.1  mrg _Description_:
    760   1.5  mrg      Returns the number of target devices.
    761   1.5  mrg 
    762   1.5  mrg _C/C++_:
    763  1.11  mrg      _Prototype_:   'int omp_get_num_devices(void);'
    764   1.5  mrg 
    765   1.5  mrg _Fortran_:
    766  1.11  mrg      _Interface_:   'integer function omp_get_num_devices()'
    767   1.5  mrg 
    768   1.5  mrg _Reference_:
    769  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.31.
    770   1.5  mrg 
    771   1.5  mrg 
    772   1.5  mrg File: libgomp.info,  Node: omp_get_num_procs,  Next: omp_get_num_teams,  Prev: omp_get_num_devices,  Up: Runtime Library Routines
    773   1.5  mrg 
    774  1.15  mrg 3.15 'omp_get_num_procs' - Number of processors online
    775   1.5  mrg ======================================================
    776   1.5  mrg 
    777   1.5  mrg _Description_:
    778   1.5  mrg      Returns the number of processors online on that device.
    779   1.1  mrg 
    780   1.1  mrg _C/C++_:
    781  1.11  mrg      _Prototype_:   'int omp_get_num_procs(void);'
    782   1.1  mrg 
    783   1.1  mrg _Fortran_:
    784  1.11  mrg      _Interface_:   'integer function omp_get_num_procs()'
    785   1.1  mrg 
    786   1.1  mrg _Reference_:
    787  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.5.
    788   1.1  mrg 
    789   1.1  mrg 
    790   1.5  mrg File: libgomp.info,  Node: omp_get_num_teams,  Next: omp_get_num_threads,  Prev: omp_get_num_procs,  Up: Runtime Library Routines
    791   1.1  mrg 
    792  1.15  mrg 3.16 'omp_get_num_teams' - Number of teams
    793   1.5  mrg ==========================================
    794   1.1  mrg 
    795   1.1  mrg _Description_:
    796   1.5  mrg      Returns the number of teams in the current team region.
    797   1.5  mrg 
    798   1.5  mrg _C/C++_:
    799  1.11  mrg      _Prototype_:   'int omp_get_num_teams(void);'
    800   1.5  mrg 
    801   1.5  mrg _Fortran_:
    802  1.11  mrg      _Interface_:   'integer function omp_get_num_teams()'
    803   1.5  mrg 
    804   1.5  mrg _Reference_:
    805  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.32.
    806   1.5  mrg 
    807   1.5  mrg 
    808   1.5  mrg File: libgomp.info,  Node: omp_get_num_threads,  Next: omp_get_proc_bind,  Prev: omp_get_num_teams,  Up: Runtime Library Routines
    809   1.5  mrg 
    810  1.15  mrg 3.17 'omp_get_num_threads' - Size of the active team
    811   1.5  mrg ====================================================
    812   1.5  mrg 
    813   1.5  mrg _Description_:
    814  1.11  mrg      Returns the number of threads in the current team.  In a sequential
    815  1.11  mrg      section of the program 'omp_get_num_threads' returns 1.
    816   1.1  mrg 
    817   1.1  mrg      The default team size may be initialized at startup by the
    818  1.11  mrg      'OMP_NUM_THREADS' environment variable.  At runtime, the size of
    819  1.11  mrg      the current team may be set either by the 'NUM_THREADS' clause or
    820  1.11  mrg      by 'omp_set_num_threads'.  If none of the above were used to define
    821  1.11  mrg      a specific value and 'OMP_DYNAMIC' is disabled, one thread per CPU
    822  1.11  mrg      online is used.
    823   1.1  mrg 
    824   1.1  mrg _C/C++_:
    825  1.11  mrg      _Prototype_:   'int omp_get_num_threads(void);'
    826   1.1  mrg 
    827   1.1  mrg _Fortran_:
    828  1.11  mrg      _Interface_:   'integer function omp_get_num_threads()'
    829   1.1  mrg 
    830   1.1  mrg _See also_:
    831   1.1  mrg      *note omp_get_max_threads::, *note omp_set_num_threads::, *note
    832   1.1  mrg      OMP_NUM_THREADS::
    833   1.1  mrg 
    834   1.1  mrg _Reference_:
    835  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.2.
    836   1.5  mrg 
    837   1.5  mrg 
    838   1.5  mrg File: libgomp.info,  Node: omp_get_proc_bind,  Next: omp_get_schedule,  Prev: omp_get_num_threads,  Up: Runtime Library Routines
    839   1.5  mrg 
    840  1.15  mrg 3.18 'omp_get_proc_bind' - Whether threads may be moved between CPUs
    841  1.14  mrg ====================================================================
    842   1.5  mrg 
    843   1.5  mrg _Description_:
    844  1.11  mrg      This functions returns the currently active thread affinity policy,
    845  1.11  mrg      which is set via 'OMP_PROC_BIND'.  Possible values are
    846  1.11  mrg      'omp_proc_bind_false', 'omp_proc_bind_true',
    847  1.15  mrg      'omp_proc_bind_primary', 'omp_proc_bind_master',
    848  1.15  mrg      'omp_proc_bind_close' and 'omp_proc_bind_spread', where
    849  1.15  mrg      'omp_proc_bind_master' is an alias for 'omp_proc_bind_primary'.
    850   1.5  mrg 
    851   1.5  mrg _C/C++_:
    852  1.11  mrg      _Prototype_:   'omp_proc_bind_t omp_get_proc_bind(void);'
    853   1.5  mrg 
    854   1.5  mrg _Fortran_:
    855  1.11  mrg      _Interface_:   'integer(kind=omp_proc_bind_kind) function
    856  1.11  mrg                     omp_get_proc_bind()'
    857   1.5  mrg 
    858   1.5  mrg _See also_:
    859   1.5  mrg      *note OMP_PROC_BIND::, *note OMP_PLACES::, *note
    860   1.5  mrg      GOMP_CPU_AFFINITY::,
    861   1.5  mrg 
    862   1.5  mrg _Reference_:
    863  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.22.
    864   1.1  mrg 
    865   1.1  mrg 
    866  1.15  mrg File: libgomp.info,  Node: omp_get_schedule,  Next: omp_get_supported_active_levels,  Prev: omp_get_proc_bind,  Up: Runtime Library Routines
    867   1.1  mrg 
    868  1.15  mrg 3.19 'omp_get_schedule' - Obtain the runtime scheduling method
    869   1.1  mrg ==============================================================
    870   1.1  mrg 
    871   1.1  mrg _Description_:
    872   1.5  mrg      Obtain the runtime scheduling method.  The KIND argument will be
    873  1.11  mrg      set to the value 'omp_sched_static', 'omp_sched_dynamic',
    874  1.11  mrg      'omp_sched_guided' or 'omp_sched_auto'.  The second argument,
    875   1.7  mrg      CHUNK_SIZE, is set to the chunk size.
    876   1.1  mrg 
    877   1.1  mrg _C/C++_
    878  1.11  mrg      _Prototype_:   'void omp_get_schedule(omp_sched_t *kind, int
    879  1.11  mrg                     *chunk_size);'
    880   1.1  mrg 
    881   1.1  mrg _Fortran_:
    882  1.11  mrg      _Interface_:   'subroutine omp_get_schedule(kind, chunk_size)'
    883  1.11  mrg                     'integer(kind=omp_sched_kind) kind'
    884  1.11  mrg                     'integer chunk_size'
    885   1.1  mrg 
    886   1.1  mrg _See also_:
    887   1.1  mrg      *note omp_set_schedule::, *note OMP_SCHEDULE::
    888   1.1  mrg 
    889   1.1  mrg _Reference_:
    890  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.13.
    891   1.5  mrg 
    892   1.5  mrg 
    893  1.15  mrg File: libgomp.info,  Node: omp_get_supported_active_levels,  Next: omp_get_team_num,  Prev: omp_get_schedule,  Up: Runtime Library Routines
    894  1.15  mrg 
    895  1.15  mrg 3.20 'omp_get_supported_active_levels' - Maximum number of active regions supported
    896  1.15  mrg ===================================================================================
    897  1.15  mrg 
    898  1.15  mrg _Description_:
    899  1.15  mrg      This function returns the maximum number of nested, active parallel
    900  1.15  mrg      regions supported by this implementation.
    901  1.15  mrg 
    902  1.15  mrg _C/C++_
    903  1.15  mrg      _Prototype_:   'int omp_get_supported_active_levels(void);'
    904   1.5  mrg 
    905  1.15  mrg _Fortran_:
    906  1.15  mrg      _Interface_:   'integer function omp_get_supported_active_levels()'
    907  1.15  mrg 
    908  1.15  mrg _See also_:
    909  1.15  mrg      *note omp_get_max_active_levels::, *note
    910  1.15  mrg      omp_set_max_active_levels::
    911  1.15  mrg 
    912  1.15  mrg _Reference_:
    913  1.15  mrg      OpenMP specification v5.0 (https://www.openmp.org), Section 3.2.15.
    914  1.15  mrg 
    915  1.15  mrg 
    916  1.15  mrg File: libgomp.info,  Node: omp_get_team_num,  Next: omp_get_team_size,  Prev: omp_get_supported_active_levels,  Up: Runtime Library Routines
    917  1.15  mrg 
    918  1.15  mrg 3.21 'omp_get_team_num' - Get team number
    919   1.5  mrg =========================================
    920   1.5  mrg 
    921   1.5  mrg _Description_:
    922   1.5  mrg      Returns the team number of the calling thread.
    923   1.5  mrg 
    924   1.5  mrg _C/C++_:
    925  1.11  mrg      _Prototype_:   'int omp_get_team_num(void);'
    926   1.5  mrg 
    927   1.5  mrg _Fortran_:
    928  1.11  mrg      _Interface_:   'integer function omp_get_team_num()'
    929   1.5  mrg 
    930   1.5  mrg _Reference_:
    931  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.33.
    932   1.1  mrg 
    933   1.1  mrg 
    934  1.15  mrg File: libgomp.info,  Node: omp_get_team_size,  Next: omp_get_teams_thread_limit,  Prev: omp_get_team_num,  Up: Runtime Library Routines
    935   1.1  mrg 
    936  1.15  mrg 3.22 'omp_get_team_size' - Number of threads in a team
    937   1.1  mrg ======================================================
    938   1.1  mrg 
    939   1.1  mrg _Description_:
    940   1.1  mrg      This function returns the number of threads in a thread team to
    941   1.5  mrg      which either the current thread or its ancestor belongs.  For
    942  1.11  mrg      values of LEVEL outside zero to 'omp_get_level', -1 is returned; if
    943  1.11  mrg      LEVEL is zero, 1 is returned, and for 'omp_get_level', the result
    944  1.11  mrg      is identical to 'omp_get_num_threads'.
    945   1.1  mrg 
    946   1.1  mrg _C/C++_:
    947  1.11  mrg      _Prototype_:   'int omp_get_team_size(int level);'
    948   1.1  mrg 
    949   1.1  mrg _Fortran_:
    950  1.11  mrg      _Interface_:   'integer function omp_get_team_size(level)'
    951  1.11  mrg                     'integer level'
    952   1.1  mrg 
    953   1.1  mrg _See also_:
    954   1.1  mrg      *note omp_get_num_threads::, *note omp_get_level::, *note
    955   1.1  mrg      omp_get_ancestor_thread_num::
    956   1.1  mrg 
    957   1.1  mrg _Reference_:
    958  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.19.
    959   1.1  mrg 
    960   1.1  mrg 
    961  1.15  mrg File: libgomp.info,  Node: omp_get_teams_thread_limit,  Next: omp_get_thread_limit,  Prev: omp_get_team_size,  Up: Runtime Library Routines
    962  1.15  mrg 
    963  1.15  mrg 3.23 'omp_get_teams_thread_limit' - Maximum number of threads imposed by teams
    964  1.15  mrg ==============================================================================
    965  1.15  mrg 
    966  1.15  mrg _Description_:
    967  1.15  mrg      Return the maximum number of threads that will be able to
    968  1.15  mrg      participate in each team created by a teams construct.
    969  1.15  mrg 
    970  1.15  mrg _C/C++_:
    971  1.15  mrg      _Prototype_:   'int omp_get_teams_thread_limit(void);'
    972   1.1  mrg 
    973  1.15  mrg _Fortran_:
    974  1.15  mrg      _Interface_:   'integer function omp_get_teams_thread_limit()'
    975  1.15  mrg 
    976  1.15  mrg _See also_:
    977  1.15  mrg      *note omp_set_teams_thread_limit::, *note OMP_TEAMS_THREAD_LIMIT::
    978  1.15  mrg 
    979  1.15  mrg _Reference_:
    980  1.15  mrg      OpenMP specification v5.1 (https://www.openmp.org), Section 3.4.6.
    981  1.15  mrg 
    982  1.15  mrg 
    983  1.15  mrg File: libgomp.info,  Node: omp_get_thread_limit,  Next: omp_get_thread_num,  Prev: omp_get_teams_thread_limit,  Up: Runtime Library Routines
    984  1.15  mrg 
    985  1.15  mrg 3.24 'omp_get_thread_limit' - Maximum number of threads
    986   1.1  mrg =======================================================
    987   1.1  mrg 
    988   1.1  mrg _Description_:
    989   1.3  mrg      Return the maximum number of threads of the program.
    990   1.1  mrg 
    991   1.1  mrg _C/C++_:
    992  1.11  mrg      _Prototype_:   'int omp_get_thread_limit(void);'
    993   1.1  mrg 
    994   1.1  mrg _Fortran_:
    995  1.11  mrg      _Interface_:   'integer function omp_get_thread_limit()'
    996   1.1  mrg 
    997   1.1  mrg _See also_:
    998   1.1  mrg      *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
    999   1.1  mrg 
   1000   1.1  mrg _Reference_:
   1001  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.14.
   1002   1.1  mrg 
   1003   1.1  mrg 
   1004   1.1  mrg File: libgomp.info,  Node: omp_get_thread_num,  Next: omp_in_parallel,  Prev: omp_get_thread_limit,  Up: Runtime Library Routines
   1005   1.1  mrg 
   1006  1.15  mrg 3.25 'omp_get_thread_num' - Current thread ID
   1007   1.1  mrg =============================================
   1008   1.1  mrg 
   1009   1.1  mrg _Description_:
   1010   1.3  mrg      Returns a unique thread identification number within the current
   1011  1.11  mrg      team.  In a sequential parts of the program, 'omp_get_thread_num'
   1012  1.11  mrg      always returns 0.  In parallel regions the return value varies from
   1013  1.11  mrg      0 to 'omp_get_num_threads'-1 inclusive.  The return value of the
   1014  1.15  mrg      primary thread of a team is always 0.
   1015   1.1  mrg 
   1016   1.1  mrg _C/C++_:
   1017  1.11  mrg      _Prototype_:   'int omp_get_thread_num(void);'
   1018   1.1  mrg 
   1019   1.1  mrg _Fortran_:
   1020  1.11  mrg      _Interface_:   'integer function omp_get_thread_num()'
   1021   1.1  mrg 
   1022   1.1  mrg _See also_:
   1023   1.1  mrg      *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
   1024   1.1  mrg 
   1025   1.1  mrg _Reference_:
   1026  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.4.
   1027   1.1  mrg 
   1028   1.1  mrg 
   1029   1.3  mrg File: libgomp.info,  Node: omp_in_parallel,  Next: omp_in_final,  Prev: omp_get_thread_num,  Up: Runtime Library Routines
   1030   1.1  mrg 
   1031  1.15  mrg 3.26 'omp_in_parallel' - Whether a parallel region is active
   1032   1.1  mrg ============================================================
   1033   1.1  mrg 
   1034   1.1  mrg _Description_:
   1035  1.11  mrg      This function returns 'true' if currently running in parallel,
   1036  1.11  mrg      'false' otherwise.  Here, 'true' and 'false' represent their
   1037   1.1  mrg      language-specific counterparts.
   1038   1.1  mrg 
   1039   1.1  mrg _C/C++_:
   1040  1.11  mrg      _Prototype_:   'int omp_in_parallel(void);'
   1041   1.1  mrg 
   1042   1.1  mrg _Fortran_:
   1043  1.11  mrg      _Interface_:   'logical function omp_in_parallel()'
   1044   1.1  mrg 
   1045   1.1  mrg _Reference_:
   1046  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.6.
   1047   1.1  mrg 
   1048   1.1  mrg 
   1049   1.5  mrg File: libgomp.info,  Node: omp_in_final,  Next: omp_is_initial_device,  Prev: omp_in_parallel,  Up: Runtime Library Routines
   1050   1.3  mrg 
   1051  1.15  mrg 3.27 'omp_in_final' - Whether in final or included task region
   1052   1.3  mrg ==============================================================
   1053   1.3  mrg 
   1054   1.3  mrg _Description_:
   1055  1.11  mrg      This function returns 'true' if currently running in a final or
   1056  1.11  mrg      included task region, 'false' otherwise.  Here, 'true' and 'false'
   1057   1.3  mrg      represent their language-specific counterparts.
   1058   1.3  mrg 
   1059   1.3  mrg _C/C++_:
   1060  1.11  mrg      _Prototype_:   'int omp_in_final(void);'
   1061   1.1  mrg 
   1062   1.3  mrg _Fortran_:
   1063  1.11  mrg      _Interface_:   'logical function omp_in_final()'
   1064   1.3  mrg 
   1065   1.3  mrg _Reference_:
   1066  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.21.
   1067   1.5  mrg 
   1068   1.5  mrg 
   1069   1.5  mrg File: libgomp.info,  Node: omp_is_initial_device,  Next: omp_set_default_device,  Prev: omp_in_final,  Up: Runtime Library Routines
   1070   1.5  mrg 
   1071  1.15  mrg 3.28 'omp_is_initial_device' - Whether executing on the host device
   1072   1.5  mrg ===================================================================
   1073   1.5  mrg 
   1074   1.5  mrg _Description_:
   1075  1.11  mrg      This function returns 'true' if currently running on the host
   1076  1.11  mrg      device, 'false' otherwise.  Here, 'true' and 'false' represent
   1077   1.5  mrg      their language-specific counterparts.
   1078   1.5  mrg 
   1079   1.5  mrg _C/C++_:
   1080  1.11  mrg      _Prototype_:   'int omp_is_initial_device(void);'
   1081   1.5  mrg 
   1082   1.5  mrg _Fortran_:
   1083  1.11  mrg      _Interface_:   'logical function omp_is_initial_device()'
   1084   1.5  mrg 
   1085   1.5  mrg _Reference_:
   1086  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.34.
   1087   1.5  mrg 
   1088   1.5  mrg 
   1089   1.5  mrg File: libgomp.info,  Node: omp_set_default_device,  Next: omp_set_dynamic,  Prev: omp_is_initial_device,  Up: Runtime Library Routines
   1090   1.5  mrg 
   1091  1.15  mrg 3.29 'omp_set_default_device' - Set the default device for target regions
   1092   1.5  mrg =========================================================================
   1093   1.5  mrg 
   1094   1.5  mrg _Description_:
   1095   1.5  mrg      Set the default device for target regions without device clause.
   1096   1.5  mrg      The argument shall be a nonnegative device number.
   1097   1.5  mrg 
   1098   1.5  mrg _C/C++_:
   1099  1.11  mrg      _Prototype_:   'void omp_set_default_device(int device_num);'
   1100   1.5  mrg 
   1101   1.5  mrg _Fortran_:
   1102  1.11  mrg      _Interface_:   'subroutine omp_set_default_device(device_num)'
   1103  1.11  mrg                     'integer device_num'
   1104   1.5  mrg 
   1105   1.5  mrg _See also_:
   1106   1.5  mrg      *note OMP_DEFAULT_DEVICE::, *note omp_get_default_device::
   1107   1.5  mrg 
   1108   1.5  mrg _Reference_:
   1109  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.29.
   1110   1.3  mrg 
   1111   1.3  mrg 
   1112   1.5  mrg File: libgomp.info,  Node: omp_set_dynamic,  Next: omp_set_max_active_levels,  Prev: omp_set_default_device,  Up: Runtime Library Routines
   1113   1.3  mrg 
   1114  1.15  mrg 3.30 'omp_set_dynamic' - Enable/disable dynamic teams
   1115   1.1  mrg =====================================================
   1116   1.1  mrg 
   1117   1.1  mrg _Description_:
   1118   1.1  mrg      Enable or disable the dynamic adjustment of the number of threads
   1119   1.5  mrg      within a team.  The function takes the language-specific equivalent
   1120  1.11  mrg      of 'true' and 'false', where 'true' enables dynamic adjustment of
   1121  1.11  mrg      team sizes and 'false' disables it.
   1122   1.1  mrg 
   1123   1.1  mrg _C/C++_:
   1124  1.11  mrg      _Prototype_:   'void omp_set_dynamic(int dynamic_threads);'
   1125   1.1  mrg 
   1126   1.1  mrg _Fortran_:
   1127  1.11  mrg      _Interface_:   'subroutine omp_set_dynamic(dynamic_threads)'
   1128  1.11  mrg                     'logical, intent(in) :: dynamic_threads'
   1129   1.1  mrg 
   1130   1.1  mrg _See also_:
   1131   1.1  mrg      *note OMP_DYNAMIC::, *note omp_get_dynamic::
   1132   1.1  mrg 
   1133   1.1  mrg _Reference_:
   1134  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.7.
   1135   1.1  mrg 
   1136   1.1  mrg 
   1137   1.1  mrg File: libgomp.info,  Node: omp_set_max_active_levels,  Next: omp_set_nested,  Prev: omp_set_dynamic,  Up: Runtime Library Routines
   1138   1.1  mrg 
   1139  1.15  mrg 3.31 'omp_set_max_active_levels' - Limits the number of active parallel regions
   1140   1.1  mrg ===============================================================================
   1141   1.1  mrg 
   1142   1.1  mrg _Description_:
   1143   1.3  mrg      This function limits the maximum allowed number of nested, active
   1144  1.15  mrg      parallel regions.  MAX_LEVELS must be less or equal to the value
   1145  1.15  mrg      returned by 'omp_get_supported_active_levels'.
   1146   1.1  mrg 
   1147   1.1  mrg _C/C++_
   1148  1.11  mrg      _Prototype_:   'void omp_set_max_active_levels(int max_levels);'
   1149   1.1  mrg 
   1150   1.1  mrg _Fortran_:
   1151  1.11  mrg      _Interface_:   'subroutine omp_set_max_active_levels(max_levels)'
   1152  1.11  mrg                     'integer max_levels'
   1153   1.1  mrg 
   1154   1.1  mrg _See also_:
   1155  1.15  mrg      *note omp_get_max_active_levels::, *note omp_get_active_level::,
   1156  1.15  mrg      *note omp_get_supported_active_levels::
   1157   1.1  mrg 
   1158   1.1  mrg _Reference_:
   1159  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.15.
   1160   1.1  mrg 
   1161   1.1  mrg 
   1162  1.15  mrg File: libgomp.info,  Node: omp_set_nested,  Next: omp_set_num_teams,  Prev: omp_set_max_active_levels,  Up: Runtime Library Routines
   1163   1.1  mrg 
   1164  1.15  mrg 3.32 'omp_set_nested' - Enable/disable nested parallel regions
   1165   1.1  mrg ==============================================================
   1166   1.1  mrg 
   1167   1.1  mrg _Description_:
   1168   1.1  mrg      Enable or disable nested parallel regions, i.e., whether team
   1169   1.5  mrg      members are allowed to create new teams.  The function takes the
   1170  1.11  mrg      language-specific equivalent of 'true' and 'false', where 'true'
   1171  1.11  mrg      enables dynamic adjustment of team sizes and 'false' disables it.
   1172   1.1  mrg 
   1173  1.15  mrg      Enabling nested parallel regions will also set the maximum number
   1174  1.15  mrg      of active nested regions to the maximum supported.  Disabling
   1175  1.15  mrg      nested parallel regions will set the maximum number of active
   1176  1.15  mrg      nested regions to one.
   1177  1.15  mrg 
   1178   1.1  mrg _C/C++_:
   1179  1.11  mrg      _Prototype_:   'void omp_set_nested(int nested);'
   1180   1.1  mrg 
   1181   1.1  mrg _Fortran_:
   1182  1.11  mrg      _Interface_:   'subroutine omp_set_nested(nested)'
   1183  1.11  mrg                     'logical, intent(in) :: nested'
   1184   1.1  mrg 
   1185   1.1  mrg _See also_:
   1186  1.15  mrg      *note omp_get_nested::, *note omp_set_max_active_levels::, *note
   1187  1.15  mrg      OMP_MAX_ACTIVE_LEVELS::, *note OMP_NESTED::
   1188   1.1  mrg 
   1189   1.1  mrg _Reference_:
   1190  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.10.
   1191   1.1  mrg 
   1192   1.1  mrg 
   1193  1.15  mrg File: libgomp.info,  Node: omp_set_num_teams,  Next: omp_set_num_threads,  Prev: omp_set_nested,  Up: Runtime Library Routines
   1194  1.15  mrg 
   1195  1.15  mrg 3.33 'omp_set_num_teams' - Set upper teams limit for teams construct
   1196  1.15  mrg ====================================================================
   1197  1.15  mrg 
   1198  1.15  mrg _Description_:
   1199  1.15  mrg      Specifies the upper bound for number of teams created by the teams
   1200  1.15  mrg      construct which does not specify a 'num_teams' clause.  The
   1201  1.15  mrg      argument of 'omp_set_num_teams' shall be a positive integer.
   1202  1.15  mrg 
   1203  1.15  mrg _C/C++_:
   1204  1.15  mrg      _Prototype_:   'void omp_set_num_teams(int num_teams);'
   1205   1.1  mrg 
   1206  1.15  mrg _Fortran_:
   1207  1.15  mrg      _Interface_:   'subroutine omp_set_num_teams(num_teams)'
   1208  1.15  mrg                     'integer, intent(in) :: num_teams'
   1209  1.15  mrg 
   1210  1.15  mrg _See also_:
   1211  1.15  mrg      *note OMP_NUM_TEAMS::, *note omp_get_num_teams::, *note
   1212  1.15  mrg      omp_get_max_teams::
   1213  1.15  mrg 
   1214  1.15  mrg _Reference_:
   1215  1.15  mrg      OpenMP specification v5.1 (https://www.openmp.org), Section 3.4.3.
   1216  1.15  mrg 
   1217  1.15  mrg 
   1218  1.15  mrg File: libgomp.info,  Node: omp_set_num_threads,  Next: omp_set_schedule,  Prev: omp_set_num_teams,  Up: Runtime Library Routines
   1219  1.15  mrg 
   1220  1.15  mrg 3.34 'omp_set_num_threads' - Set upper team size limit
   1221   1.1  mrg ======================================================
   1222   1.1  mrg 
   1223   1.1  mrg _Description_:
   1224   1.1  mrg      Specifies the number of threads used by default in subsequent
   1225  1.11  mrg      parallel sections, if those do not specify a 'num_threads' clause.
   1226  1.11  mrg      The argument of 'omp_set_num_threads' shall be a positive integer.
   1227   1.1  mrg 
   1228   1.1  mrg _C/C++_:
   1229  1.11  mrg      _Prototype_:   'void omp_set_num_threads(int num_threads);'
   1230   1.1  mrg 
   1231   1.1  mrg _Fortran_:
   1232  1.11  mrg      _Interface_:   'subroutine omp_set_num_threads(num_threads)'
   1233  1.11  mrg                     'integer, intent(in) :: num_threads'
   1234   1.1  mrg 
   1235   1.1  mrg _See also_:
   1236   1.1  mrg      *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
   1237   1.1  mrg      omp_get_max_threads::
   1238   1.1  mrg 
   1239   1.1  mrg _Reference_:
   1240  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.1.
   1241   1.1  mrg 
   1242   1.1  mrg 
   1243  1.15  mrg File: libgomp.info,  Node: omp_set_schedule,  Next: omp_set_teams_thread_limit,  Prev: omp_set_num_threads,  Up: Runtime Library Routines
   1244   1.1  mrg 
   1245  1.15  mrg 3.35 'omp_set_schedule' - Set the runtime scheduling method
   1246   1.1  mrg ===========================================================
   1247   1.1  mrg 
   1248   1.1  mrg _Description_:
   1249   1.5  mrg      Sets the runtime scheduling method.  The KIND argument can have the
   1250  1.11  mrg      value 'omp_sched_static', 'omp_sched_dynamic', 'omp_sched_guided'
   1251  1.11  mrg      or 'omp_sched_auto'.  Except for 'omp_sched_auto', the chunk size
   1252   1.7  mrg      is set to the value of CHUNK_SIZE if positive, or to the default
   1253  1.11  mrg      value if zero or negative.  For 'omp_sched_auto' the CHUNK_SIZE
   1254   1.1  mrg      argument is ignored.
   1255   1.1  mrg 
   1256   1.1  mrg _C/C++_
   1257  1.11  mrg      _Prototype_:   'void omp_set_schedule(omp_sched_t kind, int
   1258  1.11  mrg                     chunk_size);'
   1259   1.1  mrg 
   1260   1.1  mrg _Fortran_:
   1261  1.11  mrg      _Interface_:   'subroutine omp_set_schedule(kind, chunk_size)'
   1262  1.11  mrg                     'integer(kind=omp_sched_kind) kind'
   1263  1.11  mrg                     'integer chunk_size'
   1264   1.1  mrg 
   1265   1.1  mrg _See also_:
   1266   1.1  mrg      *note omp_get_schedule:: *note OMP_SCHEDULE::
   1267   1.1  mrg 
   1268   1.1  mrg _Reference_:
   1269  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.12.
   1270   1.1  mrg 
   1271   1.1  mrg 
   1272  1.15  mrg File: libgomp.info,  Node: omp_set_teams_thread_limit,  Next: omp_init_lock,  Prev: omp_set_schedule,  Up: Runtime Library Routines
   1273  1.15  mrg 
   1274  1.15  mrg 3.36 'omp_set_teams_thread_limit' - Set upper thread limit for teams construct
   1275  1.15  mrg ==============================================================================
   1276   1.1  mrg 
   1277  1.15  mrg _Description_:
   1278  1.15  mrg      Specifies the upper bound for number of threads that will be
   1279  1.15  mrg      available for each team created by the teams construct which does
   1280  1.15  mrg      not specify a 'thread_limit' clause.  The argument of
   1281  1.15  mrg      'omp_set_teams_thread_limit' shall be a positive integer.
   1282  1.15  mrg 
   1283  1.15  mrg _C/C++_:
   1284  1.15  mrg      _Prototype_:   'void omp_set_teams_thread_limit(int thread_limit);'
   1285  1.15  mrg 
   1286  1.15  mrg _Fortran_:
   1287  1.15  mrg      _Interface_:   'subroutine omp_set_teams_thread_limit(thread_limit)'
   1288  1.15  mrg                     'integer, intent(in) :: thread_limit'
   1289  1.15  mrg 
   1290  1.15  mrg _See also_:
   1291  1.15  mrg      *note OMP_TEAMS_THREAD_LIMIT::, *note omp_get_teams_thread_limit::,
   1292  1.15  mrg      *note omp_get_thread_limit::
   1293  1.15  mrg 
   1294  1.15  mrg _Reference_:
   1295  1.15  mrg      OpenMP specification v5.1 (https://www.openmp.org), Section 3.4.5.
   1296  1.15  mrg 
   1297  1.15  mrg 
   1298  1.15  mrg File: libgomp.info,  Node: omp_init_lock,  Next: omp_set_lock,  Prev: omp_set_teams_thread_limit,  Up: Runtime Library Routines
   1299  1.15  mrg 
   1300  1.15  mrg 3.37 'omp_init_lock' - Initialize simple lock
   1301   1.1  mrg =============================================
   1302   1.1  mrg 
   1303   1.1  mrg _Description_:
   1304   1.3  mrg      Initialize a simple lock.  After initialization, the lock is in an
   1305   1.1  mrg      unlocked state.
   1306   1.1  mrg 
   1307   1.1  mrg _C/C++_:
   1308  1.11  mrg      _Prototype_:   'void omp_init_lock(omp_lock_t *lock);'
   1309   1.1  mrg 
   1310   1.1  mrg _Fortran_:
   1311  1.11  mrg      _Interface_:   'subroutine omp_init_lock(svar)'
   1312  1.11  mrg                     'integer(omp_lock_kind), intent(out) :: svar'
   1313   1.1  mrg 
   1314   1.1  mrg _See also_:
   1315   1.1  mrg      *note omp_destroy_lock::
   1316   1.1  mrg 
   1317   1.1  mrg _Reference_:
   1318  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.1.
   1319   1.1  mrg 
   1320   1.1  mrg 
   1321   1.1  mrg File: libgomp.info,  Node: omp_set_lock,  Next: omp_test_lock,  Prev: omp_init_lock,  Up: Runtime Library Routines
   1322   1.1  mrg 
   1323  1.15  mrg 3.38 'omp_set_lock' - Wait for and set simple lock
   1324   1.1  mrg ==================================================
   1325   1.1  mrg 
   1326   1.1  mrg _Description_:
   1327  1.11  mrg      Before setting a simple lock, the lock variable must be initialized
   1328  1.11  mrg      by 'omp_init_lock'.  The calling thread is blocked until the lock
   1329  1.11  mrg      is available.  If the lock is already held by the current thread, a
   1330  1.11  mrg      deadlock occurs.
   1331   1.1  mrg 
   1332   1.1  mrg _C/C++_:
   1333  1.11  mrg      _Prototype_:   'void omp_set_lock(omp_lock_t *lock);'
   1334   1.1  mrg 
   1335   1.1  mrg _Fortran_:
   1336  1.11  mrg      _Interface_:   'subroutine omp_set_lock(svar)'
   1337  1.11  mrg                     'integer(omp_lock_kind), intent(inout) :: svar'
   1338   1.1  mrg 
   1339   1.1  mrg _See also_:
   1340   1.1  mrg      *note omp_init_lock::, *note omp_test_lock::, *note
   1341   1.1  mrg      omp_unset_lock::
   1342   1.1  mrg 
   1343   1.1  mrg _Reference_:
   1344  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.4.
   1345   1.1  mrg 
   1346   1.1  mrg 
   1347   1.1  mrg File: libgomp.info,  Node: omp_test_lock,  Next: omp_unset_lock,  Prev: omp_set_lock,  Up: Runtime Library Routines
   1348   1.1  mrg 
   1349  1.15  mrg 3.39 'omp_test_lock' - Test and set simple lock if available
   1350   1.1  mrg ============================================================
   1351   1.1  mrg 
   1352   1.1  mrg _Description_:
   1353  1.11  mrg      Before setting a simple lock, the lock variable must be initialized
   1354  1.11  mrg      by 'omp_init_lock'.  Contrary to 'omp_set_lock', 'omp_test_lock'
   1355  1.11  mrg      does not block if the lock is not available.  This function returns
   1356  1.11  mrg      'true' upon success, 'false' otherwise.  Here, 'true' and 'false'
   1357  1.11  mrg      represent their language-specific counterparts.
   1358   1.1  mrg 
   1359   1.1  mrg _C/C++_:
   1360  1.11  mrg      _Prototype_:   'int omp_test_lock(omp_lock_t *lock);'
   1361   1.1  mrg 
   1362   1.1  mrg _Fortran_:
   1363  1.11  mrg      _Interface_:   'logical function omp_test_lock(svar)'
   1364  1.11  mrg                     'integer(omp_lock_kind), intent(inout) :: svar'
   1365   1.1  mrg 
   1366   1.1  mrg _See also_:
   1367   1.1  mrg      *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
   1368   1.1  mrg 
   1369   1.1  mrg _Reference_:
   1370  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.6.
   1371   1.1  mrg 
   1372   1.1  mrg 
   1373   1.1  mrg File: libgomp.info,  Node: omp_unset_lock,  Next: omp_destroy_lock,  Prev: omp_test_lock,  Up: Runtime Library Routines
   1374   1.1  mrg 
   1375  1.15  mrg 3.40 'omp_unset_lock' - Unset simple lock
   1376   1.1  mrg =========================================
   1377   1.1  mrg 
   1378   1.1  mrg _Description_:
   1379   1.1  mrg      A simple lock about to be unset must have been locked by
   1380  1.11  mrg      'omp_set_lock' or 'omp_test_lock' before.  In addition, the lock
   1381  1.11  mrg      must be held by the thread calling 'omp_unset_lock'.  Then, the
   1382  1.11  mrg      lock becomes unlocked.  If one or more threads attempted to set the
   1383  1.11  mrg      lock before, one of them is chosen to, again, set the lock to
   1384   1.1  mrg      itself.
   1385   1.1  mrg 
   1386   1.1  mrg _C/C++_:
   1387  1.11  mrg      _Prototype_:   'void omp_unset_lock(omp_lock_t *lock);'
   1388   1.1  mrg 
   1389   1.1  mrg _Fortran_:
   1390  1.11  mrg      _Interface_:   'subroutine omp_unset_lock(svar)'
   1391  1.11  mrg                     'integer(omp_lock_kind), intent(inout) :: svar'
   1392   1.1  mrg 
   1393   1.1  mrg _See also_:
   1394   1.1  mrg      *note omp_set_lock::, *note omp_test_lock::
   1395   1.1  mrg 
   1396   1.1  mrg _Reference_:
   1397  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.5.
   1398   1.1  mrg 
   1399   1.1  mrg 
   1400   1.1  mrg File: libgomp.info,  Node: omp_destroy_lock,  Next: omp_init_nest_lock,  Prev: omp_unset_lock,  Up: Runtime Library Routines
   1401   1.1  mrg 
   1402  1.15  mrg 3.41 'omp_destroy_lock' - Destroy simple lock
   1403   1.1  mrg =============================================
   1404   1.1  mrg 
   1405   1.1  mrg _Description_:
   1406   1.5  mrg      Destroy a simple lock.  In order to be destroyed, a simple lock
   1407   1.1  mrg      must be in the unlocked state.
   1408   1.1  mrg 
   1409   1.1  mrg _C/C++_:
   1410  1.11  mrg      _Prototype_:   'void omp_destroy_lock(omp_lock_t *lock);'
   1411   1.1  mrg 
   1412   1.1  mrg _Fortran_:
   1413  1.11  mrg      _Interface_:   'subroutine omp_destroy_lock(svar)'
   1414  1.11  mrg                     'integer(omp_lock_kind), intent(inout) :: svar'
   1415   1.1  mrg 
   1416   1.1  mrg _See also_:
   1417   1.1  mrg      *note omp_init_lock::
   1418   1.1  mrg 
   1419   1.1  mrg _Reference_:
   1420  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.3.
   1421   1.1  mrg 
   1422   1.1  mrg 
   1423   1.1  mrg File: libgomp.info,  Node: omp_init_nest_lock,  Next: omp_set_nest_lock,  Prev: omp_destroy_lock,  Up: Runtime Library Routines
   1424   1.1  mrg 
   1425  1.15  mrg 3.42 'omp_init_nest_lock' - Initialize nested lock
   1426   1.1  mrg ==================================================
   1427   1.1  mrg 
   1428   1.1  mrg _Description_:
   1429   1.3  mrg      Initialize a nested lock.  After initialization, the lock is in an
   1430   1.1  mrg      unlocked state and the nesting count is set to zero.
   1431   1.1  mrg 
   1432   1.1  mrg _C/C++_:
   1433  1.11  mrg      _Prototype_:   'void omp_init_nest_lock(omp_nest_lock_t *lock);'
   1434   1.1  mrg 
   1435   1.1  mrg _Fortran_:
   1436  1.11  mrg      _Interface_:   'subroutine omp_init_nest_lock(nvar)'
   1437  1.11  mrg                     'integer(omp_nest_lock_kind), intent(out) :: nvar'
   1438   1.1  mrg 
   1439   1.1  mrg _See also_:
   1440   1.1  mrg      *note omp_destroy_nest_lock::
   1441   1.1  mrg 
   1442   1.1  mrg _Reference_:
   1443  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.1.
   1444   1.1  mrg 
   1445   1.1  mrg 
   1446   1.1  mrg File: libgomp.info,  Node: omp_set_nest_lock,  Next: omp_test_nest_lock,  Prev: omp_init_nest_lock,  Up: Runtime Library Routines
   1447   1.1  mrg 
   1448  1.15  mrg 3.43 'omp_set_nest_lock' - Wait for and set nested lock
   1449   1.1  mrg =======================================================
   1450   1.1  mrg 
   1451   1.1  mrg _Description_:
   1452  1.11  mrg      Before setting a nested lock, the lock variable must be initialized
   1453  1.11  mrg      by 'omp_init_nest_lock'.  The calling thread is blocked until the
   1454  1.11  mrg      lock is available.  If the lock is already held by the current
   1455  1.11  mrg      thread, the nesting count for the lock is incremented.
   1456   1.1  mrg 
   1457   1.1  mrg _C/C++_:
   1458  1.11  mrg      _Prototype_:   'void omp_set_nest_lock(omp_nest_lock_t *lock);'
   1459   1.1  mrg 
   1460   1.1  mrg _Fortran_:
   1461  1.11  mrg      _Interface_:   'subroutine omp_set_nest_lock(nvar)'
   1462  1.11  mrg                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
   1463   1.1  mrg 
   1464   1.1  mrg _See also_:
   1465   1.1  mrg      *note omp_init_nest_lock::, *note omp_unset_nest_lock::
   1466   1.1  mrg 
   1467   1.1  mrg _Reference_:
   1468  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.4.
   1469   1.1  mrg 
   1470   1.1  mrg 
   1471   1.1  mrg File: libgomp.info,  Node: omp_test_nest_lock,  Next: omp_unset_nest_lock,  Prev: omp_set_nest_lock,  Up: Runtime Library Routines
   1472   1.1  mrg 
   1473  1.15  mrg 3.44 'omp_test_nest_lock' - Test and set nested lock if available
   1474   1.1  mrg =================================================================
   1475   1.1  mrg 
   1476   1.1  mrg _Description_:
   1477  1.11  mrg      Before setting a nested lock, the lock variable must be initialized
   1478  1.11  mrg      by 'omp_init_nest_lock'.  Contrary to 'omp_set_nest_lock',
   1479  1.11  mrg      'omp_test_nest_lock' does not block if the lock is not available.
   1480  1.11  mrg      If the lock is already held by the current thread, the new nesting
   1481  1.11  mrg      count is returned.  Otherwise, the return value equals zero.
   1482   1.1  mrg 
   1483   1.1  mrg _C/C++_:
   1484  1.11  mrg      _Prototype_:   'int omp_test_nest_lock(omp_nest_lock_t *lock);'
   1485   1.1  mrg 
   1486   1.1  mrg _Fortran_:
   1487  1.11  mrg      _Interface_:   'logical function omp_test_nest_lock(nvar)'
   1488  1.11  mrg                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
   1489   1.1  mrg 
   1490   1.1  mrg _See also_:
   1491   1.1  mrg      *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
   1492   1.1  mrg 
   1493   1.1  mrg _Reference_:
   1494  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.6.
   1495   1.1  mrg 
   1496   1.1  mrg 
   1497   1.1  mrg File: libgomp.info,  Node: omp_unset_nest_lock,  Next: omp_destroy_nest_lock,  Prev: omp_test_nest_lock,  Up: Runtime Library Routines
   1498   1.1  mrg 
   1499  1.15  mrg 3.45 'omp_unset_nest_lock' - Unset nested lock
   1500   1.1  mrg ==============================================
   1501   1.1  mrg 
   1502   1.1  mrg _Description_:
   1503   1.1  mrg      A nested lock about to be unset must have been locked by
   1504  1.11  mrg      'omp_set_nested_lock' or 'omp_test_nested_lock' before.  In
   1505   1.1  mrg      addition, the lock must be held by the thread calling
   1506  1.11  mrg      'omp_unset_nested_lock'.  If the nesting count drops to zero, the
   1507   1.5  mrg      lock becomes unlocked.  If one ore more threads attempted to set
   1508   1.3  mrg      the lock before, one of them is chosen to, again, set the lock to
   1509   1.1  mrg      itself.
   1510   1.1  mrg 
   1511   1.1  mrg _C/C++_:
   1512  1.11  mrg      _Prototype_:   'void omp_unset_nest_lock(omp_nest_lock_t *lock);'
   1513   1.1  mrg 
   1514   1.1  mrg _Fortran_:
   1515  1.11  mrg      _Interface_:   'subroutine omp_unset_nest_lock(nvar)'
   1516  1.11  mrg                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
   1517   1.1  mrg 
   1518   1.1  mrg _See also_:
   1519   1.1  mrg      *note omp_set_nest_lock::
   1520   1.1  mrg 
   1521   1.1  mrg _Reference_:
   1522  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.5.
   1523   1.1  mrg 
   1524   1.1  mrg 
   1525   1.1  mrg File: libgomp.info,  Node: omp_destroy_nest_lock,  Next: omp_get_wtick,  Prev: omp_unset_nest_lock,  Up: Runtime Library Routines
   1526   1.1  mrg 
   1527  1.15  mrg 3.46 'omp_destroy_nest_lock' - Destroy nested lock
   1528   1.1  mrg ==================================================
   1529   1.1  mrg 
   1530   1.1  mrg _Description_:
   1531   1.5  mrg      Destroy a nested lock.  In order to be destroyed, a nested lock
   1532   1.1  mrg      must be in the unlocked state and its nesting count must equal
   1533   1.1  mrg      zero.
   1534   1.1  mrg 
   1535   1.1  mrg _C/C++_:
   1536  1.11  mrg      _Prototype_:   'void omp_destroy_nest_lock(omp_nest_lock_t *);'
   1537   1.1  mrg 
   1538   1.1  mrg _Fortran_:
   1539  1.11  mrg      _Interface_:   'subroutine omp_destroy_nest_lock(nvar)'
   1540  1.11  mrg                     'integer(omp_nest_lock_kind), intent(inout) :: nvar'
   1541   1.1  mrg 
   1542   1.1  mrg _See also_:
   1543   1.1  mrg      *note omp_init_lock::
   1544   1.1  mrg 
   1545   1.1  mrg _Reference_:
   1546  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.3.
   1547   1.1  mrg 
   1548   1.1  mrg 
   1549   1.1  mrg File: libgomp.info,  Node: omp_get_wtick,  Next: omp_get_wtime,  Prev: omp_destroy_nest_lock,  Up: Runtime Library Routines
   1550   1.1  mrg 
   1551  1.15  mrg 3.47 'omp_get_wtick' - Get timer precision
   1552   1.1  mrg ==========================================
   1553   1.1  mrg 
   1554   1.1  mrg _Description_:
   1555   1.1  mrg      Gets the timer precision, i.e., the number of seconds between two
   1556   1.1  mrg      successive clock ticks.
   1557   1.1  mrg 
   1558   1.1  mrg _C/C++_:
   1559  1.11  mrg      _Prototype_:   'double omp_get_wtick(void);'
   1560   1.1  mrg 
   1561   1.1  mrg _Fortran_:
   1562  1.11  mrg      _Interface_:   'double precision function omp_get_wtick()'
   1563   1.1  mrg 
   1564   1.1  mrg _See also_:
   1565   1.1  mrg      *note omp_get_wtime::
   1566   1.1  mrg 
   1567   1.1  mrg _Reference_:
   1568  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.4.2.
   1569   1.1  mrg 
   1570   1.1  mrg 
   1571  1.15  mrg File: libgomp.info,  Node: omp_get_wtime,  Next: omp_fulfill_event,  Prev: omp_get_wtick,  Up: Runtime Library Routines
   1572   1.1  mrg 
   1573  1.15  mrg 3.48 'omp_get_wtime' - Elapsed wall clock time
   1574   1.1  mrg ==============================================
   1575   1.1  mrg 
   1576   1.1  mrg _Description_:
   1577   1.5  mrg      Elapsed wall clock time in seconds.  The time is measured per
   1578   1.3  mrg      thread, no guarantee can be made that two distinct threads measure
   1579   1.3  mrg      the same time.  Time is measured from some "time in the past",
   1580   1.3  mrg      which is an arbitrary time guaranteed not to change during the
   1581   1.3  mrg      execution of the program.
   1582   1.1  mrg 
   1583   1.1  mrg _C/C++_:
   1584  1.11  mrg      _Prototype_:   'double omp_get_wtime(void);'
   1585   1.1  mrg 
   1586   1.1  mrg _Fortran_:
   1587  1.11  mrg      _Interface_:   'double precision function omp_get_wtime()'
   1588   1.1  mrg 
   1589   1.1  mrg _See also_:
   1590   1.1  mrg      *note omp_get_wtick::
   1591   1.1  mrg 
   1592   1.1  mrg _Reference_:
   1593  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 3.4.1.
   1594   1.1  mrg 
   1595   1.1  mrg 
   1596  1.15  mrg File: libgomp.info,  Node: omp_fulfill_event,  Prev: omp_get_wtime,  Up: Runtime Library Routines
   1597  1.15  mrg 
   1598  1.15  mrg 3.49 'omp_fulfill_event' - Fulfill and destroy an OpenMP event
   1599  1.15  mrg ==============================================================
   1600  1.15  mrg 
   1601  1.15  mrg _Description_:
   1602  1.15  mrg      Fulfill the event associated with the event handle argument.
   1603  1.15  mrg      Currently, it is only used to fulfill events generated by detach
   1604  1.15  mrg      clauses on task constructs - the effect of fulfilling the event is
   1605  1.15  mrg      to allow the task to complete.
   1606  1.15  mrg 
   1607  1.15  mrg      The result of calling 'omp_fulfill_event' with an event handle
   1608  1.15  mrg      other than that generated by a detach clause is undefined.  Calling
   1609  1.15  mrg      it with an event handle that has already been fulfilled is also
   1610  1.15  mrg      undefined.
   1611  1.15  mrg 
   1612  1.15  mrg _C/C++_:
   1613  1.15  mrg      _Prototype_:   'void omp_fulfill_event(omp_event_handle_t event);'
   1614  1.15  mrg 
   1615  1.15  mrg _Fortran_:
   1616  1.15  mrg      _Interface_:   'subroutine omp_fulfill_event(event)'
   1617  1.15  mrg                     'integer (kind=omp_event_handle_kind) :: event'
   1618  1.15  mrg 
   1619  1.15  mrg _Reference_:
   1620  1.15  mrg      OpenMP specification v5.0 (https://www.openmp.org), Section 3.5.1.
   1621  1.15  mrg 
   1622  1.15  mrg 
   1623   1.7  mrg File: libgomp.info,  Node: Environment Variables,  Next: Enabling OpenACC,  Prev: Runtime Library Routines,  Up: Top
   1624   1.1  mrg 
   1625  1.15  mrg 4 OpenMP Environment Variables
   1626  1.12  mrg ******************************
   1627   1.1  mrg 
   1628  1.11  mrg The environment variables which beginning with 'OMP_' are defined by
   1629   1.7  mrg section 4 of the OpenMP specification in version 4.5, while those
   1630  1.11  mrg beginning with 'GOMP_' are GNU extensions.
   1631   1.1  mrg 
   1632   1.1  mrg * Menu:
   1633   1.1  mrg 
   1634   1.7  mrg * OMP_CANCELLATION::        Set whether cancellation is activated
   1635   1.7  mrg * OMP_DISPLAY_ENV::         Show OpenMP version and environment variables
   1636   1.7  mrg * OMP_DEFAULT_DEVICE::      Set the device used in target regions
   1637   1.7  mrg * OMP_DYNAMIC::             Dynamic adjustment of threads
   1638   1.7  mrg * OMP_MAX_ACTIVE_LEVELS::   Set the maximum number of nested parallel regions
   1639   1.7  mrg * OMP_MAX_TASK_PRIORITY::   Set the maximum task priority value
   1640   1.7  mrg * OMP_NESTED::              Nested parallel regions
   1641  1.15  mrg * OMP_NUM_TEAMS::           Specifies the number of teams to use by teams region
   1642   1.7  mrg * OMP_NUM_THREADS::         Specifies the number of threads to use
   1643  1.14  mrg * OMP_PROC_BIND::           Whether threads may be moved between CPUs
   1644  1.14  mrg * OMP_PLACES::              Specifies on which CPUs the threads should be placed
   1645   1.7  mrg * OMP_STACKSIZE::           Set default thread stack size
   1646   1.7  mrg * OMP_SCHEDULE::            How threads are scheduled
   1647  1.15  mrg * OMP_TARGET_OFFLOAD::      Controls offloading behaviour
   1648  1.15  mrg * OMP_TEAMS_THREAD_LIMIT::  Set the maximum number of threads imposed by teams
   1649   1.7  mrg * OMP_THREAD_LIMIT::        Set the maximum number of threads
   1650   1.7  mrg * OMP_WAIT_POLICY::         How waiting threads are handled
   1651   1.7  mrg * GOMP_CPU_AFFINITY::       Bind threads to specific CPUs
   1652   1.7  mrg * GOMP_DEBUG::              Enable debugging output
   1653   1.7  mrg * GOMP_STACKSIZE::          Set default thread stack size
   1654   1.7  mrg * GOMP_SPINCOUNT::          Set the busy-wait spin count
   1655   1.7  mrg * GOMP_RTEMS_THREAD_POOLS:: Set the RTEMS specific thread pools
   1656   1.1  mrg 
   1657   1.1  mrg 
   1658   1.5  mrg File: libgomp.info,  Node: OMP_CANCELLATION,  Next: OMP_DISPLAY_ENV,  Up: Environment Variables
   1659   1.5  mrg 
   1660  1.15  mrg 4.1 'OMP_CANCELLATION' - Set whether cancellation is activated
   1661   1.5  mrg ==============================================================
   1662   1.5  mrg 
   1663   1.5  mrg _Description_:
   1664  1.11  mrg      If set to 'TRUE', the cancellation is activated.  If set to 'FALSE'
   1665  1.11  mrg      or if unset, cancellation is disabled and the 'cancel' construct is
   1666  1.11  mrg      ignored.
   1667   1.5  mrg 
   1668   1.5  mrg _See also_:
   1669   1.5  mrg      *note omp_get_cancellation::
   1670   1.1  mrg 
   1671   1.5  mrg _Reference_:
   1672  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.11
   1673   1.5  mrg 
   1674   1.5  mrg 
   1675   1.5  mrg File: libgomp.info,  Node: OMP_DISPLAY_ENV,  Next: OMP_DEFAULT_DEVICE,  Prev: OMP_CANCELLATION,  Up: Environment Variables
   1676   1.5  mrg 
   1677  1.15  mrg 4.2 'OMP_DISPLAY_ENV' - Show OpenMP version and environment variables
   1678   1.5  mrg =====================================================================
   1679   1.5  mrg 
   1680   1.5  mrg _Description_:
   1681  1.11  mrg      If set to 'TRUE', the OpenMP version number and the values
   1682   1.5  mrg      associated with the OpenMP environment variables are printed to
   1683  1.11  mrg      'stderr'.  If set to 'VERBOSE', it additionally shows the value of
   1684   1.5  mrg      the environment variables which are GNU extensions.  If undefined
   1685  1.11  mrg      or set to 'FALSE', this information will not be shown.
   1686   1.5  mrg 
   1687   1.5  mrg _Reference_:
   1688  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.12
   1689   1.5  mrg 
   1690   1.5  mrg 
   1691   1.5  mrg File: libgomp.info,  Node: OMP_DEFAULT_DEVICE,  Next: OMP_DYNAMIC,  Prev: OMP_DISPLAY_ENV,  Up: Environment Variables
   1692   1.5  mrg 
   1693  1.15  mrg 4.3 'OMP_DEFAULT_DEVICE' - Set the device used in target regions
   1694   1.5  mrg ================================================================
   1695   1.5  mrg 
   1696   1.5  mrg _Description_:
   1697  1.11  mrg      Set to choose the device which is used in a 'target' region, unless
   1698  1.11  mrg      the value is overridden by 'omp_set_default_device' or by a
   1699  1.11  mrg      'device' clause.  The value shall be the nonnegative device number.
   1700  1.11  mrg      If no device with the given device number exists, the code is
   1701  1.11  mrg      executed on the host.  If unset, device number 0 will be used.
   1702   1.5  mrg 
   1703   1.5  mrg _See also_:
   1704   1.5  mrg      *note omp_get_default_device::, *note omp_set_default_device::,
   1705   1.5  mrg 
   1706   1.5  mrg _Reference_:
   1707  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.13
   1708   1.5  mrg 
   1709   1.5  mrg 
   1710   1.5  mrg File: libgomp.info,  Node: OMP_DYNAMIC,  Next: OMP_MAX_ACTIVE_LEVELS,  Prev: OMP_DEFAULT_DEVICE,  Up: Environment Variables
   1711   1.5  mrg 
   1712  1.15  mrg 4.4 'OMP_DYNAMIC' - Dynamic adjustment of threads
   1713   1.1  mrg =================================================
   1714   1.1  mrg 
   1715   1.1  mrg _Description_:
   1716   1.1  mrg      Enable or disable the dynamic adjustment of the number of threads
   1717   1.5  mrg      within a team.  The value of this environment variable shall be
   1718  1.11  mrg      'TRUE' or 'FALSE'.  If undefined, dynamic adjustment is disabled by
   1719  1.11  mrg      default.
   1720   1.1  mrg 
   1721   1.1  mrg _See also_:
   1722   1.1  mrg      *note omp_set_dynamic::
   1723   1.1  mrg 
   1724   1.1  mrg _Reference_:
   1725  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.3
   1726   1.1  mrg 
   1727   1.1  mrg 
   1728   1.7  mrg File: libgomp.info,  Node: OMP_MAX_ACTIVE_LEVELS,  Next: OMP_MAX_TASK_PRIORITY,  Prev: OMP_DYNAMIC,  Up: Environment Variables
   1729   1.1  mrg 
   1730  1.15  mrg 4.5 'OMP_MAX_ACTIVE_LEVELS' - Set the maximum number of nested parallel regions
   1731   1.1  mrg ===============================================================================
   1732   1.1  mrg 
   1733   1.1  mrg _Description_:
   1734   1.3  mrg      Specifies the initial value for the maximum number of nested
   1735   1.5  mrg      parallel regions.  The value of this variable shall be a positive
   1736  1.15  mrg      integer.  If undefined, then if 'OMP_NESTED' is defined and set to
   1737  1.15  mrg      true, or if 'OMP_NUM_THREADS' or 'OMP_PROC_BIND' are defined and
   1738  1.15  mrg      set to a list with more than one item, the maximum number of nested
   1739  1.15  mrg      parallel regions will be initialized to the largest number
   1740  1.15  mrg      supported, otherwise it will be set to one.
   1741   1.1  mrg 
   1742   1.1  mrg _See also_:
   1743  1.15  mrg      *note omp_set_max_active_levels::, *note OMP_NESTED::
   1744   1.1  mrg 
   1745   1.1  mrg _Reference_:
   1746  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.9
   1747   1.1  mrg 
   1748   1.1  mrg 
   1749   1.7  mrg File: libgomp.info,  Node: OMP_MAX_TASK_PRIORITY,  Next: OMP_NESTED,  Prev: OMP_MAX_ACTIVE_LEVELS,  Up: Environment Variables
   1750   1.7  mrg 
   1751  1.15  mrg 4.6 'OMP_MAX_TASK_PRIORITY' - Set the maximum priority
   1752   1.7  mrg ======================================================
   1753   1.7  mrg 
   1754  1.11  mrg number that can be set for a task.
   1755   1.7  mrg _Description_:
   1756  1.11  mrg      Specifies the initial value for the maximum priority value that can
   1757  1.11  mrg      be set for a task.  The value of this variable shall be a
   1758   1.7  mrg      non-negative integer, and zero is allowed.  If undefined, the
   1759   1.7  mrg      default priority is 0.
   1760   1.7  mrg 
   1761   1.7  mrg _See also_:
   1762   1.7  mrg      *note omp_get_max_task_priority::
   1763   1.1  mrg 
   1764   1.7  mrg _Reference_:
   1765  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.14
   1766   1.7  mrg 
   1767   1.7  mrg 
   1768  1.15  mrg File: libgomp.info,  Node: OMP_NESTED,  Next: OMP_NUM_TEAMS,  Prev: OMP_MAX_TASK_PRIORITY,  Up: Environment Variables
   1769   1.7  mrg 
   1770  1.15  mrg 4.7 'OMP_NESTED' - Nested parallel regions
   1771   1.1  mrg ==========================================
   1772   1.1  mrg 
   1773   1.1  mrg _Description_:
   1774   1.1  mrg      Enable or disable nested parallel regions, i.e., whether team
   1775   1.5  mrg      members are allowed to create new teams.  The value of this
   1776  1.15  mrg      environment variable shall be 'TRUE' or 'FALSE'.  If set to 'TRUE',
   1777  1.15  mrg      the number of maximum active nested regions supported will by
   1778  1.15  mrg      default be set to the maximum supported, otherwise it will be set
   1779  1.15  mrg      to one.  If 'OMP_MAX_ACTIVE_LEVELS' is defined, its setting will
   1780  1.15  mrg      override this setting.  If both are undefined, nested parallel
   1781  1.15  mrg      regions are enabled if 'OMP_NUM_THREADS' or 'OMP_PROC_BINDS' are
   1782  1.15  mrg      defined to a list with more than one item, otherwise they are
   1783  1.15  mrg      disabled by default.
   1784   1.1  mrg 
   1785   1.1  mrg _See also_:
   1786  1.15  mrg      *note omp_set_max_active_levels::, *note omp_set_nested::
   1787   1.1  mrg 
   1788   1.1  mrg _Reference_:
   1789  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.6
   1790   1.1  mrg 
   1791   1.1  mrg 
   1792  1.15  mrg File: libgomp.info,  Node: OMP_NUM_TEAMS,  Next: OMP_NUM_THREADS,  Prev: OMP_NESTED,  Up: Environment Variables
   1793  1.15  mrg 
   1794  1.15  mrg 4.8 'OMP_NUM_TEAMS' - Specifies the number of teams to use by teams region
   1795  1.15  mrg ==========================================================================
   1796  1.15  mrg 
   1797  1.15  mrg _Description_:
   1798  1.15  mrg      Specifies the upper bound for number of teams to use in teams
   1799  1.15  mrg      regions without explicit 'num_teams' clause.  The value of this
   1800  1.15  mrg      variable shall be a positive integer.  If undefined it defaults to
   1801  1.15  mrg      0 which means implementation defined upper bound.
   1802  1.15  mrg 
   1803  1.15  mrg _See also_:
   1804  1.15  mrg      *note omp_set_num_teams::
   1805  1.15  mrg 
   1806  1.15  mrg _Reference_:
   1807  1.15  mrg      OpenMP specification v5.1 (https://www.openmp.org), Section 6.23
   1808  1.15  mrg 
   1809  1.15  mrg 
   1810  1.15  mrg File: libgomp.info,  Node: OMP_NUM_THREADS,  Next: OMP_PROC_BIND,  Prev: OMP_NUM_TEAMS,  Up: Environment Variables
   1811   1.1  mrg 
   1812  1.15  mrg 4.9 'OMP_NUM_THREADS' - Specifies the number of threads to use
   1813   1.1  mrg ==============================================================
   1814   1.1  mrg 
   1815   1.1  mrg _Description_:
   1816  1.11  mrg      Specifies the default number of threads to use in parallel regions.
   1817  1.11  mrg      The value of this variable shall be a comma-separated list of
   1818  1.15  mrg      positive integers; the value specifies the number of threads to use
   1819  1.15  mrg      for the corresponding nested level.  Specifying more than one item
   1820  1.15  mrg      in the list will automatically enable nesting by default.  If
   1821  1.15  mrg      undefined one thread per CPU is used.
   1822   1.1  mrg 
   1823   1.1  mrg _See also_:
   1824  1.15  mrg      *note omp_set_num_threads::, *note OMP_NESTED::
   1825   1.1  mrg 
   1826   1.1  mrg _Reference_:
   1827  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.2
   1828   1.1  mrg 
   1829   1.1  mrg 
   1830   1.5  mrg File: libgomp.info,  Node: OMP_PROC_BIND,  Next: OMP_PLACES,  Prev: OMP_NUM_THREADS,  Up: Environment Variables
   1831   1.5  mrg 
   1832  1.15  mrg 4.10 'OMP_PROC_BIND' - Whether threads may be moved between CPUs
   1833  1.15  mrg ================================================================
   1834   1.5  mrg 
   1835   1.5  mrg _Description_:
   1836   1.5  mrg      Specifies whether threads may be moved between processors.  If set
   1837  1.14  mrg      to 'TRUE', OpenMP threads should not be moved; if set to 'FALSE'
   1838   1.5  mrg      they may be moved.  Alternatively, a comma separated list with the
   1839  1.15  mrg      values 'PRIMARY', 'MASTER', 'CLOSE' and 'SPREAD' can be used to
   1840  1.15  mrg      specify the thread affinity policy for the corresponding nesting
   1841  1.15  mrg      level.  With 'PRIMARY' and 'MASTER' the worker threads are in the
   1842  1.15  mrg      same place partition as the primary thread.  With 'CLOSE' those are
   1843  1.15  mrg      kept close to the primary thread in contiguous place partitions.
   1844  1.15  mrg      And with 'SPREAD' a sparse distribution across the place partitions
   1845  1.15  mrg      is used.  Specifying more than one item in the list will
   1846  1.15  mrg      automatically enable nesting by default.
   1847   1.5  mrg 
   1848  1.11  mrg      When undefined, 'OMP_PROC_BIND' defaults to 'TRUE' when
   1849  1.11  mrg      'OMP_PLACES' or 'GOMP_CPU_AFFINITY' is set and 'FALSE' otherwise.
   1850   1.5  mrg 
   1851   1.5  mrg _See also_:
   1852  1.15  mrg      *note omp_get_proc_bind::, *note GOMP_CPU_AFFINITY::, *note
   1853  1.15  mrg      OMP_NESTED::, *note OMP_PLACES::
   1854   1.5  mrg 
   1855   1.5  mrg _Reference_:
   1856  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.4
   1857   1.5  mrg 
   1858   1.5  mrg 
   1859   1.5  mrg File: libgomp.info,  Node: OMP_PLACES,  Next: OMP_STACKSIZE,  Prev: OMP_PROC_BIND,  Up: Environment Variables
   1860   1.1  mrg 
   1861  1.15  mrg 4.11 'OMP_PLACES' - Specifies on which CPUs the threads should be placed
   1862  1.14  mrg ========================================================================
   1863   1.1  mrg 
   1864   1.1  mrg _Description_:
   1865  1.11  mrg      The thread placement can be either specified using an abstract name
   1866  1.11  mrg      or by an explicit list of the places.  The abstract names
   1867  1.15  mrg      'threads', 'cores', 'sockets', 'll_caches' and 'numa_domains' can
   1868  1.15  mrg      be optionally followed by a positive number in parentheses, which
   1869  1.15  mrg      denotes the how many places shall be created.  With 'threads' each
   1870  1.15  mrg      place corresponds to a single hardware thread; 'cores' to a single
   1871  1.15  mrg      core with the corresponding number of hardware threads; with
   1872  1.15  mrg      'sockets' the place corresponds to a single socket; with
   1873  1.15  mrg      'll_caches' to a set of cores that shares the last level cache on
   1874  1.15  mrg      the device; and 'numa_domains' to a set of cores for which their
   1875  1.15  mrg      closest memory on the device is the same memory and at a similar
   1876  1.15  mrg      distance from the cores.  The resulting placement can be shown by
   1877  1.15  mrg      setting the 'OMP_DISPLAY_ENV' environment variable.
   1878   1.5  mrg 
   1879   1.5  mrg      Alternatively, the placement can be specified explicitly as
   1880   1.5  mrg      comma-separated list of places.  A place is specified by set of
   1881  1.15  mrg      nonnegative numbers in curly braces, denoting the hardware threads.
   1882  1.15  mrg      The curly braces can be omitted when only a single number has been
   1883  1.15  mrg      specified.  The hardware threads belonging to a place can either be
   1884  1.15  mrg      specified as comma-separated list of nonnegative thread numbers or
   1885  1.15  mrg      using an interval.  Multiple places can also be either specified by
   1886  1.15  mrg      a comma-separated list of places or by an interval.  To specify an
   1887  1.15  mrg      interval, a colon followed by the count is placed after the
   1888  1.15  mrg      hardware thread number or the place.  Optionally, the length can be
   1889  1.15  mrg      followed by a colon and the stride number - otherwise a unit stride
   1890  1.15  mrg      is assumed.  Placing an exclamation mark ('!') directly before a
   1891  1.15  mrg      curly brace or numbers inside the curly braces (excluding
   1892  1.15  mrg      intervals) will exclude those hardware threads.
   1893  1.15  mrg 
   1894  1.15  mrg      For instance, the following specifies the same places list:
   1895  1.15  mrg      '"{0,1,2}, {3,4,6}, {7,8,9}, {10,11,12}"'; '"{0:3}, {3:3}, {7:3},
   1896  1.15  mrg      {10:3}"'; and '"{0:2}:4:3"'.
   1897   1.5  mrg 
   1898  1.11  mrg      If 'OMP_PLACES' and 'GOMP_CPU_AFFINITY' are unset and
   1899  1.11  mrg      'OMP_PROC_BIND' is either unset or 'false', threads may be moved
   1900   1.5  mrg      between CPUs following no placement policy.
   1901   1.1  mrg 
   1902   1.1  mrg _See also_:
   1903   1.5  mrg      *note OMP_PROC_BIND::, *note GOMP_CPU_AFFINITY::, *note
   1904   1.5  mrg      omp_get_proc_bind::, *note OMP_DISPLAY_ENV::
   1905   1.1  mrg 
   1906   1.1  mrg _Reference_:
   1907  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.5
   1908   1.1  mrg 
   1909   1.1  mrg 
   1910   1.5  mrg File: libgomp.info,  Node: OMP_STACKSIZE,  Next: OMP_SCHEDULE,  Prev: OMP_PLACES,  Up: Environment Variables
   1911   1.1  mrg 
   1912  1.15  mrg 4.12 'OMP_STACKSIZE' - Set default thread stack size
   1913   1.5  mrg ====================================================
   1914   1.1  mrg 
   1915   1.1  mrg _Description_:
   1916   1.1  mrg      Set the default thread stack size in kilobytes, unless the number
   1917  1.11  mrg      is suffixed by 'B', 'K', 'M' or 'G', in which case the size is,
   1918  1.11  mrg      respectively, in bytes, kilobytes, megabytes or gigabytes.  This is
   1919  1.11  mrg      different from 'pthread_attr_setstacksize' which gets the number of
   1920  1.11  mrg      bytes as an argument.  If the stack size cannot be set due to
   1921  1.11  mrg      system constraints, an error is reported and the initial stack size
   1922  1.11  mrg      is left unchanged.  If undefined, the stack size is system
   1923  1.11  mrg      dependent.
   1924   1.1  mrg 
   1925   1.1  mrg _Reference_:
   1926  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.7
   1927   1.1  mrg 
   1928   1.1  mrg 
   1929  1.15  mrg File: libgomp.info,  Node: OMP_SCHEDULE,  Next: OMP_TARGET_OFFLOAD,  Prev: OMP_STACKSIZE,  Up: Environment Variables
   1930   1.1  mrg 
   1931  1.15  mrg 4.13 'OMP_SCHEDULE' - How threads are scheduled
   1932   1.5  mrg ===============================================
   1933   1.1  mrg 
   1934   1.1  mrg _Description_:
   1935  1.11  mrg      Allows to specify 'schedule type' and 'chunk size'.  The value of
   1936  1.11  mrg      the variable shall have the form: 'type[,chunk]' where 'type' is
   1937  1.11  mrg      one of 'static', 'dynamic', 'guided' or 'auto' The optional 'chunk'
   1938  1.11  mrg      size shall be a positive integer.  If undefined, dynamic scheduling
   1939  1.11  mrg      and a chunk size of 1 is used.
   1940   1.1  mrg 
   1941   1.1  mrg _See also_:
   1942   1.5  mrg      *note omp_set_schedule::
   1943   1.1  mrg 
   1944   1.1  mrg _Reference_:
   1945  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Sections
   1946   1.7  mrg      2.7.1.1 and 4.1
   1947   1.1  mrg 
   1948   1.1  mrg 
   1949  1.15  mrg File: libgomp.info,  Node: OMP_TARGET_OFFLOAD,  Next: OMP_TEAMS_THREAD_LIMIT,  Prev: OMP_SCHEDULE,  Up: Environment Variables
   1950  1.15  mrg 
   1951  1.15  mrg 4.14 'OMP_TARGET_OFFLOAD' - Controls offloading behaviour
   1952  1.15  mrg =========================================================
   1953  1.15  mrg 
   1954  1.15  mrg _Description_:
   1955  1.15  mrg      Specifies the behaviour with regard to offloading code to a device.
   1956  1.15  mrg      This variable can be set to one of three values - 'MANDATORY',
   1957  1.15  mrg      'DISABLED' or 'DEFAULT'.
   1958  1.15  mrg 
   1959  1.15  mrg      If set to 'MANDATORY', the program will terminate with an error if
   1960  1.15  mrg      the offload device is not present or is not supported.  If set to
   1961  1.15  mrg      'DISABLED', then offloading is disabled and all code will run on
   1962  1.15  mrg      the host.  If set to 'DEFAULT', the program will try offloading to
   1963  1.15  mrg      the device first, then fall back to running code on the host if it
   1964  1.15  mrg      cannot.
   1965  1.15  mrg 
   1966  1.15  mrg      If undefined, then the program will behave as if 'DEFAULT' was set.
   1967  1.15  mrg 
   1968  1.15  mrg _Reference_:
   1969  1.15  mrg      OpenMP specification v5.0 (https://www.openmp.org), Section 6.17
   1970  1.15  mrg 
   1971  1.15  mrg 
   1972  1.15  mrg File: libgomp.info,  Node: OMP_TEAMS_THREAD_LIMIT,  Next: OMP_THREAD_LIMIT,  Prev: OMP_TARGET_OFFLOAD,  Up: Environment Variables
   1973  1.15  mrg 
   1974  1.15  mrg 4.15 'OMP_TEAMS_THREAD_LIMIT' - Set the maximum number of threads imposed by teams
   1975  1.15  mrg ==================================================================================
   1976  1.15  mrg 
   1977  1.15  mrg _Description_:
   1978  1.15  mrg      Specifies an upper bound for the number of threads to use by each
   1979  1.15  mrg      contention group created by a teams construct without explicit
   1980  1.15  mrg      'thread_limit' clause.  The value of this variable shall be a
   1981  1.15  mrg      positive integer.  If undefined, the value of 0 is used which
   1982  1.15  mrg      stands for an implementation defined upper limit.
   1983  1.15  mrg 
   1984  1.15  mrg _See also_:
   1985  1.15  mrg      *note OMP_THREAD_LIMIT::, *note omp_set_teams_thread_limit::
   1986  1.15  mrg 
   1987  1.15  mrg _Reference_:
   1988  1.15  mrg      OpenMP specification v5.1 (https://www.openmp.org), Section 6.24
   1989  1.15  mrg 
   1990  1.15  mrg 
   1991  1.15  mrg File: libgomp.info,  Node: OMP_THREAD_LIMIT,  Next: OMP_WAIT_POLICY,  Prev: OMP_TEAMS_THREAD_LIMIT,  Up: Environment Variables
   1992   1.1  mrg 
   1993  1.15  mrg 4.16 'OMP_THREAD_LIMIT' - Set the maximum number of threads
   1994   1.5  mrg ===========================================================
   1995   1.1  mrg 
   1996   1.1  mrg _Description_:
   1997   1.5  mrg      Specifies the number of threads to use for the whole program.  The
   1998   1.5  mrg      value of this variable shall be a positive integer.  If undefined,
   1999   1.5  mrg      the number of threads is not limited.
   2000   1.5  mrg 
   2001   1.5  mrg _See also_:
   2002   1.5  mrg      *note OMP_NUM_THREADS::, *note omp_get_thread_limit::
   2003   1.1  mrg 
   2004   1.1  mrg _Reference_:
   2005  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.10
   2006   1.3  mrg 
   2007   1.3  mrg 
   2008   1.5  mrg File: libgomp.info,  Node: OMP_WAIT_POLICY,  Next: GOMP_CPU_AFFINITY,  Prev: OMP_THREAD_LIMIT,  Up: Environment Variables
   2009   1.3  mrg 
   2010  1.15  mrg 4.17 'OMP_WAIT_POLICY' - How waiting threads are handled
   2011   1.5  mrg ========================================================
   2012   1.3  mrg 
   2013   1.3  mrg _Description_:
   2014   1.5  mrg      Specifies whether waiting threads should be active or passive.  If
   2015  1.11  mrg      the value is 'PASSIVE', waiting threads should not consume CPU
   2016  1.11  mrg      power while waiting; while the value is 'ACTIVE' specifies that
   2017   1.5  mrg      they should.  If undefined, threads wait actively for a short time
   2018   1.5  mrg      before waiting passively.
   2019   1.3  mrg 
   2020   1.3  mrg _See also_:
   2021   1.5  mrg      *note GOMP_SPINCOUNT::
   2022   1.3  mrg 
   2023   1.3  mrg _Reference_:
   2024  1.12  mrg      OpenMP specification v4.5 (https://www.openmp.org), Section 4.8
   2025   1.1  mrg 
   2026   1.1  mrg 
   2027   1.5  mrg File: libgomp.info,  Node: GOMP_CPU_AFFINITY,  Next: GOMP_DEBUG,  Prev: OMP_WAIT_POLICY,  Up: Environment Variables
   2028   1.1  mrg 
   2029  1.15  mrg 4.18 'GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
   2030   1.3  mrg ========================================================
   2031   1.1  mrg 
   2032   1.1  mrg _Description_:
   2033   1.5  mrg      Binds threads to specific CPUs.  The variable should contain a
   2034   1.5  mrg      space-separated or comma-separated list of CPUs.  This list may
   2035   1.3  mrg      contain different kinds of entries: either single CPU numbers in
   2036   1.3  mrg      any order, a range of CPUs (M-N) or a range with some stride
   2037  1.11  mrg      (M-N:S). CPU numbers are zero based.  For example,
   2038  1.11  mrg      'GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"' will bind the initial thread
   2039   1.3  mrg      to CPU 0, the second to CPU 3, the third to CPU 1, the fourth to
   2040   1.3  mrg      CPU 2, the fifth to CPU 4, the sixth through tenth to CPUs 6, 8,
   2041   1.3  mrg      10, 12, and 14 respectively and then start assigning back from the
   2042  1.11  mrg      beginning of the list.  'GOMP_CPU_AFFINITY=0' binds all threads to
   2043   1.3  mrg      CPU 0.
   2044   1.1  mrg 
   2045   1.5  mrg      There is no libgomp library routine to determine whether a CPU
   2046   1.5  mrg      affinity specification is in effect.  As a workaround,
   2047  1.11  mrg      language-specific library functions, e.g., 'getenv' in C or
   2048  1.11  mrg      'GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
   2049  1.11  mrg      setting of the 'GOMP_CPU_AFFINITY' environment variable.  A defined
   2050  1.11  mrg      CPU affinity on startup cannot be changed or disabled during the
   2051  1.11  mrg      runtime of the application.
   2052  1.11  mrg 
   2053  1.11  mrg      If both 'GOMP_CPU_AFFINITY' and 'OMP_PROC_BIND' are set,
   2054  1.11  mrg      'OMP_PROC_BIND' has a higher precedence.  If neither has been set
   2055  1.11  mrg      and 'OMP_PROC_BIND' is unset, or when 'OMP_PROC_BIND' is set to
   2056  1.11  mrg      'FALSE', the host system will handle the assignment of threads to
   2057   1.5  mrg      CPUs.
   2058   1.1  mrg 
   2059   1.3  mrg _See also_:
   2060   1.5  mrg      *note OMP_PLACES::, *note OMP_PROC_BIND::
   2061   1.5  mrg 
   2062   1.5  mrg 
   2063   1.5  mrg File: libgomp.info,  Node: GOMP_DEBUG,  Next: GOMP_STACKSIZE,  Prev: GOMP_CPU_AFFINITY,  Up: Environment Variables
   2064   1.5  mrg 
   2065  1.15  mrg 4.19 'GOMP_DEBUG' - Enable debugging output
   2066   1.5  mrg ===========================================
   2067   1.5  mrg 
   2068   1.5  mrg _Description_:
   2069  1.11  mrg      Enable debugging output.  The variable should be set to '0'
   2070  1.11  mrg      (disabled, also the default if not set), or '1' (enabled).
   2071   1.5  mrg 
   2072   1.5  mrg      If enabled, some debugging output will be printed during execution.
   2073   1.5  mrg      This is currently not specified in more detail, and subject to
   2074   1.5  mrg      change.
   2075   1.3  mrg 
   2076   1.1  mrg 
   2077   1.5  mrg File: libgomp.info,  Node: GOMP_STACKSIZE,  Next: GOMP_SPINCOUNT,  Prev: GOMP_DEBUG,  Up: Environment Variables
   2078   1.1  mrg 
   2079  1.15  mrg 4.20 'GOMP_STACKSIZE' - Set default thread stack size
   2080   1.1  mrg =====================================================
   2081   1.1  mrg 
   2082   1.1  mrg _Description_:
   2083   1.5  mrg      Set the default thread stack size in kilobytes.  This is different
   2084  1.11  mrg      from 'pthread_attr_setstacksize' which gets the number of bytes as
   2085   1.5  mrg      an argument.  If the stack size cannot be set due to system
   2086   1.3  mrg      constraints, an error is reported and the initial stack size is
   2087   1.5  mrg      left unchanged.  If undefined, the stack size is system dependent.
   2088   1.1  mrg 
   2089   1.1  mrg _See also_:
   2090   1.3  mrg      *note OMP_STACKSIZE::
   2091   1.1  mrg 
   2092   1.1  mrg _Reference_:
   2093   1.1  mrg      GCC Patches Mailinglist
   2094  1.13  mrg      (https://gcc.gnu.org/ml/gcc-patches/2006-06/msg00493.html), GCC
   2095   1.1  mrg      Patches Mailinglist
   2096  1.13  mrg      (https://gcc.gnu.org/ml/gcc-patches/2006-06/msg00496.html)
   2097   1.1  mrg 
   2098   1.1  mrg 
   2099   1.7  mrg File: libgomp.info,  Node: GOMP_SPINCOUNT,  Next: GOMP_RTEMS_THREAD_POOLS,  Prev: GOMP_STACKSIZE,  Up: Environment Variables
   2100   1.5  mrg 
   2101  1.15  mrg 4.21 'GOMP_SPINCOUNT' - Set the busy-wait spin count
   2102   1.5  mrg ====================================================
   2103   1.5  mrg 
   2104   1.5  mrg _Description_:
   2105   1.5  mrg      Determines how long a threads waits actively with consuming CPU
   2106   1.5  mrg      power before waiting passively without consuming CPU power.  The
   2107  1.11  mrg      value may be either 'INFINITE', 'INFINITY' to always wait actively
   2108   1.5  mrg      or an integer which gives the number of spins of the busy-wait
   2109   1.5  mrg      loop.  The integer may optionally be followed by the following
   2110  1.11  mrg      suffixes acting as multiplication factors: 'k' (kilo, thousand),
   2111  1.11  mrg      'M' (mega, million), 'G' (giga, billion), or 'T' (tera, trillion).
   2112  1.11  mrg      If undefined, 0 is used when 'OMP_WAIT_POLICY' is 'PASSIVE',
   2113  1.11  mrg      300,000 is used when 'OMP_WAIT_POLICY' is undefined and 30 billion
   2114  1.11  mrg      is used when 'OMP_WAIT_POLICY' is 'ACTIVE'.  If there are more
   2115  1.11  mrg      OpenMP threads than available CPUs, 1000 and 100 spins are used for
   2116  1.11  mrg      'OMP_WAIT_POLICY' being 'ACTIVE' or undefined, respectively; unless
   2117  1.11  mrg      the 'GOMP_SPINCOUNT' is lower or 'OMP_WAIT_POLICY' is 'PASSIVE'.
   2118   1.5  mrg 
   2119   1.5  mrg _See also_:
   2120   1.5  mrg      *note OMP_WAIT_POLICY::
   2121   1.5  mrg 
   2122   1.5  mrg 
   2123   1.7  mrg File: libgomp.info,  Node: GOMP_RTEMS_THREAD_POOLS,  Prev: GOMP_SPINCOUNT,  Up: Environment Variables
   2124   1.7  mrg 
   2125  1.15  mrg 4.22 'GOMP_RTEMS_THREAD_POOLS' - Set the RTEMS specific thread pools
   2126   1.7  mrg ====================================================================
   2127   1.7  mrg 
   2128   1.7  mrg _Description_:
   2129   1.7  mrg      This environment variable is only used on the RTEMS real-time
   2130   1.7  mrg      operating system.  It determines the scheduler instance specific
   2131  1.11  mrg      thread pools.  The format for 'GOMP_RTEMS_THREAD_POOLS' is a list
   2132  1.11  mrg      of optional '<thread-pool-count>[$<priority>]@<scheduler-name>'
   2133  1.11  mrg      configurations separated by ':' where:
   2134  1.11  mrg         * '<thread-pool-count>' is the thread pool count for this
   2135   1.7  mrg           scheduler instance.
   2136  1.11  mrg         * '$<priority>' is an optional priority for the worker threads
   2137  1.11  mrg           of a thread pool according to 'pthread_setschedparam'.  In
   2138   1.7  mrg           case a priority value is omitted, then a worker thread will
   2139  1.15  mrg           inherit the priority of the OpenMP primary thread that created
   2140   1.7  mrg           it.  The priority of the worker thread is not changed after
   2141  1.15  mrg           creation, even if a new OpenMP primary thread using the worker
   2142   1.7  mrg           has a different priority.
   2143  1.11  mrg         * '@<scheduler-name>' is the scheduler instance name according
   2144   1.7  mrg           to the RTEMS application configuration.
   2145   1.7  mrg      In case no thread pool configuration is specified for a scheduler
   2146  1.15  mrg      instance, then each OpenMP primary thread of this scheduler
   2147  1.15  mrg      instance will use its own dynamically allocated thread pool.  To
   2148  1.15  mrg      limit the worker thread count of the thread pools, each OpenMP
   2149  1.15  mrg      primary thread must call 'omp_set_num_threads'.
   2150   1.7  mrg _Example_:
   2151  1.11  mrg      Lets suppose we have three scheduler instances 'IO', 'WRK0', and
   2152  1.11  mrg      'WRK1' with 'GOMP_RTEMS_THREAD_POOLS' set to '"1@WRK0:3$4@WRK1"'.
   2153   1.7  mrg      Then there are no thread pool restrictions for scheduler instance
   2154  1.11  mrg      'IO'.  In the scheduler instance 'WRK0' there is one thread pool
   2155   1.7  mrg      available.  Since no priority is specified for this scheduler
   2156   1.7  mrg      instance, the worker thread inherits the priority of the OpenMP
   2157  1.15  mrg      primary thread that created it.  In the scheduler instance 'WRK1'
   2158  1.11  mrg      there are three thread pools available and their worker threads run
   2159  1.11  mrg      at priority four.
   2160   1.7  mrg 
   2161   1.7  mrg 
   2162   1.7  mrg File: libgomp.info,  Node: Enabling OpenACC,  Next: OpenACC Runtime Library Routines,  Prev: Environment Variables,  Up: Top
   2163   1.7  mrg 
   2164  1.15  mrg 5 Enabling OpenACC
   2165   1.7  mrg ******************
   2166   1.7  mrg 
   2167   1.7  mrg To activate the OpenACC extensions for C/C++ and Fortran, the
   2168  1.11  mrg compile-time flag '-fopenacc' must be specified.  This enables the
   2169  1.13  mrg OpenACC directive '#pragma acc' in C/C++ and '!$acc' directives in free
   2170  1.11  mrg form, 'c$acc', '*$acc' and '!$acc' directives in fixed form, '!$'
   2171  1.11  mrg conditional compilation sentinels in free form and 'c$', '*$' and '!$'
   2172   1.7  mrg sentinels in fixed form, for Fortran.  The flag also arranges for
   2173   1.7  mrg automatic linking of the OpenACC runtime library (*note OpenACC Runtime
   2174   1.7  mrg Library Routines::).
   2175   1.7  mrg 
   2176  1.13  mrg    See <https://gcc.gnu.org/wiki/OpenACC> for more information.
   2177  1.13  mrg 
   2178   1.7  mrg    A complete description of all OpenACC directives accepted may be
   2179  1.11  mrg found in the OpenACC (https://www.openacc.org) Application Programming
   2180  1.13  mrg Interface manual, version 2.6.
   2181   1.7  mrg 
   2182   1.7  mrg 
   2183   1.7  mrg File: libgomp.info,  Node: OpenACC Runtime Library Routines,  Next: OpenACC Environment Variables,  Prev: Enabling OpenACC,  Up: Top
   2184   1.7  mrg 
   2185  1.15  mrg 6 OpenACC Runtime Library Routines
   2186   1.7  mrg **********************************
   2187   1.7  mrg 
   2188   1.7  mrg The runtime routines described here are defined by section 3 of the
   2189  1.13  mrg OpenACC specifications in version 2.6.  They have C linkage, and do not
   2190  1.11  mrg throw exceptions.  Generally, they are available only for the host, with
   2191  1.11  mrg the exception of 'acc_on_device', which is available for both the host
   2192  1.11  mrg and the acceleration device.
   2193   1.7  mrg 
   2194   1.7  mrg * Menu:
   2195   1.7  mrg 
   2196   1.7  mrg * acc_get_num_devices::         Get number of devices for the given device
   2197   1.7  mrg                                 type.
   2198   1.7  mrg * acc_set_device_type::         Set type of device accelerator to use.
   2199   1.7  mrg * acc_get_device_type::         Get type of device accelerator to be used.
   2200   1.7  mrg * acc_set_device_num::          Set device number to use.
   2201   1.7  mrg * acc_get_device_num::          Get device number to be used.
   2202  1.13  mrg * acc_get_property::            Get device property.
   2203   1.7  mrg * acc_async_test::              Tests for completion of a specific asynchronous
   2204   1.7  mrg                                 operation.
   2205  1.13  mrg * acc_async_test_all::          Tests for completion of all asynchronous
   2206   1.7  mrg                                 operations.
   2207   1.7  mrg * acc_wait::                    Wait for completion of a specific asynchronous
   2208   1.7  mrg                                 operation.
   2209  1.13  mrg * acc_wait_all::                Waits for completion of all asynchronous
   2210   1.7  mrg                                 operations.
   2211   1.7  mrg * acc_wait_all_async::          Wait for completion of all asynchronous
   2212   1.7  mrg                                 operations.
   2213   1.7  mrg * acc_wait_async::              Wait for completion of asynchronous operations.
   2214   1.7  mrg * acc_init::                    Initialize runtime for a specific device type.
   2215   1.7  mrg * acc_shutdown::                Shuts down the runtime for a specific device
   2216   1.7  mrg                                 type.
   2217   1.7  mrg * acc_on_device::               Whether executing on a particular device
   2218   1.7  mrg * acc_malloc::                  Allocate device memory.
   2219   1.7  mrg * acc_free::                    Free device memory.
   2220   1.7  mrg * acc_copyin::                  Allocate device memory and copy host memory to
   2221   1.7  mrg                                 it.
   2222   1.7  mrg * acc_present_or_copyin::       If the data is not present on the device,
   2223   1.7  mrg                                 allocate device memory and copy from host
   2224   1.7  mrg                                 memory.
   2225   1.7  mrg * acc_create::                  Allocate device memory and map it to host
   2226   1.7  mrg                                 memory.
   2227   1.7  mrg * acc_present_or_create::       If the data is not present on the device,
   2228   1.7  mrg                                 allocate device memory and map it to host
   2229   1.7  mrg                                 memory.
   2230   1.7  mrg * acc_copyout::                 Copy device memory to host memory.
   2231   1.7  mrg * acc_delete::                  Free device memory.
   2232   1.7  mrg * acc_update_device::           Update device memory from mapped host memory.
   2233   1.7  mrg * acc_update_self::             Update host memory from mapped device memory.
   2234   1.7  mrg * acc_map_data::                Map previously allocated device memory to host
   2235   1.7  mrg                                 memory.
   2236   1.7  mrg * acc_unmap_data::              Unmap device memory from host memory.
   2237   1.7  mrg * acc_deviceptr::               Get device pointer associated with specific
   2238   1.7  mrg                                 host address.
   2239   1.7  mrg * acc_hostptr::                 Get host pointer associated with specific
   2240   1.7  mrg                                 device address.
   2241  1.13  mrg * acc_is_present::              Indicate whether host variable / array is
   2242   1.7  mrg                                 present on device.
   2243   1.7  mrg * acc_memcpy_to_device::        Copy host memory to device memory.
   2244   1.7  mrg * acc_memcpy_from_device::      Copy device memory to host memory.
   2245  1.13  mrg * acc_attach::                  Let device pointer point to device-pointer target.
   2246  1.13  mrg * acc_detach::                  Let device pointer point to host-pointer target.
   2247   1.7  mrg 
   2248   1.7  mrg API routines for target platforms.
   2249   1.7  mrg 
   2250   1.7  mrg * acc_get_current_cuda_device:: Get CUDA device handle.
   2251   1.7  mrg * acc_get_current_cuda_context::Get CUDA context handle.
   2252   1.7  mrg * acc_get_cuda_stream::         Get CUDA stream handle.
   2253   1.7  mrg * acc_set_cuda_stream::         Set CUDA stream handle.
   2254   1.7  mrg 
   2255  1.13  mrg API routines for the OpenACC Profiling Interface.
   2256  1.13  mrg 
   2257  1.13  mrg * acc_prof_register::           Register callbacks.
   2258  1.13  mrg * acc_prof_unregister::         Unregister callbacks.
   2259  1.13  mrg * acc_prof_lookup::             Obtain inquiry functions.
   2260  1.13  mrg * acc_register_library::        Library registration.
   2261  1.13  mrg 
   2262   1.7  mrg 
   2263   1.7  mrg File: libgomp.info,  Node: acc_get_num_devices,  Next: acc_set_device_type,  Up: OpenACC Runtime Library Routines
   2264   1.7  mrg 
   2265  1.15  mrg 6.1 'acc_get_num_devices' - Get number of devices for given device type
   2266   1.7  mrg =======================================================================
   2267   1.7  mrg 
   2268   1.7  mrg _Description_
   2269   1.7  mrg      This function returns a value indicating the number of devices
   2270   1.7  mrg      available for the device type specified in DEVICETYPE.
   2271   1.7  mrg 
   2272   1.7  mrg _C/C++_:
   2273  1.11  mrg      _Prototype_:   'int acc_get_num_devices(acc_device_t devicetype);'
   2274   1.7  mrg 
   2275   1.7  mrg _Fortran_:
   2276  1.11  mrg      _Interface_:   'integer function acc_get_num_devices(devicetype)'
   2277  1.11  mrg                     'integer(kind=acc_device_kind) devicetype'
   2278   1.7  mrg 
   2279   1.7  mrg _Reference_:
   2280  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2281   1.7  mrg      3.2.1.
   2282   1.7  mrg 
   2283   1.7  mrg 
   2284   1.7  mrg File: libgomp.info,  Node: acc_set_device_type,  Next: acc_get_device_type,  Prev: acc_get_num_devices,  Up: OpenACC Runtime Library Routines
   2285   1.7  mrg 
   2286  1.15  mrg 6.2 'acc_set_device_type' - Set type of device accelerator to use.
   2287   1.7  mrg ==================================================================
   2288   1.7  mrg 
   2289   1.7  mrg _Description_
   2290  1.13  mrg      This function indicates to the runtime library which device type,
   2291   1.7  mrg      specified in DEVICETYPE, to use when executing a parallel or
   2292   1.7  mrg      kernels region.
   2293   1.7  mrg 
   2294   1.7  mrg _C/C++_:
   2295  1.11  mrg      _Prototype_:   'acc_set_device_type(acc_device_t devicetype);'
   2296   1.7  mrg 
   2297   1.7  mrg _Fortran_:
   2298  1.11  mrg      _Interface_:   'subroutine acc_set_device_type(devicetype)'
   2299  1.11  mrg                     'integer(kind=acc_device_kind) devicetype'
   2300   1.7  mrg 
   2301   1.7  mrg _Reference_:
   2302  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2303   1.7  mrg      3.2.2.
   2304   1.7  mrg 
   2305   1.7  mrg 
   2306   1.7  mrg File: libgomp.info,  Node: acc_get_device_type,  Next: acc_set_device_num,  Prev: acc_set_device_type,  Up: OpenACC Runtime Library Routines
   2307   1.7  mrg 
   2308  1.15  mrg 6.3 'acc_get_device_type' - Get type of device accelerator to be used.
   2309   1.7  mrg ======================================================================
   2310   1.7  mrg 
   2311   1.7  mrg _Description_
   2312   1.7  mrg      This function returns what device type will be used when executing
   2313   1.7  mrg      a parallel or kernels region.
   2314   1.7  mrg 
   2315  1.13  mrg      This function returns 'acc_device_none' if 'acc_get_device_type' is
   2316  1.13  mrg      called from 'acc_ev_device_init_start', 'acc_ev_device_init_end'
   2317  1.13  mrg      callbacks of the OpenACC Profiling Interface (*note OpenACC
   2318  1.13  mrg      Profiling Interface::), that is, if the device is currently being
   2319  1.13  mrg      initialized.
   2320  1.13  mrg 
   2321   1.7  mrg _C/C++_:
   2322  1.11  mrg      _Prototype_:   'acc_device_t acc_get_device_type(void);'
   2323   1.7  mrg 
   2324   1.7  mrg _Fortran_:
   2325  1.11  mrg      _Interface_:   'function acc_get_device_type(void)'
   2326  1.11  mrg                     'integer(kind=acc_device_kind) acc_get_device_type'
   2327   1.7  mrg 
   2328   1.7  mrg _Reference_:
   2329  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2330   1.7  mrg      3.2.3.
   2331   1.7  mrg 
   2332   1.7  mrg 
   2333   1.7  mrg File: libgomp.info,  Node: acc_set_device_num,  Next: acc_get_device_num,  Prev: acc_get_device_type,  Up: OpenACC Runtime Library Routines
   2334   1.7  mrg 
   2335  1.15  mrg 6.4 'acc_set_device_num' - Set device number to use.
   2336   1.7  mrg ====================================================
   2337   1.7  mrg 
   2338   1.7  mrg _Description_
   2339   1.7  mrg      This function will indicate to the runtime which device number,
   2340  1.13  mrg      specified by DEVICENUM, associated with the specified device type
   2341   1.7  mrg      DEVICETYPE.
   2342   1.7  mrg 
   2343   1.7  mrg _C/C++_:
   2344  1.13  mrg      _Prototype_:   'acc_set_device_num(int devicenum, acc_device_t
   2345  1.13  mrg                     devicetype);'
   2346   1.7  mrg 
   2347   1.7  mrg _Fortran_:
   2348  1.11  mrg      _Interface_:   'subroutine acc_set_device_num(devicenum, devicetype)'
   2349  1.11  mrg                     'integer devicenum'
   2350  1.11  mrg                     'integer(kind=acc_device_kind) devicetype'
   2351   1.7  mrg 
   2352   1.7  mrg _Reference_:
   2353  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2354   1.7  mrg      3.2.4.
   2355   1.7  mrg 
   2356   1.7  mrg 
   2357  1.13  mrg File: libgomp.info,  Node: acc_get_device_num,  Next: acc_get_property,  Prev: acc_set_device_num,  Up: OpenACC Runtime Library Routines
   2358   1.7  mrg 
   2359  1.15  mrg 6.5 'acc_get_device_num' - Get device number to be used.
   2360   1.7  mrg ========================================================
   2361   1.7  mrg 
   2362   1.7  mrg _Description_
   2363   1.7  mrg      This function returns which device number associated with the
   2364   1.7  mrg      specified device type DEVICETYPE, will be used when executing a
   2365   1.7  mrg      parallel or kernels region.
   2366   1.7  mrg 
   2367   1.7  mrg _C/C++_:
   2368  1.11  mrg      _Prototype_:   'int acc_get_device_num(acc_device_t devicetype);'
   2369   1.7  mrg 
   2370   1.7  mrg _Fortran_:
   2371  1.11  mrg      _Interface_:   'function acc_get_device_num(devicetype)'
   2372  1.11  mrg                     'integer(kind=acc_device_kind) devicetype'
   2373  1.11  mrg                     'integer acc_get_device_num'
   2374   1.7  mrg 
   2375   1.7  mrg _Reference_:
   2376  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2377   1.7  mrg      3.2.5.
   2378   1.7  mrg 
   2379   1.7  mrg 
   2380  1.13  mrg File: libgomp.info,  Node: acc_get_property,  Next: acc_async_test,  Prev: acc_get_device_num,  Up: OpenACC Runtime Library Routines
   2381  1.13  mrg 
   2382  1.15  mrg 6.6 'acc_get_property' - Get device property.
   2383  1.13  mrg =============================================
   2384  1.13  mrg 
   2385  1.13  mrg _Description_
   2386  1.13  mrg      These routines return the value of the specified PROPERTY for the
   2387  1.13  mrg      device being queried according to DEVICENUM and DEVICETYPE.
   2388  1.13  mrg      Integer-valued and string-valued properties are returned by
   2389  1.13  mrg      'acc_get_property' and 'acc_get_property_string' respectively.  The
   2390  1.13  mrg      Fortran 'acc_get_property_string' subroutine returns the string
   2391  1.13  mrg      retrieved in its fourth argument while the remaining entry points
   2392  1.13  mrg      are functions, which pass the return value as their result.
   2393  1.13  mrg 
   2394  1.13  mrg      Note for Fortran, only: the OpenACC technical committee corrected
   2395  1.13  mrg      and, hence, modified the interface introduced in OpenACC 2.6.  The
   2396  1.13  mrg      kind-value parameter 'acc_device_property' has been renamed to
   2397  1.13  mrg      'acc_device_property_kind' for consistency and the return type of
   2398  1.13  mrg      the 'acc_get_property' function is now a 'c_size_t' integer instead
   2399  1.13  mrg      of a 'acc_device_property' integer.  The parameter
   2400  1.13  mrg      'acc_device_property' will continue to be provided, but might be
   2401  1.13  mrg      removed in a future version of GCC.
   2402  1.13  mrg 
   2403  1.13  mrg _C/C++_:
   2404  1.13  mrg      _Prototype_:   'size_t acc_get_property(int devicenum, acc_device_t
   2405  1.13  mrg                     devicetype, acc_device_property_t property);'
   2406  1.13  mrg      _Prototype_:   'const char *acc_get_property_string(int devicenum,
   2407  1.13  mrg                     acc_device_t devicetype, acc_device_property_t
   2408  1.13  mrg                     property);'
   2409  1.13  mrg 
   2410  1.13  mrg _Fortran_:
   2411  1.13  mrg      _Interface_:   'function acc_get_property(devicenum, devicetype,
   2412  1.13  mrg                     property)'
   2413  1.13  mrg      _Interface_:   'subroutine acc_get_property_string(devicenum,
   2414  1.13  mrg                     devicetype, property, string)'
   2415  1.13  mrg                     'use ISO_C_Binding, only: c_size_t'
   2416  1.13  mrg                     'integer devicenum'
   2417  1.13  mrg                     'integer(kind=acc_device_kind) devicetype'
   2418  1.13  mrg                     'integer(kind=acc_device_property_kind) property'
   2419  1.13  mrg                     'integer(kind=c_size_t) acc_get_property'
   2420  1.13  mrg                     'character(*) string'
   2421  1.13  mrg 
   2422  1.13  mrg _Reference_:
   2423  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2424  1.13  mrg      3.2.6.
   2425   1.7  mrg 
   2426  1.13  mrg 
   2427  1.13  mrg File: libgomp.info,  Node: acc_async_test,  Next: acc_async_test_all,  Prev: acc_get_property,  Up: OpenACC Runtime Library Routines
   2428  1.13  mrg 
   2429  1.15  mrg 6.7 'acc_async_test' - Test for completion of a specific asynchronous operation.
   2430   1.7  mrg ================================================================================
   2431   1.7  mrg 
   2432   1.7  mrg _Description_
   2433  1.13  mrg      This function tests for completion of the asynchronous operation
   2434  1.11  mrg      specified in ARG.  In C/C++, a non-zero value will be returned to
   2435  1.11  mrg      indicate the specified asynchronous operation has completed.  While
   2436  1.13  mrg      Fortran will return a 'true'.  If the asynchronous operation has
   2437  1.11  mrg      not completed, C/C++ returns a zero and Fortran returns a 'false'.
   2438   1.7  mrg 
   2439   1.7  mrg _C/C++_:
   2440  1.11  mrg      _Prototype_:   'int acc_async_test(int arg);'
   2441   1.7  mrg 
   2442   1.7  mrg _Fortran_:
   2443  1.11  mrg      _Interface_:   'function acc_async_test(arg)'
   2444  1.11  mrg                     'integer(kind=acc_handle_kind) arg'
   2445  1.11  mrg                     'logical acc_async_test'
   2446   1.7  mrg 
   2447   1.7  mrg _Reference_:
   2448  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2449  1.13  mrg      3.2.9.
   2450   1.7  mrg 
   2451   1.7  mrg 
   2452   1.7  mrg File: libgomp.info,  Node: acc_async_test_all,  Next: acc_wait,  Prev: acc_async_test,  Up: OpenACC Runtime Library Routines
   2453   1.7  mrg 
   2454  1.15  mrg 6.8 'acc_async_test_all' - Tests for completion of all asynchronous operations.
   2455   1.7  mrg ===============================================================================
   2456   1.7  mrg 
   2457   1.7  mrg _Description_
   2458  1.13  mrg      This function tests for completion of all asynchronous operations.
   2459   1.7  mrg      In C/C++, a non-zero value will be returned to indicate all
   2460  1.11  mrg      asynchronous operations have completed.  While Fortran will return
   2461  1.11  mrg      a 'true'.  If any asynchronous operation has not completed, C/C++
   2462  1.11  mrg      returns a zero and Fortran returns a 'false'.
   2463   1.7  mrg 
   2464   1.7  mrg _C/C++_:
   2465  1.11  mrg      _Prototype_:   'int acc_async_test_all(void);'
   2466   1.7  mrg 
   2467   1.7  mrg _Fortran_:
   2468  1.11  mrg      _Interface_:   'function acc_async_test()'
   2469  1.11  mrg                     'logical acc_get_device_num'
   2470   1.7  mrg 
   2471   1.7  mrg _Reference_:
   2472  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2473  1.13  mrg      3.2.10.
   2474   1.7  mrg 
   2475   1.7  mrg 
   2476   1.7  mrg File: libgomp.info,  Node: acc_wait,  Next: acc_wait_all,  Prev: acc_async_test_all,  Up: OpenACC Runtime Library Routines
   2477   1.7  mrg 
   2478  1.15  mrg 6.9 'acc_wait' - Wait for completion of a specific asynchronous operation.
   2479   1.7  mrg ==========================================================================
   2480   1.7  mrg 
   2481   1.7  mrg _Description_
   2482   1.7  mrg      This function waits for completion of the asynchronous operation
   2483   1.7  mrg      specified in ARG.
   2484   1.7  mrg 
   2485   1.7  mrg _C/C++_:
   2486  1.11  mrg      _Prototype_:   'acc_wait(arg);'
   2487  1.11  mrg      _Prototype     'acc_async_wait(arg);'
   2488  1.11  mrg      (OpenACC 1.0
   2489  1.11  mrg      compatibility)_:
   2490   1.7  mrg 
   2491   1.7  mrg _Fortran_:
   2492  1.11  mrg      _Interface_:   'subroutine acc_wait(arg)'
   2493  1.11  mrg                     'integer(acc_handle_kind) arg'
   2494  1.11  mrg      _Interface     'subroutine acc_async_wait(arg)'
   2495  1.11  mrg      (OpenACC 1.0
   2496  1.11  mrg      compatibility)_:
   2497  1.11  mrg                     'integer(acc_handle_kind) arg'
   2498   1.7  mrg 
   2499   1.7  mrg _Reference_:
   2500  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2501  1.13  mrg      3.2.11.
   2502   1.7  mrg 
   2503   1.7  mrg 
   2504   1.7  mrg File: libgomp.info,  Node: acc_wait_all,  Next: acc_wait_all_async,  Prev: acc_wait,  Up: OpenACC Runtime Library Routines
   2505   1.7  mrg 
   2506  1.15  mrg 6.10 'acc_wait_all' - Waits for completion of all asynchronous operations.
   2507  1.13  mrg ==========================================================================
   2508   1.7  mrg 
   2509   1.7  mrg _Description_
   2510   1.7  mrg      This function waits for the completion of all asynchronous
   2511   1.7  mrg      operations.
   2512   1.7  mrg 
   2513   1.7  mrg _C/C++_:
   2514  1.11  mrg      _Prototype_:   'acc_wait_all(void);'
   2515  1.11  mrg      _Prototype     'acc_async_wait_all(void);'
   2516  1.11  mrg      (OpenACC 1.0
   2517  1.11  mrg      compatibility)_:
   2518   1.7  mrg 
   2519   1.7  mrg _Fortran_:
   2520  1.11  mrg      _Interface_:   'subroutine acc_wait_all()'
   2521  1.11  mrg      _Interface     'subroutine acc_async_wait_all()'
   2522  1.11  mrg      (OpenACC 1.0
   2523  1.11  mrg      compatibility)_:
   2524   1.7  mrg 
   2525   1.7  mrg _Reference_:
   2526  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2527  1.13  mrg      3.2.13.
   2528   1.7  mrg 
   2529   1.7  mrg 
   2530   1.7  mrg File: libgomp.info,  Node: acc_wait_all_async,  Next: acc_wait_async,  Prev: acc_wait_all,  Up: OpenACC Runtime Library Routines
   2531   1.7  mrg 
   2532  1.15  mrg 6.11 'acc_wait_all_async' - Wait for completion of all asynchronous operations.
   2533   1.7  mrg ===============================================================================
   2534   1.7  mrg 
   2535   1.7  mrg _Description_
   2536   1.7  mrg      This function enqueues a wait operation on the queue ASYNC for any
   2537   1.7  mrg      and all asynchronous operations that have been previously enqueued
   2538   1.7  mrg      on any queue.
   2539   1.7  mrg 
   2540   1.7  mrg _C/C++_:
   2541  1.11  mrg      _Prototype_:   'acc_wait_all_async(int async);'
   2542   1.7  mrg 
   2543   1.7  mrg _Fortran_:
   2544  1.11  mrg      _Interface_:   'subroutine acc_wait_all_async(async)'
   2545  1.11  mrg                     'integer(acc_handle_kind) async'
   2546   1.7  mrg 
   2547   1.7  mrg _Reference_:
   2548  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2549  1.13  mrg      3.2.14.
   2550   1.7  mrg 
   2551   1.7  mrg 
   2552   1.7  mrg File: libgomp.info,  Node: acc_wait_async,  Next: acc_init,  Prev: acc_wait_all_async,  Up: OpenACC Runtime Library Routines
   2553   1.7  mrg 
   2554  1.15  mrg 6.12 'acc_wait_async' - Wait for completion of asynchronous operations.
   2555   1.7  mrg =======================================================================
   2556   1.7  mrg 
   2557   1.7  mrg _Description_
   2558   1.7  mrg      This function enqueues a wait operation on queue ASYNC for any and
   2559   1.7  mrg      all asynchronous operations enqueued on queue ARG.
   2560   1.7  mrg 
   2561   1.7  mrg _C/C++_:
   2562  1.11  mrg      _Prototype_:   'acc_wait_async(int arg, int async);'
   2563   1.7  mrg 
   2564   1.7  mrg _Fortran_:
   2565  1.11  mrg      _Interface_:   'subroutine acc_wait_async(arg, async)'
   2566  1.11  mrg                     'integer(acc_handle_kind) arg, async'
   2567   1.7  mrg 
   2568   1.7  mrg _Reference_:
   2569  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2570  1.13  mrg      3.2.12.
   2571   1.7  mrg 
   2572   1.7  mrg 
   2573   1.7  mrg File: libgomp.info,  Node: acc_init,  Next: acc_shutdown,  Prev: acc_wait_async,  Up: OpenACC Runtime Library Routines
   2574   1.7  mrg 
   2575  1.15  mrg 6.13 'acc_init' - Initialize runtime for a specific device type.
   2576   1.7  mrg ================================================================
   2577   1.7  mrg 
   2578   1.7  mrg _Description_
   2579  1.11  mrg      This function initializes the runtime for the device type specified
   2580  1.11  mrg      in DEVICETYPE.
   2581   1.7  mrg 
   2582   1.7  mrg _C/C++_:
   2583  1.11  mrg      _Prototype_:   'acc_init(acc_device_t devicetype);'
   2584   1.7  mrg 
   2585   1.7  mrg _Fortran_:
   2586  1.11  mrg      _Interface_:   'subroutine acc_init(devicetype)'
   2587  1.11  mrg                     'integer(acc_device_kind) devicetype'
   2588   1.7  mrg 
   2589   1.7  mrg _Reference_:
   2590  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2591  1.13  mrg      3.2.7.
   2592   1.7  mrg 
   2593   1.7  mrg 
   2594   1.7  mrg File: libgomp.info,  Node: acc_shutdown,  Next: acc_on_device,  Prev: acc_init,  Up: OpenACC Runtime Library Routines
   2595   1.7  mrg 
   2596  1.15  mrg 6.14 'acc_shutdown' - Shuts down the runtime for a specific device type.
   2597   1.7  mrg ========================================================================
   2598   1.7  mrg 
   2599   1.7  mrg _Description_
   2600   1.7  mrg      This function shuts down the runtime for the device type specified
   2601   1.7  mrg      in DEVICETYPE.
   2602   1.7  mrg 
   2603   1.7  mrg _C/C++_:
   2604  1.11  mrg      _Prototype_:   'acc_shutdown(acc_device_t devicetype);'
   2605   1.7  mrg 
   2606   1.7  mrg _Fortran_:
   2607  1.11  mrg      _Interface_:   'subroutine acc_shutdown(devicetype)'
   2608  1.11  mrg                     'integer(acc_device_kind) devicetype'
   2609   1.7  mrg 
   2610   1.7  mrg _Reference_:
   2611  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2612  1.13  mrg      3.2.8.
   2613   1.7  mrg 
   2614   1.7  mrg 
   2615   1.7  mrg File: libgomp.info,  Node: acc_on_device,  Next: acc_malloc,  Prev: acc_shutdown,  Up: OpenACC Runtime Library Routines
   2616   1.7  mrg 
   2617  1.15  mrg 6.15 'acc_on_device' - Whether executing on a particular device
   2618   1.7  mrg ===============================================================
   2619   1.7  mrg 
   2620   1.7  mrg _Description_:
   2621   1.7  mrg      This function returns whether the program is executing on a
   2622  1.11  mrg      particular device specified in DEVICETYPE.  In C/C++ a non-zero
   2623  1.13  mrg      value is returned to indicate the device is executing on the
   2624  1.11  mrg      specified device type.  In Fortran, 'true' will be returned.  If
   2625   1.7  mrg      the program is not executing on the specified device type C/C++
   2626  1.11  mrg      will return a zero, while Fortran will return 'false'.
   2627   1.7  mrg 
   2628   1.7  mrg _C/C++_:
   2629  1.11  mrg      _Prototype_:   'acc_on_device(acc_device_t devicetype);'
   2630   1.7  mrg 
   2631   1.7  mrg _Fortran_:
   2632  1.11  mrg      _Interface_:   'function acc_on_device(devicetype)'
   2633  1.11  mrg                     'integer(acc_device_kind) devicetype'
   2634  1.11  mrg                     'logical acc_on_device'
   2635   1.7  mrg 
   2636   1.7  mrg _Reference_:
   2637  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2638  1.13  mrg      3.2.17.
   2639   1.7  mrg 
   2640   1.7  mrg 
   2641   1.7  mrg File: libgomp.info,  Node: acc_malloc,  Next: acc_free,  Prev: acc_on_device,  Up: OpenACC Runtime Library Routines
   2642   1.7  mrg 
   2643  1.15  mrg 6.16 'acc_malloc' - Allocate device memory.
   2644   1.7  mrg ===========================================
   2645   1.7  mrg 
   2646   1.7  mrg _Description_
   2647  1.11  mrg      This function allocates LEN bytes of device memory.  It returns the
   2648   1.7  mrg      device address of the allocated memory.
   2649   1.7  mrg 
   2650   1.7  mrg _C/C++_:
   2651  1.11  mrg      _Prototype_:   'd_void* acc_malloc(size_t len);'
   2652   1.7  mrg 
   2653   1.7  mrg _Reference_:
   2654  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2655  1.13  mrg      3.2.18.
   2656   1.7  mrg 
   2657   1.7  mrg 
   2658   1.7  mrg File: libgomp.info,  Node: acc_free,  Next: acc_copyin,  Prev: acc_malloc,  Up: OpenACC Runtime Library Routines
   2659   1.7  mrg 
   2660  1.15  mrg 6.17 'acc_free' - Free device memory.
   2661   1.7  mrg =====================================
   2662   1.7  mrg 
   2663   1.7  mrg _Description_
   2664  1.11  mrg      Free previously allocated device memory at the device address 'a'.
   2665   1.7  mrg 
   2666   1.7  mrg _C/C++_:
   2667  1.11  mrg      _Prototype_:   'acc_free(d_void *a);'
   2668   1.7  mrg 
   2669   1.7  mrg _Reference_:
   2670  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2671  1.13  mrg      3.2.19.
   2672   1.7  mrg 
   2673   1.7  mrg 
   2674   1.7  mrg File: libgomp.info,  Node: acc_copyin,  Next: acc_present_or_copyin,  Prev: acc_free,  Up: OpenACC Runtime Library Routines
   2675   1.7  mrg 
   2676  1.15  mrg 6.18 'acc_copyin' - Allocate device memory and copy host memory to it.
   2677   1.7  mrg ======================================================================
   2678   1.7  mrg 
   2679   1.7  mrg _Description_
   2680   1.7  mrg      In C/C++, this function allocates LEN bytes of device memory and
   2681  1.11  mrg      maps it to the specified host address in A.  The device address of
   2682   1.7  mrg      the newly allocated device memory is returned.
   2683   1.7  mrg 
   2684  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2685  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2686  1.11  mrg      a variable or array element and LEN specifies the length in bytes.
   2687   1.7  mrg 
   2688   1.7  mrg _C/C++_:
   2689  1.11  mrg      _Prototype_:   'void *acc_copyin(h_void *a, size_t len);'
   2690  1.13  mrg      _Prototype_:   'void *acc_copyin_async(h_void *a, size_t len, int
   2691  1.13  mrg                     async);'
   2692   1.7  mrg 
   2693   1.7  mrg _Fortran_:
   2694  1.11  mrg      _Interface_:   'subroutine acc_copyin(a)'
   2695  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2696  1.11  mrg      _Interface_:   'subroutine acc_copyin(a, len)'
   2697  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2698  1.11  mrg                     'integer len'
   2699  1.13  mrg      _Interface_:   'subroutine acc_copyin_async(a, async)'
   2700  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2701  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2702  1.13  mrg      _Interface_:   'subroutine acc_copyin_async(a, len, async)'
   2703  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2704  1.13  mrg                     'integer len'
   2705  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2706   1.7  mrg 
   2707   1.7  mrg _Reference_:
   2708  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2709  1.13  mrg      3.2.20.
   2710   1.7  mrg 
   2711   1.7  mrg 
   2712   1.7  mrg File: libgomp.info,  Node: acc_present_or_copyin,  Next: acc_create,  Prev: acc_copyin,  Up: OpenACC Runtime Library Routines
   2713   1.7  mrg 
   2714  1.15  mrg 6.19 'acc_present_or_copyin' - If the data is not present on the device, allocate device memory and copy from host memory.
   2715   1.7  mrg ==========================================================================================================================
   2716   1.7  mrg 
   2717   1.7  mrg _Description_
   2718  1.13  mrg      This function tests if the host data specified by A and of length
   2719  1.11  mrg      LEN is present or not.  If it is not present, then device memory
   2720  1.11  mrg      will be allocated and the host memory copied.  The device address
   2721  1.11  mrg      of the newly allocated device memory is returned.
   2722   1.7  mrg 
   2723  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2724  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2725   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   2726   1.7  mrg 
   2727  1.13  mrg      Note that 'acc_present_or_copyin' and 'acc_pcopyin' exist for
   2728  1.13  mrg      backward compatibility with OpenACC 2.0; use *note acc_copyin::
   2729  1.13  mrg      instead.
   2730  1.13  mrg 
   2731   1.7  mrg _C/C++_:
   2732  1.11  mrg      _Prototype_:   'void *acc_present_or_copyin(h_void *a, size_t len);'
   2733  1.11  mrg      _Prototype_:   'void *acc_pcopyin(h_void *a, size_t len);'
   2734   1.7  mrg 
   2735   1.7  mrg _Fortran_:
   2736  1.11  mrg      _Interface_:   'subroutine acc_present_or_copyin(a)'
   2737  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2738  1.11  mrg      _Interface_:   'subroutine acc_present_or_copyin(a, len)'
   2739  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2740  1.11  mrg                     'integer len'
   2741  1.11  mrg      _Interface_:   'subroutine acc_pcopyin(a)'
   2742  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2743  1.11  mrg      _Interface_:   'subroutine acc_pcopyin(a, len)'
   2744  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2745  1.11  mrg                     'integer len'
   2746   1.7  mrg 
   2747   1.7  mrg _Reference_:
   2748  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2749  1.13  mrg      3.2.20.
   2750   1.7  mrg 
   2751   1.7  mrg 
   2752   1.7  mrg File: libgomp.info,  Node: acc_create,  Next: acc_present_or_create,  Prev: acc_present_or_copyin,  Up: OpenACC Runtime Library Routines
   2753   1.7  mrg 
   2754  1.15  mrg 6.20 'acc_create' - Allocate device memory and map it to host memory.
   2755   1.7  mrg =====================================================================
   2756   1.7  mrg 
   2757   1.7  mrg _Description_
   2758   1.7  mrg      This function allocates device memory and maps it to host memory
   2759  1.11  mrg      specified by the host address A with a length of LEN bytes.  In
   2760   1.7  mrg      C/C++, the function returns the device address of the allocated
   2761   1.7  mrg      device memory.
   2762   1.7  mrg 
   2763  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2764  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2765   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   2766   1.7  mrg 
   2767   1.7  mrg _C/C++_:
   2768  1.11  mrg      _Prototype_:   'void *acc_create(h_void *a, size_t len);'
   2769  1.13  mrg      _Prototype_:   'void *acc_create_async(h_void *a, size_t len, int
   2770  1.13  mrg                     async);'
   2771   1.7  mrg 
   2772   1.7  mrg _Fortran_:
   2773  1.11  mrg      _Interface_:   'subroutine acc_create(a)'
   2774  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2775  1.11  mrg      _Interface_:   'subroutine acc_create(a, len)'
   2776  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2777  1.11  mrg                     'integer len'
   2778  1.13  mrg      _Interface_:   'subroutine acc_create_async(a, async)'
   2779  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2780  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2781  1.13  mrg      _Interface_:   'subroutine acc_create_async(a, len, async)'
   2782  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2783  1.13  mrg                     'integer len'
   2784  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2785   1.7  mrg 
   2786   1.7  mrg _Reference_:
   2787  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2788  1.13  mrg      3.2.21.
   2789   1.7  mrg 
   2790   1.7  mrg 
   2791   1.7  mrg File: libgomp.info,  Node: acc_present_or_create,  Next: acc_copyout,  Prev: acc_create,  Up: OpenACC Runtime Library Routines
   2792   1.7  mrg 
   2793  1.15  mrg 6.21 'acc_present_or_create' - If the data is not present on the device, allocate device memory and map it to host memory.
   2794   1.7  mrg ==========================================================================================================================
   2795   1.1  mrg 
   2796   1.7  mrg _Description_
   2797  1.13  mrg      This function tests if the host data specified by A and of length
   2798  1.11  mrg      LEN is present or not.  If it is not present, then device memory
   2799  1.11  mrg      will be allocated and mapped to host memory.  In C/C++, the device
   2800   1.7  mrg      address of the newly allocated device memory is returned.
   2801   1.7  mrg 
   2802  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2803  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2804   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   2805   1.7  mrg 
   2806  1.13  mrg      Note that 'acc_present_or_create' and 'acc_pcreate' exist for
   2807  1.13  mrg      backward compatibility with OpenACC 2.0; use *note acc_create::
   2808  1.13  mrg      instead.
   2809  1.13  mrg 
   2810   1.7  mrg _C/C++_:
   2811  1.11  mrg      _Prototype_:   'void *acc_present_or_create(h_void *a, size_t len)'
   2812  1.11  mrg      _Prototype_:   'void *acc_pcreate(h_void *a, size_t len)'
   2813   1.7  mrg 
   2814   1.7  mrg _Fortran_:
   2815  1.11  mrg      _Interface_:   'subroutine acc_present_or_create(a)'
   2816  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2817  1.11  mrg      _Interface_:   'subroutine acc_present_or_create(a, len)'
   2818  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2819  1.11  mrg                     'integer len'
   2820  1.11  mrg      _Interface_:   'subroutine acc_pcreate(a)'
   2821  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2822  1.11  mrg      _Interface_:   'subroutine acc_pcreate(a, len)'
   2823  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2824  1.11  mrg                     'integer len'
   2825   1.7  mrg 
   2826   1.7  mrg _Reference_:
   2827  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2828  1.13  mrg      3.2.21.
   2829   1.7  mrg 
   2830   1.7  mrg 
   2831   1.7  mrg File: libgomp.info,  Node: acc_copyout,  Next: acc_delete,  Prev: acc_present_or_create,  Up: OpenACC Runtime Library Routines
   2832   1.7  mrg 
   2833  1.15  mrg 6.22 'acc_copyout' - Copy device memory to host memory.
   2834   1.7  mrg =======================================================
   2835   1.7  mrg 
   2836   1.7  mrg _Description_
   2837   1.7  mrg      This function copies mapped device memory to host memory which is
   2838   1.7  mrg      specified by host address A for a length LEN bytes in C/C++.
   2839   1.7  mrg 
   2840  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2841  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2842   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   2843   1.7  mrg 
   2844   1.7  mrg _C/C++_:
   2845  1.11  mrg      _Prototype_:   'acc_copyout(h_void *a, size_t len);'
   2846  1.13  mrg      _Prototype_:   'acc_copyout_async(h_void *a, size_t len, int async);'
   2847  1.13  mrg      _Prototype_:   'acc_copyout_finalize(h_void *a, size_t len);'
   2848  1.13  mrg      _Prototype_:   'acc_copyout_finalize_async(h_void *a, size_t len, int
   2849  1.13  mrg                     async);'
   2850   1.7  mrg 
   2851   1.7  mrg _Fortran_:
   2852  1.11  mrg      _Interface_:   'subroutine acc_copyout(a)'
   2853  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2854  1.11  mrg      _Interface_:   'subroutine acc_copyout(a, len)'
   2855  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2856  1.11  mrg                     'integer len'
   2857  1.13  mrg      _Interface_:   'subroutine acc_copyout_async(a, async)'
   2858  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2859  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2860  1.13  mrg      _Interface_:   'subroutine acc_copyout_async(a, len, async)'
   2861  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2862  1.13  mrg                     'integer len'
   2863  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2864  1.13  mrg      _Interface_:   'subroutine acc_copyout_finalize(a)'
   2865  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2866  1.13  mrg      _Interface_:   'subroutine acc_copyout_finalize(a, len)'
   2867  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2868  1.13  mrg                     'integer len'
   2869  1.13  mrg      _Interface_:   'subroutine acc_copyout_finalize_async(a, async)'
   2870  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2871  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2872  1.13  mrg      _Interface_:   'subroutine acc_copyout_finalize_async(a, len, async)'
   2873  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2874  1.13  mrg                     'integer len'
   2875  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2876   1.7  mrg 
   2877   1.7  mrg _Reference_:
   2878  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2879  1.13  mrg      3.2.22.
   2880   1.7  mrg 
   2881   1.7  mrg 
   2882   1.7  mrg File: libgomp.info,  Node: acc_delete,  Next: acc_update_device,  Prev: acc_copyout,  Up: OpenACC Runtime Library Routines
   2883   1.7  mrg 
   2884  1.15  mrg 6.23 'acc_delete' - Free device memory.
   2885   1.7  mrg =======================================
   2886   1.7  mrg 
   2887   1.7  mrg _Description_
   2888   1.7  mrg      This function frees previously allocated device memory specified by
   2889   1.7  mrg      the device address A and the length of LEN bytes.
   2890   1.7  mrg 
   2891  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2892  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2893   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   2894   1.7  mrg 
   2895   1.7  mrg _C/C++_:
   2896  1.11  mrg      _Prototype_:   'acc_delete(h_void *a, size_t len);'
   2897  1.13  mrg      _Prototype_:   'acc_delete_async(h_void *a, size_t len, int async);'
   2898  1.13  mrg      _Prototype_:   'acc_delete_finalize(h_void *a, size_t len);'
   2899  1.13  mrg      _Prototype_:   'acc_delete_finalize_async(h_void *a, size_t len, int
   2900  1.13  mrg                     async);'
   2901   1.7  mrg 
   2902   1.7  mrg _Fortran_:
   2903  1.11  mrg      _Interface_:   'subroutine acc_delete(a)'
   2904  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2905  1.11  mrg      _Interface_:   'subroutine acc_delete(a, len)'
   2906  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2907  1.11  mrg                     'integer len'
   2908  1.13  mrg      _Interface_:   'subroutine acc_delete_async(a, async)'
   2909  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2910  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2911  1.13  mrg      _Interface_:   'subroutine acc_delete_async(a, len, async)'
   2912  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2913  1.13  mrg                     'integer len'
   2914  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2915  1.13  mrg      _Interface_:   'subroutine acc_delete_finalize(a)'
   2916  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2917  1.13  mrg      _Interface_:   'subroutine acc_delete_finalize(a, len)'
   2918  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2919  1.13  mrg                     'integer len'
   2920  1.13  mrg      _Interface_:   'subroutine acc_delete_async_finalize(a, async)'
   2921  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2922  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2923  1.13  mrg      _Interface_:   'subroutine acc_delete_async_finalize(a, len, async)'
   2924  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2925  1.13  mrg                     'integer len'
   2926  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2927   1.7  mrg 
   2928   1.7  mrg _Reference_:
   2929  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2930  1.13  mrg      3.2.23.
   2931   1.7  mrg 
   2932   1.7  mrg 
   2933   1.7  mrg File: libgomp.info,  Node: acc_update_device,  Next: acc_update_self,  Prev: acc_delete,  Up: OpenACC Runtime Library Routines
   2934   1.7  mrg 
   2935  1.15  mrg 6.24 'acc_update_device' - Update device memory from mapped host memory.
   2936   1.7  mrg ========================================================================
   2937   1.7  mrg 
   2938   1.7  mrg _Description_
   2939   1.7  mrg      This function updates the device copy from the previously mapped
   2940   1.7  mrg      host memory.  The host memory is specified with the host address A
   2941   1.7  mrg      and a length of LEN bytes.
   2942   1.7  mrg 
   2943  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2944  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2945   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   2946   1.7  mrg 
   2947   1.7  mrg _C/C++_:
   2948  1.11  mrg      _Prototype_:   'acc_update_device(h_void *a, size_t len);'
   2949  1.13  mrg      _Prototype_:   'acc_update_device(h_void *a, size_t len, async);'
   2950   1.7  mrg 
   2951   1.7  mrg _Fortran_:
   2952  1.11  mrg      _Interface_:   'subroutine acc_update_device(a)'
   2953  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2954  1.11  mrg      _Interface_:   'subroutine acc_update_device(a, len)'
   2955  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2956  1.11  mrg                     'integer len'
   2957  1.13  mrg      _Interface_:   'subroutine acc_update_device_async(a, async)'
   2958  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2959  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2960  1.13  mrg      _Interface_:   'subroutine acc_update_device_async(a, len, async)'
   2961  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2962  1.13  mrg                     'integer len'
   2963  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2964   1.7  mrg 
   2965   1.7  mrg _Reference_:
   2966  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   2967  1.13  mrg      3.2.24.
   2968   1.7  mrg 
   2969   1.7  mrg 
   2970   1.7  mrg File: libgomp.info,  Node: acc_update_self,  Next: acc_map_data,  Prev: acc_update_device,  Up: OpenACC Runtime Library Routines
   2971   1.7  mrg 
   2972  1.15  mrg 6.25 'acc_update_self' - Update host memory from mapped device memory.
   2973   1.7  mrg ======================================================================
   2974   1.7  mrg 
   2975   1.7  mrg _Description_
   2976   1.7  mrg      This function updates the host copy from the previously mapped
   2977   1.7  mrg      device memory.  The host memory is specified with the host address
   2978   1.7  mrg      A and a length of LEN bytes.
   2979   1.7  mrg 
   2980  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   2981  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   2982   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   2983   1.7  mrg 
   2984   1.7  mrg _C/C++_:
   2985  1.11  mrg      _Prototype_:   'acc_update_self(h_void *a, size_t len);'
   2986  1.13  mrg      _Prototype_:   'acc_update_self_async(h_void *a, size_t len, int
   2987  1.13  mrg                     async);'
   2988   1.7  mrg 
   2989   1.7  mrg _Fortran_:
   2990  1.11  mrg      _Interface_:   'subroutine acc_update_self(a)'
   2991  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2992  1.11  mrg      _Interface_:   'subroutine acc_update_self(a, len)'
   2993  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   2994  1.11  mrg                     'integer len'
   2995  1.13  mrg      _Interface_:   'subroutine acc_update_self_async(a, async)'
   2996  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   2997  1.13  mrg                     'integer(acc_handle_kind) :: async'
   2998  1.13  mrg      _Interface_:   'subroutine acc_update_self_async(a, len, async)'
   2999  1.13  mrg                     'type, dimension(:[,:]...) :: a'
   3000  1.13  mrg                     'integer len'
   3001  1.13  mrg                     'integer(acc_handle_kind) :: async'
   3002   1.7  mrg 
   3003   1.7  mrg _Reference_:
   3004  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3005  1.13  mrg      3.2.25.
   3006   1.7  mrg 
   3007   1.7  mrg 
   3008   1.7  mrg File: libgomp.info,  Node: acc_map_data,  Next: acc_unmap_data,  Prev: acc_update_self,  Up: OpenACC Runtime Library Routines
   3009   1.7  mrg 
   3010  1.15  mrg 6.26 'acc_map_data' - Map previously allocated device memory to host memory.
   3011   1.7  mrg ============================================================================
   3012   1.7  mrg 
   3013   1.7  mrg _Description_
   3014   1.7  mrg      This function maps previously allocated device and host memory.
   3015  1.11  mrg      The device memory is specified with the device address D.  The host
   3016   1.7  mrg      memory is specified with the host address H and a length of LEN.
   3017   1.7  mrg 
   3018   1.7  mrg _C/C++_:
   3019  1.11  mrg      _Prototype_:   'acc_map_data(h_void *h, d_void *d, size_t len);'
   3020   1.7  mrg 
   3021   1.7  mrg _Reference_:
   3022  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3023  1.13  mrg      3.2.26.
   3024   1.7  mrg 
   3025   1.7  mrg 
   3026   1.7  mrg File: libgomp.info,  Node: acc_unmap_data,  Next: acc_deviceptr,  Prev: acc_map_data,  Up: OpenACC Runtime Library Routines
   3027   1.7  mrg 
   3028  1.15  mrg 6.27 'acc_unmap_data' - Unmap device memory from host memory.
   3029   1.7  mrg =============================================================
   3030   1.7  mrg 
   3031   1.7  mrg _Description_
   3032  1.11  mrg      This function unmaps previously mapped device and host memory.  The
   3033   1.7  mrg      latter specified by H.
   3034   1.7  mrg 
   3035   1.7  mrg _C/C++_:
   3036  1.11  mrg      _Prototype_:   'acc_unmap_data(h_void *h);'
   3037   1.7  mrg 
   3038   1.7  mrg _Reference_:
   3039  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3040  1.13  mrg      3.2.27.
   3041   1.7  mrg 
   3042   1.7  mrg 
   3043   1.7  mrg File: libgomp.info,  Node: acc_deviceptr,  Next: acc_hostptr,  Prev: acc_unmap_data,  Up: OpenACC Runtime Library Routines
   3044   1.7  mrg 
   3045  1.15  mrg 6.28 'acc_deviceptr' - Get device pointer associated with specific host address.
   3046   1.7  mrg ================================================================================
   3047   1.7  mrg 
   3048   1.7  mrg _Description_
   3049   1.7  mrg      This function returns the device address that has been mapped to
   3050   1.7  mrg      the host address specified by H.
   3051   1.7  mrg 
   3052   1.7  mrg _C/C++_:
   3053  1.11  mrg      _Prototype_:   'void *acc_deviceptr(h_void *h);'
   3054   1.7  mrg 
   3055   1.7  mrg _Reference_:
   3056  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3057  1.13  mrg      3.2.28.
   3058   1.7  mrg 
   3059   1.7  mrg 
   3060   1.7  mrg File: libgomp.info,  Node: acc_hostptr,  Next: acc_is_present,  Prev: acc_deviceptr,  Up: OpenACC Runtime Library Routines
   3061   1.7  mrg 
   3062  1.15  mrg 6.29 'acc_hostptr' - Get host pointer associated with specific device address.
   3063   1.7  mrg ==============================================================================
   3064   1.7  mrg 
   3065   1.7  mrg _Description_
   3066   1.7  mrg      This function returns the host address that has been mapped to the
   3067   1.7  mrg      device address specified by D.
   3068   1.7  mrg 
   3069   1.7  mrg _C/C++_:
   3070  1.11  mrg      _Prototype_:   'void *acc_hostptr(d_void *d);'
   3071   1.7  mrg 
   3072   1.7  mrg _Reference_:
   3073  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3074  1.13  mrg      3.2.29.
   3075   1.7  mrg 
   3076   1.7  mrg 
   3077   1.7  mrg File: libgomp.info,  Node: acc_is_present,  Next: acc_memcpy_to_device,  Prev: acc_hostptr,  Up: OpenACC Runtime Library Routines
   3078   1.7  mrg 
   3079  1.15  mrg 6.30 'acc_is_present' - Indicate whether host variable / array is present on device.
   3080   1.7  mrg ====================================================================================
   3081   1.7  mrg 
   3082   1.7  mrg _Description_
   3083  1.11  mrg      This function indicates whether the specified host address in A and
   3084  1.11  mrg      a length of LEN bytes is present on the device.  In C/C++, a
   3085   1.7  mrg      non-zero value is returned to indicate the presence of the mapped
   3086  1.11  mrg      memory on the device.  A zero is returned to indicate the memory is
   3087   1.7  mrg      not mapped on the device.
   3088   1.7  mrg 
   3089  1.11  mrg      In Fortran, two (2) forms are supported.  In the first form, A
   3090  1.11  mrg      specifies a contiguous array section.  The second form A specifies
   3091   1.7  mrg      a variable or array element and LEN specifies the length in bytes.
   3092  1.11  mrg      If the host memory is mapped to device memory, then a 'true' is
   3093  1.11  mrg      returned.  Otherwise, a 'false' is return to indicate the mapped
   3094   1.7  mrg      memory is not present.
   3095   1.7  mrg 
   3096   1.7  mrg _C/C++_:
   3097  1.11  mrg      _Prototype_:   'int acc_is_present(h_void *a, size_t len);'
   3098   1.7  mrg 
   3099   1.7  mrg _Fortran_:
   3100  1.11  mrg      _Interface_:   'function acc_is_present(a)'
   3101  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   3102  1.11  mrg                     'logical acc_is_present'
   3103  1.11  mrg      _Interface_:   'function acc_is_present(a, len)'
   3104  1.11  mrg                     'type, dimension(:[,:]...) :: a'
   3105  1.11  mrg                     'integer len'
   3106  1.11  mrg                     'logical acc_is_present'
   3107   1.7  mrg 
   3108   1.7  mrg _Reference_:
   3109  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3110  1.13  mrg      3.2.30.
   3111   1.7  mrg 
   3112   1.7  mrg 
   3113   1.7  mrg File: libgomp.info,  Node: acc_memcpy_to_device,  Next: acc_memcpy_from_device,  Prev: acc_is_present,  Up: OpenACC Runtime Library Routines
   3114   1.7  mrg 
   3115  1.15  mrg 6.31 'acc_memcpy_to_device' - Copy host memory to device memory.
   3116   1.7  mrg ================================================================
   3117   1.7  mrg 
   3118   1.7  mrg _Description_
   3119   1.7  mrg      This function copies host memory specified by host address of SRC
   3120   1.7  mrg      to device memory specified by the device address DEST for a length
   3121   1.7  mrg      of BYTES bytes.
   3122   1.7  mrg 
   3123   1.7  mrg _C/C++_:
   3124  1.11  mrg      _Prototype_:   'acc_memcpy_to_device(d_void *dest, h_void *src, size_t
   3125  1.11  mrg                     bytes);'
   3126   1.7  mrg 
   3127   1.7  mrg _Reference_:
   3128  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3129  1.13  mrg      3.2.31.
   3130   1.7  mrg 
   3131   1.7  mrg 
   3132  1.13  mrg File: libgomp.info,  Node: acc_memcpy_from_device,  Next: acc_attach,  Prev: acc_memcpy_to_device,  Up: OpenACC Runtime Library Routines
   3133   1.7  mrg 
   3134  1.15  mrg 6.32 'acc_memcpy_from_device' - Copy device memory to host memory.
   3135   1.7  mrg ==================================================================
   3136   1.7  mrg 
   3137   1.7  mrg _Description_
   3138   1.7  mrg      This function copies host memory specified by host address of SRC
   3139   1.7  mrg      from device memory specified by the device address DEST for a
   3140   1.7  mrg      length of BYTES bytes.
   3141   1.7  mrg 
   3142   1.7  mrg _C/C++_:
   3143  1.11  mrg      _Prototype_:   'acc_memcpy_from_device(d_void *dest, h_void *src,
   3144  1.11  mrg                     size_t bytes);'
   3145   1.7  mrg 
   3146   1.7  mrg _Reference_:
   3147  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3148  1.13  mrg      3.2.32.
   3149  1.13  mrg 
   3150  1.13  mrg 
   3151  1.13  mrg File: libgomp.info,  Node: acc_attach,  Next: acc_detach,  Prev: acc_memcpy_from_device,  Up: OpenACC Runtime Library Routines
   3152  1.13  mrg 
   3153  1.15  mrg 6.33 'acc_attach' - Let device pointer point to device-pointer target.
   3154  1.13  mrg ======================================================================
   3155  1.13  mrg 
   3156  1.13  mrg _Description_
   3157  1.13  mrg      This function updates a pointer on the device from pointing to a
   3158  1.13  mrg      host-pointer address to pointing to the corresponding device data.
   3159  1.13  mrg 
   3160  1.13  mrg _C/C++_:
   3161  1.13  mrg      _Prototype_:   'acc_attach(h_void **ptr);'
   3162  1.13  mrg      _Prototype_:   'acc_attach_async(h_void **ptr, int async);'
   3163  1.13  mrg 
   3164  1.13  mrg _Reference_:
   3165  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3166  1.13  mrg      3.2.34.
   3167  1.13  mrg 
   3168  1.13  mrg 
   3169  1.13  mrg File: libgomp.info,  Node: acc_detach,  Next: acc_get_current_cuda_device,  Prev: acc_attach,  Up: OpenACC Runtime Library Routines
   3170  1.13  mrg 
   3171  1.15  mrg 6.34 'acc_detach' - Let device pointer point to host-pointer target.
   3172  1.13  mrg ====================================================================
   3173  1.13  mrg 
   3174  1.13  mrg _Description_
   3175  1.13  mrg      This function updates a pointer on the device from pointing to a
   3176  1.13  mrg      device-pointer address to pointing to the corresponding host data.
   3177  1.13  mrg 
   3178  1.13  mrg _C/C++_:
   3179  1.13  mrg      _Prototype_:   'acc_detach(h_void **ptr);'
   3180  1.13  mrg      _Prototype_:   'acc_detach_async(h_void **ptr, int async);'
   3181  1.13  mrg      _Prototype_:   'acc_detach_finalize(h_void **ptr);'
   3182  1.13  mrg      _Prototype_:   'acc_detach_finalize_async(h_void **ptr, int async);'
   3183  1.13  mrg 
   3184  1.13  mrg _Reference_:
   3185  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3186  1.13  mrg      3.2.35.
   3187   1.7  mrg 
   3188   1.7  mrg 
   3189  1.13  mrg File: libgomp.info,  Node: acc_get_current_cuda_device,  Next: acc_get_current_cuda_context,  Prev: acc_detach,  Up: OpenACC Runtime Library Routines
   3190   1.7  mrg 
   3191  1.15  mrg 6.35 'acc_get_current_cuda_device' - Get CUDA device handle.
   3192   1.7  mrg ============================================================
   3193   1.7  mrg 
   3194   1.7  mrg _Description_
   3195  1.11  mrg      This function returns the CUDA device handle.  This handle is the
   3196   1.7  mrg      same as used by the CUDA Runtime or Driver API's.
   3197   1.7  mrg 
   3198   1.7  mrg _C/C++_:
   3199  1.11  mrg      _Prototype_:   'void *acc_get_current_cuda_device(void);'
   3200   1.7  mrg 
   3201   1.7  mrg _Reference_:
   3202  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3203   1.7  mrg      A.2.1.1.
   3204   1.7  mrg 
   3205   1.7  mrg 
   3206   1.7  mrg File: libgomp.info,  Node: acc_get_current_cuda_context,  Next: acc_get_cuda_stream,  Prev: acc_get_current_cuda_device,  Up: OpenACC Runtime Library Routines
   3207   1.7  mrg 
   3208  1.15  mrg 6.36 'acc_get_current_cuda_context' - Get CUDA context handle.
   3209   1.7  mrg ==============================================================
   3210   1.7  mrg 
   3211   1.7  mrg _Description_
   3212  1.11  mrg      This function returns the CUDA context handle.  This handle is the
   3213   1.7  mrg      same as used by the CUDA Runtime or Driver API's.
   3214   1.7  mrg 
   3215   1.7  mrg _C/C++_:
   3216  1.12  mrg      _Prototype_:   'void *acc_get_current_cuda_context(void);'
   3217   1.7  mrg 
   3218   1.7  mrg _Reference_:
   3219  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3220   1.7  mrg      A.2.1.2.
   3221   1.7  mrg 
   3222   1.7  mrg 
   3223   1.7  mrg File: libgomp.info,  Node: acc_get_cuda_stream,  Next: acc_set_cuda_stream,  Prev: acc_get_current_cuda_context,  Up: OpenACC Runtime Library Routines
   3224   1.7  mrg 
   3225  1.15  mrg 6.37 'acc_get_cuda_stream' - Get CUDA stream handle.
   3226   1.7  mrg ====================================================
   3227   1.7  mrg 
   3228   1.7  mrg _Description_
   3229  1.12  mrg      This function returns the CUDA stream handle for the queue ASYNC.
   3230  1.12  mrg      This handle is the same as used by the CUDA Runtime or Driver
   3231  1.12  mrg      API's.
   3232   1.7  mrg 
   3233   1.7  mrg _C/C++_:
   3234  1.12  mrg      _Prototype_:   'void *acc_get_cuda_stream(int async);'
   3235   1.7  mrg 
   3236   1.7  mrg _Reference_:
   3237  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3238   1.7  mrg      A.2.1.3.
   3239   1.7  mrg 
   3240   1.7  mrg 
   3241  1.13  mrg File: libgomp.info,  Node: acc_set_cuda_stream,  Next: acc_prof_register,  Prev: acc_get_cuda_stream,  Up: OpenACC Runtime Library Routines
   3242   1.7  mrg 
   3243  1.15  mrg 6.38 'acc_set_cuda_stream' - Set CUDA stream handle.
   3244   1.7  mrg ====================================================
   3245   1.7  mrg 
   3246   1.7  mrg _Description_
   3247   1.7  mrg      This function associates the stream handle specified by STREAM with
   3248  1.12  mrg      the queue ASYNC.
   3249  1.12  mrg 
   3250  1.12  mrg      This cannot be used to change the stream handle associated with
   3251  1.12  mrg      'acc_async_sync'.
   3252  1.12  mrg 
   3253  1.12  mrg      The return value is not specified.
   3254   1.7  mrg 
   3255   1.7  mrg _C/C++_:
   3256  1.12  mrg      _Prototype_:   'int acc_set_cuda_stream(int async, void *stream);'
   3257   1.7  mrg 
   3258   1.7  mrg _Reference_:
   3259  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section
   3260   1.7  mrg      A.2.1.4.
   3261   1.7  mrg 
   3262   1.7  mrg 
   3263  1.13  mrg File: libgomp.info,  Node: acc_prof_register,  Next: acc_prof_unregister,  Prev: acc_set_cuda_stream,  Up: OpenACC Runtime Library Routines
   3264  1.13  mrg 
   3265  1.15  mrg 6.39 'acc_prof_register' - Register callbacks.
   3266  1.13  mrg ==============================================
   3267  1.13  mrg 
   3268  1.13  mrg _Description_:
   3269  1.13  mrg      This function registers callbacks.
   3270  1.13  mrg 
   3271  1.13  mrg _C/C++_:
   3272  1.13  mrg      _Prototype_:   'void acc_prof_register (acc_event_t, acc_prof_callback,
   3273  1.13  mrg                     acc_register_t);'
   3274  1.13  mrg 
   3275  1.13  mrg _See also_:
   3276  1.13  mrg      *note OpenACC Profiling Interface::
   3277  1.13  mrg 
   3278  1.13  mrg _Reference_:
   3279  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section 5.3.
   3280  1.13  mrg 
   3281  1.13  mrg 
   3282  1.13  mrg File: libgomp.info,  Node: acc_prof_unregister,  Next: acc_prof_lookup,  Prev: acc_prof_register,  Up: OpenACC Runtime Library Routines
   3283  1.13  mrg 
   3284  1.15  mrg 6.40 'acc_prof_unregister' - Unregister callbacks.
   3285  1.13  mrg ==================================================
   3286  1.13  mrg 
   3287  1.13  mrg _Description_:
   3288  1.13  mrg      This function unregisters callbacks.
   3289  1.13  mrg 
   3290  1.13  mrg _C/C++_:
   3291  1.13  mrg      _Prototype_:   'void acc_prof_unregister (acc_event_t,
   3292  1.13  mrg                     acc_prof_callback, acc_register_t);'
   3293  1.13  mrg 
   3294  1.13  mrg _See also_:
   3295  1.13  mrg      *note OpenACC Profiling Interface::
   3296  1.13  mrg 
   3297  1.13  mrg _Reference_:
   3298  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section 5.3.
   3299  1.13  mrg 
   3300  1.13  mrg 
   3301  1.13  mrg File: libgomp.info,  Node: acc_prof_lookup,  Next: acc_register_library,  Prev: acc_prof_unregister,  Up: OpenACC Runtime Library Routines
   3302  1.13  mrg 
   3303  1.15  mrg 6.41 'acc_prof_lookup' - Obtain inquiry functions.
   3304  1.13  mrg ==================================================
   3305  1.13  mrg 
   3306  1.13  mrg _Description_:
   3307  1.13  mrg      Function to obtain inquiry functions.
   3308  1.13  mrg 
   3309  1.13  mrg _C/C++_:
   3310  1.13  mrg      _Prototype_:   'acc_query_fn acc_prof_lookup (const char *);'
   3311  1.13  mrg 
   3312  1.13  mrg _See also_:
   3313  1.13  mrg      *note OpenACC Profiling Interface::
   3314  1.13  mrg 
   3315  1.13  mrg _Reference_:
   3316  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section 5.3.
   3317  1.13  mrg 
   3318  1.13  mrg 
   3319  1.13  mrg File: libgomp.info,  Node: acc_register_library,  Prev: acc_prof_lookup,  Up: OpenACC Runtime Library Routines
   3320  1.13  mrg 
   3321  1.15  mrg 6.42 'acc_register_library' - Library registration.
   3322  1.13  mrg ===================================================
   3323  1.13  mrg 
   3324  1.13  mrg _Description_:
   3325  1.13  mrg      Function for library registration.
   3326  1.13  mrg 
   3327  1.13  mrg _C/C++_:
   3328  1.13  mrg      _Prototype_:   'void acc_register_library (acc_prof_reg, acc_prof_reg,
   3329  1.13  mrg                     acc_prof_lookup_func);'
   3330  1.13  mrg 
   3331  1.13  mrg _See also_:
   3332  1.13  mrg      *note OpenACC Profiling Interface::, *note ACC_PROFLIB::
   3333  1.13  mrg 
   3334  1.13  mrg _Reference_:
   3335  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section 5.3.
   3336  1.13  mrg 
   3337  1.13  mrg 
   3338   1.7  mrg File: libgomp.info,  Node: OpenACC Environment Variables,  Next: CUDA Streams Usage,  Prev: OpenACC Runtime Library Routines,  Up: Top
   3339   1.7  mrg 
   3340  1.15  mrg 7 OpenACC Environment Variables
   3341   1.7  mrg *******************************
   3342   1.7  mrg 
   3343  1.11  mrg The variables 'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM' are defined by
   3344   1.7  mrg section 4 of the OpenACC specification in version 2.0.  The variable
   3345  1.13  mrg 'ACC_PROFLIB' is defined by section 4 of the OpenACC specification in
   3346  1.13  mrg version 2.6.  The variable 'GCC_ACC_NOTIFY' is used for diagnostic
   3347  1.13  mrg purposes.
   3348   1.7  mrg 
   3349   1.7  mrg * Menu:
   3350   1.7  mrg 
   3351   1.7  mrg * ACC_DEVICE_TYPE::
   3352   1.7  mrg * ACC_DEVICE_NUM::
   3353  1.13  mrg * ACC_PROFLIB::
   3354   1.7  mrg * GCC_ACC_NOTIFY::
   3355   1.7  mrg 
   3356   1.7  mrg 
   3357   1.7  mrg File: libgomp.info,  Node: ACC_DEVICE_TYPE,  Next: ACC_DEVICE_NUM,  Up: OpenACC Environment Variables
   3358   1.7  mrg 
   3359  1.15  mrg 7.1 'ACC_DEVICE_TYPE'
   3360   1.7  mrg =====================
   3361   1.7  mrg 
   3362   1.7  mrg _Reference_:
   3363  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section 4.1.
   3364   1.7  mrg 
   3365   1.7  mrg 
   3366  1.13  mrg File: libgomp.info,  Node: ACC_DEVICE_NUM,  Next: ACC_PROFLIB,  Prev: ACC_DEVICE_TYPE,  Up: OpenACC Environment Variables
   3367   1.7  mrg 
   3368  1.15  mrg 7.2 'ACC_DEVICE_NUM'
   3369   1.7  mrg ====================
   3370   1.7  mrg 
   3371   1.7  mrg _Reference_:
   3372  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section 4.2.
   3373  1.13  mrg 
   3374  1.13  mrg 
   3375  1.13  mrg File: libgomp.info,  Node: ACC_PROFLIB,  Next: GCC_ACC_NOTIFY,  Prev: ACC_DEVICE_NUM,  Up: OpenACC Environment Variables
   3376  1.13  mrg 
   3377  1.15  mrg 7.3 'ACC_PROFLIB'
   3378  1.13  mrg =================
   3379  1.13  mrg 
   3380  1.13  mrg _See also_:
   3381  1.13  mrg      *note acc_register_library::, *note OpenACC Profiling Interface::
   3382  1.13  mrg 
   3383  1.13  mrg _Reference_:
   3384  1.13  mrg      OpenACC specification v2.6 (https://www.openacc.org), section 4.3.
   3385   1.7  mrg 
   3386   1.7  mrg 
   3387  1.13  mrg File: libgomp.info,  Node: GCC_ACC_NOTIFY,  Prev: ACC_PROFLIB,  Up: OpenACC Environment Variables
   3388   1.7  mrg 
   3389  1.15  mrg 7.4 'GCC_ACC_NOTIFY'
   3390   1.7  mrg ====================
   3391   1.7  mrg 
   3392   1.7  mrg _Description_:
   3393   1.7  mrg      Print debug information pertaining to the accelerator.
   3394   1.7  mrg 
   3395   1.7  mrg 
   3396   1.7  mrg File: libgomp.info,  Node: CUDA Streams Usage,  Next: OpenACC Library Interoperability,  Prev: OpenACC Environment Variables,  Up: Top
   3397   1.7  mrg 
   3398  1.15  mrg 8 CUDA Streams Usage
   3399   1.7  mrg ********************
   3400   1.7  mrg 
   3401  1.11  mrg This applies to the 'nvptx' plugin only.
   3402   1.7  mrg 
   3403   1.7  mrg    The library provides elements that perform asynchronous movement of
   3404   1.7  mrg data and asynchronous operation of computing constructs.  This
   3405   1.7  mrg asynchronous functionality is implemented by making use of CUDA
   3406   1.7  mrg streams(1).
   3407   1.7  mrg 
   3408  1.13  mrg    The primary means by that the asynchronous functionality is accessed
   3409   1.7  mrg is through the use of those OpenACC directives which make use of the
   3410  1.11  mrg 'async' and 'wait' clauses.  When the 'async' clause is first used with
   3411  1.11  mrg a directive, it creates a CUDA stream.  If an 'async-argument' is used
   3412  1.11  mrg with the 'async' clause, then the stream is associated with the
   3413  1.11  mrg specified 'async-argument'.
   3414   1.7  mrg 
   3415   1.7  mrg    Following the creation of an association between a CUDA stream and
   3416  1.11  mrg the 'async-argument' of an 'async' clause, both the 'wait' clause and
   3417  1.11  mrg the 'wait' directive can be used.  When either the clause or directive
   3418   1.7  mrg is used after stream creation, it creates a rendezvous point whereby
   3419   1.7  mrg execution waits until all operations associated with the
   3420  1.11  mrg 'async-argument', that is, stream, have completed.
   3421   1.7  mrg 
   3422   1.7  mrg    Normally, the management of the streams that are created as a result
   3423  1.11  mrg of using the 'async' clause, is done without any intervention by the
   3424  1.11  mrg caller.  This implies the association between the 'async-argument' and
   3425   1.7  mrg the CUDA stream will be maintained for the lifetime of the program.
   3426   1.7  mrg However, this association can be changed through the use of the library
   3427  1.11  mrg function 'acc_set_cuda_stream'.  When the function 'acc_set_cuda_stream'
   3428  1.11  mrg is called, the CUDA stream that was originally associated with the
   3429  1.11  mrg 'async' clause will be destroyed.  Caution should be taken when changing
   3430  1.11  mrg the association as subsequent references to the 'async-argument' refer
   3431  1.11  mrg to a different CUDA stream.
   3432   1.7  mrg 
   3433   1.7  mrg    ---------- Footnotes ----------
   3434   1.7  mrg 
   3435   1.7  mrg    (1) See "Stream Management" in "CUDA Driver API", TRM-06703-001,
   3436   1.7  mrg Version 5.5, for additional information
   3437   1.7  mrg 
   3438   1.7  mrg 
   3439  1.13  mrg File: libgomp.info,  Node: OpenACC Library Interoperability,  Next: OpenACC Profiling Interface,  Prev: CUDA Streams Usage,  Up: Top
   3440   1.7  mrg 
   3441  1.15  mrg 9 OpenACC Library Interoperability
   3442   1.7  mrg **********************************
   3443   1.7  mrg 
   3444  1.15  mrg 9.1 Introduction
   3445   1.7  mrg ================
   3446   1.7  mrg 
   3447   1.7  mrg The OpenACC library uses the CUDA Driver API, and may interact with
   3448  1.11  mrg programs that use the Runtime library directly, or another library based
   3449  1.11  mrg on the Runtime library, e.g., CUBLAS(1). This chapter describes the use
   3450  1.11  mrg cases and what changes are required in order to use both the OpenACC
   3451  1.11  mrg library and the CUBLAS and Runtime libraries within a program.
   3452   1.7  mrg 
   3453  1.15  mrg 9.2 First invocation: NVIDIA CUBLAS library API
   3454   1.7  mrg ===============================================
   3455   1.7  mrg 
   3456   1.7  mrg In this first use case (see below), a function in the CUBLAS library is
   3457  1.11  mrg called prior to any of the functions in the OpenACC library.  More
   3458  1.11  mrg specifically, the function 'cublasCreate()'.
   3459   1.7  mrg 
   3460   1.7  mrg    When invoked, the function initializes the library and allocates the
   3461   1.7  mrg hardware resources on the host and the device on behalf of the caller.
   3462   1.7  mrg Once the initialization and allocation has completed, a handle is
   3463  1.11  mrg returned to the caller.  The OpenACC library also requires
   3464  1.11  mrg initialization and allocation of hardware resources.  Since the CUBLAS
   3465  1.11  mrg library has already allocated the hardware resources for the device, all
   3466  1.11  mrg that is left to do is to initialize the OpenACC library and acquire the
   3467  1.11  mrg hardware resources on the host.
   3468   1.7  mrg 
   3469   1.7  mrg    Prior to calling the OpenACC function that initializes the library
   3470  1.11  mrg and allocate the host hardware resources, you need to acquire the device
   3471  1.11  mrg number that was allocated during the call to 'cublasCreate()'.  The
   3472  1.11  mrg invoking of the runtime library function 'cudaGetDevice()' accomplishes
   3473  1.11  mrg this.  Once acquired, the device number is passed along with the device
   3474  1.11  mrg type as parameters to the OpenACC library function
   3475  1.11  mrg 'acc_set_device_num()'.
   3476  1.11  mrg 
   3477  1.11  mrg    Once the call to 'acc_set_device_num()' has completed, the OpenACC
   3478  1.11  mrg library uses the context that was created during the call to
   3479  1.11  mrg 'cublasCreate()'.  In other words, both libraries will be sharing the
   3480   1.7  mrg same context.
   3481   1.7  mrg 
   3482   1.7  mrg          /* Create the handle */
   3483   1.7  mrg          s = cublasCreate(&h);
   3484   1.7  mrg          if (s != CUBLAS_STATUS_SUCCESS)
   3485   1.7  mrg          {
   3486   1.7  mrg              fprintf(stderr, "cublasCreate failed %d\n", s);
   3487   1.7  mrg              exit(EXIT_FAILURE);
   3488   1.7  mrg          }
   3489   1.7  mrg 
   3490   1.7  mrg          /* Get the device number */
   3491   1.7  mrg          e = cudaGetDevice(&dev);
   3492   1.7  mrg          if (e != cudaSuccess)
   3493   1.7  mrg          {
   3494   1.7  mrg              fprintf(stderr, "cudaGetDevice failed %d\n", e);
   3495   1.7  mrg              exit(EXIT_FAILURE);
   3496   1.7  mrg          }
   3497   1.7  mrg 
   3498   1.7  mrg          /* Initialize OpenACC library and use device 'dev' */
   3499   1.7  mrg          acc_set_device_num(dev, acc_device_nvidia);
   3500  1.11  mrg 
   3501  1.11  mrg                               Use Case 1
   3502   1.7  mrg 
   3503  1.15  mrg 9.3 First invocation: OpenACC library API
   3504   1.7  mrg =========================================
   3505   1.7  mrg 
   3506   1.7  mrg In this second use case (see below), a function in the OpenACC library
   3507  1.11  mrg is called prior to any of the functions in the CUBLAS library.  More
   3508  1.11  mrg specificially, the function 'acc_set_device_num()'.
   3509   1.7  mrg 
   3510  1.11  mrg    In the use case presented here, the function 'acc_set_device_num()'
   3511   1.7  mrg is used to both initialize the OpenACC library and allocate the hardware
   3512  1.11  mrg resources on the host and the device.  In the call to the function, the
   3513  1.11  mrg call parameters specify which device to use and what device type to use,
   3514  1.11  mrg i.e., 'acc_device_nvidia'.  It should be noted that this is but one
   3515   1.7  mrg method to initialize the OpenACC library and allocate the appropriate
   3516  1.11  mrg hardware resources.  Other methods are available through the use of
   3517   1.7  mrg environment variables and these will be discussed in the next section.
   3518   1.7  mrg 
   3519  1.11  mrg    Once the call to 'acc_set_device_num()' has completed, other OpenACC
   3520   1.7  mrg functions can be called as seen with multiple calls being made to
   3521  1.11  mrg 'acc_copyin()'.  In addition, calls can be made to functions in the
   3522  1.11  mrg CUBLAS library.  In the use case a call to 'cublasCreate()' is made
   3523  1.11  mrg subsequent to the calls to 'acc_copyin()'.  As seen in the previous use
   3524  1.11  mrg case, a call to 'cublasCreate()' initializes the CUBLAS library and
   3525   1.7  mrg allocates the hardware resources on the host and the device.  However,
   3526  1.11  mrg since the device has already been allocated, 'cublasCreate()' will only
   3527   1.7  mrg initialize the CUBLAS library and allocate the appropriate hardware
   3528  1.11  mrg resources on the host.  The context that was created as part of the
   3529   1.7  mrg OpenACC initialization is shared with the CUBLAS library, similarly to
   3530   1.7  mrg the first use case.
   3531   1.7  mrg 
   3532   1.7  mrg          dev = 0;
   3533   1.7  mrg 
   3534   1.7  mrg          acc_set_device_num(dev, acc_device_nvidia);
   3535   1.7  mrg 
   3536   1.7  mrg          /* Copy the first set to the device */
   3537   1.7  mrg          d_X = acc_copyin(&h_X[0], N * sizeof (float));
   3538   1.7  mrg          if (d_X == NULL)
   3539   1.7  mrg          {
   3540   1.7  mrg              fprintf(stderr, "copyin error h_X\n");
   3541   1.7  mrg              exit(EXIT_FAILURE);
   3542   1.7  mrg          }
   3543   1.7  mrg 
   3544   1.7  mrg          /* Copy the second set to the device */
   3545   1.7  mrg          d_Y = acc_copyin(&h_Y1[0], N * sizeof (float));
   3546   1.7  mrg          if (d_Y == NULL)
   3547   1.7  mrg          {
   3548   1.7  mrg              fprintf(stderr, "copyin error h_Y1\n");
   3549   1.7  mrg              exit(EXIT_FAILURE);
   3550   1.7  mrg          }
   3551   1.7  mrg 
   3552   1.7  mrg          /* Create the handle */
   3553   1.7  mrg          s = cublasCreate(&h);
   3554   1.7  mrg          if (s != CUBLAS_STATUS_SUCCESS)
   3555   1.7  mrg          {
   3556   1.7  mrg              fprintf(stderr, "cublasCreate failed %d\n", s);
   3557   1.7  mrg              exit(EXIT_FAILURE);
   3558   1.7  mrg          }
   3559   1.7  mrg 
   3560   1.7  mrg          /* Perform saxpy using CUBLAS library function */
   3561   1.7  mrg          s = cublasSaxpy(h, N, &alpha, d_X, 1, d_Y, 1);
   3562   1.7  mrg          if (s != CUBLAS_STATUS_SUCCESS)
   3563   1.7  mrg          {
   3564   1.7  mrg              fprintf(stderr, "cublasSaxpy failed %d\n", s);
   3565   1.7  mrg              exit(EXIT_FAILURE);
   3566   1.7  mrg          }
   3567   1.7  mrg 
   3568   1.7  mrg          /* Copy the results from the device */
   3569   1.7  mrg          acc_memcpy_from_device(&h_Y1[0], d_Y, N * sizeof (float));
   3570  1.11  mrg 
   3571  1.11  mrg                               Use Case 2
   3572   1.7  mrg 
   3573  1.15  mrg 9.4 OpenACC library and environment variables
   3574   1.7  mrg =============================================
   3575   1.7  mrg 
   3576   1.7  mrg There are two environment variables associated with the OpenACC library
   3577   1.7  mrg that may be used to control the device type and device number:
   3578  1.13  mrg 'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM', respectively.  These two
   3579  1.13  mrg environment variables can be used as an alternative to calling
   3580  1.11  mrg 'acc_set_device_num()'.  As seen in the second use case, the device type
   3581  1.11  mrg and device number were specified using 'acc_set_device_num()'.  If
   3582   1.7  mrg however, the aforementioned environment variables were set, then the
   3583  1.11  mrg call to 'acc_set_device_num()' would not be required.
   3584   1.7  mrg 
   3585  1.11  mrg    The use of the environment variables is only relevant when an OpenACC
   3586  1.11  mrg function is called prior to a call to 'cudaCreate()'.  If 'cudaCreate()'
   3587  1.11  mrg is called prior to a call to an OpenACC function, then you must call
   3588  1.11  mrg 'acc_set_device_num()'(2)
   3589   1.7  mrg 
   3590   1.7  mrg    ---------- Footnotes ----------
   3591   1.7  mrg 
   3592   1.7  mrg    (1) See section 2.26, "Interactions with the CUDA Driver API" in
   3593   1.7  mrg "CUDA Runtime API", Version 5.5, and section 2.27, "VDPAU
   3594  1.11  mrg Interoperability", in "CUDA Driver API", TRM-06703-001, Version 5.5, for
   3595  1.11  mrg additional information on library interoperability.
   3596   1.7  mrg 
   3597  1.11  mrg    (2) More complete information about 'ACC_DEVICE_TYPE' and
   3598  1.11  mrg 'ACC_DEVICE_NUM' can be found in sections 4.1 and 4.2 of the OpenACC
   3599  1.11  mrg (https://www.openacc.org) Application Programming Interface, Version
   3600  1.13  mrg 2.6.
   3601   1.7  mrg 
   3602   1.7  mrg 
   3603  1.13  mrg File: libgomp.info,  Node: OpenACC Profiling Interface,  Next: The libgomp ABI,  Prev: OpenACC Library Interoperability,  Up: Top
   3604   1.7  mrg 
   3605  1.15  mrg 10 OpenACC Profiling Interface
   3606  1.15  mrg ******************************
   3607  1.13  mrg 
   3608  1.15  mrg 10.1 Implementation Status and Implementation-Defined Behavior
   3609  1.15  mrg ==============================================================
   3610  1.13  mrg 
   3611  1.13  mrg We're implementing the OpenACC Profiling Interface as defined by the
   3612  1.13  mrg OpenACC 2.6 specification.  We're clarifying some aspects here as
   3613  1.13  mrg _implementation-defined behavior_, while they're still under discussion
   3614  1.13  mrg within the OpenACC Technical Committee.
   3615  1.13  mrg 
   3616  1.13  mrg    This implementation is tuned to keep the performance impact as low as
   3617  1.13  mrg possible for the (very common) case that the Profiling Interface is not
   3618  1.13  mrg enabled.  This is relevant, as the Profiling Interface affects all the
   3619  1.13  mrg _hot_ code paths (in the target code, not in the offloaded code).  Users
   3620  1.13  mrg of the OpenACC Profiling Interface can be expected to understand that
   3621  1.13  mrg performance will be impacted to some degree once the Profiling Interface
   3622  1.13  mrg has gotten enabled: for example, because of the _runtime_ (libgomp)
   3623  1.13  mrg calling into a third-party _library_ for every event that has been
   3624  1.13  mrg registered.
   3625  1.13  mrg 
   3626  1.13  mrg    We're not yet accounting for the fact that 'OpenACC events may occur
   3627  1.13  mrg during event processing'.  We just handle one case specially, as
   3628  1.13  mrg required by CUDA 9.0 'nvprof', that 'acc_get_device_type' (*note
   3629  1.13  mrg acc_get_device_type::)) may be called from 'acc_ev_device_init_start',
   3630  1.13  mrg 'acc_ev_device_init_end' callbacks.
   3631  1.13  mrg 
   3632  1.13  mrg    We're not yet implementing initialization via a
   3633  1.13  mrg 'acc_register_library' function that is either statically linked in, or
   3634  1.13  mrg dynamically via 'LD_PRELOAD'.  Initialization via 'acc_register_library'
   3635  1.13  mrg functions dynamically loaded via the 'ACC_PROFLIB' environment variable
   3636  1.13  mrg does work, as does directly calling 'acc_prof_register',
   3637  1.13  mrg 'acc_prof_unregister', 'acc_prof_lookup'.
   3638  1.13  mrg 
   3639  1.13  mrg    As currently there are no inquiry functions defined, calls to
   3640  1.13  mrg 'acc_prof_lookup' will always return 'NULL'.
   3641  1.13  mrg 
   3642  1.13  mrg    There aren't separate _start_, _stop_ events defined for the event
   3643  1.13  mrg types 'acc_ev_create', 'acc_ev_delete', 'acc_ev_alloc', 'acc_ev_free'.
   3644  1.13  mrg It's not clear if these should be triggered before or after the actual
   3645  1.13  mrg device-specific call is made.  We trigger them after.
   3646  1.13  mrg 
   3647  1.13  mrg    Remarks about data provided to callbacks:
   3648  1.13  mrg 
   3649  1.13  mrg 'acc_prof_info.event_type'
   3650  1.13  mrg      It's not clear if for _nested_ event callbacks (for example,
   3651  1.13  mrg      'acc_ev_enqueue_launch_start' as part of a parent compute
   3652  1.13  mrg      construct), this should be set for the nested event
   3653  1.13  mrg      ('acc_ev_enqueue_launch_start'), or if the value of the parent
   3654  1.13  mrg      construct should remain ('acc_ev_compute_construct_start').  In
   3655  1.13  mrg      this implementation, the value will generally correspond to the
   3656  1.13  mrg      innermost nested event type.
   3657  1.13  mrg 
   3658  1.13  mrg 'acc_prof_info.device_type'
   3659  1.13  mrg 
   3660  1.13  mrg         * For 'acc_ev_compute_construct_start', and in presence of an
   3661  1.13  mrg           'if' clause with _false_ argument, this will still refer to
   3662  1.13  mrg           the offloading device type.  It's not clear if that's the
   3663  1.13  mrg           expected behavior.
   3664  1.13  mrg 
   3665  1.13  mrg         * Complementary to the item before, for
   3666  1.13  mrg           'acc_ev_compute_construct_end', this is set to
   3667  1.13  mrg           'acc_device_host' in presence of an 'if' clause with _false_
   3668  1.13  mrg           argument.  It's not clear if that's the expected behavior.
   3669  1.13  mrg 
   3670  1.13  mrg 'acc_prof_info.thread_id'
   3671  1.13  mrg      Always '-1'; not yet implemented.
   3672  1.13  mrg 
   3673  1.13  mrg 'acc_prof_info.async'
   3674  1.13  mrg 
   3675  1.13  mrg         * Not yet implemented correctly for
   3676  1.13  mrg           'acc_ev_compute_construct_start'.
   3677  1.13  mrg 
   3678  1.13  mrg         * In a compute construct, for host-fallback
   3679  1.13  mrg           execution/'acc_device_host' it will always be
   3680  1.13  mrg           'acc_async_sync'.  It's not clear if that's the expected
   3681  1.13  mrg           behavior.
   3682  1.13  mrg 
   3683  1.13  mrg         * For 'acc_ev_device_init_start' and 'acc_ev_device_init_end',
   3684  1.13  mrg           it will always be 'acc_async_sync'.  It's not clear if that's
   3685  1.13  mrg           the expected behavior.
   3686  1.13  mrg 
   3687  1.13  mrg 'acc_prof_info.async_queue'
   3688  1.13  mrg      There is no 'limited number of asynchronous queues' in libgomp.
   3689  1.13  mrg      This will always have the same value as 'acc_prof_info.async'.
   3690  1.13  mrg 
   3691  1.13  mrg 'acc_prof_info.src_file'
   3692  1.13  mrg      Always 'NULL'; not yet implemented.
   3693  1.13  mrg 
   3694  1.13  mrg 'acc_prof_info.func_name'
   3695  1.13  mrg      Always 'NULL'; not yet implemented.
   3696  1.13  mrg 
   3697  1.13  mrg 'acc_prof_info.line_no'
   3698  1.13  mrg      Always '-1'; not yet implemented.
   3699  1.13  mrg 
   3700  1.13  mrg 'acc_prof_info.end_line_no'
   3701  1.13  mrg      Always '-1'; not yet implemented.
   3702  1.13  mrg 
   3703  1.13  mrg 'acc_prof_info.func_line_no'
   3704  1.13  mrg      Always '-1'; not yet implemented.
   3705  1.13  mrg 
   3706  1.13  mrg 'acc_prof_info.func_end_line_no'
   3707  1.13  mrg      Always '-1'; not yet implemented.
   3708  1.13  mrg 
   3709  1.13  mrg 'acc_event_info.event_type', 'acc_event_info.*.event_type'
   3710  1.13  mrg      Relating to 'acc_prof_info.event_type' discussed above, in this
   3711  1.13  mrg      implementation, this will always be the same value as
   3712  1.13  mrg      'acc_prof_info.event_type'.
   3713  1.13  mrg 
   3714  1.13  mrg 'acc_event_info.*.parent_construct'
   3715  1.13  mrg 
   3716  1.13  mrg         * Will be 'acc_construct_parallel' for all OpenACC compute
   3717  1.13  mrg           constructs as well as many OpenACC Runtime API calls; should
   3718  1.13  mrg           be the one matching the actual construct, or
   3719  1.13  mrg           'acc_construct_runtime_api', respectively.
   3720  1.13  mrg 
   3721  1.13  mrg         * Will be 'acc_construct_enter_data' or
   3722  1.13  mrg           'acc_construct_exit_data' when processing variable mappings
   3723  1.13  mrg           specified in OpenACC _declare_ directives; should be
   3724  1.13  mrg           'acc_construct_declare'.
   3725  1.13  mrg 
   3726  1.13  mrg         * For implicit 'acc_ev_device_init_start',
   3727  1.13  mrg           'acc_ev_device_init_end', and explicit as well as implicit
   3728  1.13  mrg           'acc_ev_alloc', 'acc_ev_free', 'acc_ev_enqueue_upload_start',
   3729  1.13  mrg           'acc_ev_enqueue_upload_end', 'acc_ev_enqueue_download_start',
   3730  1.13  mrg           and 'acc_ev_enqueue_download_end', will be
   3731  1.13  mrg           'acc_construct_parallel'; should reflect the real parent
   3732  1.13  mrg           construct.
   3733  1.13  mrg 
   3734  1.13  mrg 'acc_event_info.*.implicit'
   3735  1.13  mrg      For 'acc_ev_alloc', 'acc_ev_free', 'acc_ev_enqueue_upload_start',
   3736  1.13  mrg      'acc_ev_enqueue_upload_end', 'acc_ev_enqueue_download_start', and
   3737  1.13  mrg      'acc_ev_enqueue_download_end', this currently will be '1' also for
   3738  1.13  mrg      explicit usage.
   3739  1.13  mrg 
   3740  1.13  mrg 'acc_event_info.data_event.var_name'
   3741  1.13  mrg      Always 'NULL'; not yet implemented.
   3742  1.13  mrg 
   3743  1.13  mrg 'acc_event_info.data_event.host_ptr'
   3744  1.13  mrg      For 'acc_ev_alloc', and 'acc_ev_free', this is always 'NULL'.
   3745  1.13  mrg 
   3746  1.13  mrg 'typedef union acc_api_info'
   3747  1.13  mrg      ... as printed in '5.2.3. Third Argument: API-Specific
   3748  1.13  mrg      Information'.  This should obviously be 'typedef _struct_
   3749  1.13  mrg      acc_api_info'.
   3750  1.13  mrg 
   3751  1.13  mrg 'acc_api_info.device_api'
   3752  1.13  mrg      Possibly not yet implemented correctly for
   3753  1.13  mrg      'acc_ev_compute_construct_start', 'acc_ev_device_init_start',
   3754  1.13  mrg      'acc_ev_device_init_end': will always be 'acc_device_api_none' for
   3755  1.13  mrg      these event types.  For 'acc_ev_enter_data_start', it will be
   3756  1.13  mrg      'acc_device_api_none' in some cases.
   3757  1.13  mrg 
   3758  1.13  mrg 'acc_api_info.device_type'
   3759  1.13  mrg      Always the same as 'acc_prof_info.device_type'.
   3760  1.13  mrg 
   3761  1.13  mrg 'acc_api_info.vendor'
   3762  1.13  mrg      Always '-1'; not yet implemented.
   3763  1.13  mrg 
   3764  1.13  mrg 'acc_api_info.device_handle'
   3765  1.13  mrg      Always 'NULL'; not yet implemented.
   3766  1.13  mrg 
   3767  1.13  mrg 'acc_api_info.context_handle'
   3768  1.13  mrg      Always 'NULL'; not yet implemented.
   3769  1.13  mrg 
   3770  1.13  mrg 'acc_api_info.async_handle'
   3771  1.13  mrg      Always 'NULL'; not yet implemented.
   3772  1.13  mrg 
   3773  1.13  mrg    Remarks about certain event types:
   3774  1.13  mrg 
   3775  1.13  mrg 'acc_ev_device_init_start', 'acc_ev_device_init_end'
   3776  1.13  mrg 
   3777  1.15  mrg         * When a compute construct triggers implicit
   3778  1.13  mrg           'acc_ev_device_init_start' and 'acc_ev_device_init_end'
   3779  1.13  mrg           events, they currently aren't _nested within_ the
   3780  1.13  mrg           corresponding 'acc_ev_compute_construct_start' and
   3781  1.13  mrg           'acc_ev_compute_construct_end', but they're currently observed
   3782  1.13  mrg           _before_ 'acc_ev_compute_construct_start'.  It's not clear
   3783  1.13  mrg           what to do: the standard asks us provide a lot of details to
   3784  1.13  mrg           the 'acc_ev_compute_construct_start' callback, without
   3785  1.13  mrg           (implicitly) initializing a device before?
   3786  1.13  mrg 
   3787  1.13  mrg         * Callbacks for these event types will not be invoked for calls
   3788  1.13  mrg           to the 'acc_set_device_type' and 'acc_set_device_num'
   3789  1.13  mrg           functions.  It's not clear if they should be.
   3790  1.13  mrg 
   3791  1.13  mrg 'acc_ev_enter_data_start', 'acc_ev_enter_data_end', 'acc_ev_exit_data_start', 'acc_ev_exit_data_end'
   3792  1.13  mrg 
   3793  1.13  mrg         * Callbacks for these event types will also be invoked for
   3794  1.13  mrg           OpenACC _host_data_ constructs.  It's not clear if they should
   3795  1.13  mrg           be.
   3796  1.13  mrg 
   3797  1.13  mrg         * Callbacks for these event types will also be invoked when
   3798  1.13  mrg           processing variable mappings specified in OpenACC _declare_
   3799  1.13  mrg           directives.  It's not clear if they should be.
   3800  1.13  mrg 
   3801  1.13  mrg    Callbacks for the following event types will be invoked, but dispatch
   3802  1.13  mrg and information provided therein has not yet been thoroughly reviewed:
   3803  1.13  mrg 
   3804  1.13  mrg    * 'acc_ev_alloc'
   3805  1.13  mrg    * 'acc_ev_free'
   3806  1.13  mrg    * 'acc_ev_update_start', 'acc_ev_update_end'
   3807  1.13  mrg    * 'acc_ev_enqueue_upload_start', 'acc_ev_enqueue_upload_end'
   3808  1.13  mrg    * 'acc_ev_enqueue_download_start', 'acc_ev_enqueue_download_end'
   3809  1.13  mrg 
   3810  1.13  mrg    During device initialization, and finalization, respectively,
   3811  1.13  mrg callbacks for the following event types will not yet be invoked:
   3812  1.13  mrg 
   3813  1.13  mrg    * 'acc_ev_alloc'
   3814  1.13  mrg    * 'acc_ev_free'
   3815  1.13  mrg 
   3816  1.13  mrg    Callbacks for the following event types have not yet been
   3817  1.13  mrg implemented, so currently won't be invoked:
   3818  1.13  mrg 
   3819  1.13  mrg    * 'acc_ev_device_shutdown_start', 'acc_ev_device_shutdown_end'
   3820  1.13  mrg    * 'acc_ev_runtime_shutdown'
   3821  1.13  mrg    * 'acc_ev_create', 'acc_ev_delete'
   3822  1.13  mrg    * 'acc_ev_wait_start', 'acc_ev_wait_end'
   3823  1.13  mrg 
   3824  1.13  mrg    For the following runtime library functions, not all expected
   3825  1.13  mrg callbacks will be invoked (mostly concerning implicit device
   3826  1.13  mrg initialization):
   3827  1.13  mrg 
   3828  1.13  mrg    * 'acc_get_num_devices'
   3829  1.13  mrg    * 'acc_set_device_type'
   3830  1.13  mrg    * 'acc_get_device_type'
   3831  1.13  mrg    * 'acc_set_device_num'
   3832  1.13  mrg    * 'acc_get_device_num'
   3833  1.13  mrg    * 'acc_init'
   3834  1.13  mrg    * 'acc_shutdown'
   3835  1.13  mrg 
   3836  1.13  mrg    Aside from implicit device initialization, for the following runtime
   3837  1.13  mrg library functions, no callbacks will be invoked for shared-memory
   3838  1.13  mrg offloading devices (it's not clear if they should be):
   3839  1.13  mrg 
   3840  1.13  mrg    * 'acc_malloc'
   3841  1.13  mrg    * 'acc_free'
   3842  1.13  mrg    * 'acc_copyin', 'acc_present_or_copyin', 'acc_copyin_async'
   3843  1.13  mrg    * 'acc_create', 'acc_present_or_create', 'acc_create_async'
   3844  1.13  mrg    * 'acc_copyout', 'acc_copyout_async', 'acc_copyout_finalize',
   3845  1.13  mrg      'acc_copyout_finalize_async'
   3846  1.13  mrg    * 'acc_delete', 'acc_delete_async', 'acc_delete_finalize',
   3847  1.13  mrg      'acc_delete_finalize_async'
   3848  1.13  mrg    * 'acc_update_device', 'acc_update_device_async'
   3849  1.13  mrg    * 'acc_update_self', 'acc_update_self_async'
   3850  1.13  mrg    * 'acc_map_data', 'acc_unmap_data'
   3851  1.13  mrg    * 'acc_memcpy_to_device', 'acc_memcpy_to_device_async'
   3852  1.13  mrg    * 'acc_memcpy_from_device', 'acc_memcpy_from_device_async'
   3853  1.13  mrg 
   3854  1.13  mrg 
   3855  1.13  mrg File: libgomp.info,  Node: The libgomp ABI,  Next: Reporting Bugs,  Prev: OpenACC Profiling Interface,  Up: Top
   3856  1.13  mrg 
   3857  1.15  mrg 11 The libgomp ABI
   3858  1.13  mrg ******************
   3859   1.1  mrg 
   3860  1.11  mrg The following sections present notes on the external ABI as presented by
   3861  1.11  mrg libgomp.  Only maintainers should need them.
   3862   1.1  mrg 
   3863   1.1  mrg * Menu:
   3864   1.1  mrg 
   3865   1.1  mrg * Implementing MASTER construct::
   3866   1.1  mrg * Implementing CRITICAL construct::
   3867   1.1  mrg * Implementing ATOMIC construct::
   3868   1.1  mrg * Implementing FLUSH construct::
   3869   1.1  mrg * Implementing BARRIER construct::
   3870   1.1  mrg * Implementing THREADPRIVATE construct::
   3871   1.1  mrg * Implementing PRIVATE clause::
   3872   1.1  mrg * Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses::
   3873   1.1  mrg * Implementing REDUCTION clause::
   3874   1.1  mrg * Implementing PARALLEL construct::
   3875   1.1  mrg * Implementing FOR construct::
   3876   1.1  mrg * Implementing ORDERED construct::
   3877   1.1  mrg * Implementing SECTIONS construct::
   3878   1.1  mrg * Implementing SINGLE construct::
   3879   1.7  mrg * Implementing OpenACC's PARALLEL construct::
   3880   1.1  mrg 
   3881   1.1  mrg 
   3882   1.1  mrg File: libgomp.info,  Node: Implementing MASTER construct,  Next: Implementing CRITICAL construct,  Up: The libgomp ABI
   3883   1.1  mrg 
   3884  1.15  mrg 11.1 Implementing MASTER construct
   3885  1.13  mrg ==================================
   3886   1.1  mrg 
   3887   1.1  mrg      if (omp_get_thread_num () == 0)
   3888   1.1  mrg        block
   3889   1.1  mrg 
   3890   1.1  mrg    Alternately, we generate two copies of the parallel subfunction and
   3891  1.15  mrg only include this in the version run by the primary thread.  Surely this
   3892   1.3  mrg is not worthwhile though...
   3893   1.1  mrg 
   3894   1.1  mrg 
   3895   1.1  mrg File: libgomp.info,  Node: Implementing CRITICAL construct,  Next: Implementing ATOMIC construct,  Prev: Implementing MASTER construct,  Up: The libgomp ABI
   3896   1.1  mrg 
   3897  1.15  mrg 11.2 Implementing CRITICAL construct
   3898  1.13  mrg ====================================
   3899   1.1  mrg 
   3900   1.1  mrg Without a specified name,
   3901   1.1  mrg 
   3902   1.1  mrg        void GOMP_critical_start (void);
   3903   1.1  mrg        void GOMP_critical_end (void);
   3904   1.1  mrg 
   3905   1.1  mrg    so that we don't get COPY relocations from libgomp to the main
   3906   1.1  mrg application.
   3907   1.1  mrg 
   3908   1.1  mrg    With a specified name, use omp_set_lock and omp_unset_lock with name
   3909   1.1  mrg being transformed into a variable declared like
   3910   1.1  mrg 
   3911   1.1  mrg        omp_lock_t gomp_critical_user_<name> __attribute__((common))
   3912   1.1  mrg 
   3913   1.1  mrg    Ideally the ABI would specify that all zero is a valid unlocked
   3914   1.3  mrg state, and so we wouldn't need to initialize this at startup.
   3915   1.1  mrg 
   3916   1.1  mrg 
   3917   1.1  mrg File: libgomp.info,  Node: Implementing ATOMIC construct,  Next: Implementing FLUSH construct,  Prev: Implementing CRITICAL construct,  Up: The libgomp ABI
   3918   1.1  mrg 
   3919  1.15  mrg 11.3 Implementing ATOMIC construct
   3920  1.13  mrg ==================================
   3921   1.1  mrg 
   3922  1.11  mrg The target should implement the '__sync' builtins.
   3923   1.1  mrg 
   3924   1.1  mrg    Failing that we could add
   3925   1.1  mrg 
   3926   1.1  mrg        void GOMP_atomic_enter (void)
   3927   1.1  mrg        void GOMP_atomic_exit (void)
   3928   1.1  mrg 
   3929   1.1  mrg    which reuses the regular lock code, but with yet another lock object
   3930   1.1  mrg private to the library.
   3931   1.1  mrg 
   3932   1.1  mrg 
   3933   1.1  mrg File: libgomp.info,  Node: Implementing FLUSH construct,  Next: Implementing BARRIER construct,  Prev: Implementing ATOMIC construct,  Up: The libgomp ABI
   3934   1.1  mrg 
   3935  1.15  mrg 11.4 Implementing FLUSH construct
   3936  1.13  mrg =================================
   3937   1.1  mrg 
   3938  1.11  mrg Expands to the '__sync_synchronize' builtin.
   3939   1.1  mrg 
   3940   1.1  mrg 
   3941   1.1  mrg File: libgomp.info,  Node: Implementing BARRIER construct,  Next: Implementing THREADPRIVATE construct,  Prev: Implementing FLUSH construct,  Up: The libgomp ABI
   3942   1.1  mrg 
   3943  1.15  mrg 11.5 Implementing BARRIER construct
   3944  1.13  mrg ===================================
   3945   1.1  mrg 
   3946   1.1  mrg        void GOMP_barrier (void)
   3947   1.1  mrg 
   3948   1.1  mrg 
   3949   1.1  mrg File: libgomp.info,  Node: Implementing THREADPRIVATE construct,  Next: Implementing PRIVATE clause,  Prev: Implementing BARRIER construct,  Up: The libgomp ABI
   3950   1.1  mrg 
   3951  1.15  mrg 11.6 Implementing THREADPRIVATE construct
   3952  1.13  mrg =========================================
   3953   1.1  mrg 
   3954  1.11  mrg In _most_ cases we can map this directly to '__thread'.  Except that OMP
   3955  1.11  mrg allows constructors for C++ objects.  We can either refuse to support
   3956  1.11  mrg this (how often is it used?)  or we can implement something akin to
   3957  1.11  mrg .ctors.
   3958   1.1  mrg 
   3959   1.1  mrg    Even more ideally, this ctor feature is handled by extensions to the
   3960   1.1  mrg main pthreads library.  Failing that, we can have a set of entry points
   3961   1.1  mrg to register ctor functions to be called.
   3962   1.1  mrg 
   3963   1.1  mrg 
   3964   1.1  mrg File: libgomp.info,  Node: Implementing PRIVATE clause,  Next: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Prev: Implementing THREADPRIVATE construct,  Up: The libgomp ABI
   3965   1.1  mrg 
   3966  1.15  mrg 11.7 Implementing PRIVATE clause
   3967  1.13  mrg ================================
   3968   1.1  mrg 
   3969   1.1  mrg In association with a PARALLEL, or within the lexical extent of a
   3970   1.1  mrg PARALLEL block, the variable becomes a local variable in the parallel
   3971   1.1  mrg subfunction.
   3972   1.1  mrg 
   3973   1.1  mrg    In association with FOR or SECTIONS blocks, create a new automatic
   3974   1.1  mrg variable within the current function.  This preserves the semantic of
   3975   1.1  mrg new variable creation.
   3976   1.1  mrg 
   3977   1.1  mrg 
   3978   1.1  mrg File: libgomp.info,  Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Next: Implementing REDUCTION clause,  Prev: Implementing PRIVATE clause,  Up: The libgomp ABI
   3979   1.1  mrg 
   3980  1.15  mrg 11.8 Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses
   3981  1.13  mrg =========================================================================
   3982   1.1  mrg 
   3983   1.3  mrg This seems simple enough for PARALLEL blocks.  Create a private struct
   3984   1.3  mrg for communicating between the parent and subfunction.  In the parent,
   3985   1.3  mrg copy in values for scalar and "small" structs; copy in addresses for
   3986   1.3  mrg others TREE_ADDRESSABLE types.  In the subfunction, copy the value into
   3987   1.3  mrg the local variable.
   3988   1.1  mrg 
   3989  1.11  mrg    It is not clear what to do with bare FOR or SECTION blocks.  The only
   3990  1.11  mrg thing I can figure is that we do something like:
   3991   1.1  mrg 
   3992   1.1  mrg      #pragma omp for firstprivate(x) lastprivate(y)
   3993   1.1  mrg      for (int i = 0; i < n; ++i)
   3994   1.1  mrg        body;
   3995   1.1  mrg 
   3996   1.1  mrg    which becomes
   3997   1.1  mrg 
   3998   1.1  mrg      {
   3999   1.1  mrg        int x = x, y;
   4000   1.1  mrg 
   4001   1.1  mrg        // for stuff
   4002   1.1  mrg 
   4003   1.1  mrg        if (i == n)
   4004   1.1  mrg          y = y;
   4005   1.1  mrg      }
   4006   1.1  mrg 
   4007   1.1  mrg    where the "x=x" and "y=y" assignments actually have different uids
   4008  1.11  mrg for the two variables, i.e.  not something you could write directly in
   4009  1.11  mrg C. Presumably this only makes sense if the "outer" x and y are global
   4010   1.1  mrg variables.
   4011   1.1  mrg 
   4012   1.1  mrg    COPYPRIVATE would work the same way, except the structure broadcast
   4013   1.1  mrg would have to happen via SINGLE machinery instead.
   4014   1.1  mrg 
   4015   1.1  mrg 
   4016   1.1  mrg File: libgomp.info,  Node: Implementing REDUCTION clause,  Next: Implementing PARALLEL construct,  Prev: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Up: The libgomp ABI
   4017   1.1  mrg 
   4018  1.15  mrg 11.9 Implementing REDUCTION clause
   4019  1.13  mrg ==================================
   4020   1.1  mrg 
   4021   1.1  mrg The private struct mentioned in the previous section should have a
   4022  1.11  mrg pointer to an array of the type of the variable, indexed by the thread's
   4023  1.11  mrg TEAM_ID.  The thread stores its final value into the array, and after
   4024  1.15  mrg the barrier, the primary thread iterates over the array to collect the
   4025  1.11  mrg values.
   4026   1.1  mrg 
   4027   1.1  mrg 
   4028   1.1  mrg File: libgomp.info,  Node: Implementing PARALLEL construct,  Next: Implementing FOR construct,  Prev: Implementing REDUCTION clause,  Up: The libgomp ABI
   4029   1.1  mrg 
   4030  1.15  mrg 11.10 Implementing PARALLEL construct
   4031  1.13  mrg =====================================
   4032   1.1  mrg 
   4033   1.1  mrg        #pragma omp parallel
   4034   1.1  mrg        {
   4035   1.1  mrg          body;
   4036   1.1  mrg        }
   4037   1.1  mrg 
   4038   1.1  mrg    becomes
   4039   1.1  mrg 
   4040   1.1  mrg        void subfunction (void *data)
   4041   1.1  mrg        {
   4042   1.1  mrg          use data;
   4043   1.1  mrg          body;
   4044   1.1  mrg        }
   4045   1.1  mrg 
   4046   1.1  mrg        setup data;
   4047   1.1  mrg        GOMP_parallel_start (subfunction, &data, num_threads);
   4048   1.1  mrg        subfunction (&data);
   4049   1.1  mrg        GOMP_parallel_end ();
   4050   1.1  mrg 
   4051   1.1  mrg        void GOMP_parallel_start (void (*fn)(void *), void *data, unsigned num_threads)
   4052   1.1  mrg 
   4053   1.1  mrg    The FN argument is the subfunction to be run in parallel.
   4054   1.1  mrg 
   4055   1.1  mrg    The DATA argument is a pointer to a structure used to communicate
   4056   1.1  mrg data in and out of the subfunction, as discussed above with respect to
   4057   1.1  mrg FIRSTPRIVATE et al.
   4058   1.1  mrg 
   4059   1.1  mrg    The NUM_THREADS argument is 1 if an IF clause is present and false,
   4060   1.1  mrg or the value of the NUM_THREADS clause, if present, or 0.
   4061   1.1  mrg 
   4062  1.11  mrg    The function needs to create the appropriate number of threads and/or
   4063  1.11  mrg launch them from the dock.  It needs to create the team structure and
   4064  1.11  mrg assign team ids.
   4065   1.1  mrg 
   4066   1.1  mrg        void GOMP_parallel_end (void)
   4067   1.1  mrg 
   4068   1.1  mrg    Tears down the team and returns us to the previous
   4069  1.11  mrg 'omp_in_parallel()' state.
   4070   1.1  mrg 
   4071   1.1  mrg 
   4072   1.1  mrg File: libgomp.info,  Node: Implementing FOR construct,  Next: Implementing ORDERED construct,  Prev: Implementing PARALLEL construct,  Up: The libgomp ABI
   4073   1.1  mrg 
   4074  1.15  mrg 11.11 Implementing FOR construct
   4075  1.13  mrg ================================
   4076   1.1  mrg 
   4077   1.1  mrg        #pragma omp parallel for
   4078   1.1  mrg        for (i = lb; i <= ub; i++)
   4079   1.1  mrg          body;
   4080   1.1  mrg 
   4081   1.1  mrg    becomes
   4082   1.1  mrg 
   4083   1.1  mrg        void subfunction (void *data)
   4084   1.1  mrg        {
   4085   1.1  mrg          long _s0, _e0;
   4086   1.1  mrg          while (GOMP_loop_static_next (&_s0, &_e0))
   4087   1.1  mrg          {
   4088   1.1  mrg            long _e1 = _e0, i;
   4089   1.1  mrg            for (i = _s0; i < _e1; i++)
   4090   1.1  mrg              body;
   4091   1.1  mrg          }
   4092   1.1  mrg          GOMP_loop_end_nowait ();
   4093   1.1  mrg        }
   4094   1.1  mrg 
   4095   1.1  mrg        GOMP_parallel_loop_static (subfunction, NULL, 0, lb, ub+1, 1, 0);
   4096   1.1  mrg        subfunction (NULL);
   4097   1.1  mrg        GOMP_parallel_end ();
   4098   1.1  mrg 
   4099   1.1  mrg        #pragma omp for schedule(runtime)
   4100   1.1  mrg        for (i = 0; i < n; i++)
   4101   1.1  mrg          body;
   4102   1.1  mrg 
   4103   1.1  mrg    becomes
   4104   1.1  mrg 
   4105   1.1  mrg        {
   4106   1.1  mrg          long i, _s0, _e0;
   4107   1.1  mrg          if (GOMP_loop_runtime_start (0, n, 1, &_s0, &_e0))
   4108   1.1  mrg            do {
   4109   1.1  mrg              long _e1 = _e0;
   4110   1.1  mrg              for (i = _s0, i < _e0; i++)
   4111   1.1  mrg                body;
   4112   1.1  mrg            } while (GOMP_loop_runtime_next (&_s0, _&e0));
   4113   1.1  mrg          GOMP_loop_end ();
   4114   1.1  mrg        }
   4115   1.1  mrg 
   4116   1.3  mrg    Note that while it looks like there is trickiness to propagating a
   4117   1.1  mrg non-constant STEP, there isn't really.  We're explicitly allowed to
   4118   1.1  mrg evaluate it as many times as we want, and any variables involved should
   4119   1.1  mrg automatically be handled as PRIVATE or SHARED like any other variables.
   4120   1.1  mrg So the expression should remain evaluable in the subfunction.  We can
   4121  1.11  mrg also pull it into a local variable if we like, but since its supposed to
   4122  1.11  mrg remain unchanged, we can also not if we like.
   4123   1.1  mrg 
   4124  1.11  mrg    If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be able
   4125  1.11  mrg to get away with no work-sharing context at all, since we can simply
   4126  1.11  mrg perform the arithmetic directly in each thread to divide up the
   4127  1.11  mrg iterations.  Which would mean that we wouldn't need to call any of these
   4128  1.11  mrg routines.
   4129   1.1  mrg 
   4130   1.1  mrg    There are separate routines for handling loops with an ORDERED
   4131   1.1  mrg clause.  Bookkeeping for that is non-trivial...
   4132   1.1  mrg 
   4133   1.1  mrg 
   4134   1.1  mrg File: libgomp.info,  Node: Implementing ORDERED construct,  Next: Implementing SECTIONS construct,  Prev: Implementing FOR construct,  Up: The libgomp ABI
   4135   1.1  mrg 
   4136  1.15  mrg 11.12 Implementing ORDERED construct
   4137  1.13  mrg ====================================
   4138   1.1  mrg 
   4139   1.1  mrg        void GOMP_ordered_start (void)
   4140   1.1  mrg        void GOMP_ordered_end (void)
   4141   1.1  mrg 
   4142   1.1  mrg 
   4143   1.1  mrg File: libgomp.info,  Node: Implementing SECTIONS construct,  Next: Implementing SINGLE construct,  Prev: Implementing ORDERED construct,  Up: The libgomp ABI
   4144   1.1  mrg 
   4145  1.15  mrg 11.13 Implementing SECTIONS construct
   4146  1.13  mrg =====================================
   4147   1.1  mrg 
   4148   1.1  mrg A block as
   4149   1.1  mrg 
   4150   1.1  mrg        #pragma omp sections
   4151   1.1  mrg        {
   4152   1.1  mrg          #pragma omp section
   4153   1.1  mrg          stmt1;
   4154   1.1  mrg          #pragma omp section
   4155   1.1  mrg          stmt2;
   4156   1.1  mrg          #pragma omp section
   4157   1.1  mrg          stmt3;
   4158   1.1  mrg        }
   4159   1.1  mrg 
   4160   1.1  mrg    becomes
   4161   1.1  mrg 
   4162   1.1  mrg        for (i = GOMP_sections_start (3); i != 0; i = GOMP_sections_next ())
   4163   1.1  mrg          switch (i)
   4164   1.1  mrg            {
   4165   1.1  mrg            case 1:
   4166   1.1  mrg              stmt1;
   4167   1.1  mrg              break;
   4168   1.1  mrg            case 2:
   4169   1.1  mrg              stmt2;
   4170   1.1  mrg              break;
   4171   1.1  mrg            case 3:
   4172   1.1  mrg              stmt3;
   4173   1.1  mrg              break;
   4174   1.1  mrg            }
   4175   1.1  mrg        GOMP_barrier ();
   4176   1.1  mrg 
   4177   1.1  mrg 
   4178   1.7  mrg File: libgomp.info,  Node: Implementing SINGLE construct,  Next: Implementing OpenACC's PARALLEL construct,  Prev: Implementing SECTIONS construct,  Up: The libgomp ABI
   4179   1.1  mrg 
   4180  1.15  mrg 11.14 Implementing SINGLE construct
   4181  1.13  mrg ===================================
   4182   1.1  mrg 
   4183   1.1  mrg A block like
   4184   1.1  mrg 
   4185   1.1  mrg        #pragma omp single
   4186   1.1  mrg        {
   4187   1.1  mrg          body;
   4188   1.1  mrg        }
   4189   1.1  mrg 
   4190   1.1  mrg    becomes
   4191   1.1  mrg 
   4192   1.1  mrg        if (GOMP_single_start ())
   4193   1.1  mrg          body;
   4194   1.1  mrg        GOMP_barrier ();
   4195   1.1  mrg 
   4196   1.1  mrg    while
   4197   1.1  mrg 
   4198   1.1  mrg        #pragma omp single copyprivate(x)
   4199   1.1  mrg          body;
   4200   1.1  mrg 
   4201   1.1  mrg    becomes
   4202   1.1  mrg 
   4203   1.1  mrg        datap = GOMP_single_copy_start ();
   4204   1.1  mrg        if (datap == NULL)
   4205   1.1  mrg          {
   4206   1.1  mrg            body;
   4207   1.1  mrg            data.x = x;
   4208   1.1  mrg            GOMP_single_copy_end (&data);
   4209   1.1  mrg          }
   4210   1.1  mrg        else
   4211   1.1  mrg          x = datap->x;
   4212   1.1  mrg        GOMP_barrier ();
   4213   1.1  mrg 
   4214   1.1  mrg 
   4215   1.7  mrg File: libgomp.info,  Node: Implementing OpenACC's PARALLEL construct,  Prev: Implementing SINGLE construct,  Up: The libgomp ABI
   4216   1.7  mrg 
   4217  1.15  mrg 11.15 Implementing OpenACC's PARALLEL construct
   4218  1.13  mrg ===============================================
   4219   1.7  mrg 
   4220   1.7  mrg        void GOACC_parallel ()
   4221   1.7  mrg 
   4222   1.7  mrg 
   4223   1.1  mrg File: libgomp.info,  Node: Reporting Bugs,  Next: Copying,  Prev: The libgomp ABI,  Up: Top
   4224   1.1  mrg 
   4225  1.15  mrg 12 Reporting Bugs
   4226   1.7  mrg *****************
   4227   1.1  mrg 
   4228   1.5  mrg Bugs in the GNU Offloading and Multi Processing Runtime Library should
   4229  1.13  mrg be reported via Bugzilla (https://gcc.gnu.org/bugzilla/).  Please add
   4230  1.11  mrg "openacc", or "openmp", or both to the keywords field in the bug report,
   4231  1.11  mrg as appropriate.
   4232   1.1  mrg 
   4233   1.1  mrg 
   4234   1.1  mrg File: libgomp.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
   4235   1.1  mrg 
   4236   1.3  mrg GNU General Public License
   4237   1.1  mrg **************************
   4238   1.1  mrg 
   4239   1.3  mrg                         Version 3, 29 June 2007
   4240   1.1  mrg 
   4241  1.15  mrg      Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
   4242   1.1  mrg 
   4243   1.3  mrg      Everyone is permitted to copy and distribute verbatim copies of this
   4244   1.3  mrg      license document, but changing it is not allowed.
   4245   1.1  mrg 
   4246   1.1  mrg Preamble
   4247   1.1  mrg ========
   4248   1.1  mrg 
   4249   1.3  mrg The GNU General Public License is a free, copyleft license for software
   4250   1.3  mrg and other kinds of works.
   4251   1.3  mrg 
   4252   1.3  mrg    The licenses for most software and other practical works are designed
   4253   1.3  mrg to take away your freedom to share and change the works.  By contrast,
   4254   1.3  mrg the GNU General Public License is intended to guarantee your freedom to
   4255   1.3  mrg share and change all versions of a program-to make sure it remains free
   4256   1.3  mrg software for all its users.  We, the Free Software Foundation, use the
   4257   1.3  mrg GNU General Public License for most of our software; it applies also to
   4258   1.3  mrg any other work released this way by its authors.  You can apply it to
   4259   1.1  mrg your programs, too.
   4260   1.1  mrg 
   4261   1.1  mrg    When we speak of free software, we are referring to freedom, not
   4262   1.1  mrg price.  Our General Public Licenses are designed to make sure that you
   4263   1.1  mrg have the freedom to distribute copies of free software (and charge for
   4264   1.3  mrg them if you wish), that you receive source code or can get it if you
   4265   1.3  mrg want it, that you can change the software or use pieces of it in new
   4266   1.3  mrg free programs, and that you know you can do these things.
   4267   1.3  mrg 
   4268   1.3  mrg    To protect your rights, we need to prevent others from denying you
   4269  1.11  mrg these rights or asking you to surrender the rights.  Therefore, you have
   4270  1.11  mrg certain responsibilities if you distribute copies of the software, or if
   4271  1.11  mrg you modify it: responsibilities to respect the freedom of others.
   4272   1.1  mrg 
   4273   1.1  mrg    For example, if you distribute copies of such a program, whether
   4274   1.3  mrg gratis or for a fee, you must pass on to the recipients the same
   4275   1.3  mrg freedoms that you received.  You must make sure that they, too, receive
   4276   1.3  mrg or can get the source code.  And you must show them these terms so they
   4277   1.3  mrg know their rights.
   4278   1.3  mrg 
   4279   1.3  mrg    Developers that use the GNU GPL protect your rights with two steps:
   4280   1.3  mrg (1) assert copyright on the software, and (2) offer you this License
   4281   1.3  mrg giving you legal permission to copy, distribute and/or modify it.
   4282   1.3  mrg 
   4283   1.3  mrg    For the developers' and authors' protection, the GPL clearly explains
   4284   1.3  mrg that there is no warranty for this free software.  For both users' and
   4285   1.3  mrg authors' sake, the GPL requires that modified versions be marked as
   4286   1.3  mrg changed, so that their problems will not be attributed erroneously to
   4287   1.3  mrg authors of previous versions.
   4288   1.3  mrg 
   4289   1.3  mrg    Some devices are designed to deny users access to install or run
   4290  1.11  mrg modified versions of the software inside them, although the manufacturer
   4291  1.11  mrg can do so.  This is fundamentally incompatible with the aim of
   4292  1.11  mrg protecting users' freedom to change the software.  The systematic
   4293  1.11  mrg pattern of such abuse occurs in the area of products for individuals to
   4294  1.11  mrg use, which is precisely where it is most unacceptable.  Therefore, we
   4295  1.11  mrg have designed this version of the GPL to prohibit the practice for those
   4296  1.11  mrg products.  If such problems arise substantially in other domains, we
   4297  1.11  mrg stand ready to extend this provision to those domains in future versions
   4298  1.11  mrg of the GPL, as needed to protect the freedom of users.
   4299   1.3  mrg 
   4300   1.3  mrg    Finally, every program is threatened constantly by software patents.
   4301   1.3  mrg States should not allow patents to restrict development and use of
   4302   1.3  mrg software on general-purpose computers, but in those that do, we wish to
   4303   1.3  mrg avoid the special danger that patents applied to a free program could
   4304   1.3  mrg make it effectively proprietary.  To prevent this, the GPL assures that
   4305   1.3  mrg patents cannot be used to render the program non-free.
   4306   1.1  mrg 
   4307   1.1  mrg    The precise terms and conditions for copying, distribution and
   4308   1.1  mrg modification follow.
   4309   1.1  mrg 
   4310   1.3  mrg TERMS AND CONDITIONS
   4311   1.3  mrg ====================
   4312   1.3  mrg 
   4313   1.3  mrg   0. Definitions.
   4314   1.3  mrg 
   4315   1.3  mrg      "This License" refers to version 3 of the GNU General Public
   4316   1.3  mrg      License.
   4317   1.1  mrg 
   4318   1.3  mrg      "Copyright" also means copyright-like laws that apply to other
   4319   1.3  mrg      kinds of works, such as semiconductor masks.
   4320   1.3  mrg 
   4321   1.3  mrg      "The Program" refers to any copyrightable work licensed under this
   4322   1.3  mrg      License.  Each licensee is addressed as "you".  "Licensees" and
   4323   1.3  mrg      "recipients" may be individuals or organizations.
   4324   1.3  mrg 
   4325   1.3  mrg      To "modify" a work means to copy from or adapt all or part of the
   4326   1.3  mrg      work in a fashion requiring copyright permission, other than the
   4327   1.3  mrg      making of an exact copy.  The resulting work is called a "modified
   4328   1.3  mrg      version" of the earlier work or a work "based on" the earlier work.
   4329   1.3  mrg 
   4330   1.3  mrg      A "covered work" means either the unmodified Program or a work
   4331   1.3  mrg      based on the Program.
   4332   1.3  mrg 
   4333   1.3  mrg      To "propagate" a work means to do anything with it that, without
   4334   1.3  mrg      permission, would make you directly or secondarily liable for
   4335  1.11  mrg      infringement under applicable copyright law, except executing it on
   4336  1.11  mrg      a computer or modifying a private copy.  Propagation includes
   4337   1.3  mrg      copying, distribution (with or without modification), making
   4338   1.3  mrg      available to the public, and in some countries other activities as
   4339   1.3  mrg      well.
   4340   1.3  mrg 
   4341   1.3  mrg      To "convey" a work means any kind of propagation that enables other
   4342   1.3  mrg      parties to make or receive copies.  Mere interaction with a user
   4343   1.3  mrg      through a computer network, with no transfer of a copy, is not
   4344   1.3  mrg      conveying.
   4345   1.3  mrg 
   4346   1.3  mrg      An interactive user interface displays "Appropriate Legal Notices"
   4347   1.3  mrg      to the extent that it includes a convenient and prominently visible
   4348   1.3  mrg      feature that (1) displays an appropriate copyright notice, and (2)
   4349   1.3  mrg      tells the user that there is no warranty for the work (except to
   4350  1.11  mrg      the extent that warranties are provided), that licensees may convey
   4351  1.11  mrg      the work under this License, and how to view a copy of this
   4352   1.3  mrg      License.  If the interface presents a list of user commands or
   4353   1.3  mrg      options, such as a menu, a prominent item in the list meets this
   4354   1.3  mrg      criterion.
   4355   1.3  mrg 
   4356   1.3  mrg   1. Source Code.
   4357   1.3  mrg 
   4358   1.3  mrg      The "source code" for a work means the preferred form of the work
   4359  1.11  mrg      for making modifications to it.  "Object code" means any non-source
   4360  1.11  mrg      form of a work.
   4361   1.3  mrg 
   4362   1.3  mrg      A "Standard Interface" means an interface that either is an
   4363   1.3  mrg      official standard defined by a recognized standards body, or, in
   4364   1.3  mrg      the case of interfaces specified for a particular programming
   4365   1.3  mrg      language, one that is widely used among developers working in that
   4366   1.3  mrg      language.
   4367   1.3  mrg 
   4368   1.3  mrg      The "System Libraries" of an executable work include anything,
   4369   1.3  mrg      other than the work as a whole, that (a) is included in the normal
   4370   1.3  mrg      form of packaging a Major Component, but which is not part of that
   4371  1.11  mrg      Major Component, and (b) serves only to enable use of the work with
   4372  1.11  mrg      that Major Component, or to implement a Standard Interface for
   4373  1.11  mrg      which an implementation is available to the public in source code
   4374  1.11  mrg      form.  A "Major Component", in this context, means a major
   4375   1.3  mrg      essential component (kernel, window system, and so on) of the
   4376   1.3  mrg      specific operating system (if any) on which the executable work
   4377   1.3  mrg      runs, or a compiler used to produce the work, or an object code
   4378   1.3  mrg      interpreter used to run it.
   4379   1.3  mrg 
   4380   1.3  mrg      The "Corresponding Source" for a work in object code form means all
   4381   1.3  mrg      the source code needed to generate, install, and (for an executable
   4382  1.11  mrg      work) run the object code and to modify the work, including scripts
   4383  1.11  mrg      to control those activities.  However, it does not include the
   4384  1.11  mrg      work's System Libraries, or general-purpose tools or generally
   4385   1.3  mrg      available free programs which are used unmodified in performing
   4386   1.3  mrg      those activities but which are not part of the work.  For example,
   4387  1.11  mrg      Corresponding Source includes interface definition files associated
   4388  1.11  mrg      with source files for the work, and the source code for shared
   4389  1.11  mrg      libraries and dynamically linked subprograms that the work is
   4390  1.11  mrg      specifically designed to require, such as by intimate data
   4391   1.3  mrg      communication or control flow between those subprograms and other
   4392   1.3  mrg      parts of the work.
   4393   1.3  mrg 
   4394   1.3  mrg      The Corresponding Source need not include anything that users can
   4395   1.3  mrg      regenerate automatically from other parts of the Corresponding
   4396   1.3  mrg      Source.
   4397   1.3  mrg 
   4398   1.3  mrg      The Corresponding Source for a work in source code form is that
   4399   1.3  mrg      same work.
   4400   1.3  mrg 
   4401   1.3  mrg   2. Basic Permissions.
   4402   1.3  mrg 
   4403   1.3  mrg      All rights granted under this License are granted for the term of
   4404   1.3  mrg      copyright on the Program, and are irrevocable provided the stated
   4405   1.3  mrg      conditions are met.  This License explicitly affirms your unlimited
   4406   1.3  mrg      permission to run the unmodified Program.  The output from running
   4407  1.11  mrg      a covered work is covered by this License only if the output, given
   4408  1.11  mrg      its content, constitutes a covered work.  This License acknowledges
   4409  1.11  mrg      your rights of fair use or other equivalent, as provided by
   4410  1.11  mrg      copyright law.
   4411   1.3  mrg 
   4412   1.3  mrg      You may make, run and propagate covered works that you do not
   4413   1.3  mrg      convey, without conditions so long as your license otherwise
   4414   1.3  mrg      remains in force.  You may convey covered works to others for the
   4415  1.11  mrg      sole purpose of having them make modifications exclusively for you,
   4416  1.11  mrg      or provide you with facilities for running those works, provided
   4417  1.11  mrg      that you comply with the terms of this License in conveying all
   4418  1.11  mrg      material for which you do not control copyright.  Those thus making
   4419  1.11  mrg      or running the covered works for you must do so exclusively on your
   4420  1.11  mrg      behalf, under your direction and control, on terms that prohibit
   4421  1.11  mrg      them from making any copies of your copyrighted material outside
   4422  1.11  mrg      their relationship with you.
   4423   1.3  mrg 
   4424   1.3  mrg      Conveying under any other circumstances is permitted solely under
   4425   1.3  mrg      the conditions stated below.  Sublicensing is not allowed; section
   4426   1.3  mrg      10 makes it unnecessary.
   4427   1.3  mrg 
   4428   1.3  mrg   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   4429   1.3  mrg 
   4430   1.3  mrg      No covered work shall be deemed part of an effective technological
   4431   1.3  mrg      measure under any applicable law fulfilling obligations under
   4432   1.3  mrg      article 11 of the WIPO copyright treaty adopted on 20 December
   4433   1.3  mrg      1996, or similar laws prohibiting or restricting circumvention of
   4434   1.3  mrg      such measures.
   4435   1.3  mrg 
   4436   1.3  mrg      When you convey a covered work, you waive any legal power to forbid
   4437   1.3  mrg      circumvention of technological measures to the extent such
   4438   1.3  mrg      circumvention is effected by exercising rights under this License
   4439  1.11  mrg      with respect to the covered work, and you disclaim any intention to
   4440  1.11  mrg      limit operation or modification of the work as a means of
   4441   1.3  mrg      enforcing, against the work's users, your or third parties' legal
   4442   1.3  mrg      rights to forbid circumvention of technological measures.
   4443   1.3  mrg 
   4444   1.3  mrg   4. Conveying Verbatim Copies.
   4445   1.3  mrg 
   4446   1.3  mrg      You may convey verbatim copies of the Program's source code as you
   4447   1.3  mrg      receive it, in any medium, provided that you conspicuously and
   4448   1.3  mrg      appropriately publish on each copy an appropriate copyright notice;
   4449   1.3  mrg      keep intact all notices stating that this License and any
   4450   1.3  mrg      non-permissive terms added in accord with section 7 apply to the
   4451   1.3  mrg      code; keep intact all notices of the absence of any warranty; and
   4452   1.3  mrg      give all recipients a copy of this License along with the Program.
   4453   1.3  mrg 
   4454   1.3  mrg      You may charge any price or no price for each copy that you convey,
   4455   1.3  mrg      and you may offer support or warranty protection for a fee.
   4456   1.3  mrg 
   4457   1.3  mrg   5. Conveying Modified Source Versions.
   4458   1.3  mrg 
   4459   1.3  mrg      You may convey a work based on the Program, or the modifications to
   4460   1.3  mrg      produce it from the Program, in the form of source code under the
   4461   1.3  mrg      terms of section 4, provided that you also meet all of these
   4462   1.3  mrg      conditions:
   4463   1.3  mrg 
   4464   1.3  mrg        a. The work must carry prominent notices stating that you
   4465   1.3  mrg           modified it, and giving a relevant date.
   4466   1.3  mrg 
   4467   1.3  mrg        b. The work must carry prominent notices stating that it is
   4468   1.3  mrg           released under this License and any conditions added under
   4469   1.3  mrg           section 7.  This requirement modifies the requirement in
   4470   1.3  mrg           section 4 to "keep intact all notices".
   4471   1.3  mrg 
   4472   1.3  mrg        c. You must license the entire work, as a whole, under this
   4473   1.3  mrg           License to anyone who comes into possession of a copy.  This
   4474   1.3  mrg           License will therefore apply, along with any applicable
   4475   1.3  mrg           section 7 additional terms, to the whole of the work, and all
   4476   1.3  mrg           its parts, regardless of how they are packaged.  This License
   4477   1.3  mrg           gives no permission to license the work in any other way, but
   4478   1.3  mrg           it does not invalidate such permission if you have separately
   4479   1.3  mrg           received it.
   4480   1.3  mrg 
   4481   1.3  mrg        d. If the work has interactive user interfaces, each must display
   4482   1.3  mrg           Appropriate Legal Notices; however, if the Program has
   4483   1.3  mrg           interactive interfaces that do not display Appropriate Legal
   4484   1.3  mrg           Notices, your work need not make them do so.
   4485   1.3  mrg 
   4486   1.3  mrg      A compilation of a covered work with other separate and independent
   4487   1.3  mrg      works, which are not by their nature extensions of the covered
   4488   1.3  mrg      work, and which are not combined with it such as to form a larger
   4489   1.3  mrg      program, in or on a volume of a storage or distribution medium, is
   4490   1.3  mrg      called an "aggregate" if the compilation and its resulting
   4491   1.3  mrg      copyright are not used to limit the access or legal rights of the
   4492   1.3  mrg      compilation's users beyond what the individual works permit.
   4493   1.3  mrg      Inclusion of a covered work in an aggregate does not cause this
   4494   1.3  mrg      License to apply to the other parts of the aggregate.
   4495   1.3  mrg 
   4496   1.3  mrg   6. Conveying Non-Source Forms.
   4497   1.3  mrg 
   4498   1.3  mrg      You may convey a covered work in object code form under the terms
   4499   1.3  mrg      of sections 4 and 5, provided that you also convey the
   4500   1.3  mrg      machine-readable Corresponding Source under the terms of this
   4501   1.3  mrg      License, in one of these ways:
   4502   1.3  mrg 
   4503   1.3  mrg        a. Convey the object code in, or embodied in, a physical product
   4504   1.3  mrg           (including a physical distribution medium), accompanied by the
   4505   1.3  mrg           Corresponding Source fixed on a durable physical medium
   4506   1.3  mrg           customarily used for software interchange.
   4507   1.3  mrg 
   4508   1.3  mrg        b. Convey the object code in, or embodied in, a physical product
   4509   1.3  mrg           (including a physical distribution medium), accompanied by a
   4510  1.11  mrg           written offer, valid for at least three years and valid for as
   4511  1.11  mrg           long as you offer spare parts or customer support for that
   4512   1.3  mrg           product model, to give anyone who possesses the object code
   4513   1.3  mrg           either (1) a copy of the Corresponding Source for all the
   4514   1.3  mrg           software in the product that is covered by this License, on a
   4515   1.3  mrg           durable physical medium customarily used for software
   4516   1.3  mrg           interchange, for a price no more than your reasonable cost of
   4517   1.3  mrg           physically performing this conveying of source, or (2) access
   4518   1.3  mrg           to copy the Corresponding Source from a network server at no
   4519   1.3  mrg           charge.
   4520   1.3  mrg 
   4521  1.11  mrg        c. Convey individual copies of the object code with a copy of the
   4522  1.11  mrg           written offer to provide the Corresponding Source.  This
   4523   1.3  mrg           alternative is allowed only occasionally and noncommercially,
   4524   1.3  mrg           and only if you received the object code with such an offer,
   4525   1.3  mrg           in accord with subsection 6b.
   4526   1.3  mrg 
   4527   1.3  mrg        d. Convey the object code by offering access from a designated
   4528  1.11  mrg           place (gratis or for a charge), and offer equivalent access to
   4529  1.11  mrg           the Corresponding Source in the same way through the same
   4530   1.3  mrg           place at no further charge.  You need not require recipients
   4531   1.3  mrg           to copy the Corresponding Source along with the object code.
   4532   1.3  mrg           If the place to copy the object code is a network server, the
   4533  1.11  mrg           Corresponding Source may be on a different server (operated by
   4534  1.11  mrg           you or a third party) that supports equivalent copying
   4535  1.11  mrg           facilities, provided you maintain clear directions next to the
   4536  1.11  mrg           object code saying where to find the Corresponding Source.
   4537   1.3  mrg           Regardless of what server hosts the Corresponding Source, you
   4538  1.11  mrg           remain obligated to ensure that it is available for as long as
   4539  1.11  mrg           needed to satisfy these requirements.
   4540   1.3  mrg 
   4541   1.3  mrg        e. Convey the object code using peer-to-peer transmission,
   4542   1.3  mrg           provided you inform other peers where the object code and
   4543   1.3  mrg           Corresponding Source of the work are being offered to the
   4544   1.3  mrg           general public at no charge under subsection 6d.
   4545   1.3  mrg 
   4546   1.3  mrg      A separable portion of the object code, whose source code is
   4547   1.3  mrg      excluded from the Corresponding Source as a System Library, need
   4548   1.3  mrg      not be included in conveying the object code work.
   4549   1.3  mrg 
   4550   1.3  mrg      A "User Product" is either (1) a "consumer product", which means
   4551   1.3  mrg      any tangible personal property which is normally used for personal,
   4552   1.3  mrg      family, or household purposes, or (2) anything designed or sold for
   4553  1.11  mrg      incorporation into a dwelling.  In determining whether a product is
   4554  1.11  mrg      a consumer product, doubtful cases shall be resolved in favor of
   4555   1.3  mrg      coverage.  For a particular product received by a particular user,
   4556   1.3  mrg      "normally used" refers to a typical or common use of that class of
   4557   1.3  mrg      product, regardless of the status of the particular user or of the
   4558   1.3  mrg      way in which the particular user actually uses, or expects or is
   4559   1.3  mrg      expected to use, the product.  A product is a consumer product
   4560   1.3  mrg      regardless of whether the product has substantial commercial,
   4561   1.3  mrg      industrial or non-consumer uses, unless such uses represent the
   4562   1.3  mrg      only significant mode of use of the product.
   4563   1.3  mrg 
   4564   1.3  mrg      "Installation Information" for a User Product means any methods,
   4565   1.3  mrg      procedures, authorization keys, or other information required to
   4566   1.3  mrg      install and execute modified versions of a covered work in that
   4567   1.3  mrg      User Product from a modified version of its Corresponding Source.
   4568   1.3  mrg      The information must suffice to ensure that the continued
   4569   1.3  mrg      functioning of the modified object code is in no case prevented or
   4570   1.3  mrg      interfered with solely because modification has been made.
   4571   1.3  mrg 
   4572   1.3  mrg      If you convey an object code work under this section in, or with,
   4573   1.3  mrg      or specifically for use in, a User Product, and the conveying
   4574   1.3  mrg      occurs as part of a transaction in which the right of possession
   4575   1.3  mrg      and use of the User Product is transferred to the recipient in
   4576   1.3  mrg      perpetuity or for a fixed term (regardless of how the transaction
   4577   1.3  mrg      is characterized), the Corresponding Source conveyed under this
   4578   1.3  mrg      section must be accompanied by the Installation Information.  But
   4579   1.3  mrg      this requirement does not apply if neither you nor any third party
   4580   1.3  mrg      retains the ability to install modified object code on the User
   4581   1.3  mrg      Product (for example, the work has been installed in ROM).
   4582   1.3  mrg 
   4583   1.3  mrg      The requirement to provide Installation Information does not
   4584   1.3  mrg      include a requirement to continue to provide support service,
   4585  1.11  mrg      warranty, or updates for a work that has been modified or installed
   4586  1.11  mrg      by the recipient, or for the User Product in which it has been
   4587  1.11  mrg      modified or installed.  Access to a network may be denied when the
   4588  1.11  mrg      modification itself materially and adversely affects the operation
   4589  1.11  mrg      of the network or violates the rules and protocols for
   4590   1.3  mrg      communication across the network.
   4591   1.3  mrg 
   4592   1.3  mrg      Corresponding Source conveyed, and Installation Information
   4593   1.3  mrg      provided, in accord with this section must be in a format that is
   4594   1.3  mrg      publicly documented (and with an implementation available to the
   4595   1.3  mrg      public in source code form), and must require no special password
   4596   1.3  mrg      or key for unpacking, reading or copying.
   4597   1.3  mrg 
   4598   1.3  mrg   7. Additional Terms.
   4599   1.3  mrg 
   4600   1.3  mrg      "Additional permissions" are terms that supplement the terms of
   4601   1.3  mrg      this License by making exceptions from one or more of its
   4602   1.3  mrg      conditions.  Additional permissions that are applicable to the
   4603   1.3  mrg      entire Program shall be treated as though they were included in
   4604   1.3  mrg      this License, to the extent that they are valid under applicable
   4605   1.3  mrg      law.  If additional permissions apply only to part of the Program,
   4606   1.3  mrg      that part may be used separately under those permissions, but the
   4607   1.3  mrg      entire Program remains governed by this License without regard to
   4608   1.3  mrg      the additional permissions.
   4609   1.3  mrg 
   4610   1.3  mrg      When you convey a copy of a covered work, you may at your option
   4611   1.3  mrg      remove any additional permissions from that copy, or from any part
   4612   1.3  mrg      of it.  (Additional permissions may be written to require their own
   4613   1.3  mrg      removal in certain cases when you modify the work.)  You may place
   4614   1.3  mrg      additional permissions on material, added by you to a covered work,
   4615   1.3  mrg      for which you have or can give appropriate copyright permission.
   4616   1.3  mrg 
   4617   1.3  mrg      Notwithstanding any other provision of this License, for material
   4618   1.3  mrg      you add to a covered work, you may (if authorized by the copyright
   4619  1.11  mrg      holders of that material) supplement the terms of this License with
   4620  1.11  mrg      terms:
   4621   1.3  mrg 
   4622   1.3  mrg        a. Disclaiming warranty or limiting liability differently from
   4623   1.3  mrg           the terms of sections 15 and 16 of this License; or
   4624   1.3  mrg 
   4625   1.3  mrg        b. Requiring preservation of specified reasonable legal notices
   4626   1.3  mrg           or author attributions in that material or in the Appropriate
   4627   1.3  mrg           Legal Notices displayed by works containing it; or
   4628   1.3  mrg 
   4629   1.3  mrg        c. Prohibiting misrepresentation of the origin of that material,
   4630  1.11  mrg           or requiring that modified versions of such material be marked
   4631  1.11  mrg           in reasonable ways as different from the original version; or
   4632   1.3  mrg 
   4633   1.3  mrg        d. Limiting the use for publicity purposes of names of licensors
   4634   1.3  mrg           or authors of the material; or
   4635   1.3  mrg 
   4636   1.3  mrg        e. Declining to grant rights under trademark law for use of some
   4637   1.3  mrg           trade names, trademarks, or service marks; or
   4638   1.3  mrg 
   4639   1.3  mrg        f. Requiring indemnification of licensors and authors of that
   4640   1.3  mrg           material by anyone who conveys the material (or modified
   4641   1.3  mrg           versions of it) with contractual assumptions of liability to
   4642   1.3  mrg           the recipient, for any liability that these contractual
   4643   1.3  mrg           assumptions directly impose on those licensors and authors.
   4644   1.3  mrg 
   4645   1.3  mrg      All other non-permissive additional terms are considered "further
   4646   1.3  mrg      restrictions" within the meaning of section 10.  If the Program as
   4647   1.3  mrg      you received it, or any part of it, contains a notice stating that
   4648   1.3  mrg      it is governed by this License along with a term that is a further
   4649   1.3  mrg      restriction, you may remove that term.  If a license document
   4650  1.11  mrg      contains a further restriction but permits relicensing or conveying
   4651  1.11  mrg      under this License, you may add to a covered work material governed
   4652  1.11  mrg      by the terms of that license document, provided that the further
   4653  1.11  mrg      restriction does not survive such relicensing or conveying.
   4654   1.3  mrg 
   4655   1.3  mrg      If you add terms to a covered work in accord with this section, you
   4656   1.3  mrg      must place, in the relevant source files, a statement of the
   4657   1.3  mrg      additional terms that apply to those files, or a notice indicating
   4658   1.3  mrg      where to find the applicable terms.
   4659   1.3  mrg 
   4660   1.3  mrg      Additional terms, permissive or non-permissive, may be stated in
   4661   1.3  mrg      the form of a separately written license, or stated as exceptions;
   4662   1.3  mrg      the above requirements apply either way.
   4663   1.3  mrg 
   4664   1.3  mrg   8. Termination.
   4665   1.3  mrg 
   4666   1.3  mrg      You may not propagate or modify a covered work except as expressly
   4667   1.3  mrg      provided under this License.  Any attempt otherwise to propagate or
   4668   1.3  mrg      modify it is void, and will automatically terminate your rights
   4669  1.11  mrg      under this License (including any patent licenses granted under the
   4670  1.11  mrg      third paragraph of section 11).
   4671   1.3  mrg 
   4672   1.3  mrg      However, if you cease all violation of this License, then your
   4673   1.3  mrg      license from a particular copyright holder is reinstated (a)
   4674  1.11  mrg      provisionally, unless and until the copyright holder explicitly and
   4675  1.11  mrg      finally terminates your license, and (b) permanently, if the
   4676   1.3  mrg      copyright holder fails to notify you of the violation by some
   4677   1.3  mrg      reasonable means prior to 60 days after the cessation.
   4678   1.3  mrg 
   4679   1.3  mrg      Moreover, your license from a particular copyright holder is
   4680   1.3  mrg      reinstated permanently if the copyright holder notifies you of the
   4681   1.3  mrg      violation by some reasonable means, this is the first time you have
   4682   1.3  mrg      received notice of violation of this License (for any work) from
   4683   1.3  mrg      that copyright holder, and you cure the violation prior to 30 days
   4684   1.3  mrg      after your receipt of the notice.
   4685   1.3  mrg 
   4686   1.3  mrg      Termination of your rights under this section does not terminate
   4687  1.11  mrg      the licenses of parties who have received copies or rights from you
   4688  1.11  mrg      under this License.  If your rights have been terminated and not
   4689  1.11  mrg      permanently reinstated, you do not qualify to receive new licenses
   4690  1.11  mrg      for the same material under section 10.
   4691   1.3  mrg 
   4692   1.3  mrg   9. Acceptance Not Required for Having Copies.
   4693   1.3  mrg 
   4694   1.3  mrg      You are not required to accept this License in order to receive or
   4695   1.3  mrg      run a copy of the Program.  Ancillary propagation of a covered work
   4696   1.3  mrg      occurring solely as a consequence of using peer-to-peer
   4697   1.3  mrg      transmission to receive a copy likewise does not require
   4698   1.3  mrg      acceptance.  However, nothing other than this License grants you
   4699   1.3  mrg      permission to propagate or modify any covered work.  These actions
   4700   1.3  mrg      infringe copyright if you do not accept this License.  Therefore,
   4701   1.3  mrg      by modifying or propagating a covered work, you indicate your
   4702   1.3  mrg      acceptance of this License to do so.
   4703   1.3  mrg 
   4704  1.11  mrg   10. Automatic Licensing of Downstream Recipients.
   4705   1.3  mrg 
   4706   1.3  mrg      Each time you convey a covered work, the recipient automatically
   4707   1.3  mrg      receives a license from the original licensors, to run, modify and
   4708   1.3  mrg      propagate that work, subject to this License.  You are not
   4709   1.3  mrg      responsible for enforcing compliance by third parties with this
   4710   1.3  mrg      License.
   4711   1.3  mrg 
   4712   1.3  mrg      An "entity transaction" is a transaction transferring control of an
   4713   1.3  mrg      organization, or substantially all assets of one, or subdividing an
   4714   1.3  mrg      organization, or merging organizations.  If propagation of a
   4715   1.3  mrg      covered work results from an entity transaction, each party to that
   4716   1.3  mrg      transaction who receives a copy of the work also receives whatever
   4717   1.3  mrg      licenses to the work the party's predecessor in interest had or
   4718  1.11  mrg      could give under the previous paragraph, plus a right to possession
   4719  1.11  mrg      of the Corresponding Source of the work from the predecessor in
   4720  1.11  mrg      interest, if the predecessor has it or can get it with reasonable
   4721  1.11  mrg      efforts.
   4722   1.3  mrg 
   4723   1.3  mrg      You may not impose any further restrictions on the exercise of the
   4724   1.3  mrg      rights granted or affirmed under this License.  For example, you
   4725  1.11  mrg      may not impose a license fee, royalty, or other charge for exercise
   4726  1.11  mrg      of rights granted under this License, and you may not initiate
   4727  1.11  mrg      litigation (including a cross-claim or counterclaim in a lawsuit)
   4728  1.11  mrg      alleging that any patent claim is infringed by making, using,
   4729  1.11  mrg      selling, offering for sale, or importing the Program or any portion
   4730  1.11  mrg      of it.
   4731   1.3  mrg 
   4732  1.11  mrg   11. Patents.
   4733   1.3  mrg 
   4734   1.3  mrg      A "contributor" is a copyright holder who authorizes use under this
   4735   1.3  mrg      License of the Program or a work on which the Program is based.
   4736   1.3  mrg      The work thus licensed is called the contributor's "contributor
   4737   1.3  mrg      version".
   4738   1.3  mrg 
   4739   1.3  mrg      A contributor's "essential patent claims" are all patent claims
   4740   1.3  mrg      owned or controlled by the contributor, whether already acquired or
   4741   1.3  mrg      hereafter acquired, that would be infringed by some manner,
   4742   1.3  mrg      permitted by this License, of making, using, or selling its
   4743   1.3  mrg      contributor version, but do not include claims that would be
   4744   1.3  mrg      infringed only as a consequence of further modification of the
   4745   1.3  mrg      contributor version.  For purposes of this definition, "control"
   4746   1.3  mrg      includes the right to grant patent sublicenses in a manner
   4747   1.3  mrg      consistent with the requirements of this License.
   4748   1.3  mrg 
   4749   1.3  mrg      Each contributor grants you a non-exclusive, worldwide,
   4750   1.3  mrg      royalty-free patent license under the contributor's essential
   4751   1.3  mrg      patent claims, to make, use, sell, offer for sale, import and
   4752  1.11  mrg      otherwise run, modify and propagate the contents of its contributor
   4753  1.11  mrg      version.
   4754   1.3  mrg 
   4755   1.3  mrg      In the following three paragraphs, a "patent license" is any
   4756   1.3  mrg      express agreement or commitment, however denominated, not to
   4757   1.3  mrg      enforce a patent (such as an express permission to practice a
   4758  1.11  mrg      patent or covenant not to sue for patent infringement).  To "grant"
   4759  1.11  mrg      such a patent license to a party means to make such an agreement or
   4760  1.11  mrg      commitment not to enforce a patent against the party.
   4761   1.3  mrg 
   4762   1.3  mrg      If you convey a covered work, knowingly relying on a patent
   4763   1.3  mrg      license, and the Corresponding Source of the work is not available
   4764   1.3  mrg      for anyone to copy, free of charge and under the terms of this
   4765   1.3  mrg      License, through a publicly available network server or other
   4766   1.3  mrg      readily accessible means, then you must either (1) cause the
   4767   1.3  mrg      Corresponding Source to be so available, or (2) arrange to deprive
   4768   1.3  mrg      yourself of the benefit of the patent license for this particular
   4769   1.3  mrg      work, or (3) arrange, in a manner consistent with the requirements
   4770   1.3  mrg      of this License, to extend the patent license to downstream
   4771   1.3  mrg      recipients.  "Knowingly relying" means you have actual knowledge
   4772   1.3  mrg      that, but for the patent license, your conveying the covered work
   4773   1.3  mrg      in a country, or your recipient's use of the covered work in a
   4774   1.3  mrg      country, would infringe one or more identifiable patents in that
   4775   1.3  mrg      country that you have reason to believe are valid.
   4776   1.3  mrg 
   4777   1.3  mrg      If, pursuant to or in connection with a single transaction or
   4778   1.3  mrg      arrangement, you convey, or propagate by procuring conveyance of, a
   4779   1.3  mrg      covered work, and grant a patent license to some of the parties
   4780   1.3  mrg      receiving the covered work authorizing them to use, propagate,
   4781   1.3  mrg      modify or convey a specific copy of the covered work, then the
   4782   1.3  mrg      patent license you grant is automatically extended to all
   4783   1.3  mrg      recipients of the covered work and works based on it.
   4784   1.3  mrg 
   4785   1.3  mrg      A patent license is "discriminatory" if it does not include within
   4786   1.3  mrg      the scope of its coverage, prohibits the exercise of, or is
   4787   1.3  mrg      conditioned on the non-exercise of one or more of the rights that
   4788   1.3  mrg      are specifically granted under this License.  You may not convey a
   4789   1.3  mrg      covered work if you are a party to an arrangement with a third
   4790  1.11  mrg      party that is in the business of distributing software, under which
   4791  1.11  mrg      you make payment to the third party based on the extent of your
   4792  1.11  mrg      activity of conveying the work, and under which the third party
   4793  1.11  mrg      grants, to any of the parties who would receive the covered work
   4794  1.11  mrg      from you, a discriminatory patent license (a) in connection with
   4795  1.11  mrg      copies of the covered work conveyed by you (or copies made from
   4796  1.11  mrg      those copies), or (b) primarily for and in connection with specific
   4797  1.11  mrg      products or compilations that contain the covered work, unless you
   4798  1.11  mrg      entered into that arrangement, or that patent license was granted,
   4799  1.11  mrg      prior to 28 March 2007.
   4800   1.3  mrg 
   4801   1.3  mrg      Nothing in this License shall be construed as excluding or limiting
   4802   1.3  mrg      any implied license or other defenses to infringement that may
   4803   1.3  mrg      otherwise be available to you under applicable patent law.
   4804   1.3  mrg 
   4805  1.11  mrg   12. No Surrender of Others' Freedom.
   4806   1.3  mrg 
   4807  1.11  mrg      If conditions are imposed on you (whether by court order, agreement
   4808  1.11  mrg      or otherwise) that contradict the conditions of this License, they
   4809  1.11  mrg      do not excuse you from the conditions of this License.  If you
   4810  1.11  mrg      cannot convey a covered work so as to satisfy simultaneously your
   4811  1.11  mrg      obligations under this License and any other pertinent obligations,
   4812  1.11  mrg      then as a consequence you may not convey it at all.  For example,
   4813  1.11  mrg      if you agree to terms that obligate you to collect a royalty for
   4814  1.11  mrg      further conveying from those to whom you convey the Program, the
   4815  1.11  mrg      only way you could satisfy both those terms and this License would
   4816  1.11  mrg      be to refrain entirely from conveying the Program.
   4817   1.3  mrg 
   4818  1.11  mrg   13. Use with the GNU Affero General Public License.
   4819   1.3  mrg 
   4820   1.3  mrg      Notwithstanding any other provision of this License, you have
   4821   1.3  mrg      permission to link or combine any covered work with a work licensed
   4822   1.3  mrg      under version 3 of the GNU Affero General Public License into a
   4823   1.3  mrg      single combined work, and to convey the resulting work.  The terms
   4824   1.3  mrg      of this License will continue to apply to the part which is the
   4825   1.3  mrg      covered work, but the special requirements of the GNU Affero
   4826   1.3  mrg      General Public License, section 13, concerning interaction through
   4827   1.3  mrg      a network will apply to the combination as such.
   4828   1.3  mrg 
   4829  1.11  mrg   14. Revised Versions of this License.
   4830   1.3  mrg 
   4831   1.3  mrg      The Free Software Foundation may publish revised and/or new
   4832  1.11  mrg      versions of the GNU General Public License from time to time.  Such
   4833  1.11  mrg      new versions will be similar in spirit to the present version, but
   4834  1.11  mrg      may differ in detail to address new problems or concerns.
   4835   1.1  mrg 
   4836   1.1  mrg      Each version is given a distinguishing version number.  If the
   4837   1.3  mrg      Program specifies that a certain numbered version of the GNU
   4838   1.3  mrg      General Public License "or any later version" applies to it, you
   4839   1.3  mrg      have the option of following the terms and conditions either of
   4840  1.11  mrg      that numbered version or of any later version published by the Free
   4841  1.11  mrg      Software Foundation.  If the Program does not specify a version
   4842  1.11  mrg      number of the GNU General Public License, you may choose any
   4843  1.11  mrg      version ever published by the Free Software Foundation.
   4844   1.1  mrg 
   4845   1.3  mrg      If the Program specifies that a proxy can decide which future
   4846   1.3  mrg      versions of the GNU General Public License can be used, that
   4847   1.3  mrg      proxy's public statement of acceptance of a version permanently
   4848   1.3  mrg      authorizes you to choose that version for the Program.
   4849   1.3  mrg 
   4850   1.3  mrg      Later license versions may give you additional or different
   4851   1.3  mrg      permissions.  However, no additional obligations are imposed on any
   4852   1.3  mrg      author or copyright holder as a result of your choosing to follow a
   4853   1.3  mrg      later version.
   4854   1.3  mrg 
   4855  1.11  mrg   15. Disclaimer of Warranty.
   4856   1.3  mrg 
   4857   1.3  mrg      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   4858  1.11  mrg      APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   4859   1.3  mrg      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   4860   1.3  mrg      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   4861   1.3  mrg      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   4862  1.11  mrg      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
   4863   1.3  mrg      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   4864   1.3  mrg      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   4865   1.3  mrg      NECESSARY SERVICING, REPAIR OR CORRECTION.
   4866   1.3  mrg 
   4867  1.11  mrg   16. Limitation of Liability.
   4868   1.3  mrg 
   4869   1.3  mrg      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   4870   1.3  mrg      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   4871  1.11  mrg      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
   4872  1.11  mrg      DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   4873   1.3  mrg      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   4874   1.3  mrg      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   4875   1.3  mrg      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   4876   1.3  mrg      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   4877   1.3  mrg      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   4878   1.3  mrg      THE POSSIBILITY OF SUCH DAMAGES.
   4879   1.3  mrg 
   4880  1.11  mrg   17. Interpretation of Sections 15 and 16.
   4881   1.3  mrg 
   4882   1.3  mrg      If the disclaimer of warranty and limitation of liability provided
   4883   1.3  mrg      above cannot be given local legal effect according to their terms,
   4884   1.3  mrg      reviewing courts shall apply local law that most closely
   4885   1.3  mrg      approximates an absolute waiver of all civil liability in
   4886   1.3  mrg      connection with the Program, unless a warranty or assumption of
   4887   1.3  mrg      liability accompanies a copy of the Program in return for a fee.
   4888   1.1  mrg 
   4889   1.3  mrg END OF TERMS AND CONDITIONS
   4890   1.3  mrg ===========================
   4891   1.3  mrg 
   4892   1.3  mrg How to Apply These Terms to Your New Programs
   4893   1.3  mrg =============================================
   4894   1.1  mrg 
   4895   1.1  mrg If you develop a new program, and you want it to be of the greatest
   4896   1.1  mrg possible use to the public, the best way to achieve this is to make it
   4897   1.1  mrg free software which everyone can redistribute and change under these
   4898   1.1  mrg terms.
   4899   1.1  mrg 
   4900   1.1  mrg    To do so, attach the following notices to the program.  It is safest
   4901   1.1  mrg to attach them to the start of each source file to most effectively
   4902   1.3  mrg state the exclusion of warranty; and each file should have at least the
   4903   1.3  mrg "copyright" line and a pointer to where the full notice is found.
   4904   1.1  mrg 
   4905   1.1  mrg      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   4906   1.3  mrg      Copyright (C) YEAR NAME OF AUTHOR
   4907   1.1  mrg 
   4908   1.3  mrg      This program is free software: you can redistribute it and/or modify
   4909   1.1  mrg      it under the terms of the GNU General Public License as published by
   4910   1.3  mrg      the Free Software Foundation, either version 3 of the License, or (at
   4911   1.3  mrg      your option) any later version.
   4912   1.1  mrg 
   4913   1.3  mrg      This program is distributed in the hope that it will be useful, but
   4914   1.3  mrg      WITHOUT ANY WARRANTY; without even the implied warranty of
   4915   1.3  mrg      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   4916   1.3  mrg      General Public License for more details.
   4917   1.1  mrg 
   4918   1.1  mrg      You should have received a copy of the GNU General Public License
   4919  1.15  mrg      along with this program.  If not, see <https://www.gnu.org/licenses/>.
   4920   1.1  mrg 
   4921   1.1  mrg    Also add information on how to contact you by electronic and paper
   4922   1.1  mrg mail.
   4923   1.1  mrg 
   4924   1.3  mrg    If the program does terminal interaction, make it output a short
   4925   1.3  mrg notice like this when it starts in an interactive mode:
   4926   1.1  mrg 
   4927   1.3  mrg      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   4928  1.11  mrg      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
   4929   1.1  mrg      This is free software, and you are welcome to redistribute it
   4930  1.11  mrg      under certain conditions; type 'show c' for details.
   4931   1.1  mrg 
   4932  1.11  mrg    The hypothetical commands 'show w' and 'show c' should show the
   4933   1.3  mrg appropriate parts of the General Public License.  Of course, your
   4934   1.3  mrg program's commands might be different; for a GUI interface, you would
   4935   1.3  mrg use an "about box".
   4936   1.1  mrg 
   4937   1.1  mrg    You should also get your employer (if you work as a programmer) or
   4938   1.3  mrg school, if any, to sign a "copyright disclaimer" for the program, if
   4939   1.3  mrg necessary.  For more information on this, and how to apply and follow
   4940  1.15  mrg the GNU GPL, see <https://www.gnu.org/licenses/>.
   4941   1.1  mrg 
   4942   1.3  mrg    The GNU General Public License does not permit incorporating your
   4943   1.1  mrg program into proprietary programs.  If your program is a subroutine
   4944   1.1  mrg library, you may consider it more useful to permit linking proprietary
   4945   1.1  mrg applications with the library.  If this is what you want to do, use the
   4946   1.3  mrg GNU Lesser General Public License instead of this License.  But first,
   4947  1.13  mrg please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
   4948   1.1  mrg 
   4949   1.1  mrg 
   4950   1.1  mrg File: libgomp.info,  Node: GNU Free Documentation License,  Next: Funding,  Prev: Copying,  Up: Top
   4951   1.1  mrg 
   4952   1.1  mrg GNU Free Documentation License
   4953   1.1  mrg ******************************
   4954   1.1  mrg 
   4955   1.3  mrg                      Version 1.3, 3 November 2008
   4956   1.1  mrg 
   4957   1.3  mrg      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
   4958  1.15  mrg      <https://fsf.org/>
   4959   1.1  mrg 
   4960   1.1  mrg      Everyone is permitted to copy and distribute verbatim copies
   4961   1.1  mrg      of this license document, but changing it is not allowed.
   4962   1.1  mrg 
   4963   1.1  mrg   0. PREAMBLE
   4964   1.1  mrg 
   4965   1.1  mrg      The purpose of this License is to make a manual, textbook, or other
   4966   1.1  mrg      functional and useful document "free" in the sense of freedom: to
   4967   1.1  mrg      assure everyone the effective freedom to copy and redistribute it,
   4968   1.1  mrg      with or without modifying it, either commercially or
   4969   1.1  mrg      noncommercially.  Secondarily, this License preserves for the
   4970   1.1  mrg      author and publisher a way to get credit for their work, while not
   4971   1.1  mrg      being considered responsible for modifications made by others.
   4972   1.1  mrg 
   4973   1.1  mrg      This License is a kind of "copyleft", which means that derivative
   4974   1.1  mrg      works of the document must themselves be free in the same sense.
   4975   1.1  mrg      It complements the GNU General Public License, which is a copyleft
   4976   1.1  mrg      license designed for free software.
   4977   1.1  mrg 
   4978   1.1  mrg      We have designed this License in order to use it for manuals for
   4979   1.1  mrg      free software, because free software needs free documentation: a
   4980   1.1  mrg      free program should come with manuals providing the same freedoms
   4981   1.1  mrg      that the software does.  But this License is not limited to
   4982   1.1  mrg      software manuals; it can be used for any textual work, regardless
   4983  1.11  mrg      of subject matter or whether it is published as a printed book.  We
   4984  1.11  mrg      recommend this License principally for works whose purpose is
   4985   1.1  mrg      instruction or reference.
   4986   1.1  mrg 
   4987   1.1  mrg   1. APPLICABILITY AND DEFINITIONS
   4988   1.1  mrg 
   4989   1.1  mrg      This License applies to any manual or other work, in any medium,
   4990  1.11  mrg      that contains a notice placed by the copyright holder saying it can
   4991  1.11  mrg      be distributed under the terms of this License.  Such a notice
   4992   1.1  mrg      grants a world-wide, royalty-free license, unlimited in duration,
   4993   1.1  mrg      to use that work under the conditions stated herein.  The
   4994   1.1  mrg      "Document", below, refers to any such manual or work.  Any member
   4995  1.11  mrg      of the public is a licensee, and is addressed as "you".  You accept
   4996  1.11  mrg      the license if you copy, modify or distribute the work in a way
   4997  1.11  mrg      requiring permission under copyright law.
   4998   1.1  mrg 
   4999   1.1  mrg      A "Modified Version" of the Document means any work containing the
   5000   1.1  mrg      Document or a portion of it, either copied verbatim, or with
   5001   1.1  mrg      modifications and/or translated into another language.
   5002   1.1  mrg 
   5003   1.1  mrg      A "Secondary Section" is a named appendix or a front-matter section
   5004   1.1  mrg      of the Document that deals exclusively with the relationship of the
   5005   1.1  mrg      publishers or authors of the Document to the Document's overall
   5006   1.1  mrg      subject (or to related matters) and contains nothing that could
   5007   1.1  mrg      fall directly within that overall subject.  (Thus, if the Document
   5008   1.1  mrg      is in part a textbook of mathematics, a Secondary Section may not
   5009   1.1  mrg      explain any mathematics.)  The relationship could be a matter of
   5010   1.1  mrg      historical connection with the subject or with related matters, or
   5011   1.1  mrg      of legal, commercial, philosophical, ethical or political position
   5012   1.1  mrg      regarding them.
   5013   1.1  mrg 
   5014   1.1  mrg      The "Invariant Sections" are certain Secondary Sections whose
   5015  1.11  mrg      titles are designated, as being those of Invariant Sections, in the
   5016  1.11  mrg      notice that says that the Document is released under this License.
   5017  1.11  mrg      If a section does not fit the above definition of Secondary then it
   5018  1.11  mrg      is not allowed to be designated as Invariant.  The Document may
   5019  1.11  mrg      contain zero Invariant Sections.  If the Document does not identify
   5020  1.11  mrg      any Invariant Sections then there are none.
   5021   1.1  mrg 
   5022   1.1  mrg      The "Cover Texts" are certain short passages of text that are
   5023   1.1  mrg      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   5024   1.1  mrg      that says that the Document is released under this License.  A
   5025   1.1  mrg      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   5026   1.1  mrg      be at most 25 words.
   5027   1.1  mrg 
   5028   1.1  mrg      A "Transparent" copy of the Document means a machine-readable copy,
   5029   1.1  mrg      represented in a format whose specification is available to the
   5030   1.1  mrg      general public, that is suitable for revising the document
   5031  1.11  mrg      straightforwardly with generic text editors or (for images composed
   5032  1.11  mrg      of pixels) generic paint programs or (for drawings) some widely
   5033  1.11  mrg      available drawing editor, and that is suitable for input to text
   5034  1.11  mrg      formatters or for automatic translation to a variety of formats
   5035  1.11  mrg      suitable for input to text formatters.  A copy made in an otherwise
   5036  1.11  mrg      Transparent file format whose markup, or absence of markup, has
   5037  1.11  mrg      been arranged to thwart or discourage subsequent modification by
   5038  1.11  mrg      readers is not Transparent.  An image format is not Transparent if
   5039  1.11  mrg      used for any substantial amount of text.  A copy that is not
   5040  1.11  mrg      "Transparent" is called "Opaque".
   5041   1.1  mrg 
   5042   1.1  mrg      Examples of suitable formats for Transparent copies include plain
   5043   1.1  mrg      ASCII without markup, Texinfo input format, LaTeX input format,
   5044  1.11  mrg      SGML or XML using a publicly available DTD, and standard-conforming
   5045  1.11  mrg      simple HTML, PostScript or PDF designed for human modification.
   5046  1.11  mrg      Examples of transparent image formats include PNG, XCF and JPG.
   5047  1.11  mrg      Opaque formats include proprietary formats that can be read and
   5048  1.11  mrg      edited only by proprietary word processors, SGML or XML for which
   5049  1.11  mrg      the DTD and/or processing tools are not generally available, and
   5050  1.11  mrg      the machine-generated HTML, PostScript or PDF produced by some word
   5051  1.11  mrg      processors for output purposes only.
   5052   1.1  mrg 
   5053   1.1  mrg      The "Title Page" means, for a printed book, the title page itself,
   5054   1.1  mrg      plus such following pages as are needed to hold, legibly, the
   5055   1.1  mrg      material this License requires to appear in the title page.  For
   5056   1.1  mrg      works in formats which do not have any title page as such, "Title
   5057   1.1  mrg      Page" means the text near the most prominent appearance of the
   5058   1.1  mrg      work's title, preceding the beginning of the body of the text.
   5059   1.1  mrg 
   5060   1.3  mrg      The "publisher" means any person or entity that distributes copies
   5061   1.3  mrg      of the Document to the public.
   5062   1.3  mrg 
   5063   1.1  mrg      A section "Entitled XYZ" means a named subunit of the Document
   5064   1.1  mrg      whose title either is precisely XYZ or contains XYZ in parentheses
   5065   1.1  mrg      following text that translates XYZ in another language.  (Here XYZ
   5066   1.1  mrg      stands for a specific section name mentioned below, such as
   5067   1.1  mrg      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   5068   1.1  mrg      To "Preserve the Title" of such a section when you modify the
   5069   1.1  mrg      Document means that it remains a section "Entitled XYZ" according
   5070   1.1  mrg      to this definition.
   5071   1.1  mrg 
   5072   1.1  mrg      The Document may include Warranty Disclaimers next to the notice
   5073   1.1  mrg      which states that this License applies to the Document.  These
   5074   1.1  mrg      Warranty Disclaimers are considered to be included by reference in
   5075   1.1  mrg      this License, but only as regards disclaiming warranties: any other
   5076   1.1  mrg      implication that these Warranty Disclaimers may have is void and
   5077   1.1  mrg      has no effect on the meaning of this License.
   5078   1.1  mrg 
   5079   1.1  mrg   2. VERBATIM COPYING
   5080   1.1  mrg 
   5081   1.1  mrg      You may copy and distribute the Document in any medium, either
   5082   1.1  mrg      commercially or noncommercially, provided that this License, the
   5083   1.1  mrg      copyright notices, and the license notice saying this License
   5084   1.1  mrg      applies to the Document are reproduced in all copies, and that you
   5085   1.1  mrg      add no other conditions whatsoever to those of this License.  You
   5086   1.1  mrg      may not use technical measures to obstruct or control the reading
   5087   1.1  mrg      or further copying of the copies you make or distribute.  However,
   5088   1.1  mrg      you may accept compensation in exchange for copies.  If you
   5089  1.11  mrg      distribute a large enough number of copies you must also follow the
   5090  1.11  mrg      conditions in section 3.
   5091   1.1  mrg 
   5092   1.1  mrg      You may also lend copies, under the same conditions stated above,
   5093   1.1  mrg      and you may publicly display copies.
   5094   1.1  mrg 
   5095   1.1  mrg   3. COPYING IN QUANTITY
   5096   1.1  mrg 
   5097   1.1  mrg      If you publish printed copies (or copies in media that commonly
   5098   1.1  mrg      have printed covers) of the Document, numbering more than 100, and
   5099   1.1  mrg      the Document's license notice requires Cover Texts, you must
   5100   1.1  mrg      enclose the copies in covers that carry, clearly and legibly, all
   5101   1.1  mrg      these Cover Texts: Front-Cover Texts on the front cover, and
   5102   1.1  mrg      Back-Cover Texts on the back cover.  Both covers must also clearly
   5103   1.1  mrg      and legibly identify you as the publisher of these copies.  The
   5104  1.11  mrg      front cover must present the full title with all words of the title
   5105  1.11  mrg      equally prominent and visible.  You may add other material on the
   5106  1.11  mrg      covers in addition.  Copying with changes limited to the covers, as
   5107  1.11  mrg      long as they preserve the title of the Document and satisfy these
   5108  1.11  mrg      conditions, can be treated as verbatim copying in other respects.
   5109   1.1  mrg 
   5110   1.1  mrg      If the required texts for either cover are too voluminous to fit
   5111   1.1  mrg      legibly, you should put the first ones listed (as many as fit
   5112   1.1  mrg      reasonably) on the actual cover, and continue the rest onto
   5113   1.1  mrg      adjacent pages.
   5114   1.1  mrg 
   5115   1.1  mrg      If you publish or distribute Opaque copies of the Document
   5116  1.11  mrg      numbering more than 100, you must either include a machine-readable
   5117  1.11  mrg      Transparent copy along with each Opaque copy, or state in or with
   5118  1.11  mrg      each Opaque copy a computer-network location from which the general
   5119  1.11  mrg      network-using public has access to download using public-standard
   5120  1.11  mrg      network protocols a complete Transparent copy of the Document, free
   5121  1.11  mrg      of added material.  If you use the latter option, you must take
   5122  1.11  mrg      reasonably prudent steps, when you begin distribution of Opaque
   5123  1.11  mrg      copies in quantity, to ensure that this Transparent copy will
   5124  1.11  mrg      remain thus accessible at the stated location until at least one
   5125  1.11  mrg      year after the last time you distribute an Opaque copy (directly or
   5126  1.11  mrg      through your agents or retailers) of that edition to the public.
   5127   1.1  mrg 
   5128   1.1  mrg      It is requested, but not required, that you contact the authors of
   5129  1.11  mrg      the Document well before redistributing any large number of copies,
   5130  1.11  mrg      to give them a chance to provide you with an updated version of the
   5131  1.11  mrg      Document.
   5132   1.1  mrg 
   5133   1.1  mrg   4. MODIFICATIONS
   5134   1.1  mrg 
   5135   1.1  mrg      You may copy and distribute a Modified Version of the Document
   5136   1.1  mrg      under the conditions of sections 2 and 3 above, provided that you
   5137  1.11  mrg      release the Modified Version under precisely this License, with the
   5138  1.11  mrg      Modified Version filling the role of the Document, thus licensing
   5139  1.11  mrg      distribution and modification of the Modified Version to whoever
   5140  1.11  mrg      possesses a copy of it.  In addition, you must do these things in
   5141  1.11  mrg      the Modified Version:
   5142   1.1  mrg 
   5143   1.1  mrg        A. Use in the Title Page (and on the covers, if any) a title
   5144  1.11  mrg           distinct from that of the Document, and from those of previous
   5145  1.11  mrg           versions (which should, if there were any, be listed in the
   5146  1.11  mrg           History section of the Document).  You may use the same title
   5147  1.11  mrg           as a previous version if the original publisher of that
   5148  1.11  mrg           version gives permission.
   5149   1.1  mrg 
   5150   1.1  mrg        B. List on the Title Page, as authors, one or more persons or
   5151   1.1  mrg           entities responsible for authorship of the modifications in
   5152   1.1  mrg           the Modified Version, together with at least five of the
   5153   1.1  mrg           principal authors of the Document (all of its principal
   5154   1.1  mrg           authors, if it has fewer than five), unless they release you
   5155   1.1  mrg           from this requirement.
   5156   1.1  mrg 
   5157   1.1  mrg        C. State on the Title page the name of the publisher of the
   5158   1.1  mrg           Modified Version, as the publisher.
   5159   1.1  mrg 
   5160   1.1  mrg        D. Preserve all the copyright notices of the Document.
   5161   1.1  mrg 
   5162   1.1  mrg        E. Add an appropriate copyright notice for your modifications
   5163   1.1  mrg           adjacent to the other copyright notices.
   5164   1.1  mrg 
   5165   1.1  mrg        F. Include, immediately after the copyright notices, a license
   5166   1.1  mrg           notice giving the public permission to use the Modified
   5167   1.1  mrg           Version under the terms of this License, in the form shown in
   5168   1.1  mrg           the Addendum below.
   5169   1.1  mrg 
   5170   1.1  mrg        G. Preserve in that license notice the full lists of Invariant
   5171   1.1  mrg           Sections and required Cover Texts given in the Document's
   5172   1.1  mrg           license notice.
   5173   1.1  mrg 
   5174   1.1  mrg        H. Include an unaltered copy of this License.
   5175   1.1  mrg 
   5176   1.1  mrg        I. Preserve the section Entitled "History", Preserve its Title,
   5177   1.1  mrg           and add to it an item stating at least the title, year, new
   5178  1.11  mrg           authors, and publisher of the Modified Version as given on the
   5179  1.11  mrg           Title Page.  If there is no section Entitled "History" in the
   5180  1.11  mrg           Document, create one stating the title, year, authors, and
   5181  1.11  mrg           publisher of the Document as given on its Title Page, then add
   5182  1.11  mrg           an item describing the Modified Version as stated in the
   5183  1.11  mrg           previous sentence.
   5184   1.1  mrg 
   5185   1.1  mrg        J. Preserve the network location, if any, given in the Document
   5186   1.1  mrg           for public access to a Transparent copy of the Document, and
   5187   1.1  mrg           likewise the network locations given in the Document for
   5188  1.11  mrg           previous versions it was based on.  These may be placed in the
   5189  1.11  mrg           "History" section.  You may omit a network location for a work
   5190  1.11  mrg           that was published at least four years before the Document
   5191  1.11  mrg           itself, or if the original publisher of the version it refers
   5192  1.11  mrg           to gives permission.
   5193   1.1  mrg 
   5194   1.1  mrg        K. For any section Entitled "Acknowledgements" or "Dedications",
   5195  1.11  mrg           Preserve the Title of the section, and preserve in the section
   5196  1.11  mrg           all the substance and tone of each of the contributor
   5197   1.1  mrg           acknowledgements and/or dedications given therein.
   5198   1.1  mrg 
   5199  1.11  mrg        L. Preserve all the Invariant Sections of the Document, unaltered
   5200  1.11  mrg           in their text and in their titles.  Section numbers or the
   5201  1.11  mrg           equivalent are not considered part of the section titles.
   5202   1.1  mrg 
   5203   1.1  mrg        M. Delete any section Entitled "Endorsements".  Such a section
   5204   1.1  mrg           may not be included in the Modified Version.
   5205   1.1  mrg 
   5206   1.1  mrg        N. Do not retitle any existing section to be Entitled
   5207   1.1  mrg           "Endorsements" or to conflict in title with any Invariant
   5208   1.1  mrg           Section.
   5209   1.1  mrg 
   5210   1.1  mrg        O. Preserve any Warranty Disclaimers.
   5211   1.1  mrg 
   5212   1.1  mrg      If the Modified Version includes new front-matter sections or
   5213   1.1  mrg      appendices that qualify as Secondary Sections and contain no
   5214  1.11  mrg      material copied from the Document, you may at your option designate
   5215  1.11  mrg      some or all of these sections as invariant.  To do this, add their
   5216  1.11  mrg      titles to the list of Invariant Sections in the Modified Version's
   5217  1.11  mrg      license notice.  These titles must be distinct from any other
   5218  1.11  mrg      section titles.
   5219   1.1  mrg 
   5220   1.1  mrg      You may add a section Entitled "Endorsements", provided it contains
   5221   1.1  mrg      nothing but endorsements of your Modified Version by various
   5222   1.1  mrg      parties--for example, statements of peer review or that the text
   5223   1.1  mrg      has been approved by an organization as the authoritative
   5224   1.1  mrg      definition of a standard.
   5225   1.1  mrg 
   5226   1.1  mrg      You may add a passage of up to five words as a Front-Cover Text,
   5227  1.11  mrg      and a passage of up to 25 words as a Back-Cover Text, to the end of
   5228  1.11  mrg      the list of Cover Texts in the Modified Version.  Only one passage
   5229  1.11  mrg      of Front-Cover Text and one of Back-Cover Text may be added by (or
   5230  1.11  mrg      through arrangements made by) any one entity.  If the Document
   5231  1.11  mrg      already includes a cover text for the same cover, previously added
   5232  1.11  mrg      by you or by arrangement made by the same entity you are acting on
   5233  1.11  mrg      behalf of, you may not add another; but you may replace the old
   5234  1.11  mrg      one, on explicit permission from the previous publisher that added
   5235  1.11  mrg      the old one.
   5236   1.1  mrg 
   5237   1.1  mrg      The author(s) and publisher(s) of the Document do not by this
   5238   1.1  mrg      License give permission to use their names for publicity for or to
   5239   1.1  mrg      assert or imply endorsement of any Modified Version.
   5240   1.1  mrg 
   5241   1.1  mrg   5. COMBINING DOCUMENTS
   5242   1.1  mrg 
   5243   1.1  mrg      You may combine the Document with other documents released under
   5244   1.1  mrg      this License, under the terms defined in section 4 above for
   5245  1.11  mrg      modified versions, provided that you include in the combination all
   5246  1.11  mrg      of the Invariant Sections of all of the original documents,
   5247   1.1  mrg      unmodified, and list them all as Invariant Sections of your
   5248   1.1  mrg      combined work in its license notice, and that you preserve all
   5249   1.1  mrg      their Warranty Disclaimers.
   5250   1.1  mrg 
   5251   1.1  mrg      The combined work need only contain one copy of this License, and
   5252   1.1  mrg      multiple identical Invariant Sections may be replaced with a single
   5253   1.1  mrg      copy.  If there are multiple Invariant Sections with the same name
   5254   1.1  mrg      but different contents, make the title of each such section unique
   5255   1.1  mrg      by adding at the end of it, in parentheses, the name of the
   5256   1.1  mrg      original author or publisher of that section if known, or else a
   5257   1.1  mrg      unique number.  Make the same adjustment to the section titles in
   5258   1.1  mrg      the list of Invariant Sections in the license notice of the
   5259   1.1  mrg      combined work.
   5260   1.1  mrg 
   5261   1.1  mrg      In the combination, you must combine any sections Entitled
   5262   1.1  mrg      "History" in the various original documents, forming one section
   5263   1.1  mrg      Entitled "History"; likewise combine any sections Entitled
   5264   1.1  mrg      "Acknowledgements", and any sections Entitled "Dedications".  You
   5265   1.1  mrg      must delete all sections Entitled "Endorsements."
   5266   1.1  mrg 
   5267   1.1  mrg   6. COLLECTIONS OF DOCUMENTS
   5268   1.1  mrg 
   5269   1.1  mrg      You may make a collection consisting of the Document and other
   5270   1.1  mrg      documents released under this License, and replace the individual
   5271   1.1  mrg      copies of this License in the various documents with a single copy
   5272   1.1  mrg      that is included in the collection, provided that you follow the
   5273  1.11  mrg      rules of this License for verbatim copying of each of the documents
   5274  1.11  mrg      in all other respects.
   5275   1.1  mrg 
   5276   1.1  mrg      You may extract a single document from such a collection, and
   5277   1.1  mrg      distribute it individually under this License, provided you insert
   5278  1.11  mrg      a copy of this License into the extracted document, and follow this
   5279  1.11  mrg      License in all other respects regarding verbatim copying of that
   5280  1.11  mrg      document.
   5281   1.1  mrg 
   5282   1.1  mrg   7. AGGREGATION WITH INDEPENDENT WORKS
   5283   1.1  mrg 
   5284   1.1  mrg      A compilation of the Document or its derivatives with other
   5285  1.11  mrg      separate and independent documents or works, in or on a volume of a
   5286  1.11  mrg      storage or distribution medium, is called an "aggregate" if the
   5287   1.1  mrg      copyright resulting from the compilation is not used to limit the
   5288   1.1  mrg      legal rights of the compilation's users beyond what the individual
   5289   1.1  mrg      works permit.  When the Document is included in an aggregate, this
   5290   1.1  mrg      License does not apply to the other works in the aggregate which
   5291   1.1  mrg      are not themselves derivative works of the Document.
   5292   1.1  mrg 
   5293   1.1  mrg      If the Cover Text requirement of section 3 is applicable to these
   5294   1.1  mrg      copies of the Document, then if the Document is less than one half
   5295   1.1  mrg      of the entire aggregate, the Document's Cover Texts may be placed
   5296   1.1  mrg      on covers that bracket the Document within the aggregate, or the
   5297   1.1  mrg      electronic equivalent of covers if the Document is in electronic
   5298   1.1  mrg      form.  Otherwise they must appear on printed covers that bracket
   5299   1.1  mrg      the whole aggregate.
   5300   1.1  mrg 
   5301   1.1  mrg   8. TRANSLATION
   5302   1.1  mrg 
   5303   1.1  mrg      Translation is considered a kind of modification, so you may
   5304   1.1  mrg      distribute translations of the Document under the terms of section
   5305   1.1  mrg      4.  Replacing Invariant Sections with translations requires special
   5306   1.1  mrg      permission from their copyright holders, but you may include
   5307   1.1  mrg      translations of some or all Invariant Sections in addition to the
   5308   1.1  mrg      original versions of these Invariant Sections.  You may include a
   5309   1.1  mrg      translation of this License, and all the license notices in the
   5310   1.1  mrg      Document, and any Warranty Disclaimers, provided that you also
   5311   1.1  mrg      include the original English version of this License and the
   5312   1.1  mrg      original versions of those notices and disclaimers.  In case of a
   5313   1.1  mrg      disagreement between the translation and the original version of
   5314   1.1  mrg      this License or a notice or disclaimer, the original version will
   5315   1.1  mrg      prevail.
   5316   1.1  mrg 
   5317   1.1  mrg      If a section in the Document is Entitled "Acknowledgements",
   5318   1.1  mrg      "Dedications", or "History", the requirement (section 4) to
   5319   1.1  mrg      Preserve its Title (section 1) will typically require changing the
   5320   1.1  mrg      actual title.
   5321   1.1  mrg 
   5322   1.1  mrg   9. TERMINATION
   5323   1.1  mrg 
   5324   1.1  mrg      You may not copy, modify, sublicense, or distribute the Document
   5325   1.3  mrg      except as expressly provided under this License.  Any attempt
   5326   1.3  mrg      otherwise to copy, modify, sublicense, or distribute it is void,
   5327   1.3  mrg      and will automatically terminate your rights under this License.
   5328   1.3  mrg 
   5329   1.3  mrg      However, if you cease all violation of this License, then your
   5330   1.3  mrg      license from a particular copyright holder is reinstated (a)
   5331  1.11  mrg      provisionally, unless and until the copyright holder explicitly and
   5332  1.11  mrg      finally terminates your license, and (b) permanently, if the
   5333   1.3  mrg      copyright holder fails to notify you of the violation by some
   5334   1.3  mrg      reasonable means prior to 60 days after the cessation.
   5335   1.3  mrg 
   5336   1.3  mrg      Moreover, your license from a particular copyright holder is
   5337   1.3  mrg      reinstated permanently if the copyright holder notifies you of the
   5338   1.3  mrg      violation by some reasonable means, this is the first time you have
   5339   1.3  mrg      received notice of violation of this License (for any work) from
   5340   1.3  mrg      that copyright holder, and you cure the violation prior to 30 days
   5341   1.3  mrg      after your receipt of the notice.
   5342   1.3  mrg 
   5343   1.3  mrg      Termination of your rights under this section does not terminate
   5344  1.11  mrg      the licenses of parties who have received copies or rights from you
   5345  1.11  mrg      under this License.  If your rights have been terminated and not
   5346  1.11  mrg      permanently reinstated, receipt of a copy of some or all of the
   5347  1.11  mrg      same material does not give you any rights to use it.
   5348   1.1  mrg 
   5349  1.11  mrg   10. FUTURE REVISIONS OF THIS LICENSE
   5350   1.1  mrg 
   5351   1.1  mrg      The Free Software Foundation may publish new, revised versions of
   5352   1.1  mrg      the GNU Free Documentation License from time to time.  Such new
   5353   1.1  mrg      versions will be similar in spirit to the present version, but may
   5354   1.1  mrg      differ in detail to address new problems or concerns.  See
   5355  1.15  mrg      <https://www.gnu.org/copyleft/>.
   5356   1.1  mrg 
   5357   1.1  mrg      Each version of the License is given a distinguishing version
   5358   1.1  mrg      number.  If the Document specifies that a particular numbered
   5359   1.1  mrg      version of this License "or any later version" applies to it, you
   5360   1.1  mrg      have the option of following the terms and conditions either of
   5361   1.1  mrg      that specified version or of any later version that has been
   5362  1.11  mrg      published (not as a draft) by the Free Software Foundation.  If the
   5363  1.11  mrg      Document does not specify a version number of this License, you may
   5364  1.11  mrg      choose any version ever published (not as a draft) by the Free
   5365  1.11  mrg      Software Foundation.  If the Document specifies that a proxy can
   5366  1.11  mrg      decide which future versions of this License can be used, that
   5367   1.3  mrg      proxy's public statement of acceptance of a version permanently
   5368   1.3  mrg      authorizes you to choose that version for the Document.
   5369   1.3  mrg 
   5370  1.11  mrg   11. RELICENSING
   5371   1.3  mrg 
   5372   1.3  mrg      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
   5373   1.3  mrg      World Wide Web server that publishes copyrightable works and also
   5374   1.3  mrg      provides prominent facilities for anybody to edit those works.  A
   5375   1.3  mrg      public wiki that anybody can edit is an example of such a server.
   5376   1.3  mrg      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
   5377   1.3  mrg      site means any set of copyrightable works thus published on the MMC
   5378   1.3  mrg      site.
   5379   1.3  mrg 
   5380   1.3  mrg      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
   5381   1.3  mrg      license published by Creative Commons Corporation, a not-for-profit
   5382   1.3  mrg      corporation with a principal place of business in San Francisco,
   5383   1.3  mrg      California, as well as future copyleft versions of that license
   5384   1.3  mrg      published by that same organization.
   5385   1.3  mrg 
   5386   1.3  mrg      "Incorporate" means to publish or republish a Document, in whole or
   5387   1.3  mrg      in part, as part of another Document.
   5388   1.3  mrg 
   5389   1.3  mrg      An MMC is "eligible for relicensing" if it is licensed under this
   5390   1.3  mrg      License, and if all works that were first published under this
   5391   1.3  mrg      License somewhere other than this MMC, and subsequently
   5392   1.3  mrg      incorporated in whole or in part into the MMC, (1) had no cover
   5393   1.3  mrg      texts or invariant sections, and (2) were thus incorporated prior
   5394   1.3  mrg      to November 1, 2008.
   5395   1.3  mrg 
   5396   1.3  mrg      The operator of an MMC Site may republish an MMC contained in the
   5397   1.3  mrg      site under CC-BY-SA on the same site at any time before August 1,
   5398   1.3  mrg      2009, provided the MMC is eligible for relicensing.
   5399   1.3  mrg 
   5400   1.1  mrg ADDENDUM: How to use this License for your documents
   5401   1.1  mrg ====================================================
   5402   1.1  mrg 
   5403   1.1  mrg To use this License in a document you have written, include a copy of
   5404   1.1  mrg the License in the document and put the following copyright and license
   5405   1.1  mrg notices just after the title page:
   5406   1.1  mrg 
   5407   1.1  mrg        Copyright (C)  YEAR  YOUR NAME.
   5408   1.1  mrg        Permission is granted to copy, distribute and/or modify this document
   5409   1.3  mrg        under the terms of the GNU Free Documentation License, Version 1.3
   5410   1.1  mrg        or any later version published by the Free Software Foundation;
   5411   1.1  mrg        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   5412   1.1  mrg        Texts.  A copy of the license is included in the section entitled ``GNU
   5413   1.1  mrg        Free Documentation License''.
   5414   1.1  mrg 
   5415   1.1  mrg    If you have Invariant Sections, Front-Cover Texts and Back-Cover
   5416  1.11  mrg Texts, replace the "with...Texts."  line with this:
   5417   1.1  mrg 
   5418   1.1  mrg          with the Invariant Sections being LIST THEIR TITLES, with
   5419   1.1  mrg          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   5420   1.1  mrg          being LIST.
   5421   1.1  mrg 
   5422   1.1  mrg    If you have Invariant Sections without Cover Texts, or some other
   5423   1.1  mrg combination of the three, merge those two alternatives to suit the
   5424   1.1  mrg situation.
   5425   1.1  mrg 
   5426   1.1  mrg    If your document contains nontrivial examples of program code, we
   5427  1.11  mrg recommend releasing these examples in parallel under your choice of free
   5428  1.11  mrg software license, such as the GNU General Public License, to permit
   5429  1.11  mrg their use in free software.
   5430   1.1  mrg 
   5431   1.1  mrg 
   5432   1.3  mrg File: libgomp.info,  Node: Funding,  Next: Library Index,  Prev: GNU Free Documentation License,  Up: Top
   5433   1.1  mrg 
   5434   1.1  mrg Funding Free Software
   5435   1.1  mrg *********************
   5436   1.1  mrg 
   5437   1.1  mrg If you want to have more free software a few years from now, it makes
   5438   1.1  mrg sense for you to help encourage people to contribute funds for its
   5439   1.1  mrg development.  The most effective approach known is to encourage
   5440   1.1  mrg commercial redistributors to donate.
   5441   1.1  mrg 
   5442   1.1  mrg    Users of free software systems can boost the pace of development by
   5443   1.1  mrg encouraging for-a-fee distributors to donate part of their selling price
   5444   1.1  mrg to free software developers--the Free Software Foundation, and others.
   5445   1.1  mrg 
   5446   1.1  mrg    The way to convince distributors to do this is to demand it and
   5447   1.1  mrg expect it from them.  So when you compare distributors, judge them
   5448   1.1  mrg partly by how much they give to free software development.  Show
   5449   1.1  mrg distributors they must compete to be the one who gives the most.
   5450   1.1  mrg 
   5451   1.1  mrg    To make this approach work, you must insist on numbers that you can
   5452   1.1  mrg compare, such as, "We will donate ten dollars to the Frobnitz project
   5453   1.1  mrg for each disk sold."  Don't be satisfied with a vague promise, such as
   5454   1.1  mrg "A portion of the profits are donated," since it doesn't give a basis
   5455   1.1  mrg for comparison.
   5456   1.1  mrg 
   5457   1.1  mrg    Even a precise fraction "of the profits from this disk" is not very
   5458   1.1  mrg meaningful, since creative accounting and unrelated business decisions
   5459  1.11  mrg can greatly alter what fraction of the sales price counts as profit.  If
   5460  1.11  mrg the price you pay is $50, ten percent of the profit is probably less
   5461   1.1  mrg than a dollar; it might be a few cents, or nothing at all.
   5462   1.1  mrg 
   5463   1.1  mrg    Some redistributors do development work themselves.  This is useful
   5464   1.1  mrg too; but to keep everyone honest, you need to inquire how much they do,
   5465   1.1  mrg and what kind.  Some kinds of development make much more long-term
   5466   1.1  mrg difference than others.  For example, maintaining a separate version of
   5467   1.1  mrg a program contributes very little; maintaining the standard version of a
   5468   1.1  mrg program for the whole community contributes much.  Easy new ports
   5469   1.1  mrg contribute little, since someone else would surely do them; difficult
   5470  1.11  mrg ports such as adding a new CPU to the GNU Compiler Collection contribute
   5471  1.11  mrg more; major new features or packages contribute the most.
   5472   1.1  mrg 
   5473   1.1  mrg    By establishing the idea that supporting further development is "the
   5474   1.1  mrg proper thing to do" when distributing free software for a fee, we can
   5475   1.1  mrg assure a steady flow of resources into making more free software.
   5476   1.1  mrg 
   5477   1.1  mrg      Copyright (C) 1994 Free Software Foundation, Inc.
   5478   1.1  mrg      Verbatim copying and redistribution of this section is permitted
   5479   1.1  mrg      without royalty; alteration is not permitted.
   5480   1.1  mrg 
   5481   1.1  mrg 
   5482   1.3  mrg File: libgomp.info,  Node: Library Index,  Prev: Funding,  Up: Top
   5483   1.1  mrg 
   5484   1.3  mrg Library Index
   5485   1.3  mrg *************
   5486   1.1  mrg 
   5487   1.1  mrg [index]
   5488   1.1  mrg * Menu:
   5489   1.1  mrg 
   5490  1.13  mrg * acc_get_property:                      acc_get_property.      (line 6)
   5491  1.13  mrg * acc_get_property_string:               acc_get_property.      (line 6)
   5492  1.11  mrg * Environment Variable:                  OMP_CANCELLATION.      (line 6)
   5493  1.11  mrg * Environment Variable <1>:              OMP_DISPLAY_ENV.       (line 6)
   5494  1.11  mrg * Environment Variable <2>:              OMP_DEFAULT_DEVICE.    (line 6)
   5495  1.11  mrg * Environment Variable <3>:              OMP_DYNAMIC.           (line 6)
   5496  1.11  mrg * Environment Variable <4>:              OMP_MAX_ACTIVE_LEVELS. (line 6)
   5497  1.11  mrg * Environment Variable <5>:              OMP_MAX_TASK_PRIORITY. (line 6)
   5498  1.11  mrg * Environment Variable <6>:              OMP_NESTED.            (line 6)
   5499  1.15  mrg * Environment Variable <7>:              OMP_NUM_TEAMS.         (line 6)
   5500  1.15  mrg * Environment Variable <8>:              OMP_NUM_THREADS.       (line 6)
   5501  1.15  mrg * Environment Variable <9>:              OMP_PROC_BIND.         (line 6)
   5502  1.15  mrg * Environment Variable <10>:             OMP_PLACES.            (line 6)
   5503  1.15  mrg * Environment Variable <11>:             OMP_STACKSIZE.         (line 6)
   5504  1.15  mrg * Environment Variable <12>:             OMP_SCHEDULE.          (line 6)
   5505  1.15  mrg * Environment Variable <13>:             OMP_TARGET_OFFLOAD.    (line 6)
   5506  1.15  mrg * Environment Variable <14>:             OMP_TEAMS_THREAD_LIMIT.
   5507  1.15  mrg                                                                 (line 6)
   5508  1.15  mrg * Environment Variable <15>:             OMP_THREAD_LIMIT.      (line 6)
   5509  1.15  mrg * Environment Variable <16>:             OMP_WAIT_POLICY.       (line 6)
   5510  1.15  mrg * Environment Variable <17>:             GOMP_CPU_AFFINITY.     (line 6)
   5511  1.15  mrg * Environment Variable <18>:             GOMP_DEBUG.            (line 6)
   5512  1.15  mrg * Environment Variable <19>:             GOMP_STACKSIZE.        (line 6)
   5513  1.15  mrg * Environment Variable <20>:             GOMP_SPINCOUNT.        (line 6)
   5514  1.15  mrg * Environment Variable <21>:             GOMP_RTEMS_THREAD_POOLS.
   5515  1.10  mrg                                                                 (line 6)
   5516  1.10  mrg * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   5517   1.7  mrg                                                                 (line 6)
   5518  1.11  mrg * Implementation specific setting:       OMP_NESTED.            (line 6)
   5519  1.11  mrg * Implementation specific setting <1>:   OMP_NUM_THREADS.       (line 6)
   5520  1.11  mrg * Implementation specific setting <2>:   OMP_SCHEDULE.          (line 6)
   5521  1.15  mrg * Implementation specific setting <3>:   OMP_TARGET_OFFLOAD.    (line 6)
   5522  1.15  mrg * Implementation specific setting <4>:   GOMP_STACKSIZE.        (line 6)
   5523  1.15  mrg * Implementation specific setting <5>:   GOMP_SPINCOUNT.        (line 6)
   5524  1.15  mrg * Implementation specific setting <6>:   GOMP_RTEMS_THREAD_POOLS.
   5525   1.1  mrg                                                                 (line 6)
   5526   1.1  mrg * Introduction:                          Top.                   (line 6)
   5527   1.1  mrg 
   5528   1.1  mrg 
   5529   1.1  mrg 
   5530   1.1  mrg Tag Table:
   5531  1.11  mrg Node: Top2083
   5532  1.15  mrg Node: Enabling OpenMP4713
   5533  1.15  mrg Node: OpenMP Implementation Status5519
   5534  1.15  mrg Node: OpenMP 4.56074
   5535  1.15  mrg Node: OpenMP 5.06250
   5536  1.15  mrg Node: OpenMP 5.111120
   5537  1.15  mrg Node: Runtime Library Routines14711
   5538  1.15  mrg Node: omp_get_active_level18416
   5539  1.15  mrg Node: omp_get_ancestor_thread_num19116
   5540  1.15  mrg Node: omp_get_cancellation20046
   5541  1.15  mrg Node: omp_get_default_device20860
   5542  1.15  mrg Node: omp_get_device_num21539
   5543  1.15  mrg Node: omp_get_dynamic22344
   5544  1.15  mrg Node: omp_get_initial_device23224
   5545  1.15  mrg Node: omp_get_level23968
   5546  1.15  mrg Node: omp_get_max_active_levels24595
   5547  1.15  mrg Node: omp_get_max_task_priority25316
   5548  1.15  mrg Node: omp_get_max_teams25936
   5549  1.15  mrg Node: omp_get_max_threads26630
   5550  1.15  mrg Node: omp_get_nested27381
   5551  1.15  mrg Node: omp_get_num_devices28989
   5552  1.15  mrg Node: omp_get_num_procs29510
   5553  1.15  mrg Node: omp_get_num_teams30049
   5554  1.15  mrg Node: omp_get_num_threads30565
   5555  1.15  mrg Node: omp_get_proc_bind31654
   5556  1.15  mrg Node: omp_get_schedule32677
   5557  1.15  mrg Node: omp_get_supported_active_levels33646
   5558  1.15  mrg Node: omp_get_team_num34432
   5559  1.15  mrg Node: omp_get_team_size34946
   5560  1.15  mrg Node: omp_get_teams_thread_limit35912
   5561  1.15  mrg Node: omp_get_thread_limit36674
   5562  1.15  mrg Node: omp_get_thread_num37302
   5563  1.15  mrg Node: omp_in_parallel38174
   5564  1.15  mrg Node: omp_in_final38823
   5565  1.15  mrg Node: omp_is_initial_device39497
   5566  1.15  mrg Node: omp_set_default_device40190
   5567  1.15  mrg Node: omp_set_dynamic40981
   5568  1.15  mrg Node: omp_set_max_active_levels41867
   5569  1.15  mrg Node: omp_set_nested42789
   5570  1.15  mrg Node: omp_set_num_teams43984
   5571  1.15  mrg Node: omp_set_num_threads44857
   5572  1.15  mrg Node: omp_set_schedule45728
   5573  1.15  mrg Node: omp_set_teams_thread_limit46822
   5574  1.15  mrg Node: omp_init_lock47824
   5575  1.15  mrg Node: omp_set_lock48487
   5576  1.15  mrg Node: omp_test_lock49342
   5577  1.15  mrg Node: omp_unset_lock50318
   5578  1.15  mrg Node: omp_destroy_lock51249
   5579  1.15  mrg Node: omp_init_nest_lock51926
   5580  1.15  mrg Node: omp_set_nest_lock52661
   5581  1.15  mrg Node: omp_test_nest_lock53576
   5582  1.15  mrg Node: omp_unset_nest_lock54603
   5583  1.15  mrg Node: omp_destroy_nest_lock55618
   5584  1.15  mrg Node: omp_get_wtick56369
   5585  1.15  mrg Node: omp_get_wtime56961
   5586  1.15  mrg Node: omp_fulfill_event57763
   5587  1.15  mrg Node: Environment Variables58784
   5588  1.15  mrg Node: OMP_CANCELLATION60573
   5589  1.15  mrg Node: OMP_DISPLAY_ENV61106
   5590  1.15  mrg Node: OMP_DEFAULT_DEVICE61809
   5591  1.15  mrg Node: OMP_DYNAMIC62589
   5592  1.15  mrg Node: OMP_MAX_ACTIVE_LEVELS63185
   5593  1.15  mrg Node: OMP_MAX_TASK_PRIORITY64112
   5594  1.15  mrg Node: OMP_NESTED64770
   5595  1.15  mrg Node: OMP_NUM_TEAMS65797
   5596  1.15  mrg Node: OMP_NUM_THREADS66470
   5597  1.15  mrg Node: OMP_PROC_BIND67275
   5598  1.15  mrg Node: OMP_PLACES68617
   5599  1.15  mrg Node: OMP_STACKSIZE71306
   5600  1.15  mrg Node: OMP_SCHEDULE72130
   5601  1.15  mrg Node: OMP_TARGET_OFFLOAD72830
   5602  1.15  mrg Node: OMP_TEAMS_THREAD_LIMIT73792
   5603  1.15  mrg Node: OMP_THREAD_LIMIT74599
   5604  1.15  mrg Node: OMP_WAIT_POLICY75209
   5605  1.15  mrg Node: GOMP_CPU_AFFINITY75901
   5606  1.15  mrg Node: GOMP_DEBUG77631
   5607  1.15  mrg Node: GOMP_STACKSIZE78138
   5608  1.15  mrg Node: GOMP_SPINCOUNT78969
   5609  1.15  mrg Node: GOMP_RTEMS_THREAD_POOLS80173
   5610  1.15  mrg Node: Enabling OpenACC82356
   5611  1.15  mrg Node: OpenACC Runtime Library Routines83257
   5612  1.15  mrg Node: acc_get_num_devices87538
   5613  1.15  mrg Node: acc_set_device_type88264
   5614  1.15  mrg Node: acc_get_device_type89028
   5615  1.15  mrg Node: acc_set_device_num90041
   5616  1.15  mrg Node: acc_get_device_num90858
   5617  1.15  mrg Node: acc_get_property91657
   5618  1.15  mrg Node: acc_async_test93880
   5619  1.15  mrg Node: acc_async_test_all94868
   5620  1.15  mrg Node: acc_wait95768
   5621  1.15  mrg Node: acc_wait_all96631
   5622  1.15  mrg Node: acc_wait_all_async97392
   5623  1.15  mrg Node: acc_wait_async98144
   5624  1.15  mrg Node: acc_init98852
   5625  1.15  mrg Node: acc_shutdown99497
   5626  1.15  mrg Node: acc_on_device100164
   5627  1.15  mrg Node: acc_malloc101168
   5628  1.15  mrg Node: acc_free101667
   5629  1.15  mrg Node: acc_copyin102094
   5630  1.15  mrg Node: acc_present_or_copyin103681
   5631  1.15  mrg Node: acc_create105459
   5632  1.15  mrg Node: acc_present_or_create107091
   5633  1.15  mrg Node: acc_copyout108877
   5634  1.15  mrg Node: acc_delete111181
   5635  1.15  mrg Node: acc_update_device113428
   5636  1.15  mrg Node: acc_update_self115002
   5637  1.15  mrg Node: acc_map_data116592
   5638  1.15  mrg Node: acc_unmap_data117277
   5639  1.15  mrg Node: acc_deviceptr117798
   5640  1.15  mrg Node: acc_hostptr118368
   5641  1.15  mrg Node: acc_is_present118932
   5642  1.15  mrg Node: acc_memcpy_to_device120459
   5643  1.15  mrg Node: acc_memcpy_from_device121122
   5644  1.15  mrg Node: acc_attach121789
   5645  1.15  mrg Node: acc_detach122436
   5646  1.15  mrg Node: acc_get_current_cuda_device123215
   5647  1.15  mrg Node: acc_get_current_cuda_context123800
   5648  1.15  mrg Node: acc_get_cuda_stream124400
   5649  1.15  mrg Node: acc_set_cuda_stream124991
   5650  1.15  mrg Node: acc_prof_register125662
   5651  1.15  mrg Node: acc_prof_unregister126221
   5652  1.15  mrg Node: acc_prof_lookup126788
   5653  1.15  mrg Node: acc_register_library127309
   5654  1.15  mrg Node: OpenACC Environment Variables127875
   5655  1.15  mrg Node: ACC_DEVICE_TYPE128447
   5656  1.15  mrg Node: ACC_DEVICE_NUM128683
   5657  1.15  mrg Node: ACC_PROFLIB128937
   5658  1.15  mrg Node: GCC_ACC_NOTIFY129268
   5659  1.15  mrg Node: CUDA Streams Usage129488
   5660  1.15  mrg Ref: CUDA Streams Usage-Footnote-1131389
   5661  1.15  mrg Node: OpenACC Library Interoperability131498
   5662  1.15  mrg Ref: OpenACC Library Interoperability-Footnote-1137866
   5663  1.15  mrg Ref: OpenACC Library Interoperability-Footnote-2138118
   5664  1.15  mrg Node: OpenACC Profiling Interface138326
   5665  1.15  mrg Node: The libgomp ABI148354
   5666  1.15  mrg Node: Implementing MASTER construct149207
   5667  1.15  mrg Node: Implementing CRITICAL construct149624
   5668  1.15  mrg Node: Implementing ATOMIC construct150365
   5669  1.15  mrg Node: Implementing FLUSH construct150848
   5670  1.15  mrg Node: Implementing BARRIER construct151121
   5671  1.15  mrg Node: Implementing THREADPRIVATE construct151392
   5672  1.15  mrg Node: Implementing PRIVATE clause152047
   5673  1.15  mrg Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses152630
   5674  1.15  mrg Node: Implementing REDUCTION clause153956
   5675  1.15  mrg Node: Implementing PARALLEL construct154516
   5676  1.15  mrg Node: Implementing FOR construct155775
   5677  1.15  mrg Node: Implementing ORDERED construct157775
   5678  1.15  mrg Node: Implementing SECTIONS construct158083
   5679  1.15  mrg Node: Implementing SINGLE construct158851
   5680  1.15  mrg Node: Implementing OpenACC's PARALLEL construct159565
   5681  1.15  mrg Node: Reporting Bugs159825
   5682  1.15  mrg Node: Copying160188
   5683  1.15  mrg Node: GNU Free Documentation License197737
   5684  1.15  mrg Node: Funding222862
   5685  1.15  mrg Node: Library Index225388
   5686   1.1  mrg 
   5687   1.1  mrg End Tag Table
   5688