Home | History | Annotate | Line # | Download | only in libgomp
libgomp.info revision 1.1.1.3
      1 This is libgomp.info, produced by makeinfo version 4.12 from
      2 /space/rguenther/gcc-5.4.0/gcc-5.4.0/libgomp/libgomp.texi.
      3 
      4 Copyright (C) 2006-2015 Free Software Foundation, Inc.
      5 
      6    Permission is granted to copy, distribute and/or modify this document
      7 under the terms of the GNU Free Documentation License, Version 1.3 or
      8 any later version published by the Free Software Foundation; with the
      9 Invariant Sections being "Funding Free Software", the Front-Cover texts
     10 being (a) (see below), and with the Back-Cover Texts being (b) (see
     11 below).  A copy of the license is included in the section entitled "GNU
     12 Free Documentation License".
     13 
     14    (a) The FSF's Front-Cover Text is:
     15 
     16    A GNU Manual
     17 
     18    (b) The FSF's Back-Cover Text is:
     19 
     20    You have freedom to copy and modify this GNU Manual, like GNU
     21 software.  Copies published by the Free Software Foundation raise
     22 funds for GNU development.
     23 
     24 INFO-DIR-SECTION GNU Libraries
     25 START-INFO-DIR-ENTRY
     26 * libgomp: (libgomp).          GNU Offloading and Multi Processing Runtime Library.
     27 END-INFO-DIR-ENTRY
     28 
     29    This manual documents libgomp, the GNU Offloading and Multi
     30 Processing Runtime library.  This is the GNU implementation of the
     31 OpenMP and OpenACC APIs for parallel and accelerator programming in
     32 C/C++ and Fortran.
     33 
     34    Published by the Free Software Foundation 51 Franklin Street, Fifth
     35 Floor Boston, MA 02110-1301 USA
     36 
     37    Copyright (C) 2006-2015 Free Software Foundation, Inc.
     38 
     39    Permission is granted to copy, distribute and/or modify this document
     40 under the terms of the GNU Free Documentation License, Version 1.3 or
     41 any later version published by the Free Software Foundation; with the
     42 Invariant Sections being "Funding Free Software", the Front-Cover texts
     43 being (a) (see below), and with the Back-Cover Texts being (b) (see
     44 below).  A copy of the license is included in the section entitled "GNU
     45 Free Documentation License".
     46 
     47    (a) The FSF's Front-Cover Text is:
     48 
     49    A GNU Manual
     50 
     51    (b) The FSF's Back-Cover Text is:
     52 
     53    You have freedom to copy and modify this GNU Manual, like GNU
     54 software.  Copies published by the Free Software Foundation raise
     55 funds for GNU development.
     56 
     57 
     58 File: libgomp.info,  Node: Top,  Next: Enabling OpenMP,  Up: (dir)
     59 
     60 Introduction
     61 ************
     62 
     63 This manual documents the usage of libgomp, the GNU Offloading and
     64 Multi Processing Runtime Library.  This includes the GNU implementation
     65 of the OpenMP (http://www.openmp.org) Application Programming Interface
     66 (API) for multi-platform shared-memory parallel programming in C/C++
     67 and Fortran, and the GNU implementation of the OpenACC
     68 (http://www.openacc.org/) Application Programming Interface (API) for
     69 offloading of code to accelerator devices in C/C++ and Fortran.
     70 
     71    Originally, libgomp implemented the GNU OpenMP Runtime Library.
     72 Based on this, support for OpenACC and offloading (both OpenACC and
     73 OpenMP 4's target construct) has been added later on, and the library's
     74 name changed to GNU Offloading and Multi Processing Runtime Library.
     75 
     76 * Menu:
     77 
     78 * Enabling OpenMP::            How to enable OpenMP for your applications.
     79 * Runtime Library Routines::   The OpenMP runtime application programming
     80                                interface.
     81 * Environment Variables::      Influencing runtime behavior with environment
     82                                variables.
     83 * The libgomp ABI::            Notes on the external ABI presented by libgomp.
     84 * Reporting Bugs::             How to report bugs in the GNU Offloading and
     85                                Multi Processing Runtime Library.
     86 * Copying::                    GNU general public license says
     87                                how you can copy and share libgomp.
     88 * GNU Free Documentation License::
     89                                How you can copy and share this manual.
     90 * Funding::                    How to help assure continued work for free
     91                                software.
     92 * Library Index::              Index of this documentation.
     93 
     94 
     95 File: libgomp.info,  Node: Enabling OpenMP,  Next: Runtime Library Routines,  Prev: Top,  Up: Top
     96 
     97 1 Enabling OpenMP
     98 *****************
     99 
    100 To activate the OpenMP extensions for C/C++ and Fortran, the
    101 compile-time flag `-fopenmp' must be specified.  This enables the
    102 OpenMP directive `#pragma omp' in C/C++ and `!$omp' directives in free
    103 form, `c$omp', `*$omp' and `!$omp' directives in fixed form, `!$'
    104 conditional compilation sentinels in free form and `c$', `*$' and `!$'
    105 sentinels in fixed form, for Fortran.  The flag also arranges for
    106 automatic linking of the OpenMP runtime library (*note Runtime Library
    107 Routines::).
    108 
    109    A complete description of all OpenMP directives accepted may be
    110 found in the OpenMP Application Program Interface
    111 (http://www.openmp.org) manual, version 4.0.
    112 
    113 
    114 File: libgomp.info,  Node: Runtime Library Routines,  Next: Environment Variables,  Prev: Enabling OpenMP,  Up: Top
    115 
    116 2 Runtime Library Routines
    117 **************************
    118 
    119 The runtime routines described here are defined by Section 3 of the
    120 OpenMP specification in version 4.0.  The routines are structured in
    121 following three parts:
    122 
    123 * Menu:
    124 
    125 Control threads, processors and the parallel environment.  They have C
    126 linkage, and do not throw exceptions.
    127 
    128 * omp_get_active_level::        Number of active parallel regions
    129 * omp_get_ancestor_thread_num:: Ancestor thread ID
    130 * omp_get_cancellation::        Whether cancellation support is enabled
    131 * omp_get_default_device::      Get the default device for target regions
    132 * omp_get_dynamic::             Dynamic teams setting
    133 * omp_get_level::               Number of parallel regions
    134 * omp_get_max_active_levels::   Maximum number of active regions
    135 * omp_get_max_threads::         Maximum number of threads of parallel region
    136 * omp_get_nested::              Nested parallel regions
    137 * omp_get_num_devices::         Number of target devices
    138 * omp_get_num_procs::           Number of processors online
    139 * omp_get_num_teams::           Number of teams
    140 * omp_get_num_threads::         Size of the active team
    141 * omp_get_proc_bind::           Whether theads may be moved between CPUs
    142 * omp_get_schedule::            Obtain the runtime scheduling method
    143 * omp_get_team_num::            Get team number
    144 * omp_get_team_size::           Number of threads in a team
    145 * omp_get_thread_limit::        Maximum number of threads
    146 * omp_get_thread_num::          Current thread ID
    147 * omp_in_parallel::             Whether a parallel region is active
    148 * omp_in_final::                Whether in final or included task region
    149 * omp_is_initial_device::       Whether executing on the host device
    150 * omp_set_default_device::      Set the default device for target regions
    151 * omp_set_dynamic::             Enable/disable dynamic teams
    152 * omp_set_max_active_levels::   Limits the number of active parallel regions
    153 * omp_set_nested::              Enable/disable nested parallel regions
    154 * omp_set_num_threads::         Set upper team size limit
    155 * omp_set_schedule::            Set the runtime scheduling method
    156 
    157 Initialize, set, test, unset and destroy simple and nested locks.
    158 
    159 * omp_init_lock::            Initialize simple lock
    160 * omp_set_lock::             Wait for and set simple lock
    161 * omp_test_lock::            Test and set simple lock if available
    162 * omp_unset_lock::           Unset simple lock
    163 * omp_destroy_lock::         Destroy simple lock
    164 * omp_init_nest_lock::       Initialize nested lock
    165 * omp_set_nest_lock::        Wait for and set simple lock
    166 * omp_test_nest_lock::       Test and set nested lock if available
    167 * omp_unset_nest_lock::      Unset nested lock
    168 * omp_destroy_nest_lock::    Destroy nested lock
    169 
    170 Portable, thread-based, wall clock timer.
    171 
    172 * omp_get_wtick::            Get timer precision.
    173 * omp_get_wtime::            Elapsed wall clock time.
    174 
    175 
    176 File: libgomp.info,  Node: omp_get_active_level,  Next: omp_get_ancestor_thread_num,  Up: Runtime Library Routines
    177 
    178 2.1 `omp_get_active_level' - Number of parallel regions
    179 =======================================================
    180 
    181 _Description_:
    182      This function returns the nesting level for the active parallel
    183      blocks, which enclose the calling call.
    184 
    185 _C/C++_
    186      _Prototype_:  `int omp_get_active_level(void);'
    187 
    188 _Fortran_:
    189      _Interface_:  `integer function omp_get_active_level()'
    190 
    191 _See also_:
    192      *note omp_get_level::, *note omp_get_max_active_levels::, *note
    193      omp_set_max_active_levels::
    194 
    195 _Reference_:
    196      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.20.
    197 
    198 
    199 File: libgomp.info,  Node: omp_get_ancestor_thread_num,  Next: omp_get_cancellation,  Prev: omp_get_active_level,  Up: Runtime Library Routines
    200 
    201 2.2 `omp_get_ancestor_thread_num' - Ancestor thread ID
    202 ======================================================
    203 
    204 _Description_:
    205      This function returns the thread identification number for the
    206      given nesting level of the current thread.  For values of LEVEL
    207      outside zero to `omp_get_level' -1 is returned; if LEVEL is
    208      `omp_get_level' the result is identical to `omp_get_thread_num'.
    209 
    210 _C/C++_
    211      _Prototype_:  `int omp_get_ancestor_thread_num(int level);'
    212 
    213 _Fortran_:
    214      _Interface_:  `integer function omp_get_ancestor_thread_num(level)'
    215                    `integer level'
    216 
    217 _See also_:
    218      *note omp_get_level::, *note omp_get_thread_num::, *note
    219      omp_get_team_size::
    220 
    221 _Reference_:
    222      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.18.
    223 
    224 
    225 File: libgomp.info,  Node: omp_get_cancellation,  Next: omp_get_default_device,  Prev: omp_get_ancestor_thread_num,  Up: Runtime Library Routines
    226 
    227 2.3 `omp_get_cancellation' - Whether cancellation support is enabled
    228 ====================================================================
    229 
    230 _Description_:
    231      This function returns `true' if cancellation is activated, `false'
    232      otherwise.  Here, `true' and `false' represent their
    233      language-specific counterparts.  Unless `OMP_CANCELLATION' is set
    234      true, cancellations are deactivated.
    235 
    236 _C/C++_:
    237      _Prototype_:  `int omp_get_cancellation(void);'
    238 
    239 _Fortran_:
    240      _Interface_:  `logical function omp_get_cancellation()'
    241 
    242 _See also_:
    243      *note OMP_CANCELLATION::
    244 
    245 _Reference_:
    246      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.9.
    247 
    248 
    249 File: libgomp.info,  Node: omp_get_default_device,  Next: omp_get_dynamic,  Prev: omp_get_cancellation,  Up: Runtime Library Routines
    250 
    251 2.4 `omp_get_default_device' - Get the default device for target regions
    252 ========================================================================
    253 
    254 _Description_:
    255      Get the default device for target regions without device clause.
    256 
    257 _C/C++_:
    258      _Prototype_:  `int omp_get_default_device(void);'
    259 
    260 _Fortran_:
    261      _Interface_:  `integer function omp_get_default_device()'
    262 
    263 _See also_:
    264      *note OMP_DEFAULT_DEVICE::, *note omp_set_default_device::
    265 
    266 _Reference_:
    267      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.24.
    268 
    269 
    270 File: libgomp.info,  Node: omp_get_dynamic,  Next: omp_get_level,  Prev: omp_get_default_device,  Up: Runtime Library Routines
    271 
    272 2.5 `omp_get_dynamic' - Dynamic teams setting
    273 =============================================
    274 
    275 _Description_:
    276      This function returns `true' if enabled, `false' otherwise.  Here,
    277      `true' and `false' represent their language-specific counterparts.
    278 
    279      The dynamic team setting may be initialized at startup by the
    280      `OMP_DYNAMIC' environment variable or at runtime using
    281      `omp_set_dynamic'.  If undefined, dynamic adjustment is disabled
    282      by default.
    283 
    284 _C/C++_:
    285      _Prototype_:  `int omp_get_dynamic(void);'
    286 
    287 _Fortran_:
    288      _Interface_:  `logical function omp_get_dynamic()'
    289 
    290 _See also_:
    291      *note omp_set_dynamic::, *note OMP_DYNAMIC::
    292 
    293 _Reference_:
    294      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.8.
    295 
    296 
    297 File: libgomp.info,  Node: omp_get_level,  Next: omp_get_max_active_levels,  Prev: omp_get_dynamic,  Up: Runtime Library Routines
    298 
    299 2.6 `omp_get_level' - Obtain the current nesting level
    300 ======================================================
    301 
    302 _Description_:
    303      This function returns the nesting level for the parallel blocks,
    304      which enclose the calling call.
    305 
    306 _C/C++_
    307      _Prototype_:  `int omp_get_level(void);'
    308 
    309 _Fortran_:
    310      _Interface_:  `integer function omp_level()'
    311 
    312 _See also_:
    313      *note omp_get_active_level::
    314 
    315 _Reference_:
    316      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.17.
    317 
    318 
    319 File: libgomp.info,  Node: omp_get_max_active_levels,  Next: omp_get_max_threads,  Prev: omp_get_level,  Up: Runtime Library Routines
    320 
    321 2.7 `omp_get_max_active_levels' - Maximum number of active regions
    322 ==================================================================
    323 
    324 _Description_:
    325      This function obtains the maximum allowed number of nested, active
    326      parallel regions.
    327 
    328 _C/C++_
    329      _Prototype_:  `int omp_get_max_active_levels(void);'
    330 
    331 _Fortran_:
    332      _Interface_:  `integer function omp_get_max_active_levels()'
    333 
    334 _See also_:
    335      *note omp_set_max_active_levels::, *note omp_get_active_level::
    336 
    337 _Reference_:
    338      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.16.
    339 
    340 
    341 File: libgomp.info,  Node: omp_get_max_threads,  Next: omp_get_nested,  Prev: omp_get_max_active_levels,  Up: Runtime Library Routines
    342 
    343 2.8 `omp_get_max_threads' - Maximum number of threads of parallel region
    344 ========================================================================
    345 
    346 _Description_:
    347      Return the maximum number of threads used for the current parallel
    348      region that does not use the clause `num_threads'.
    349 
    350 _C/C++_:
    351      _Prototype_:  `int omp_get_max_threads(void);'
    352 
    353 _Fortran_:
    354      _Interface_:  `integer function omp_get_max_threads()'
    355 
    356 _See also_:
    357      *note omp_set_num_threads::, *note omp_set_dynamic::, *note
    358      omp_get_thread_limit::
    359 
    360 _Reference_:
    361      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.3.
    362 
    363 
    364 File: libgomp.info,  Node: omp_get_nested,  Next: omp_get_num_devices,  Prev: omp_get_max_threads,  Up: Runtime Library Routines
    365 
    366 2.9 `omp_get_nested' - Nested parallel regions
    367 ==============================================
    368 
    369 _Description_:
    370      This function returns `true' if nested parallel regions are
    371      enabled, `false' otherwise.  Here, `true' and `false' represent
    372      their language-specific counterparts.
    373 
    374      Nested parallel regions may be initialized at startup by the
    375      `OMP_NESTED' environment variable or at runtime using
    376      `omp_set_nested'.  If undefined, nested parallel regions are
    377      disabled by default.
    378 
    379 _C/C++_:
    380      _Prototype_:  `int omp_get_nested(void);'
    381 
    382 _Fortran_:
    383      _Interface_:  `logical function omp_get_nested()'
    384 
    385 _See also_:
    386      *note omp_set_nested::, *note OMP_NESTED::
    387 
    388 _Reference_:
    389      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.11.
    390 
    391 
    392 File: libgomp.info,  Node: omp_get_num_devices,  Next: omp_get_num_procs,  Prev: omp_get_nested,  Up: Runtime Library Routines
    393 
    394 2.10 `omp_get_num_devices' - Number of target devices
    395 =====================================================
    396 
    397 _Description_:
    398      Returns the number of target devices.
    399 
    400 _C/C++_:
    401      _Prototype_:  `int omp_get_num_devices(void);'
    402 
    403 _Fortran_:
    404      _Interface_:  `integer function omp_get_num_devices()'
    405 
    406 _Reference_:
    407      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.25.
    408 
    409 
    410 File: libgomp.info,  Node: omp_get_num_procs,  Next: omp_get_num_teams,  Prev: omp_get_num_devices,  Up: Runtime Library Routines
    411 
    412 2.11 `omp_get_num_procs' - Number of processors online
    413 ======================================================
    414 
    415 _Description_:
    416      Returns the number of processors online on that device.
    417 
    418 _C/C++_:
    419      _Prototype_:  `int omp_get_num_procs(void);'
    420 
    421 _Fortran_:
    422      _Interface_:  `integer function omp_get_num_procs()'
    423 
    424 _Reference_:
    425      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.5.
    426 
    427 
    428 File: libgomp.info,  Node: omp_get_num_teams,  Next: omp_get_num_threads,  Prev: omp_get_num_procs,  Up: Runtime Library Routines
    429 
    430 2.12 `omp_get_num_teams' - Number of teams
    431 ==========================================
    432 
    433 _Description_:
    434      Returns the number of teams in the current team region.
    435 
    436 _C/C++_:
    437      _Prototype_:  `int omp_get_num_teams(void);'
    438 
    439 _Fortran_:
    440      _Interface_:  `integer function omp_get_num_teams()'
    441 
    442 _Reference_:
    443      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.26.
    444 
    445 
    446 File: libgomp.info,  Node: omp_get_num_threads,  Next: omp_get_proc_bind,  Prev: omp_get_num_teams,  Up: Runtime Library Routines
    447 
    448 2.13 `omp_get_num_threads' - Size of the active team
    449 ====================================================
    450 
    451 _Description_:
    452      Returns the number of threads in the current team.  In a
    453      sequential section of the program `omp_get_num_threads' returns 1.
    454 
    455      The default team size may be initialized at startup by the
    456      `OMP_NUM_THREADS' environment variable.  At runtime, the size of
    457      the current team may be set either by the `NUM_THREADS' clause or
    458      by `omp_set_num_threads'.  If none of the above were used to
    459      define a specific value and `OMP_DYNAMIC' is disabled, one thread
    460      per CPU online is used.
    461 
    462 _C/C++_:
    463      _Prototype_:  `int omp_get_num_threads(void);'
    464 
    465 _Fortran_:
    466      _Interface_:  `integer function omp_get_num_threads()'
    467 
    468 _See also_:
    469      *note omp_get_max_threads::, *note omp_set_num_threads::, *note
    470      OMP_NUM_THREADS::
    471 
    472 _Reference_:
    473      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.2.
    474 
    475 
    476 File: libgomp.info,  Node: omp_get_proc_bind,  Next: omp_get_schedule,  Prev: omp_get_num_threads,  Up: Runtime Library Routines
    477 
    478 2.14 `omp_get_proc_bind' - Whether theads may be moved between CPUs
    479 ===================================================================
    480 
    481 _Description_:
    482      This functions returns the currently active thread affinity
    483      policy, which is set via `OMP_PROC_BIND'.  Possible values are
    484      `omp_proc_bind_false', `omp_proc_bind_true',
    485      `omp_proc_bind_master', `omp_proc_bind_close' and
    486      `omp_proc_bind_spread'.
    487 
    488 _C/C++_:
    489      _Prototype_:  `omp_proc_bind_t omp_get_proc_bind(void);'
    490 
    491 _Fortran_:
    492      _Interface_:  `integer(kind=omp_proc_bind_kind) function
    493                    omp_get_proc_bind()'
    494 
    495 _See also_:
    496      *note OMP_PROC_BIND::, *note OMP_PLACES::, *note
    497      GOMP_CPU_AFFINITY::,
    498 
    499 _Reference_:
    500      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.22.
    501 
    502 
    503 File: libgomp.info,  Node: omp_get_schedule,  Next: omp_get_team_num,  Prev: omp_get_proc_bind,  Up: Runtime Library Routines
    504 
    505 2.15 `omp_get_schedule' - Obtain the runtime scheduling method
    506 ==============================================================
    507 
    508 _Description_:
    509      Obtain the runtime scheduling method.  The KIND argument will be
    510      set to the value `omp_sched_static', `omp_sched_dynamic',
    511      `omp_sched_guided' or `omp_sched_auto'.  The second argument,
    512      MODIFIER, is set to the chunk size.
    513 
    514 _C/C++_
    515      _Prototype_:  `void omp_get_schedule(omp_sched_t *kind, int
    516                    *modifier);'
    517 
    518 _Fortran_:
    519      _Interface_:  `subroutine omp_get_schedule(kind, modifier)'
    520                    `integer(kind=omp_sched_kind) kind'
    521                    `integer modifier'
    522 
    523 _See also_:
    524      *note omp_set_schedule::, *note OMP_SCHEDULE::
    525 
    526 _Reference_:
    527      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.13.
    528 
    529 
    530 File: libgomp.info,  Node: omp_get_team_num,  Next: omp_get_team_size,  Prev: omp_get_schedule,  Up: Runtime Library Routines
    531 
    532 2.16 `omp_get_team_num' - Get team number
    533 =========================================
    534 
    535 _Description_:
    536      Returns the team number of the calling thread.
    537 
    538 _C/C++_:
    539      _Prototype_:  `int omp_get_team_num(void);'
    540 
    541 _Fortran_:
    542      _Interface_:  `integer function omp_get_team_num()'
    543 
    544 _Reference_:
    545      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.27.
    546 
    547 
    548 File: libgomp.info,  Node: omp_get_team_size,  Next: omp_get_thread_limit,  Prev: omp_get_team_num,  Up: Runtime Library Routines
    549 
    550 2.17 `omp_get_team_size' - Number of threads in a team
    551 ======================================================
    552 
    553 _Description_:
    554      This function returns the number of threads in a thread team to
    555      which either the current thread or its ancestor belongs.  For
    556      values of LEVEL outside zero to `omp_get_level', -1 is returned;
    557      if LEVEL is zero, 1 is returned, and for `omp_get_level', the
    558      result is identical to `omp_get_num_threads'.
    559 
    560 _C/C++_:
    561      _Prototype_:  `int omp_get_team_size(int level);'
    562 
    563 _Fortran_:
    564      _Interface_:  `integer function omp_get_team_size(level)'
    565                    `integer level'
    566 
    567 _See also_:
    568      *note omp_get_num_threads::, *note omp_get_level::, *note
    569      omp_get_ancestor_thread_num::
    570 
    571 _Reference_:
    572      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.19.
    573 
    574 
    575 File: libgomp.info,  Node: omp_get_thread_limit,  Next: omp_get_thread_num,  Prev: omp_get_team_size,  Up: Runtime Library Routines
    576 
    577 2.18 `omp_get_thread_limit' - Maximum number of threads
    578 =======================================================
    579 
    580 _Description_:
    581      Return the maximum number of threads of the program.
    582 
    583 _C/C++_:
    584      _Prototype_:  `int omp_get_thread_limit(void);'
    585 
    586 _Fortran_:
    587      _Interface_:  `integer function omp_get_thread_limit()'
    588 
    589 _See also_:
    590      *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
    591 
    592 _Reference_:
    593      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.14.
    594 
    595 
    596 File: libgomp.info,  Node: omp_get_thread_num,  Next: omp_in_parallel,  Prev: omp_get_thread_limit,  Up: Runtime Library Routines
    597 
    598 2.19 `omp_get_thread_num' - Current thread ID
    599 =============================================
    600 
    601 _Description_:
    602      Returns a unique thread identification number within the current
    603      team.  In a sequential parts of the program, `omp_get_thread_num'
    604      always returns 0.  In parallel regions the return value varies
    605      from 0 to `omp_get_num_threads'-1 inclusive.  The return value of
    606      the master thread of a team is always 0.
    607 
    608 _C/C++_:
    609      _Prototype_:  `int omp_get_thread_num(void);'
    610 
    611 _Fortran_:
    612      _Interface_:  `integer function omp_get_thread_num()'
    613 
    614 _See also_:
    615      *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
    616 
    617 _Reference_:
    618      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.4.
    619 
    620 
    621 File: libgomp.info,  Node: omp_in_parallel,  Next: omp_in_final,  Prev: omp_get_thread_num,  Up: Runtime Library Routines
    622 
    623 2.20 `omp_in_parallel' - Whether a parallel region is active
    624 ============================================================
    625 
    626 _Description_:
    627      This function returns `true' if currently running in parallel,
    628      `false' otherwise.  Here, `true' and `false' represent their
    629      language-specific counterparts.
    630 
    631 _C/C++_:
    632      _Prototype_:  `int omp_in_parallel(void);'
    633 
    634 _Fortran_:
    635      _Interface_:  `logical function omp_in_parallel()'
    636 
    637 _Reference_:
    638      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.6.
    639 
    640 
    641 File: libgomp.info,  Node: omp_in_final,  Next: omp_is_initial_device,  Prev: omp_in_parallel,  Up: Runtime Library Routines
    642 
    643 2.21 `omp_in_final' - Whether in final or included task region
    644 ==============================================================
    645 
    646 _Description_:
    647      This function returns `true' if currently running in a final or
    648      included task region, `false' otherwise.  Here, `true' and `false'
    649      represent their language-specific counterparts.
    650 
    651 _C/C++_:
    652      _Prototype_:  `int omp_in_final(void);'
    653 
    654 _Fortran_:
    655      _Interface_:  `logical function omp_in_final()'
    656 
    657 _Reference_:
    658      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.21.
    659 
    660 
    661 File: libgomp.info,  Node: omp_is_initial_device,  Next: omp_set_default_device,  Prev: omp_in_final,  Up: Runtime Library Routines
    662 
    663 2.22 `omp_is_initial_device' - Whether executing on the host device
    664 ===================================================================
    665 
    666 _Description_:
    667      This function returns `true' if currently running on the host
    668      device, `false' otherwise.  Here, `true' and `false' represent
    669      their language-specific counterparts.
    670 
    671 _C/C++_:
    672      _Prototype_:  `int omp_is_initial_device(void);'
    673 
    674 _Fortran_:
    675      _Interface_:  `logical function omp_is_initial_device()'
    676 
    677 _Reference_:
    678      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.28.
    679 
    680 
    681 File: libgomp.info,  Node: omp_set_default_device,  Next: omp_set_dynamic,  Prev: omp_is_initial_device,  Up: Runtime Library Routines
    682 
    683 2.23 `omp_set_default_device' - Set the default device for target regions
    684 =========================================================================
    685 
    686 _Description_:
    687      Set the default device for target regions without device clause.
    688      The argument shall be a nonnegative device number.
    689 
    690 _C/C++_:
    691      _Prototype_:  `void omp_set_default_device(int device_num);'
    692 
    693 _Fortran_:
    694      _Interface_:  `subroutine omp_set_default_device(device_num)'
    695                    `integer device_num'
    696 
    697 _See also_:
    698      *note OMP_DEFAULT_DEVICE::, *note omp_get_default_device::
    699 
    700 _Reference_:
    701      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.23.
    702 
    703 
    704 File: libgomp.info,  Node: omp_set_dynamic,  Next: omp_set_max_active_levels,  Prev: omp_set_default_device,  Up: Runtime Library Routines
    705 
    706 2.24 `omp_set_dynamic' - Enable/disable dynamic teams
    707 =====================================================
    708 
    709 _Description_:
    710      Enable or disable the dynamic adjustment of the number of threads
    711      within a team.  The function takes the language-specific equivalent
    712      of `true' and `false', where `true' enables dynamic adjustment of
    713      team sizes and `false' disables it.
    714 
    715 _C/C++_:
    716      _Prototype_:  `void omp_set_dynamic(int dynamic_threads);'
    717 
    718 _Fortran_:
    719      _Interface_:  `subroutine omp_set_dynamic(dynamic_threads)'
    720                    `logical, intent(in) :: dynamic_threads'
    721 
    722 _See also_:
    723      *note OMP_DYNAMIC::, *note omp_get_dynamic::
    724 
    725 _Reference_:
    726      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.7.
    727 
    728 
    729 File: libgomp.info,  Node: omp_set_max_active_levels,  Next: omp_set_nested,  Prev: omp_set_dynamic,  Up: Runtime Library Routines
    730 
    731 2.25 `omp_set_max_active_levels' - Limits the number of active parallel regions
    732 ===============================================================================
    733 
    734 _Description_:
    735      This function limits the maximum allowed number of nested, active
    736      parallel regions.
    737 
    738 _C/C++_
    739      _Prototype_:  `void omp_set_max_active_levels(int max_levels);'
    740 
    741 _Fortran_:
    742      _Interface_:  `subroutine omp_set_max_active_levels(max_levels)'
    743                    `integer max_levels'
    744 
    745 _See also_:
    746      *note omp_get_max_active_levels::, *note omp_get_active_level::
    747 
    748 _Reference_:
    749      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.15.
    750 
    751 
    752 File: libgomp.info,  Node: omp_set_nested,  Next: omp_set_num_threads,  Prev: omp_set_max_active_levels,  Up: Runtime Library Routines
    753 
    754 2.26 `omp_set_nested' - Enable/disable nested parallel regions
    755 ==============================================================
    756 
    757 _Description_:
    758      Enable or disable nested parallel regions, i.e., whether team
    759      members are allowed to create new teams.  The function takes the
    760      language-specific equivalent of `true' and `false', where `true'
    761      enables dynamic adjustment of team sizes and `false' disables it.
    762 
    763 _C/C++_:
    764      _Prototype_:  `void omp_set_nested(int nested);'
    765 
    766 _Fortran_:
    767      _Interface_:  `subroutine omp_set_nested(nested)'
    768                    `logical, intent(in) :: nested'
    769 
    770 _See also_:
    771      *note OMP_NESTED::, *note omp_get_nested::
    772 
    773 _Reference_:
    774      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.10.
    775 
    776 
    777 File: libgomp.info,  Node: omp_set_num_threads,  Next: omp_set_schedule,  Prev: omp_set_nested,  Up: Runtime Library Routines
    778 
    779 2.27 `omp_set_num_threads' - Set upper team size limit
    780 ======================================================
    781 
    782 _Description_:
    783      Specifies the number of threads used by default in subsequent
    784      parallel sections, if those do not specify a `num_threads' clause.
    785      The argument of `omp_set_num_threads' shall be a positive integer.
    786 
    787 _C/C++_:
    788      _Prototype_:  `void omp_set_num_threads(int num_threads);'
    789 
    790 _Fortran_:
    791      _Interface_:  `subroutine omp_set_num_threads(num_threads)'
    792                    `integer, intent(in) :: num_threads'
    793 
    794 _See also_:
    795      *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
    796      omp_get_max_threads::
    797 
    798 _Reference_:
    799      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.1.
    800 
    801 
    802 File: libgomp.info,  Node: omp_set_schedule,  Next: omp_init_lock,  Prev: omp_set_num_threads,  Up: Runtime Library Routines
    803 
    804 2.28 `omp_set_schedule' - Set the runtime scheduling method
    805 ===========================================================
    806 
    807 _Description_:
    808      Sets the runtime scheduling method.  The KIND argument can have the
    809      value `omp_sched_static', `omp_sched_dynamic', `omp_sched_guided'
    810      or `omp_sched_auto'.  Except for `omp_sched_auto', the chunk size
    811      is set to the value of MODIFIER if positive, or to the default
    812      value if zero or negative.  For `omp_sched_auto' the MODIFIER
    813      argument is ignored.
    814 
    815 _C/C++_
    816      _Prototype_:  `void omp_set_schedule(omp_sched_t kind, int
    817                    modifier);'
    818 
    819 _Fortran_:
    820      _Interface_:  `subroutine omp_set_schedule(kind, modifier)'
    821                    `integer(kind=omp_sched_kind) kind'
    822                    `integer modifier'
    823 
    824 _See also_:
    825      *note omp_get_schedule:: *note OMP_SCHEDULE::
    826 
    827 _Reference_:
    828      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.2.12.
    829 
    830 
    831 File: libgomp.info,  Node: omp_init_lock,  Next: omp_set_lock,  Prev: omp_set_schedule,  Up: Runtime Library Routines
    832 
    833 2.29 `omp_init_lock' - Initialize simple lock
    834 =============================================
    835 
    836 _Description_:
    837      Initialize a simple lock.  After initialization, the lock is in an
    838      unlocked state.
    839 
    840 _C/C++_:
    841      _Prototype_:  `void omp_init_lock(omp_lock_t *lock);'
    842 
    843 _Fortran_:
    844      _Interface_:  `subroutine omp_init_lock(svar)'
    845                    `integer(omp_lock_kind), intent(out) :: svar'
    846 
    847 _See also_:
    848      *note omp_destroy_lock::
    849 
    850 _Reference_:
    851      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.1.
    852 
    853 
    854 File: libgomp.info,  Node: omp_set_lock,  Next: omp_test_lock,  Prev: omp_init_lock,  Up: Runtime Library Routines
    855 
    856 2.30 `omp_set_lock' - Wait for and set simple lock
    857 ==================================================
    858 
    859 _Description_:
    860      Before setting a simple lock, the lock variable must be
    861      initialized by `omp_init_lock'.  The calling thread is blocked
    862      until the lock is available.  If the lock is already held by the
    863      current thread, a deadlock occurs.
    864 
    865 _C/C++_:
    866      _Prototype_:  `void omp_set_lock(omp_lock_t *lock);'
    867 
    868 _Fortran_:
    869      _Interface_:  `subroutine omp_set_lock(svar)'
    870                    `integer(omp_lock_kind), intent(inout) :: svar'
    871 
    872 _See also_:
    873      *note omp_init_lock::, *note omp_test_lock::, *note
    874      omp_unset_lock::
    875 
    876 _Reference_:
    877      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.3.
    878 
    879 
    880 File: libgomp.info,  Node: omp_test_lock,  Next: omp_unset_lock,  Prev: omp_set_lock,  Up: Runtime Library Routines
    881 
    882 2.31 `omp_test_lock' - Test and set simple lock if available
    883 ============================================================
    884 
    885 _Description_:
    886      Before setting a simple lock, the lock variable must be
    887      initialized by `omp_init_lock'.  Contrary to `omp_set_lock',
    888      `omp_test_lock' does not block if the lock is not available.  This
    889      function returns `true' upon success, `false' otherwise.  Here,
    890      `true' and `false' represent their language-specific counterparts.
    891 
    892 _C/C++_:
    893      _Prototype_:  `int omp_test_lock(omp_lock_t *lock);'
    894 
    895 _Fortran_:
    896      _Interface_:  `logical function omp_test_lock(svar)'
    897                    `integer(omp_lock_kind), intent(inout) :: svar'
    898 
    899 _See also_:
    900      *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
    901 
    902 _Reference_:
    903      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.5.
    904 
    905 
    906 File: libgomp.info,  Node: omp_unset_lock,  Next: omp_destroy_lock,  Prev: omp_test_lock,  Up: Runtime Library Routines
    907 
    908 2.32 `omp_unset_lock' - Unset simple lock
    909 =========================================
    910 
    911 _Description_:
    912      A simple lock about to be unset must have been locked by
    913      `omp_set_lock' or `omp_test_lock' before.  In addition, the lock
    914      must be held by the thread calling `omp_unset_lock'.  Then, the
    915      lock becomes unlocked.  If one or more threads attempted to set
    916      the lock before, one of them is chosen to, again, set the lock to
    917      itself.
    918 
    919 _C/C++_:
    920      _Prototype_:  `void omp_unset_lock(omp_lock_t *lock);'
    921 
    922 _Fortran_:
    923      _Interface_:  `subroutine omp_unset_lock(svar)'
    924                    `integer(omp_lock_kind), intent(inout) :: svar'
    925 
    926 _See also_:
    927      *note omp_set_lock::, *note omp_test_lock::
    928 
    929 _Reference_:
    930      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.4.
    931 
    932 
    933 File: libgomp.info,  Node: omp_destroy_lock,  Next: omp_init_nest_lock,  Prev: omp_unset_lock,  Up: Runtime Library Routines
    934 
    935 2.33 `omp_destroy_lock' - Destroy simple lock
    936 =============================================
    937 
    938 _Description_:
    939      Destroy a simple lock.  In order to be destroyed, a simple lock
    940      must be in the unlocked state.
    941 
    942 _C/C++_:
    943      _Prototype_:  `void omp_destroy_lock(omp_lock_t *lock);'
    944 
    945 _Fortran_:
    946      _Interface_:  `subroutine omp_destroy_lock(svar)'
    947                    `integer(omp_lock_kind), intent(inout) :: svar'
    948 
    949 _See also_:
    950      *note omp_init_lock::
    951 
    952 _Reference_:
    953      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.2.
    954 
    955 
    956 File: libgomp.info,  Node: omp_init_nest_lock,  Next: omp_set_nest_lock,  Prev: omp_destroy_lock,  Up: Runtime Library Routines
    957 
    958 2.34 `omp_init_nest_lock' - Initialize nested lock
    959 ==================================================
    960 
    961 _Description_:
    962      Initialize a nested lock.  After initialization, the lock is in an
    963      unlocked state and the nesting count is set to zero.
    964 
    965 _C/C++_:
    966      _Prototype_:  `void omp_init_nest_lock(omp_nest_lock_t *lock);'
    967 
    968 _Fortran_:
    969      _Interface_:  `subroutine omp_init_nest_lock(nvar)'
    970                    `integer(omp_nest_lock_kind), intent(out) :: nvar'
    971 
    972 _See also_:
    973      *note omp_destroy_nest_lock::
    974 
    975 _Reference_:
    976      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.1.
    977 
    978 
    979 File: libgomp.info,  Node: omp_set_nest_lock,  Next: omp_test_nest_lock,  Prev: omp_init_nest_lock,  Up: Runtime Library Routines
    980 
    981 2.35 `omp_set_nest_lock' - Wait for and set nested lock
    982 =======================================================
    983 
    984 _Description_:
    985      Before setting a nested lock, the lock variable must be
    986      initialized by `omp_init_nest_lock'.  The calling thread is
    987      blocked until the lock is available.  If the lock is already held
    988      by the current thread, the nesting count for the lock is
    989      incremented.
    990 
    991 _C/C++_:
    992      _Prototype_:  `void omp_set_nest_lock(omp_nest_lock_t *lock);'
    993 
    994 _Fortran_:
    995      _Interface_:  `subroutine omp_set_nest_lock(nvar)'
    996                    `integer(omp_nest_lock_kind), intent(inout) :: nvar'
    997 
    998 _See also_:
    999      *note omp_init_nest_lock::, *note omp_unset_nest_lock::
   1000 
   1001 _Reference_:
   1002      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.3.
   1003 
   1004 
   1005 File: libgomp.info,  Node: omp_test_nest_lock,  Next: omp_unset_nest_lock,  Prev: omp_set_nest_lock,  Up: Runtime Library Routines
   1006 
   1007 2.36 `omp_test_nest_lock' - Test and set nested lock if available
   1008 =================================================================
   1009 
   1010 _Description_:
   1011      Before setting a nested lock, the lock variable must be
   1012      initialized by `omp_init_nest_lock'.  Contrary to
   1013      `omp_set_nest_lock', `omp_test_nest_lock' does not block if the
   1014      lock is not available.  If the lock is already held by the current
   1015      thread, the new nesting count is returned.  Otherwise, the return
   1016      value equals zero.
   1017 
   1018 _C/C++_:
   1019      _Prototype_:  `int omp_test_nest_lock(omp_nest_lock_t *lock);'
   1020 
   1021 _Fortran_:
   1022      _Interface_:  `logical function omp_test_nest_lock(nvar)'
   1023                    `integer(omp_nest_lock_kind), intent(inout) :: nvar'
   1024 
   1025 _See also_:
   1026      *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
   1027 
   1028 _Reference_:
   1029      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.5.
   1030 
   1031 
   1032 File: libgomp.info,  Node: omp_unset_nest_lock,  Next: omp_destroy_nest_lock,  Prev: omp_test_nest_lock,  Up: Runtime Library Routines
   1033 
   1034 2.37 `omp_unset_nest_lock' - Unset nested lock
   1035 ==============================================
   1036 
   1037 _Description_:
   1038      A nested lock about to be unset must have been locked by
   1039      `omp_set_nested_lock' or `omp_test_nested_lock' before.  In
   1040      addition, the lock must be held by the thread calling
   1041      `omp_unset_nested_lock'.  If the nesting count drops to zero, the
   1042      lock becomes unlocked.  If one ore more threads attempted to set
   1043      the lock before, one of them is chosen to, again, set the lock to
   1044      itself.
   1045 
   1046 _C/C++_:
   1047      _Prototype_:  `void omp_unset_nest_lock(omp_nest_lock_t *lock);'
   1048 
   1049 _Fortran_:
   1050      _Interface_:  `subroutine omp_unset_nest_lock(nvar)'
   1051                    `integer(omp_nest_lock_kind), intent(inout) :: nvar'
   1052 
   1053 _See also_:
   1054      *note omp_set_nest_lock::
   1055 
   1056 _Reference_:
   1057      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.4.
   1058 
   1059 
   1060 File: libgomp.info,  Node: omp_destroy_nest_lock,  Next: omp_get_wtick,  Prev: omp_unset_nest_lock,  Up: Runtime Library Routines
   1061 
   1062 2.38 `omp_destroy_nest_lock' - Destroy nested lock
   1063 ==================================================
   1064 
   1065 _Description_:
   1066      Destroy a nested lock.  In order to be destroyed, a nested lock
   1067      must be in the unlocked state and its nesting count must equal
   1068      zero.
   1069 
   1070 _C/C++_:
   1071      _Prototype_:  `void omp_destroy_nest_lock(omp_nest_lock_t *);'
   1072 
   1073 _Fortran_:
   1074      _Interface_:  `subroutine omp_destroy_nest_lock(nvar)'
   1075                    `integer(omp_nest_lock_kind), intent(inout) :: nvar'
   1076 
   1077 _See also_:
   1078      *note omp_init_lock::
   1079 
   1080 _Reference_:
   1081      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.3.2.
   1082 
   1083 
   1084 File: libgomp.info,  Node: omp_get_wtick,  Next: omp_get_wtime,  Prev: omp_destroy_nest_lock,  Up: Runtime Library Routines
   1085 
   1086 2.39 `omp_get_wtick' - Get timer precision
   1087 ==========================================
   1088 
   1089 _Description_:
   1090      Gets the timer precision, i.e., the number of seconds between two
   1091      successive clock ticks.
   1092 
   1093 _C/C++_:
   1094      _Prototype_:  `double omp_get_wtick(void);'
   1095 
   1096 _Fortran_:
   1097      _Interface_:  `double precision function omp_get_wtick()'
   1098 
   1099 _See also_:
   1100      *note omp_get_wtime::
   1101 
   1102 _Reference_:
   1103      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.4.2.
   1104 
   1105 
   1106 File: libgomp.info,  Node: omp_get_wtime,  Prev: omp_get_wtick,  Up: Runtime Library Routines
   1107 
   1108 2.40 `omp_get_wtime' - Elapsed wall clock time
   1109 ==============================================
   1110 
   1111 _Description_:
   1112      Elapsed wall clock time in seconds.  The time is measured per
   1113      thread, no guarantee can be made that two distinct threads measure
   1114      the same time.  Time is measured from some "time in the past",
   1115      which is an arbitrary time guaranteed not to change during the
   1116      execution of the program.
   1117 
   1118 _C/C++_:
   1119      _Prototype_:  `double omp_get_wtime(void);'
   1120 
   1121 _Fortran_:
   1122      _Interface_:  `double precision function omp_get_wtime()'
   1123 
   1124 _See also_:
   1125      *note omp_get_wtick::
   1126 
   1127 _Reference_:
   1128      OpenMP specification v4.0 (http://www.openmp.org/), Section 3.4.1.
   1129 
   1130 
   1131 File: libgomp.info,  Node: Environment Variables,  Next: The libgomp ABI,  Prev: Runtime Library Routines,  Up: Top
   1132 
   1133 3 Environment Variables
   1134 ***********************
   1135 
   1136 The environment variables which beginning with `OMP_' are defined by
   1137 section 4 of the OpenMP specification in version 4.0, while those
   1138 beginning with `GOMP_' are GNU extensions.
   1139 
   1140 * Menu:
   1141 
   1142 * OMP_CANCELLATION::      Set whether cancellation is activated
   1143 * OMP_DISPLAY_ENV::       Show OpenMP version and environment variables
   1144 * OMP_DEFAULT_DEVICE::    Set the device used in target regions
   1145 * OMP_DYNAMIC::           Dynamic adjustment of threads
   1146 * OMP_MAX_ACTIVE_LEVELS:: Set the maximum number of nested parallel regions
   1147 * OMP_NESTED::            Nested parallel regions
   1148 * OMP_NUM_THREADS::       Specifies the number of threads to use
   1149 * OMP_PROC_BIND::         Whether theads may be moved between CPUs
   1150 * OMP_PLACES::            Specifies on which CPUs the theads should be placed
   1151 * OMP_STACKSIZE::         Set default thread stack size
   1152 * OMP_SCHEDULE::          How threads are scheduled
   1153 * OMP_THREAD_LIMIT::      Set the maximum number of threads
   1154 * OMP_WAIT_POLICY::       How waiting threads are handled
   1155 * GOMP_CPU_AFFINITY::     Bind threads to specific CPUs
   1156 * GOMP_DEBUG::            Enable debugging output
   1157 * GOMP_STACKSIZE::        Set default thread stack size
   1158 * GOMP_SPINCOUNT::        Set the busy-wait spin count
   1159 
   1160 
   1161 File: libgomp.info,  Node: OMP_CANCELLATION,  Next: OMP_DISPLAY_ENV,  Up: Environment Variables
   1162 
   1163 3.1 `OMP_CANCELLATION' - Set whether cancellation is activated
   1164 ==============================================================
   1165 
   1166 _Description_:
   1167      If set to `TRUE', the cancellation is activated.  If set to
   1168      `FALSE' or if unset, cancellation is disabled and the `cancel'
   1169      construct is ignored.
   1170 
   1171 _See also_:
   1172      *note omp_get_cancellation::
   1173 
   1174 _Reference_:
   1175      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.11
   1176 
   1177 
   1178 File: libgomp.info,  Node: OMP_DISPLAY_ENV,  Next: OMP_DEFAULT_DEVICE,  Prev: OMP_CANCELLATION,  Up: Environment Variables
   1179 
   1180 3.2 `OMP_DISPLAY_ENV' - Show OpenMP version and environment variables
   1181 =====================================================================
   1182 
   1183 _Description_:
   1184      If set to `TRUE', the OpenMP version number and the values
   1185      associated with the OpenMP environment variables are printed to
   1186      `stderr'.  If set to `VERBOSE', it additionally shows the value of
   1187      the environment variables which are GNU extensions.  If undefined
   1188      or set to `FALSE', this information will not be shown.
   1189 
   1190 _Reference_:
   1191      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.12
   1192 
   1193 
   1194 File: libgomp.info,  Node: OMP_DEFAULT_DEVICE,  Next: OMP_DYNAMIC,  Prev: OMP_DISPLAY_ENV,  Up: Environment Variables
   1195 
   1196 3.3 `OMP_DEFAULT_DEVICE' - Set the device used in target regions
   1197 ================================================================
   1198 
   1199 _Description_:
   1200      Set to choose the device which is used in a `target' region,
   1201      unless the value is overridden by `omp_set_default_device' or by a
   1202      `device' clause.  The value shall be the nonnegative device
   1203      number. If no device with the given device number exists, the code
   1204      is executed on the host.  If unset, device number 0 will be used.
   1205 
   1206 _See also_:
   1207      *note omp_get_default_device::, *note omp_set_default_device::,
   1208 
   1209 _Reference_:
   1210      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.11
   1211 
   1212 
   1213 File: libgomp.info,  Node: OMP_DYNAMIC,  Next: OMP_MAX_ACTIVE_LEVELS,  Prev: OMP_DEFAULT_DEVICE,  Up: Environment Variables
   1214 
   1215 3.4 `OMP_DYNAMIC' - Dynamic adjustment of threads
   1216 =================================================
   1217 
   1218 _Description_:
   1219      Enable or disable the dynamic adjustment of the number of threads
   1220      within a team.  The value of this environment variable shall be
   1221      `TRUE' or `FALSE'.  If undefined, dynamic adjustment is disabled
   1222      by default.
   1223 
   1224 _See also_:
   1225      *note omp_set_dynamic::
   1226 
   1227 _Reference_:
   1228      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.3
   1229 
   1230 
   1231 File: libgomp.info,  Node: OMP_MAX_ACTIVE_LEVELS,  Next: OMP_NESTED,  Prev: OMP_DYNAMIC,  Up: Environment Variables
   1232 
   1233 3.5 `OMP_MAX_ACTIVE_LEVELS' - Set the maximum number of nested parallel regions
   1234 ===============================================================================
   1235 
   1236 _Description_:
   1237      Specifies the initial value for the maximum number of nested
   1238      parallel regions.  The value of this variable shall be a positive
   1239      integer.  If undefined, the number of active levels is unlimited.
   1240 
   1241 _See also_:
   1242      *note omp_set_max_active_levels::
   1243 
   1244 _Reference_:
   1245      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.9
   1246 
   1247 
   1248 File: libgomp.info,  Node: OMP_NESTED,  Next: OMP_NUM_THREADS,  Prev: OMP_MAX_ACTIVE_LEVELS,  Up: Environment Variables
   1249 
   1250 3.6 `OMP_NESTED' - Nested parallel regions
   1251 ==========================================
   1252 
   1253 _Description_:
   1254      Enable or disable nested parallel regions, i.e., whether team
   1255      members are allowed to create new teams.  The value of this
   1256      environment variable shall be `TRUE' or `FALSE'.  If undefined,
   1257      nested parallel regions are disabled by default.
   1258 
   1259 _See also_:
   1260      *note omp_set_nested::
   1261 
   1262 _Reference_:
   1263      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.6
   1264 
   1265 
   1266 File: libgomp.info,  Node: OMP_NUM_THREADS,  Next: OMP_PROC_BIND,  Prev: OMP_NESTED,  Up: Environment Variables
   1267 
   1268 3.7 `OMP_NUM_THREADS' - Specifies the number of threads to use
   1269 ==============================================================
   1270 
   1271 _Description_:
   1272      Specifies the default number of threads to use in parallel
   1273      regions.  The value of this variable shall be a comma-separated
   1274      list of positive integers; the value specified the number of
   1275      threads to use for the corresponding nested level.  If undefined
   1276      one thread per CPU is used.
   1277 
   1278 _See also_:
   1279      *note omp_set_num_threads::
   1280 
   1281 _Reference_:
   1282      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.2
   1283 
   1284 
   1285 File: libgomp.info,  Node: OMP_PROC_BIND,  Next: OMP_PLACES,  Prev: OMP_NUM_THREADS,  Up: Environment Variables
   1286 
   1287 3.8 `OMP_PROC_BIND' - Whether theads may be moved between CPUs
   1288 ==============================================================
   1289 
   1290 _Description_:
   1291      Specifies whether threads may be moved between processors.  If set
   1292      to `TRUE', OpenMP theads should not be moved; if set to `FALSE'
   1293      they may be moved.  Alternatively, a comma separated list with the
   1294      values `MASTER', `CLOSE' and `SPREAD' can be used to specify the
   1295      thread affinity policy for the corresponding nesting level.  With
   1296      `MASTER' the worker threads are in the same place partition as the
   1297      master thread.  With `CLOSE' those are kept close to the master
   1298      thread in contiguous place partitions.  And with `SPREAD' a sparse
   1299      distribution across the place partitions is used.
   1300 
   1301      When undefined, `OMP_PROC_BIND' defaults to `TRUE' when
   1302      `OMP_PLACES' or `GOMP_CPU_AFFINITY' is set and `FALSE' otherwise.
   1303 
   1304 _See also_:
   1305      *note OMP_PLACES::, *note GOMP_CPU_AFFINITY::, *note
   1306      omp_get_proc_bind::
   1307 
   1308 _Reference_:
   1309      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.4
   1310 
   1311 
   1312 File: libgomp.info,  Node: OMP_PLACES,  Next: OMP_STACKSIZE,  Prev: OMP_PROC_BIND,  Up: Environment Variables
   1313 
   1314 3.9 `OMP_PLACES' - Specifies on which CPUs the theads should be placed
   1315 ======================================================================
   1316 
   1317 _Description_:
   1318      The thread placement can be either specified using an abstract
   1319      name or by an explicit list of the places.  The abstract names
   1320      `threads', `cores' and `sockets' can be optionally followed by a
   1321      positive number in parentheses, which denotes the how many places
   1322      shall be created.  With `threads' each place corresponds to a
   1323      single hardware thread; `cores' to a single core with the
   1324      corresponding number of hardware threads; and with `sockets' the
   1325      place corresponds to a single socket.  The resulting placement can
   1326      be shown by setting the `OMP_DISPLAY_ENV' environment variable.
   1327 
   1328      Alternatively, the placement can be specified explicitly as
   1329      comma-separated list of places.  A place is specified by set of
   1330      nonnegative numbers in curly braces, denoting the denoting the
   1331      hardware threads.  The hardware threads belonging to a place can
   1332      either be specified as comma-separated list of nonnegative thread
   1333      numbers or using an interval.  Multiple places can also be either
   1334      specified by a comma-separated list of places or by an interval.
   1335      To specify an interval, a colon followed by the count is placed
   1336      after after the hardware thread number or the place.  Optionally,
   1337      the length can be followed by a colon and the stride number -
   1338      otherwise a unit stride is assumed.  For instance, the following
   1339      specifies the same places list: `"{0,1,2}, {3,4,6}, {7,8,9},
   1340      {10,11,12}"'; `"{0:3}, {3:3}, {7:3}, {10:3}"'; and `"{0:2}:4:3"'.
   1341 
   1342      If `OMP_PLACES' and `GOMP_CPU_AFFINITY' are unset and
   1343      `OMP_PROC_BIND' is either unset or `false', threads may be moved
   1344      between CPUs following no placement policy.
   1345 
   1346 _See also_:
   1347      *note OMP_PROC_BIND::, *note GOMP_CPU_AFFINITY::, *note
   1348      omp_get_proc_bind::, *note OMP_DISPLAY_ENV::
   1349 
   1350 _Reference_:
   1351      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.5
   1352 
   1353 
   1354 File: libgomp.info,  Node: OMP_STACKSIZE,  Next: OMP_SCHEDULE,  Prev: OMP_PLACES,  Up: Environment Variables
   1355 
   1356 3.10 `OMP_STACKSIZE' - Set default thread stack size
   1357 ====================================================
   1358 
   1359 _Description_:
   1360      Set the default thread stack size in kilobytes, unless the number
   1361      is suffixed by `B', `K', `M' or `G', in which case the size is,
   1362      respectively, in bytes, kilobytes, megabytes or gigabytes.  This
   1363      is different from `pthread_attr_setstacksize' which gets the
   1364      number of bytes as an argument.  If the stack size cannot be set
   1365      due to system constraints, an error is reported and the initial
   1366      stack size is left unchanged.  If undefined, the stack size is
   1367      system dependent.
   1368 
   1369 _Reference_:
   1370      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.7
   1371 
   1372 
   1373 File: libgomp.info,  Node: OMP_SCHEDULE,  Next: OMP_THREAD_LIMIT,  Prev: OMP_STACKSIZE,  Up: Environment Variables
   1374 
   1375 3.11 `OMP_SCHEDULE' - How threads are scheduled
   1376 ===============================================
   1377 
   1378 _Description_:
   1379      Allows to specify `schedule type' and `chunk size'.  The value of
   1380      the variable shall have the form: `type[,chunk]' where `type' is
   1381      one of `static', `dynamic', `guided' or `auto' The optional
   1382      `chunk' size shall be a positive integer.  If undefined, dynamic
   1383      scheduling and a chunk size of 1 is used.
   1384 
   1385 _See also_:
   1386      *note omp_set_schedule::
   1387 
   1388 _Reference_:
   1389      OpenMP specification v4.0 (http://www.openmp.org/), Sections 2.7.1
   1390      and 4.1
   1391 
   1392 
   1393 File: libgomp.info,  Node: OMP_THREAD_LIMIT,  Next: OMP_WAIT_POLICY,  Prev: OMP_SCHEDULE,  Up: Environment Variables
   1394 
   1395 3.12 `OMP_THREAD_LIMIT' - Set the maximum number of threads
   1396 ===========================================================
   1397 
   1398 _Description_:
   1399      Specifies the number of threads to use for the whole program.  The
   1400      value of this variable shall be a positive integer.  If undefined,
   1401      the number of threads is not limited.
   1402 
   1403 _See also_:
   1404      *note OMP_NUM_THREADS::, *note omp_get_thread_limit::
   1405 
   1406 _Reference_:
   1407      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.10
   1408 
   1409 
   1410 File: libgomp.info,  Node: OMP_WAIT_POLICY,  Next: GOMP_CPU_AFFINITY,  Prev: OMP_THREAD_LIMIT,  Up: Environment Variables
   1411 
   1412 3.13 `OMP_WAIT_POLICY' - How waiting threads are handled
   1413 ========================================================
   1414 
   1415 _Description_:
   1416      Specifies whether waiting threads should be active or passive.  If
   1417      the value is `PASSIVE', waiting threads should not consume CPU
   1418      power while waiting; while the value is `ACTIVE' specifies that
   1419      they should.  If undefined, threads wait actively for a short time
   1420      before waiting passively.
   1421 
   1422 _See also_:
   1423      *note GOMP_SPINCOUNT::
   1424 
   1425 _Reference_:
   1426      OpenMP specification v4.0 (http://www.openmp.org/), Section 4.8
   1427 
   1428 
   1429 File: libgomp.info,  Node: GOMP_CPU_AFFINITY,  Next: GOMP_DEBUG,  Prev: OMP_WAIT_POLICY,  Up: Environment Variables
   1430 
   1431 3.14 `GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
   1432 ========================================================
   1433 
   1434 _Description_:
   1435      Binds threads to specific CPUs.  The variable should contain a
   1436      space-separated or comma-separated list of CPUs.  This list may
   1437      contain different kinds of entries: either single CPU numbers in
   1438      any order, a range of CPUs (M-N) or a range with some stride
   1439      (M-N:S).  CPU numbers are zero based.  For example,
   1440      `GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"' will bind the initial thread
   1441      to CPU 0, the second to CPU 3, the third to CPU 1, the fourth to
   1442      CPU 2, the fifth to CPU 4, the sixth through tenth to CPUs 6, 8,
   1443      10, 12, and 14 respectively and then start assigning back from the
   1444      beginning of the list.  `GOMP_CPU_AFFINITY=0' binds all threads to
   1445      CPU 0.
   1446 
   1447      There is no libgomp library routine to determine whether a CPU
   1448      affinity specification is in effect.  As a workaround,
   1449      language-specific library functions, e.g., `getenv' in C or
   1450      `GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
   1451      setting of the `GOMP_CPU_AFFINITY' environment variable.  A
   1452      defined CPU affinity on startup cannot be changed or disabled
   1453      during the runtime of the application.
   1454 
   1455      If both `GOMP_CPU_AFFINITY' and `OMP_PROC_BIND' are set,
   1456      `OMP_PROC_BIND' has a higher precedence.  If neither has been set
   1457      and `OMP_PROC_BIND' is unset, or when `OMP_PROC_BIND' is set to
   1458      `FALSE', the host system will handle the assignment of threads to
   1459      CPUs.
   1460 
   1461 _See also_:
   1462      *note OMP_PLACES::, *note OMP_PROC_BIND::
   1463 
   1464 
   1465 File: libgomp.info,  Node: GOMP_DEBUG,  Next: GOMP_STACKSIZE,  Prev: GOMP_CPU_AFFINITY,  Up: Environment Variables
   1466 
   1467 3.15 `GOMP_DEBUG' - Enable debugging output
   1468 ===========================================
   1469 
   1470 _Description_:
   1471      Enable debugging output.  The variable should be set to `0'
   1472      (disabled, also the default if not set), or `1' (enabled).
   1473 
   1474      If enabled, some debugging output will be printed during execution.
   1475      This is currently not specified in more detail, and subject to
   1476      change.
   1477 
   1478 
   1479 File: libgomp.info,  Node: GOMP_STACKSIZE,  Next: GOMP_SPINCOUNT,  Prev: GOMP_DEBUG,  Up: Environment Variables
   1480 
   1481 3.16 `GOMP_STACKSIZE' - Set default thread stack size
   1482 =====================================================
   1483 
   1484 _Description_:
   1485      Set the default thread stack size in kilobytes.  This is different
   1486      from `pthread_attr_setstacksize' which gets the number of bytes as
   1487      an argument.  If the stack size cannot be set due to system
   1488      constraints, an error is reported and the initial stack size is
   1489      left unchanged.  If undefined, the stack size is system dependent.
   1490 
   1491 _See also_:
   1492      *note OMP_STACKSIZE::
   1493 
   1494 _Reference_:
   1495      GCC Patches Mailinglist
   1496      (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00493.html), GCC
   1497      Patches Mailinglist
   1498      (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00496.html)
   1499 
   1500 
   1501 File: libgomp.info,  Node: GOMP_SPINCOUNT,  Prev: GOMP_STACKSIZE,  Up: Environment Variables
   1502 
   1503 3.17 `GOMP_SPINCOUNT' - Set the busy-wait spin count
   1504 ====================================================
   1505 
   1506 _Description_:
   1507      Determines how long a threads waits actively with consuming CPU
   1508      power before waiting passively without consuming CPU power.  The
   1509      value may be either `INFINITE', `INFINITY' to always wait actively
   1510      or an integer which gives the number of spins of the busy-wait
   1511      loop.  The integer may optionally be followed by the following
   1512      suffixes acting as multiplication factors: `k' (kilo, thousand),
   1513      `M' (mega, million), `G' (giga, billion), or `T' (tera, trillion).
   1514      If undefined, 0 is used when `OMP_WAIT_POLICY' is `PASSIVE',
   1515      300,000 is used when `OMP_WAIT_POLICY' is undefined and 30 billion
   1516      is used when `OMP_WAIT_POLICY' is `ACTIVE'.  If there are more
   1517      OpenMP threads than available CPUs, 1000 and 100 spins are used
   1518      for `OMP_WAIT_POLICY' being `ACTIVE' or undefined, respectively;
   1519      unless the `GOMP_SPINCOUNT' is lower or `OMP_WAIT_POLICY' is
   1520      `PASSIVE'.
   1521 
   1522 _See also_:
   1523      *note OMP_WAIT_POLICY::
   1524 
   1525 
   1526 File: libgomp.info,  Node: The libgomp ABI,  Next: Reporting Bugs,  Prev: Environment Variables,  Up: Top
   1527 
   1528 4 The libgomp ABI
   1529 *****************
   1530 
   1531 The following sections present notes on the external ABI as presented
   1532 by libgomp.  Only maintainers should need them.
   1533 
   1534 * Menu:
   1535 
   1536 * Implementing MASTER construct::
   1537 * Implementing CRITICAL construct::
   1538 * Implementing ATOMIC construct::
   1539 * Implementing FLUSH construct::
   1540 * Implementing BARRIER construct::
   1541 * Implementing THREADPRIVATE construct::
   1542 * Implementing PRIVATE clause::
   1543 * Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses::
   1544 * Implementing REDUCTION clause::
   1545 * Implementing PARALLEL construct::
   1546 * Implementing FOR construct::
   1547 * Implementing ORDERED construct::
   1548 * Implementing SECTIONS construct::
   1549 * Implementing SINGLE construct::
   1550 
   1551 
   1552 File: libgomp.info,  Node: Implementing MASTER construct,  Next: Implementing CRITICAL construct,  Up: The libgomp ABI
   1553 
   1554 4.1 Implementing MASTER construct
   1555 =================================
   1556 
   1557      if (omp_get_thread_num () == 0)
   1558        block
   1559 
   1560    Alternately, we generate two copies of the parallel subfunction and
   1561 only include this in the version run by the master thread.  Surely this
   1562 is not worthwhile though...
   1563 
   1564 
   1565 File: libgomp.info,  Node: Implementing CRITICAL construct,  Next: Implementing ATOMIC construct,  Prev: Implementing MASTER construct,  Up: The libgomp ABI
   1566 
   1567 4.2 Implementing CRITICAL construct
   1568 ===================================
   1569 
   1570 Without a specified name,
   1571 
   1572        void GOMP_critical_start (void);
   1573        void GOMP_critical_end (void);
   1574 
   1575    so that we don't get COPY relocations from libgomp to the main
   1576 application.
   1577 
   1578    With a specified name, use omp_set_lock and omp_unset_lock with name
   1579 being transformed into a variable declared like
   1580 
   1581        omp_lock_t gomp_critical_user_<name> __attribute__((common))
   1582 
   1583    Ideally the ABI would specify that all zero is a valid unlocked
   1584 state, and so we wouldn't need to initialize this at startup.
   1585 
   1586 
   1587 File: libgomp.info,  Node: Implementing ATOMIC construct,  Next: Implementing FLUSH construct,  Prev: Implementing CRITICAL construct,  Up: The libgomp ABI
   1588 
   1589 4.3 Implementing ATOMIC construct
   1590 =================================
   1591 
   1592 The target should implement the `__sync' builtins.
   1593 
   1594    Failing that we could add
   1595 
   1596        void GOMP_atomic_enter (void)
   1597        void GOMP_atomic_exit (void)
   1598 
   1599    which reuses the regular lock code, but with yet another lock object
   1600 private to the library.
   1601 
   1602 
   1603 File: libgomp.info,  Node: Implementing FLUSH construct,  Next: Implementing BARRIER construct,  Prev: Implementing ATOMIC construct,  Up: The libgomp ABI
   1604 
   1605 4.4 Implementing FLUSH construct
   1606 ================================
   1607 
   1608 Expands to the `__sync_synchronize' builtin.
   1609 
   1610 
   1611 File: libgomp.info,  Node: Implementing BARRIER construct,  Next: Implementing THREADPRIVATE construct,  Prev: Implementing FLUSH construct,  Up: The libgomp ABI
   1612 
   1613 4.5 Implementing BARRIER construct
   1614 ==================================
   1615 
   1616        void GOMP_barrier (void)
   1617 
   1618 
   1619 File: libgomp.info,  Node: Implementing THREADPRIVATE construct,  Next: Implementing PRIVATE clause,  Prev: Implementing BARRIER construct,  Up: The libgomp ABI
   1620 
   1621 4.6 Implementing THREADPRIVATE construct
   1622 ========================================
   1623 
   1624 In _most_ cases we can map this directly to `__thread'.  Except that
   1625 OMP allows constructors for C++ objects.  We can either refuse to
   1626 support this (how often is it used?) or we can implement something akin
   1627 to .ctors.
   1628 
   1629    Even more ideally, this ctor feature is handled by extensions to the
   1630 main pthreads library.  Failing that, we can have a set of entry points
   1631 to register ctor functions to be called.
   1632 
   1633 
   1634 File: libgomp.info,  Node: Implementing PRIVATE clause,  Next: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Prev: Implementing THREADPRIVATE construct,  Up: The libgomp ABI
   1635 
   1636 4.7 Implementing PRIVATE clause
   1637 ===============================
   1638 
   1639 In association with a PARALLEL, or within the lexical extent of a
   1640 PARALLEL block, the variable becomes a local variable in the parallel
   1641 subfunction.
   1642 
   1643    In association with FOR or SECTIONS blocks, create a new automatic
   1644 variable within the current function.  This preserves the semantic of
   1645 new variable creation.
   1646 
   1647 
   1648 File: libgomp.info,  Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Next: Implementing REDUCTION clause,  Prev: Implementing PRIVATE clause,  Up: The libgomp ABI
   1649 
   1650 4.8 Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses
   1651 ========================================================================
   1652 
   1653 This seems simple enough for PARALLEL blocks.  Create a private struct
   1654 for communicating between the parent and subfunction.  In the parent,
   1655 copy in values for scalar and "small" structs; copy in addresses for
   1656 others TREE_ADDRESSABLE types.  In the subfunction, copy the value into
   1657 the local variable.
   1658 
   1659    It is not clear what to do with bare FOR or SECTION blocks.  The
   1660 only thing I can figure is that we do something like:
   1661 
   1662      #pragma omp for firstprivate(x) lastprivate(y)
   1663      for (int i = 0; i < n; ++i)
   1664        body;
   1665 
   1666    which becomes
   1667 
   1668      {
   1669        int x = x, y;
   1670 
   1671        // for stuff
   1672 
   1673        if (i == n)
   1674          y = y;
   1675      }
   1676 
   1677    where the "x=x" and "y=y" assignments actually have different uids
   1678 for the two variables, i.e. not something you could write directly in
   1679 C.  Presumably this only makes sense if the "outer" x and y are global
   1680 variables.
   1681 
   1682    COPYPRIVATE would work the same way, except the structure broadcast
   1683 would have to happen via SINGLE machinery instead.
   1684 
   1685 
   1686 File: libgomp.info,  Node: Implementing REDUCTION clause,  Next: Implementing PARALLEL construct,  Prev: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Up: The libgomp ABI
   1687 
   1688 4.9 Implementing REDUCTION clause
   1689 =================================
   1690 
   1691 The private struct mentioned in the previous section should have a
   1692 pointer to an array of the type of the variable, indexed by the
   1693 thread's TEAM_ID.  The thread stores its final value into the array,
   1694 and after the barrier, the master thread iterates over the array to
   1695 collect the values.
   1696 
   1697 
   1698 File: libgomp.info,  Node: Implementing PARALLEL construct,  Next: Implementing FOR construct,  Prev: Implementing REDUCTION clause,  Up: The libgomp ABI
   1699 
   1700 4.10 Implementing PARALLEL construct
   1701 ====================================
   1702 
   1703        #pragma omp parallel
   1704        {
   1705          body;
   1706        }
   1707 
   1708    becomes
   1709 
   1710        void subfunction (void *data)
   1711        {
   1712          use data;
   1713          body;
   1714        }
   1715 
   1716        setup data;
   1717        GOMP_parallel_start (subfunction, &data, num_threads);
   1718        subfunction (&data);
   1719        GOMP_parallel_end ();
   1720 
   1721        void GOMP_parallel_start (void (*fn)(void *), void *data, unsigned num_threads)
   1722 
   1723    The FN argument is the subfunction to be run in parallel.
   1724 
   1725    The DATA argument is a pointer to a structure used to communicate
   1726 data in and out of the subfunction, as discussed above with respect to
   1727 FIRSTPRIVATE et al.
   1728 
   1729    The NUM_THREADS argument is 1 if an IF clause is present and false,
   1730 or the value of the NUM_THREADS clause, if present, or 0.
   1731 
   1732    The function needs to create the appropriate number of threads
   1733 and/or launch them from the dock.  It needs to create the team
   1734 structure and assign team ids.
   1735 
   1736        void GOMP_parallel_end (void)
   1737 
   1738    Tears down the team and returns us to the previous
   1739 `omp_in_parallel()' state.
   1740 
   1741 
   1742 File: libgomp.info,  Node: Implementing FOR construct,  Next: Implementing ORDERED construct,  Prev: Implementing PARALLEL construct,  Up: The libgomp ABI
   1743 
   1744 4.11 Implementing FOR construct
   1745 ===============================
   1746 
   1747        #pragma omp parallel for
   1748        for (i = lb; i <= ub; i++)
   1749          body;
   1750 
   1751    becomes
   1752 
   1753        void subfunction (void *data)
   1754        {
   1755          long _s0, _e0;
   1756          while (GOMP_loop_static_next (&_s0, &_e0))
   1757          {
   1758            long _e1 = _e0, i;
   1759            for (i = _s0; i < _e1; i++)
   1760              body;
   1761          }
   1762          GOMP_loop_end_nowait ();
   1763        }
   1764 
   1765        GOMP_parallel_loop_static (subfunction, NULL, 0, lb, ub+1, 1, 0);
   1766        subfunction (NULL);
   1767        GOMP_parallel_end ();
   1768 
   1769        #pragma omp for schedule(runtime)
   1770        for (i = 0; i < n; i++)
   1771          body;
   1772 
   1773    becomes
   1774 
   1775        {
   1776          long i, _s0, _e0;
   1777          if (GOMP_loop_runtime_start (0, n, 1, &_s0, &_e0))
   1778            do {
   1779              long _e1 = _e0;
   1780              for (i = _s0, i < _e0; i++)
   1781                body;
   1782            } while (GOMP_loop_runtime_next (&_s0, _&e0));
   1783          GOMP_loop_end ();
   1784        }
   1785 
   1786    Note that while it looks like there is trickiness to propagating a
   1787 non-constant STEP, there isn't really.  We're explicitly allowed to
   1788 evaluate it as many times as we want, and any variables involved should
   1789 automatically be handled as PRIVATE or SHARED like any other variables.
   1790 So the expression should remain evaluable in the subfunction.  We can
   1791 also pull it into a local variable if we like, but since its supposed
   1792 to remain unchanged, we can also not if we like.
   1793 
   1794    If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be
   1795 able to get away with no work-sharing context at all, since we can
   1796 simply perform the arithmetic directly in each thread to divide up the
   1797 iterations.  Which would mean that we wouldn't need to call any of
   1798 these routines.
   1799 
   1800    There are separate routines for handling loops with an ORDERED
   1801 clause.  Bookkeeping for that is non-trivial...
   1802 
   1803 
   1804 File: libgomp.info,  Node: Implementing ORDERED construct,  Next: Implementing SECTIONS construct,  Prev: Implementing FOR construct,  Up: The libgomp ABI
   1805 
   1806 4.12 Implementing ORDERED construct
   1807 ===================================
   1808 
   1809        void GOMP_ordered_start (void)
   1810        void GOMP_ordered_end (void)
   1811 
   1812 
   1813 File: libgomp.info,  Node: Implementing SECTIONS construct,  Next: Implementing SINGLE construct,  Prev: Implementing ORDERED construct,  Up: The libgomp ABI
   1814 
   1815 4.13 Implementing SECTIONS construct
   1816 ====================================
   1817 
   1818 A block as
   1819 
   1820        #pragma omp sections
   1821        {
   1822          #pragma omp section
   1823          stmt1;
   1824          #pragma omp section
   1825          stmt2;
   1826          #pragma omp section
   1827          stmt3;
   1828        }
   1829 
   1830    becomes
   1831 
   1832        for (i = GOMP_sections_start (3); i != 0; i = GOMP_sections_next ())
   1833          switch (i)
   1834            {
   1835            case 1:
   1836              stmt1;
   1837              break;
   1838            case 2:
   1839              stmt2;
   1840              break;
   1841            case 3:
   1842              stmt3;
   1843              break;
   1844            }
   1845        GOMP_barrier ();
   1846 
   1847 
   1848 File: libgomp.info,  Node: Implementing SINGLE construct,  Prev: Implementing SECTIONS construct,  Up: The libgomp ABI
   1849 
   1850 4.14 Implementing SINGLE construct
   1851 ==================================
   1852 
   1853 A block like
   1854 
   1855        #pragma omp single
   1856        {
   1857          body;
   1858        }
   1859 
   1860    becomes
   1861 
   1862        if (GOMP_single_start ())
   1863          body;
   1864        GOMP_barrier ();
   1865 
   1866    while
   1867 
   1868        #pragma omp single copyprivate(x)
   1869          body;
   1870 
   1871    becomes
   1872 
   1873        datap = GOMP_single_copy_start ();
   1874        if (datap == NULL)
   1875          {
   1876            body;
   1877            data.x = x;
   1878            GOMP_single_copy_end (&data);
   1879          }
   1880        else
   1881          x = datap->x;
   1882        GOMP_barrier ();
   1883 
   1884 
   1885 File: libgomp.info,  Node: Reporting Bugs,  Next: Copying,  Prev: The libgomp ABI,  Up: Top
   1886 
   1887 5 Reporting Bugs
   1888 ****************
   1889 
   1890 Bugs in the GNU Offloading and Multi Processing Runtime Library should
   1891 be reported via Bugzilla (http://gcc.gnu.org/bugzilla/).  Please add
   1892 "openacc", or "openmp", or both to the keywords field in the bug
   1893 report, as appropriate.
   1894 
   1895 
   1896 File: libgomp.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
   1897 
   1898 GNU General Public License
   1899 **************************
   1900 
   1901                         Version 3, 29 June 2007
   1902 
   1903      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
   1904 
   1905      Everyone is permitted to copy and distribute verbatim copies of this
   1906      license document, but changing it is not allowed.
   1907 
   1908 Preamble
   1909 ========
   1910 
   1911 The GNU General Public License is a free, copyleft license for software
   1912 and other kinds of works.
   1913 
   1914    The licenses for most software and other practical works are designed
   1915 to take away your freedom to share and change the works.  By contrast,
   1916 the GNU General Public License is intended to guarantee your freedom to
   1917 share and change all versions of a program-to make sure it remains free
   1918 software for all its users.  We, the Free Software Foundation, use the
   1919 GNU General Public License for most of our software; it applies also to
   1920 any other work released this way by its authors.  You can apply it to
   1921 your programs, too.
   1922 
   1923    When we speak of free software, we are referring to freedom, not
   1924 price.  Our General Public Licenses are designed to make sure that you
   1925 have the freedom to distribute copies of free software (and charge for
   1926 them if you wish), that you receive source code or can get it if you
   1927 want it, that you can change the software or use pieces of it in new
   1928 free programs, and that you know you can do these things.
   1929 
   1930    To protect your rights, we need to prevent others from denying you
   1931 these rights or asking you to surrender the rights.  Therefore, you
   1932 have certain responsibilities if you distribute copies of the software,
   1933 or if you modify it: responsibilities to respect the freedom of others.
   1934 
   1935    For example, if you distribute copies of such a program, whether
   1936 gratis or for a fee, you must pass on to the recipients the same
   1937 freedoms that you received.  You must make sure that they, too, receive
   1938 or can get the source code.  And you must show them these terms so they
   1939 know their rights.
   1940 
   1941    Developers that use the GNU GPL protect your rights with two steps:
   1942 (1) assert copyright on the software, and (2) offer you this License
   1943 giving you legal permission to copy, distribute and/or modify it.
   1944 
   1945    For the developers' and authors' protection, the GPL clearly explains
   1946 that there is no warranty for this free software.  For both users' and
   1947 authors' sake, the GPL requires that modified versions be marked as
   1948 changed, so that their problems will not be attributed erroneously to
   1949 authors of previous versions.
   1950 
   1951    Some devices are designed to deny users access to install or run
   1952 modified versions of the software inside them, although the
   1953 manufacturer can do so.  This is fundamentally incompatible with the
   1954 aim of protecting users' freedom to change the software.  The
   1955 systematic pattern of such abuse occurs in the area of products for
   1956 individuals to use, which is precisely where it is most unacceptable.
   1957 Therefore, we have designed this version of the GPL to prohibit the
   1958 practice for those products.  If such problems arise substantially in
   1959 other domains, we stand ready to extend this provision to those domains
   1960 in future versions of the GPL, as needed to protect the freedom of
   1961 users.
   1962 
   1963    Finally, every program is threatened constantly by software patents.
   1964 States should not allow patents to restrict development and use of
   1965 software on general-purpose computers, but in those that do, we wish to
   1966 avoid the special danger that patents applied to a free program could
   1967 make it effectively proprietary.  To prevent this, the GPL assures that
   1968 patents cannot be used to render the program non-free.
   1969 
   1970    The precise terms and conditions for copying, distribution and
   1971 modification follow.
   1972 
   1973 TERMS AND CONDITIONS
   1974 ====================
   1975 
   1976   0. Definitions.
   1977 
   1978      "This License" refers to version 3 of the GNU General Public
   1979      License.
   1980 
   1981      "Copyright" also means copyright-like laws that apply to other
   1982      kinds of works, such as semiconductor masks.
   1983 
   1984      "The Program" refers to any copyrightable work licensed under this
   1985      License.  Each licensee is addressed as "you".  "Licensees" and
   1986      "recipients" may be individuals or organizations.
   1987 
   1988      To "modify" a work means to copy from or adapt all or part of the
   1989      work in a fashion requiring copyright permission, other than the
   1990      making of an exact copy.  The resulting work is called a "modified
   1991      version" of the earlier work or a work "based on" the earlier work.
   1992 
   1993      A "covered work" means either the unmodified Program or a work
   1994      based on the Program.
   1995 
   1996      To "propagate" a work means to do anything with it that, without
   1997      permission, would make you directly or secondarily liable for
   1998      infringement under applicable copyright law, except executing it
   1999      on a computer or modifying a private copy.  Propagation includes
   2000      copying, distribution (with or without modification), making
   2001      available to the public, and in some countries other activities as
   2002      well.
   2003 
   2004      To "convey" a work means any kind of propagation that enables other
   2005      parties to make or receive copies.  Mere interaction with a user
   2006      through a computer network, with no transfer of a copy, is not
   2007      conveying.
   2008 
   2009      An interactive user interface displays "Appropriate Legal Notices"
   2010      to the extent that it includes a convenient and prominently visible
   2011      feature that (1) displays an appropriate copyright notice, and (2)
   2012      tells the user that there is no warranty for the work (except to
   2013      the extent that warranties are provided), that licensees may
   2014      convey the work under this License, and how to view a copy of this
   2015      License.  If the interface presents a list of user commands or
   2016      options, such as a menu, a prominent item in the list meets this
   2017      criterion.
   2018 
   2019   1. Source Code.
   2020 
   2021      The "source code" for a work means the preferred form of the work
   2022      for making modifications to it.  "Object code" means any
   2023      non-source form of a work.
   2024 
   2025      A "Standard Interface" means an interface that either is an
   2026      official standard defined by a recognized standards body, or, in
   2027      the case of interfaces specified for a particular programming
   2028      language, one that is widely used among developers working in that
   2029      language.
   2030 
   2031      The "System Libraries" of an executable work include anything,
   2032      other than the work as a whole, that (a) is included in the normal
   2033      form of packaging a Major Component, but which is not part of that
   2034      Major Component, and (b) serves only to enable use of the work
   2035      with that Major Component, or to implement a Standard Interface
   2036      for which an implementation is available to the public in source
   2037      code form.  A "Major Component", in this context, means a major
   2038      essential component (kernel, window system, and so on) of the
   2039      specific operating system (if any) on which the executable work
   2040      runs, or a compiler used to produce the work, or an object code
   2041      interpreter used to run it.
   2042 
   2043      The "Corresponding Source" for a work in object code form means all
   2044      the source code needed to generate, install, and (for an executable
   2045      work) run the object code and to modify the work, including
   2046      scripts to control those activities.  However, it does not include
   2047      the work's System Libraries, or general-purpose tools or generally
   2048      available free programs which are used unmodified in performing
   2049      those activities but which are not part of the work.  For example,
   2050      Corresponding Source includes interface definition files
   2051      associated with source files for the work, and the source code for
   2052      shared libraries and dynamically linked subprograms that the work
   2053      is specifically designed to require, such as by intimate data
   2054      communication or control flow between those subprograms and other
   2055      parts of the work.
   2056 
   2057      The Corresponding Source need not include anything that users can
   2058      regenerate automatically from other parts of the Corresponding
   2059      Source.
   2060 
   2061      The Corresponding Source for a work in source code form is that
   2062      same work.
   2063 
   2064   2. Basic Permissions.
   2065 
   2066      All rights granted under this License are granted for the term of
   2067      copyright on the Program, and are irrevocable provided the stated
   2068      conditions are met.  This License explicitly affirms your unlimited
   2069      permission to run the unmodified Program.  The output from running
   2070      a covered work is covered by this License only if the output,
   2071      given its content, constitutes a covered work.  This License
   2072      acknowledges your rights of fair use or other equivalent, as
   2073      provided by copyright law.
   2074 
   2075      You may make, run and propagate covered works that you do not
   2076      convey, without conditions so long as your license otherwise
   2077      remains in force.  You may convey covered works to others for the
   2078      sole purpose of having them make modifications exclusively for
   2079      you, or provide you with facilities for running those works,
   2080      provided that you comply with the terms of this License in
   2081      conveying all material for which you do not control copyright.
   2082      Those thus making or running the covered works for you must do so
   2083      exclusively on your behalf, under your direction and control, on
   2084      terms that prohibit them from making any copies of your
   2085      copyrighted material outside their relationship with you.
   2086 
   2087      Conveying under any other circumstances is permitted solely under
   2088      the conditions stated below.  Sublicensing is not allowed; section
   2089      10 makes it unnecessary.
   2090 
   2091   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   2092 
   2093      No covered work shall be deemed part of an effective technological
   2094      measure under any applicable law fulfilling obligations under
   2095      article 11 of the WIPO copyright treaty adopted on 20 December
   2096      1996, or similar laws prohibiting or restricting circumvention of
   2097      such measures.
   2098 
   2099      When you convey a covered work, you waive any legal power to forbid
   2100      circumvention of technological measures to the extent such
   2101      circumvention is effected by exercising rights under this License
   2102      with respect to the covered work, and you disclaim any intention
   2103      to limit operation or modification of the work as a means of
   2104      enforcing, against the work's users, your or third parties' legal
   2105      rights to forbid circumvention of technological measures.
   2106 
   2107   4. Conveying Verbatim Copies.
   2108 
   2109      You may convey verbatim copies of the Program's source code as you
   2110      receive it, in any medium, provided that you conspicuously and
   2111      appropriately publish on each copy an appropriate copyright notice;
   2112      keep intact all notices stating that this License and any
   2113      non-permissive terms added in accord with section 7 apply to the
   2114      code; keep intact all notices of the absence of any warranty; and
   2115      give all recipients a copy of this License along with the Program.
   2116 
   2117      You may charge any price or no price for each copy that you convey,
   2118      and you may offer support or warranty protection for a fee.
   2119 
   2120   5. Conveying Modified Source Versions.
   2121 
   2122      You may convey a work based on the Program, or the modifications to
   2123      produce it from the Program, in the form of source code under the
   2124      terms of section 4, provided that you also meet all of these
   2125      conditions:
   2126 
   2127        a. The work must carry prominent notices stating that you
   2128           modified it, and giving a relevant date.
   2129 
   2130        b. The work must carry prominent notices stating that it is
   2131           released under this License and any conditions added under
   2132           section 7.  This requirement modifies the requirement in
   2133           section 4 to "keep intact all notices".
   2134 
   2135        c. You must license the entire work, as a whole, under this
   2136           License to anyone who comes into possession of a copy.  This
   2137           License will therefore apply, along with any applicable
   2138           section 7 additional terms, to the whole of the work, and all
   2139           its parts, regardless of how they are packaged.  This License
   2140           gives no permission to license the work in any other way, but
   2141           it does not invalidate such permission if you have separately
   2142           received it.
   2143 
   2144        d. If the work has interactive user interfaces, each must display
   2145           Appropriate Legal Notices; however, if the Program has
   2146           interactive interfaces that do not display Appropriate Legal
   2147           Notices, your work need not make them do so.
   2148 
   2149      A compilation of a covered work with other separate and independent
   2150      works, which are not by their nature extensions of the covered
   2151      work, and which are not combined with it such as to form a larger
   2152      program, in or on a volume of a storage or distribution medium, is
   2153      called an "aggregate" if the compilation and its resulting
   2154      copyright are not used to limit the access or legal rights of the
   2155      compilation's users beyond what the individual works permit.
   2156      Inclusion of a covered work in an aggregate does not cause this
   2157      License to apply to the other parts of the aggregate.
   2158 
   2159   6. Conveying Non-Source Forms.
   2160 
   2161      You may convey a covered work in object code form under the terms
   2162      of sections 4 and 5, provided that you also convey the
   2163      machine-readable Corresponding Source under the terms of this
   2164      License, in one of these ways:
   2165 
   2166        a. Convey the object code in, or embodied in, a physical product
   2167           (including a physical distribution medium), accompanied by the
   2168           Corresponding Source fixed on a durable physical medium
   2169           customarily used for software interchange.
   2170 
   2171        b. Convey the object code in, or embodied in, a physical product
   2172           (including a physical distribution medium), accompanied by a
   2173           written offer, valid for at least three years and valid for
   2174           as long as you offer spare parts or customer support for that
   2175           product model, to give anyone who possesses the object code
   2176           either (1) a copy of the Corresponding Source for all the
   2177           software in the product that is covered by this License, on a
   2178           durable physical medium customarily used for software
   2179           interchange, for a price no more than your reasonable cost of
   2180           physically performing this conveying of source, or (2) access
   2181           to copy the Corresponding Source from a network server at no
   2182           charge.
   2183 
   2184        c. Convey individual copies of the object code with a copy of
   2185           the written offer to provide the Corresponding Source.  This
   2186           alternative is allowed only occasionally and noncommercially,
   2187           and only if you received the object code with such an offer,
   2188           in accord with subsection 6b.
   2189 
   2190        d. Convey the object code by offering access from a designated
   2191           place (gratis or for a charge), and offer equivalent access
   2192           to the Corresponding Source in the same way through the same
   2193           place at no further charge.  You need not require recipients
   2194           to copy the Corresponding Source along with the object code.
   2195           If the place to copy the object code is a network server, the
   2196           Corresponding Source may be on a different server (operated
   2197           by you or a third party) that supports equivalent copying
   2198           facilities, provided you maintain clear directions next to
   2199           the object code saying where to find the Corresponding Source.
   2200           Regardless of what server hosts the Corresponding Source, you
   2201           remain obligated to ensure that it is available for as long
   2202           as needed to satisfy these requirements.
   2203 
   2204        e. Convey the object code using peer-to-peer transmission,
   2205           provided you inform other peers where the object code and
   2206           Corresponding Source of the work are being offered to the
   2207           general public at no charge under subsection 6d.
   2208 
   2209 
   2210      A separable portion of the object code, whose source code is
   2211      excluded from the Corresponding Source as a System Library, need
   2212      not be included in conveying the object code work.
   2213 
   2214      A "User Product" is either (1) a "consumer product", which means
   2215      any tangible personal property which is normally used for personal,
   2216      family, or household purposes, or (2) anything designed or sold for
   2217      incorporation into a dwelling.  In determining whether a product
   2218      is a consumer product, doubtful cases shall be resolved in favor of
   2219      coverage.  For a particular product received by a particular user,
   2220      "normally used" refers to a typical or common use of that class of
   2221      product, regardless of the status of the particular user or of the
   2222      way in which the particular user actually uses, or expects or is
   2223      expected to use, the product.  A product is a consumer product
   2224      regardless of whether the product has substantial commercial,
   2225      industrial or non-consumer uses, unless such uses represent the
   2226      only significant mode of use of the product.
   2227 
   2228      "Installation Information" for a User Product means any methods,
   2229      procedures, authorization keys, or other information required to
   2230      install and execute modified versions of a covered work in that
   2231      User Product from a modified version of its Corresponding Source.
   2232      The information must suffice to ensure that the continued
   2233      functioning of the modified object code is in no case prevented or
   2234      interfered with solely because modification has been made.
   2235 
   2236      If you convey an object code work under this section in, or with,
   2237      or specifically for use in, a User Product, and the conveying
   2238      occurs as part of a transaction in which the right of possession
   2239      and use of the User Product is transferred to the recipient in
   2240      perpetuity or for a fixed term (regardless of how the transaction
   2241      is characterized), the Corresponding Source conveyed under this
   2242      section must be accompanied by the Installation Information.  But
   2243      this requirement does not apply if neither you nor any third party
   2244      retains the ability to install modified object code on the User
   2245      Product (for example, the work has been installed in ROM).
   2246 
   2247      The requirement to provide Installation Information does not
   2248      include a requirement to continue to provide support service,
   2249      warranty, or updates for a work that has been modified or
   2250      installed by the recipient, or for the User Product in which it
   2251      has been modified or installed.  Access to a network may be denied
   2252      when the modification itself materially and adversely affects the
   2253      operation of the network or violates the rules and protocols for
   2254      communication across the network.
   2255 
   2256      Corresponding Source conveyed, and Installation Information
   2257      provided, in accord with this section must be in a format that is
   2258      publicly documented (and with an implementation available to the
   2259      public in source code form), and must require no special password
   2260      or key for unpacking, reading or copying.
   2261 
   2262   7. Additional Terms.
   2263 
   2264      "Additional permissions" are terms that supplement the terms of
   2265      this License by making exceptions from one or more of its
   2266      conditions.  Additional permissions that are applicable to the
   2267      entire Program shall be treated as though they were included in
   2268      this License, to the extent that they are valid under applicable
   2269      law.  If additional permissions apply only to part of the Program,
   2270      that part may be used separately under those permissions, but the
   2271      entire Program remains governed by this License without regard to
   2272      the additional permissions.
   2273 
   2274      When you convey a copy of a covered work, you may at your option
   2275      remove any additional permissions from that copy, or from any part
   2276      of it.  (Additional permissions may be written to require their own
   2277      removal in certain cases when you modify the work.)  You may place
   2278      additional permissions on material, added by you to a covered work,
   2279      for which you have or can give appropriate copyright permission.
   2280 
   2281      Notwithstanding any other provision of this License, for material
   2282      you add to a covered work, you may (if authorized by the copyright
   2283      holders of that material) supplement the terms of this License
   2284      with terms:
   2285 
   2286        a. Disclaiming warranty or limiting liability differently from
   2287           the terms of sections 15 and 16 of this License; or
   2288 
   2289        b. Requiring preservation of specified reasonable legal notices
   2290           or author attributions in that material or in the Appropriate
   2291           Legal Notices displayed by works containing it; or
   2292 
   2293        c. Prohibiting misrepresentation of the origin of that material,
   2294           or requiring that modified versions of such material be
   2295           marked in reasonable ways as different from the original
   2296           version; or
   2297 
   2298        d. Limiting the use for publicity purposes of names of licensors
   2299           or authors of the material; or
   2300 
   2301        e. Declining to grant rights under trademark law for use of some
   2302           trade names, trademarks, or service marks; or
   2303 
   2304        f. Requiring indemnification of licensors and authors of that
   2305           material by anyone who conveys the material (or modified
   2306           versions of it) with contractual assumptions of liability to
   2307           the recipient, for any liability that these contractual
   2308           assumptions directly impose on those licensors and authors.
   2309 
   2310      All other non-permissive additional terms are considered "further
   2311      restrictions" within the meaning of section 10.  If the Program as
   2312      you received it, or any part of it, contains a notice stating that
   2313      it is governed by this License along with a term that is a further
   2314      restriction, you may remove that term.  If a license document
   2315      contains a further restriction but permits relicensing or
   2316      conveying under this License, you may add to a covered work
   2317      material governed by the terms of that license document, provided
   2318      that the further restriction does not survive such relicensing or
   2319      conveying.
   2320 
   2321      If you add terms to a covered work in accord with this section, you
   2322      must place, in the relevant source files, a statement of the
   2323      additional terms that apply to those files, or a notice indicating
   2324      where to find the applicable terms.
   2325 
   2326      Additional terms, permissive or non-permissive, may be stated in
   2327      the form of a separately written license, or stated as exceptions;
   2328      the above requirements apply either way.
   2329 
   2330   8. Termination.
   2331 
   2332      You may not propagate or modify a covered work except as expressly
   2333      provided under this License.  Any attempt otherwise to propagate or
   2334      modify it is void, and will automatically terminate your rights
   2335      under this License (including any patent licenses granted under
   2336      the third paragraph of section 11).
   2337 
   2338      However, if you cease all violation of this License, then your
   2339      license from a particular copyright holder is reinstated (a)
   2340      provisionally, unless and until the copyright holder explicitly
   2341      and finally terminates your license, and (b) permanently, if the
   2342      copyright holder fails to notify you of the violation by some
   2343      reasonable means prior to 60 days after the cessation.
   2344 
   2345      Moreover, your license from a particular copyright holder is
   2346      reinstated permanently if the copyright holder notifies you of the
   2347      violation by some reasonable means, this is the first time you have
   2348      received notice of violation of this License (for any work) from
   2349      that copyright holder, and you cure the violation prior to 30 days
   2350      after your receipt of the notice.
   2351 
   2352      Termination of your rights under this section does not terminate
   2353      the licenses of parties who have received copies or rights from
   2354      you under this License.  If your rights have been terminated and
   2355      not permanently reinstated, you do not qualify to receive new
   2356      licenses for the same material under section 10.
   2357 
   2358   9. Acceptance Not Required for Having Copies.
   2359 
   2360      You are not required to accept this License in order to receive or
   2361      run a copy of the Program.  Ancillary propagation of a covered work
   2362      occurring solely as a consequence of using peer-to-peer
   2363      transmission to receive a copy likewise does not require
   2364      acceptance.  However, nothing other than this License grants you
   2365      permission to propagate or modify any covered work.  These actions
   2366      infringe copyright if you do not accept this License.  Therefore,
   2367      by modifying or propagating a covered work, you indicate your
   2368      acceptance of this License to do so.
   2369 
   2370  10. Automatic Licensing of Downstream Recipients.
   2371 
   2372      Each time you convey a covered work, the recipient automatically
   2373      receives a license from the original licensors, to run, modify and
   2374      propagate that work, subject to this License.  You are not
   2375      responsible for enforcing compliance by third parties with this
   2376      License.
   2377 
   2378      An "entity transaction" is a transaction transferring control of an
   2379      organization, or substantially all assets of one, or subdividing an
   2380      organization, or merging organizations.  If propagation of a
   2381      covered work results from an entity transaction, each party to that
   2382      transaction who receives a copy of the work also receives whatever
   2383      licenses to the work the party's predecessor in interest had or
   2384      could give under the previous paragraph, plus a right to
   2385      possession of the Corresponding Source of the work from the
   2386      predecessor in interest, if the predecessor has it or can get it
   2387      with reasonable efforts.
   2388 
   2389      You may not impose any further restrictions on the exercise of the
   2390      rights granted or affirmed under this License.  For example, you
   2391      may not impose a license fee, royalty, or other charge for
   2392      exercise of rights granted under this License, and you may not
   2393      initiate litigation (including a cross-claim or counterclaim in a
   2394      lawsuit) alleging that any patent claim is infringed by making,
   2395      using, selling, offering for sale, or importing the Program or any
   2396      portion of it.
   2397 
   2398  11. Patents.
   2399 
   2400      A "contributor" is a copyright holder who authorizes use under this
   2401      License of the Program or a work on which the Program is based.
   2402      The work thus licensed is called the contributor's "contributor
   2403      version".
   2404 
   2405      A contributor's "essential patent claims" are all patent claims
   2406      owned or controlled by the contributor, whether already acquired or
   2407      hereafter acquired, that would be infringed by some manner,
   2408      permitted by this License, of making, using, or selling its
   2409      contributor version, but do not include claims that would be
   2410      infringed only as a consequence of further modification of the
   2411      contributor version.  For purposes of this definition, "control"
   2412      includes the right to grant patent sublicenses in a manner
   2413      consistent with the requirements of this License.
   2414 
   2415      Each contributor grants you a non-exclusive, worldwide,
   2416      royalty-free patent license under the contributor's essential
   2417      patent claims, to make, use, sell, offer for sale, import and
   2418      otherwise run, modify and propagate the contents of its
   2419      contributor version.
   2420 
   2421      In the following three paragraphs, a "patent license" is any
   2422      express agreement or commitment, however denominated, not to
   2423      enforce a patent (such as an express permission to practice a
   2424      patent or covenant not to sue for patent infringement).  To
   2425      "grant" such a patent license to a party means to make such an
   2426      agreement or commitment not to enforce a patent against the party.
   2427 
   2428      If you convey a covered work, knowingly relying on a patent
   2429      license, and the Corresponding Source of the work is not available
   2430      for anyone to copy, free of charge and under the terms of this
   2431      License, through a publicly available network server or other
   2432      readily accessible means, then you must either (1) cause the
   2433      Corresponding Source to be so available, or (2) arrange to deprive
   2434      yourself of the benefit of the patent license for this particular
   2435      work, or (3) arrange, in a manner consistent with the requirements
   2436      of this License, to extend the patent license to downstream
   2437      recipients.  "Knowingly relying" means you have actual knowledge
   2438      that, but for the patent license, your conveying the covered work
   2439      in a country, or your recipient's use of the covered work in a
   2440      country, would infringe one or more identifiable patents in that
   2441      country that you have reason to believe are valid.
   2442 
   2443      If, pursuant to or in connection with a single transaction or
   2444      arrangement, you convey, or propagate by procuring conveyance of, a
   2445      covered work, and grant a patent license to some of the parties
   2446      receiving the covered work authorizing them to use, propagate,
   2447      modify or convey a specific copy of the covered work, then the
   2448      patent license you grant is automatically extended to all
   2449      recipients of the covered work and works based on it.
   2450 
   2451      A patent license is "discriminatory" if it does not include within
   2452      the scope of its coverage, prohibits the exercise of, or is
   2453      conditioned on the non-exercise of one or more of the rights that
   2454      are specifically granted under this License.  You may not convey a
   2455      covered work if you are a party to an arrangement with a third
   2456      party that is in the business of distributing software, under
   2457      which you make payment to the third party based on the extent of
   2458      your activity of conveying the work, and under which the third
   2459      party grants, to any of the parties who would receive the covered
   2460      work from you, a discriminatory patent license (a) in connection
   2461      with copies of the covered work conveyed by you (or copies made
   2462      from those copies), or (b) primarily for and in connection with
   2463      specific products or compilations that contain the covered work,
   2464      unless you entered into that arrangement, or that patent license
   2465      was granted, prior to 28 March 2007.
   2466 
   2467      Nothing in this License shall be construed as excluding or limiting
   2468      any implied license or other defenses to infringement that may
   2469      otherwise be available to you under applicable patent law.
   2470 
   2471  12. No Surrender of Others' Freedom.
   2472 
   2473      If conditions are imposed on you (whether by court order,
   2474      agreement or otherwise) that contradict the conditions of this
   2475      License, they do not excuse you from the conditions of this
   2476      License.  If you cannot convey a covered work so as to satisfy
   2477      simultaneously your obligations under this License and any other
   2478      pertinent obligations, then as a consequence you may not convey it
   2479      at all.  For example, if you agree to terms that obligate you to
   2480      collect a royalty for further conveying from those to whom you
   2481      convey the Program, the only way you could satisfy both those
   2482      terms and this License would be to refrain entirely from conveying
   2483      the Program.
   2484 
   2485  13. Use with the GNU Affero General Public License.
   2486 
   2487      Notwithstanding any other provision of this License, you have
   2488      permission to link or combine any covered work with a work licensed
   2489      under version 3 of the GNU Affero General Public License into a
   2490      single combined work, and to convey the resulting work.  The terms
   2491      of this License will continue to apply to the part which is the
   2492      covered work, but the special requirements of the GNU Affero
   2493      General Public License, section 13, concerning interaction through
   2494      a network will apply to the combination as such.
   2495 
   2496  14. Revised Versions of this License.
   2497 
   2498      The Free Software Foundation may publish revised and/or new
   2499      versions of the GNU General Public License from time to time.
   2500      Such new versions will be similar in spirit to the present
   2501      version, but may differ in detail to address new problems or
   2502      concerns.
   2503 
   2504      Each version is given a distinguishing version number.  If the
   2505      Program specifies that a certain numbered version of the GNU
   2506      General Public License "or any later version" applies to it, you
   2507      have the option of following the terms and conditions either of
   2508      that numbered version or of any later version published by the
   2509      Free Software Foundation.  If the Program does not specify a
   2510      version number of the GNU General Public License, you may choose
   2511      any version ever published by the Free Software Foundation.
   2512 
   2513      If the Program specifies that a proxy can decide which future
   2514      versions of the GNU General Public License can be used, that
   2515      proxy's public statement of acceptance of a version permanently
   2516      authorizes you to choose that version for the Program.
   2517 
   2518      Later license versions may give you additional or different
   2519      permissions.  However, no additional obligations are imposed on any
   2520      author or copyright holder as a result of your choosing to follow a
   2521      later version.
   2522 
   2523  15. Disclaimer of Warranty.
   2524 
   2525      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   2526      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   2527      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   2528      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   2529      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   2530      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
   2531      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   2532      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   2533      NECESSARY SERVICING, REPAIR OR CORRECTION.
   2534 
   2535  16. Limitation of Liability.
   2536 
   2537      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   2538      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   2539      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
   2540      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   2541      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   2542      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   2543      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   2544      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   2545      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   2546      THE POSSIBILITY OF SUCH DAMAGES.
   2547 
   2548  17. Interpretation of Sections 15 and 16.
   2549 
   2550      If the disclaimer of warranty and limitation of liability provided
   2551      above cannot be given local legal effect according to their terms,
   2552      reviewing courts shall apply local law that most closely
   2553      approximates an absolute waiver of all civil liability in
   2554      connection with the Program, unless a warranty or assumption of
   2555      liability accompanies a copy of the Program in return for a fee.
   2556 
   2557 
   2558 END OF TERMS AND CONDITIONS
   2559 ===========================
   2560 
   2561 How to Apply These Terms to Your New Programs
   2562 =============================================
   2563 
   2564 If you develop a new program, and you want it to be of the greatest
   2565 possible use to the public, the best way to achieve this is to make it
   2566 free software which everyone can redistribute and change under these
   2567 terms.
   2568 
   2569    To do so, attach the following notices to the program.  It is safest
   2570 to attach them to the start of each source file to most effectively
   2571 state the exclusion of warranty; and each file should have at least the
   2572 "copyright" line and a pointer to where the full notice is found.
   2573 
   2574      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   2575      Copyright (C) YEAR NAME OF AUTHOR
   2576 
   2577      This program is free software: you can redistribute it and/or modify
   2578      it under the terms of the GNU General Public License as published by
   2579      the Free Software Foundation, either version 3 of the License, or (at
   2580      your option) any later version.
   2581 
   2582      This program is distributed in the hope that it will be useful, but
   2583      WITHOUT ANY WARRANTY; without even the implied warranty of
   2584      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   2585      General Public License for more details.
   2586 
   2587      You should have received a copy of the GNU General Public License
   2588      along with this program.  If not, see `http://www.gnu.org/licenses/'.
   2589 
   2590    Also add information on how to contact you by electronic and paper
   2591 mail.
   2592 
   2593    If the program does terminal interaction, make it output a short
   2594 notice like this when it starts in an interactive mode:
   2595 
   2596      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   2597      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
   2598      This is free software, and you are welcome to redistribute it
   2599      under certain conditions; type `show c' for details.
   2600 
   2601    The hypothetical commands `show w' and `show c' should show the
   2602 appropriate parts of the General Public License.  Of course, your
   2603 program's commands might be different; for a GUI interface, you would
   2604 use an "about box".
   2605 
   2606    You should also get your employer (if you work as a programmer) or
   2607 school, if any, to sign a "copyright disclaimer" for the program, if
   2608 necessary.  For more information on this, and how to apply and follow
   2609 the GNU GPL, see `http://www.gnu.org/licenses/'.
   2610 
   2611    The GNU General Public License does not permit incorporating your
   2612 program into proprietary programs.  If your program is a subroutine
   2613 library, you may consider it more useful to permit linking proprietary
   2614 applications with the library.  If this is what you want to do, use the
   2615 GNU Lesser General Public License instead of this License.  But first,
   2616 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
   2617 
   2618 
   2619 File: libgomp.info,  Node: GNU Free Documentation License,  Next: Funding,  Prev: Copying,  Up: Top
   2620 
   2621 GNU Free Documentation License
   2622 ******************************
   2623 
   2624                      Version 1.3, 3 November 2008
   2625 
   2626      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
   2627      `http://fsf.org/'
   2628 
   2629      Everyone is permitted to copy and distribute verbatim copies
   2630      of this license document, but changing it is not allowed.
   2631 
   2632   0. PREAMBLE
   2633 
   2634      The purpose of this License is to make a manual, textbook, or other
   2635      functional and useful document "free" in the sense of freedom: to
   2636      assure everyone the effective freedom to copy and redistribute it,
   2637      with or without modifying it, either commercially or
   2638      noncommercially.  Secondarily, this License preserves for the
   2639      author and publisher a way to get credit for their work, while not
   2640      being considered responsible for modifications made by others.
   2641 
   2642      This License is a kind of "copyleft", which means that derivative
   2643      works of the document must themselves be free in the same sense.
   2644      It complements the GNU General Public License, which is a copyleft
   2645      license designed for free software.
   2646 
   2647      We have designed this License in order to use it for manuals for
   2648      free software, because free software needs free documentation: a
   2649      free program should come with manuals providing the same freedoms
   2650      that the software does.  But this License is not limited to
   2651      software manuals; it can be used for any textual work, regardless
   2652      of subject matter or whether it is published as a printed book.
   2653      We recommend this License principally for works whose purpose is
   2654      instruction or reference.
   2655 
   2656   1. APPLICABILITY AND DEFINITIONS
   2657 
   2658      This License applies to any manual or other work, in any medium,
   2659      that contains a notice placed by the copyright holder saying it
   2660      can be distributed under the terms of this License.  Such a notice
   2661      grants a world-wide, royalty-free license, unlimited in duration,
   2662      to use that work under the conditions stated herein.  The
   2663      "Document", below, refers to any such manual or work.  Any member
   2664      of the public is a licensee, and is addressed as "you".  You
   2665      accept the license if you copy, modify or distribute the work in a
   2666      way requiring permission under copyright law.
   2667 
   2668      A "Modified Version" of the Document means any work containing the
   2669      Document or a portion of it, either copied verbatim, or with
   2670      modifications and/or translated into another language.
   2671 
   2672      A "Secondary Section" is a named appendix or a front-matter section
   2673      of the Document that deals exclusively with the relationship of the
   2674      publishers or authors of the Document to the Document's overall
   2675      subject (or to related matters) and contains nothing that could
   2676      fall directly within that overall subject.  (Thus, if the Document
   2677      is in part a textbook of mathematics, a Secondary Section may not
   2678      explain any mathematics.)  The relationship could be a matter of
   2679      historical connection with the subject or with related matters, or
   2680      of legal, commercial, philosophical, ethical or political position
   2681      regarding them.
   2682 
   2683      The "Invariant Sections" are certain Secondary Sections whose
   2684      titles are designated, as being those of Invariant Sections, in
   2685      the notice that says that the Document is released under this
   2686      License.  If a section does not fit the above definition of
   2687      Secondary then it is not allowed to be designated as Invariant.
   2688      The Document may contain zero Invariant Sections.  If the Document
   2689      does not identify any Invariant Sections then there are none.
   2690 
   2691      The "Cover Texts" are certain short passages of text that are
   2692      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   2693      that says that the Document is released under this License.  A
   2694      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   2695      be at most 25 words.
   2696 
   2697      A "Transparent" copy of the Document means a machine-readable copy,
   2698      represented in a format whose specification is available to the
   2699      general public, that is suitable for revising the document
   2700      straightforwardly with generic text editors or (for images
   2701      composed of pixels) generic paint programs or (for drawings) some
   2702      widely available drawing editor, and that is suitable for input to
   2703      text formatters or for automatic translation to a variety of
   2704      formats suitable for input to text formatters.  A copy made in an
   2705      otherwise Transparent file format whose markup, or absence of
   2706      markup, has been arranged to thwart or discourage subsequent
   2707      modification by readers is not Transparent.  An image format is
   2708      not Transparent if used for any substantial amount of text.  A
   2709      copy that is not "Transparent" is called "Opaque".
   2710 
   2711      Examples of suitable formats for Transparent copies include plain
   2712      ASCII without markup, Texinfo input format, LaTeX input format,
   2713      SGML or XML using a publicly available DTD, and
   2714      standard-conforming simple HTML, PostScript or PDF designed for
   2715      human modification.  Examples of transparent image formats include
   2716      PNG, XCF and JPG.  Opaque formats include proprietary formats that
   2717      can be read and edited only by proprietary word processors, SGML or
   2718      XML for which the DTD and/or processing tools are not generally
   2719      available, and the machine-generated HTML, PostScript or PDF
   2720      produced by some word processors for output purposes only.
   2721 
   2722      The "Title Page" means, for a printed book, the title page itself,
   2723      plus such following pages as are needed to hold, legibly, the
   2724      material this License requires to appear in the title page.  For
   2725      works in formats which do not have any title page as such, "Title
   2726      Page" means the text near the most prominent appearance of the
   2727      work's title, preceding the beginning of the body of the text.
   2728 
   2729      The "publisher" means any person or entity that distributes copies
   2730      of the Document to the public.
   2731 
   2732      A section "Entitled XYZ" means a named subunit of the Document
   2733      whose title either is precisely XYZ or contains XYZ in parentheses
   2734      following text that translates XYZ in another language.  (Here XYZ
   2735      stands for a specific section name mentioned below, such as
   2736      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   2737      To "Preserve the Title" of such a section when you modify the
   2738      Document means that it remains a section "Entitled XYZ" according
   2739      to this definition.
   2740 
   2741      The Document may include Warranty Disclaimers next to the notice
   2742      which states that this License applies to the Document.  These
   2743      Warranty Disclaimers are considered to be included by reference in
   2744      this License, but only as regards disclaiming warranties: any other
   2745      implication that these Warranty Disclaimers may have is void and
   2746      has no effect on the meaning of this License.
   2747 
   2748   2. VERBATIM COPYING
   2749 
   2750      You may copy and distribute the Document in any medium, either
   2751      commercially or noncommercially, provided that this License, the
   2752      copyright notices, and the license notice saying this License
   2753      applies to the Document are reproduced in all copies, and that you
   2754      add no other conditions whatsoever to those of this License.  You
   2755      may not use technical measures to obstruct or control the reading
   2756      or further copying of the copies you make or distribute.  However,
   2757      you may accept compensation in exchange for copies.  If you
   2758      distribute a large enough number of copies you must also follow
   2759      the conditions in section 3.
   2760 
   2761      You may also lend copies, under the same conditions stated above,
   2762      and you may publicly display copies.
   2763 
   2764   3. COPYING IN QUANTITY
   2765 
   2766      If you publish printed copies (or copies in media that commonly
   2767      have printed covers) of the Document, numbering more than 100, and
   2768      the Document's license notice requires Cover Texts, you must
   2769      enclose the copies in covers that carry, clearly and legibly, all
   2770      these Cover Texts: Front-Cover Texts on the front cover, and
   2771      Back-Cover Texts on the back cover.  Both covers must also clearly
   2772      and legibly identify you as the publisher of these copies.  The
   2773      front cover must present the full title with all words of the
   2774      title equally prominent and visible.  You may add other material
   2775      on the covers in addition.  Copying with changes limited to the
   2776      covers, as long as they preserve the title of the Document and
   2777      satisfy these conditions, can be treated as verbatim copying in
   2778      other respects.
   2779 
   2780      If the required texts for either cover are too voluminous to fit
   2781      legibly, you should put the first ones listed (as many as fit
   2782      reasonably) on the actual cover, and continue the rest onto
   2783      adjacent pages.
   2784 
   2785      If you publish or distribute Opaque copies of the Document
   2786      numbering more than 100, you must either include a
   2787      machine-readable Transparent copy along with each Opaque copy, or
   2788      state in or with each Opaque copy a computer-network location from
   2789      which the general network-using public has access to download
   2790      using public-standard network protocols a complete Transparent
   2791      copy of the Document, free of added material.  If you use the
   2792      latter option, you must take reasonably prudent steps, when you
   2793      begin distribution of Opaque copies in quantity, to ensure that
   2794      this Transparent copy will remain thus accessible at the stated
   2795      location until at least one year after the last time you
   2796      distribute an Opaque copy (directly or through your agents or
   2797      retailers) of that edition to the public.
   2798 
   2799      It is requested, but not required, that you contact the authors of
   2800      the Document well before redistributing any large number of
   2801      copies, to give them a chance to provide you with an updated
   2802      version of the Document.
   2803 
   2804   4. MODIFICATIONS
   2805 
   2806      You may copy and distribute a Modified Version of the Document
   2807      under the conditions of sections 2 and 3 above, provided that you
   2808      release the Modified Version under precisely this License, with
   2809      the Modified Version filling the role of the Document, thus
   2810      licensing distribution and modification of the Modified Version to
   2811      whoever possesses a copy of it.  In addition, you must do these
   2812      things in the Modified Version:
   2813 
   2814        A. Use in the Title Page (and on the covers, if any) a title
   2815           distinct from that of the Document, and from those of
   2816           previous versions (which should, if there were any, be listed
   2817           in the History section of the Document).  You may use the
   2818           same title as a previous version if the original publisher of
   2819           that version gives permission.
   2820 
   2821        B. List on the Title Page, as authors, one or more persons or
   2822           entities responsible for authorship of the modifications in
   2823           the Modified Version, together with at least five of the
   2824           principal authors of the Document (all of its principal
   2825           authors, if it has fewer than five), unless they release you
   2826           from this requirement.
   2827 
   2828        C. State on the Title page the name of the publisher of the
   2829           Modified Version, as the publisher.
   2830 
   2831        D. Preserve all the copyright notices of the Document.
   2832 
   2833        E. Add an appropriate copyright notice for your modifications
   2834           adjacent to the other copyright notices.
   2835 
   2836        F. Include, immediately after the copyright notices, a license
   2837           notice giving the public permission to use the Modified
   2838           Version under the terms of this License, in the form shown in
   2839           the Addendum below.
   2840 
   2841        G. Preserve in that license notice the full lists of Invariant
   2842           Sections and required Cover Texts given in the Document's
   2843           license notice.
   2844 
   2845        H. Include an unaltered copy of this License.
   2846 
   2847        I. Preserve the section Entitled "History", Preserve its Title,
   2848           and add to it an item stating at least the title, year, new
   2849           authors, and publisher of the Modified Version as given on
   2850           the Title Page.  If there is no section Entitled "History" in
   2851           the Document, create one stating the title, year, authors,
   2852           and publisher of the Document as given on its Title Page,
   2853           then add an item describing the Modified Version as stated in
   2854           the previous sentence.
   2855 
   2856        J. Preserve the network location, if any, given in the Document
   2857           for public access to a Transparent copy of the Document, and
   2858           likewise the network locations given in the Document for
   2859           previous versions it was based on.  These may be placed in
   2860           the "History" section.  You may omit a network location for a
   2861           work that was published at least four years before the
   2862           Document itself, or if the original publisher of the version
   2863           it refers to gives permission.
   2864 
   2865        K. For any section Entitled "Acknowledgements" or "Dedications",
   2866           Preserve the Title of the section, and preserve in the
   2867           section all the substance and tone of each of the contributor
   2868           acknowledgements and/or dedications given therein.
   2869 
   2870        L. Preserve all the Invariant Sections of the Document,
   2871           unaltered in their text and in their titles.  Section numbers
   2872           or the equivalent are not considered part of the section
   2873           titles.
   2874 
   2875        M. Delete any section Entitled "Endorsements".  Such a section
   2876           may not be included in the Modified Version.
   2877 
   2878        N. Do not retitle any existing section to be Entitled
   2879           "Endorsements" or to conflict in title with any Invariant
   2880           Section.
   2881 
   2882        O. Preserve any Warranty Disclaimers.
   2883 
   2884      If the Modified Version includes new front-matter sections or
   2885      appendices that qualify as Secondary Sections and contain no
   2886      material copied from the Document, you may at your option
   2887      designate some or all of these sections as invariant.  To do this,
   2888      add their titles to the list of Invariant Sections in the Modified
   2889      Version's license notice.  These titles must be distinct from any
   2890      other section titles.
   2891 
   2892      You may add a section Entitled "Endorsements", provided it contains
   2893      nothing but endorsements of your Modified Version by various
   2894      parties--for example, statements of peer review or that the text
   2895      has been approved by an organization as the authoritative
   2896      definition of a standard.
   2897 
   2898      You may add a passage of up to five words as a Front-Cover Text,
   2899      and a passage of up to 25 words as a Back-Cover Text, to the end
   2900      of the list of Cover Texts in the Modified Version.  Only one
   2901      passage of Front-Cover Text and one of Back-Cover Text may be
   2902      added by (or through arrangements made by) any one entity.  If the
   2903      Document already includes a cover text for the same cover,
   2904      previously added by you or by arrangement made by the same entity
   2905      you are acting on behalf of, you may not add another; but you may
   2906      replace the old one, on explicit permission from the previous
   2907      publisher that added the old one.
   2908 
   2909      The author(s) and publisher(s) of the Document do not by this
   2910      License give permission to use their names for publicity for or to
   2911      assert or imply endorsement of any Modified Version.
   2912 
   2913   5. COMBINING DOCUMENTS
   2914 
   2915      You may combine the Document with other documents released under
   2916      this License, under the terms defined in section 4 above for
   2917      modified versions, provided that you include in the combination
   2918      all of the Invariant Sections of all of the original documents,
   2919      unmodified, and list them all as Invariant Sections of your
   2920      combined work in its license notice, and that you preserve all
   2921      their Warranty Disclaimers.
   2922 
   2923      The combined work need only contain one copy of this License, and
   2924      multiple identical Invariant Sections may be replaced with a single
   2925      copy.  If there are multiple Invariant Sections with the same name
   2926      but different contents, make the title of each such section unique
   2927      by adding at the end of it, in parentheses, the name of the
   2928      original author or publisher of that section if known, or else a
   2929      unique number.  Make the same adjustment to the section titles in
   2930      the list of Invariant Sections in the license notice of the
   2931      combined work.
   2932 
   2933      In the combination, you must combine any sections Entitled
   2934      "History" in the various original documents, forming one section
   2935      Entitled "History"; likewise combine any sections Entitled
   2936      "Acknowledgements", and any sections Entitled "Dedications".  You
   2937      must delete all sections Entitled "Endorsements."
   2938 
   2939   6. COLLECTIONS OF DOCUMENTS
   2940 
   2941      You may make a collection consisting of the Document and other
   2942      documents released under this License, and replace the individual
   2943      copies of this License in the various documents with a single copy
   2944      that is included in the collection, provided that you follow the
   2945      rules of this License for verbatim copying of each of the
   2946      documents in all other respects.
   2947 
   2948      You may extract a single document from such a collection, and
   2949      distribute it individually under this License, provided you insert
   2950      a copy of this License into the extracted document, and follow
   2951      this License in all other respects regarding verbatim copying of
   2952      that document.
   2953 
   2954   7. AGGREGATION WITH INDEPENDENT WORKS
   2955 
   2956      A compilation of the Document or its derivatives with other
   2957      separate and independent documents or works, in or on a volume of
   2958      a storage or distribution medium, is called an "aggregate" if the
   2959      copyright resulting from the compilation is not used to limit the
   2960      legal rights of the compilation's users beyond what the individual
   2961      works permit.  When the Document is included in an aggregate, this
   2962      License does not apply to the other works in the aggregate which
   2963      are not themselves derivative works of the Document.
   2964 
   2965      If the Cover Text requirement of section 3 is applicable to these
   2966      copies of the Document, then if the Document is less than one half
   2967      of the entire aggregate, the Document's Cover Texts may be placed
   2968      on covers that bracket the Document within the aggregate, or the
   2969      electronic equivalent of covers if the Document is in electronic
   2970      form.  Otherwise they must appear on printed covers that bracket
   2971      the whole aggregate.
   2972 
   2973   8. TRANSLATION
   2974 
   2975      Translation is considered a kind of modification, so you may
   2976      distribute translations of the Document under the terms of section
   2977      4.  Replacing Invariant Sections with translations requires special
   2978      permission from their copyright holders, but you may include
   2979      translations of some or all Invariant Sections in addition to the
   2980      original versions of these Invariant Sections.  You may include a
   2981      translation of this License, and all the license notices in the
   2982      Document, and any Warranty Disclaimers, provided that you also
   2983      include the original English version of this License and the
   2984      original versions of those notices and disclaimers.  In case of a
   2985      disagreement between the translation and the original version of
   2986      this License or a notice or disclaimer, the original version will
   2987      prevail.
   2988 
   2989      If a section in the Document is Entitled "Acknowledgements",
   2990      "Dedications", or "History", the requirement (section 4) to
   2991      Preserve its Title (section 1) will typically require changing the
   2992      actual title.
   2993 
   2994   9. TERMINATION
   2995 
   2996      You may not copy, modify, sublicense, or distribute the Document
   2997      except as expressly provided under this License.  Any attempt
   2998      otherwise to copy, modify, sublicense, or distribute it is void,
   2999      and will automatically terminate your rights under this License.
   3000 
   3001      However, if you cease all violation of this License, then your
   3002      license from a particular copyright holder is reinstated (a)
   3003      provisionally, unless and until the copyright holder explicitly
   3004      and finally terminates your license, and (b) permanently, if the
   3005      copyright holder fails to notify you of the violation by some
   3006      reasonable means prior to 60 days after the cessation.
   3007 
   3008      Moreover, your license from a particular copyright holder is
   3009      reinstated permanently if the copyright holder notifies you of the
   3010      violation by some reasonable means, this is the first time you have
   3011      received notice of violation of this License (for any work) from
   3012      that copyright holder, and you cure the violation prior to 30 days
   3013      after your receipt of the notice.
   3014 
   3015      Termination of your rights under this section does not terminate
   3016      the licenses of parties who have received copies or rights from
   3017      you under this License.  If your rights have been terminated and
   3018      not permanently reinstated, receipt of a copy of some or all of
   3019      the same material does not give you any rights to use it.
   3020 
   3021  10. FUTURE REVISIONS OF THIS LICENSE
   3022 
   3023      The Free Software Foundation may publish new, revised versions of
   3024      the GNU Free Documentation License from time to time.  Such new
   3025      versions will be similar in spirit to the present version, but may
   3026      differ in detail to address new problems or concerns.  See
   3027      `http://www.gnu.org/copyleft/'.
   3028 
   3029      Each version of the License is given a distinguishing version
   3030      number.  If the Document specifies that a particular numbered
   3031      version of this License "or any later version" applies to it, you
   3032      have the option of following the terms and conditions either of
   3033      that specified version or of any later version that has been
   3034      published (not as a draft) by the Free Software Foundation.  If
   3035      the Document does not specify a version number of this License,
   3036      you may choose any version ever published (not as a draft) by the
   3037      Free Software Foundation.  If the Document specifies that a proxy
   3038      can decide which future versions of this License can be used, that
   3039      proxy's public statement of acceptance of a version permanently
   3040      authorizes you to choose that version for the Document.
   3041 
   3042  11. RELICENSING
   3043 
   3044      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
   3045      World Wide Web server that publishes copyrightable works and also
   3046      provides prominent facilities for anybody to edit those works.  A
   3047      public wiki that anybody can edit is an example of such a server.
   3048      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
   3049      site means any set of copyrightable works thus published on the MMC
   3050      site.
   3051 
   3052      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
   3053      license published by Creative Commons Corporation, a not-for-profit
   3054      corporation with a principal place of business in San Francisco,
   3055      California, as well as future copyleft versions of that license
   3056      published by that same organization.
   3057 
   3058      "Incorporate" means to publish or republish a Document, in whole or
   3059      in part, as part of another Document.
   3060 
   3061      An MMC is "eligible for relicensing" if it is licensed under this
   3062      License, and if all works that were first published under this
   3063      License somewhere other than this MMC, and subsequently
   3064      incorporated in whole or in part into the MMC, (1) had no cover
   3065      texts or invariant sections, and (2) were thus incorporated prior
   3066      to November 1, 2008.
   3067 
   3068      The operator of an MMC Site may republish an MMC contained in the
   3069      site under CC-BY-SA on the same site at any time before August 1,
   3070      2009, provided the MMC is eligible for relicensing.
   3071 
   3072 
   3073 ADDENDUM: How to use this License for your documents
   3074 ====================================================
   3075 
   3076 To use this License in a document you have written, include a copy of
   3077 the License in the document and put the following copyright and license
   3078 notices just after the title page:
   3079 
   3080        Copyright (C)  YEAR  YOUR NAME.
   3081        Permission is granted to copy, distribute and/or modify this document
   3082        under the terms of the GNU Free Documentation License, Version 1.3
   3083        or any later version published by the Free Software Foundation;
   3084        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   3085        Texts.  A copy of the license is included in the section entitled ``GNU
   3086        Free Documentation License''.
   3087 
   3088    If you have Invariant Sections, Front-Cover Texts and Back-Cover
   3089 Texts, replace the "with...Texts." line with this:
   3090 
   3091          with the Invariant Sections being LIST THEIR TITLES, with
   3092          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   3093          being LIST.
   3094 
   3095    If you have Invariant Sections without Cover Texts, or some other
   3096 combination of the three, merge those two alternatives to suit the
   3097 situation.
   3098 
   3099    If your document contains nontrivial examples of program code, we
   3100 recommend releasing these examples in parallel under your choice of
   3101 free software license, such as the GNU General Public License, to
   3102 permit their use in free software.
   3103 
   3104 
   3105 File: libgomp.info,  Node: Funding,  Next: Library Index,  Prev: GNU Free Documentation License,  Up: Top
   3106 
   3107 Funding Free Software
   3108 *********************
   3109 
   3110 If you want to have more free software a few years from now, it makes
   3111 sense for you to help encourage people to contribute funds for its
   3112 development.  The most effective approach known is to encourage
   3113 commercial redistributors to donate.
   3114 
   3115    Users of free software systems can boost the pace of development by
   3116 encouraging for-a-fee distributors to donate part of their selling price
   3117 to free software developers--the Free Software Foundation, and others.
   3118 
   3119    The way to convince distributors to do this is to demand it and
   3120 expect it from them.  So when you compare distributors, judge them
   3121 partly by how much they give to free software development.  Show
   3122 distributors they must compete to be the one who gives the most.
   3123 
   3124    To make this approach work, you must insist on numbers that you can
   3125 compare, such as, "We will donate ten dollars to the Frobnitz project
   3126 for each disk sold."  Don't be satisfied with a vague promise, such as
   3127 "A portion of the profits are donated," since it doesn't give a basis
   3128 for comparison.
   3129 
   3130    Even a precise fraction "of the profits from this disk" is not very
   3131 meaningful, since creative accounting and unrelated business decisions
   3132 can greatly alter what fraction of the sales price counts as profit.
   3133 If the price you pay is $50, ten percent of the profit is probably less
   3134 than a dollar; it might be a few cents, or nothing at all.
   3135 
   3136    Some redistributors do development work themselves.  This is useful
   3137 too; but to keep everyone honest, you need to inquire how much they do,
   3138 and what kind.  Some kinds of development make much more long-term
   3139 difference than others.  For example, maintaining a separate version of
   3140 a program contributes very little; maintaining the standard version of a
   3141 program for the whole community contributes much.  Easy new ports
   3142 contribute little, since someone else would surely do them; difficult
   3143 ports such as adding a new CPU to the GNU Compiler Collection
   3144 contribute more; major new features or packages contribute the most.
   3145 
   3146    By establishing the idea that supporting further development is "the
   3147 proper thing to do" when distributing free software for a fee, we can
   3148 assure a steady flow of resources into making more free software.
   3149 
   3150      Copyright (C) 1994 Free Software Foundation, Inc.
   3151      Verbatim copying and redistribution of this section is permitted
   3152      without royalty; alteration is not permitted.
   3153 
   3154 
   3155 File: libgomp.info,  Node: Library Index,  Prev: Funding,  Up: Top
   3156 
   3157 Library Index
   3158 *************
   3159 
   3160 [index]
   3161 * Menu:
   3162 
   3163 * Environment Variable <1>:              GOMP_SPINCOUNT.        (line 6)
   3164 * Environment Variable <2>:              GOMP_STACKSIZE.        (line 6)
   3165 * Environment Variable <3>:              GOMP_DEBUG.            (line 6)
   3166 * Environment Variable <4>:              GOMP_CPU_AFFINITY.     (line 6)
   3167 * Environment Variable <5>:              OMP_WAIT_POLICY.       (line 6)
   3168 * Environment Variable <6>:              OMP_THREAD_LIMIT.      (line 6)
   3169 * Environment Variable <7>:              OMP_SCHEDULE.          (line 6)
   3170 * Environment Variable <8>:              OMP_STACKSIZE.         (line 6)
   3171 * Environment Variable <9>:              OMP_PLACES.            (line 6)
   3172 * Environment Variable <10>:             OMP_PROC_BIND.         (line 6)
   3173 * Environment Variable <11>:             OMP_NUM_THREADS.       (line 6)
   3174 * Environment Variable <12>:             OMP_NESTED.            (line 6)
   3175 * Environment Variable <13>:             OMP_MAX_ACTIVE_LEVELS. (line 6)
   3176 * Environment Variable <14>:             OMP_DYNAMIC.           (line 6)
   3177 * Environment Variable <15>:             OMP_DEFAULT_DEVICE.    (line 6)
   3178 * Environment Variable <16>:             OMP_DISPLAY_ENV.       (line 6)
   3179 * Environment Variable:                  OMP_CANCELLATION.      (line 6)
   3180 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   3181                                                                 (line 6)
   3182 * Implementation specific setting <1>:   GOMP_SPINCOUNT.        (line 6)
   3183 * Implementation specific setting <2>:   GOMP_STACKSIZE.        (line 6)
   3184 * Implementation specific setting <3>:   OMP_SCHEDULE.          (line 6)
   3185 * Implementation specific setting <4>:   OMP_NUM_THREADS.       (line 6)
   3186 * Implementation specific setting:       OMP_NESTED.            (line 6)
   3187 * Introduction:                          Top.                   (line 6)
   3188 
   3189 
   3190 
   3191 Tag Table:
   3192 Node: Top2130
   3193 Node: Enabling OpenMP3925
   3194 Node: Runtime Library Routines4712
   3195 Node: omp_get_active_level7699
   3196 Node: omp_get_ancestor_thread_num8397
   3197 Node: omp_get_cancellation9324
   3198 Node: omp_get_default_device10136
   3199 Node: omp_get_dynamic10810
   3200 Node: omp_get_level11683
   3201 Node: omp_get_max_active_levels12301
   3202 Node: omp_get_max_threads12998
   3203 Node: omp_get_nested13753
   3204 Node: omp_get_num_devices14663
   3205 Node: omp_get_num_procs15182
   3206 Node: omp_get_num_teams15719
   3207 Node: omp_get_num_threads16233
   3208 Node: omp_get_proc_bind17320
   3209 Node: omp_get_schedule18238
   3210 Node: omp_get_team_num19179
   3211 Node: omp_get_team_size19676
   3212 Node: omp_get_thread_limit20633
   3213 Node: omp_get_thread_num21250
   3214 Node: omp_in_parallel22119
   3215 Node: omp_in_final22766
   3216 Node: omp_is_initial_device23438
   3217 Node: omp_set_default_device24129
   3218 Node: omp_set_dynamic24917
   3219 Node: omp_set_max_active_levels25800
   3220 Node: omp_set_nested26574
   3221 Node: omp_set_num_threads27463
   3222 Node: omp_set_schedule28328
   3223 Node: omp_init_lock29394
   3224 Node: omp_set_lock30044
   3225 Node: omp_test_lock30896
   3226 Node: omp_unset_lock31869
   3227 Node: omp_destroy_lock32797
   3228 Node: omp_init_nest_lock33471
   3229 Node: omp_set_nest_lock34203
   3230 Node: omp_test_nest_lock35120
   3231 Node: omp_unset_nest_lock36150
   3232 Node: omp_destroy_nest_lock37162
   3233 Node: omp_get_wtick37910
   3234 Node: omp_get_wtime38500
   3235 Node: Environment Variables39274
   3236 Node: OMP_CANCELLATION40666
   3237 Node: OMP_DISPLAY_ENV41199
   3238 Node: OMP_DEFAULT_DEVICE41902
   3239 Node: OMP_DYNAMIC42682
   3240 Node: OMP_MAX_ACTIVE_LEVELS43278
   3241 Node: OMP_NESTED43917
   3242 Node: OMP_NUM_THREADS44522
   3243 Node: OMP_PROC_BIND45211
   3244 Node: OMP_PLACES46403
   3245 Node: OMP_STACKSIZE48578
   3246 Node: OMP_SCHEDULE49402
   3247 Node: OMP_THREAD_LIMIT50098
   3248 Node: OMP_WAIT_POLICY50698
   3249 Node: GOMP_CPU_AFFINITY51390
   3250 Node: GOMP_DEBUG53121
   3251 Node: GOMP_STACKSIZE53628
   3252 Node: GOMP_SPINCOUNT54457
   3253 Node: The libgomp ABI55634
   3254 Node: Implementing MASTER construct56433
   3255 Node: Implementing CRITICAL construct56847
   3256 Node: Implementing ATOMIC construct57586
   3257 Node: Implementing FLUSH construct58067
   3258 Node: Implementing BARRIER construct58338
   3259 Node: Implementing THREADPRIVATE construct58607
   3260 Node: Implementing PRIVATE clause59259
   3261 Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses59840
   3262 Node: Implementing REDUCTION clause61164
   3263 Node: Implementing PARALLEL construct61721
   3264 Node: Implementing FOR construct62978
   3265 Node: Implementing ORDERED construct64976
   3266 Node: Implementing SECTIONS construct65282
   3267 Node: Implementing SINGLE construct66048
   3268 Node: Reporting Bugs66710
   3269 Node: Copying67070
   3270 Node: GNU Free Documentation License104635
   3271 Node: Funding129777
   3272 Node: Library Index132302
   3273 
   3274 End Tag Table
   3275