+++ /dev/null
-This is libgomp.info, produced by makeinfo version 4.13 from
-/d/gcc-4.4.3/gcc-4.4.3/libgomp/libgomp.texi.
-
-Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "Funding Free Software", the Front-Cover texts
-being (a) (see below), and with the Back-Cover Texts being (b) (see
-below). A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
- (a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
- (b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
-software. Copies published by the Free Software Foundation raise
-funds for GNU development.
-
-INFO-DIR-SECTION GNU Libraries
-START-INFO-DIR-ENTRY
-* libgomp: (libgomp). GNU OpenMP runtime library
-END-INFO-DIR-ENTRY
-
- This manual documents the GNU implementation of the OpenMP API for
-multi-platform shared-memory parallel programming in C/C++ and Fortran.
-
- Published by the Free Software Foundation 51 Franklin Street, Fifth
-Floor Boston, MA 02110-1301 USA
-
- Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "Funding Free Software", the Front-Cover texts
-being (a) (see below), and with the Back-Cover Texts being (b) (see
-below). A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
- (a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
- (b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
-software. Copies published by the Free Software Foundation raise
-funds for GNU development.
-
-\1f
-File: libgomp.info, Node: Top, Next: Enabling OpenMP, Up: (dir)
-
-Introduction
-************
-
-This manual documents the usage of libgomp, the GNU implementation of
-the OpenMP (http://www.openmp.org) Application Programming Interface
-(API) for multi-platform shared-memory parallel programming in C/C++
-and Fortran.
-
-* Menu:
-
-* Enabling OpenMP:: How to enable OpenMP for your applications.
-* Runtime Library Routines:: The OpenMP runtime application programming
- interface.
-* Environment Variables:: Influencing runtime behavior with environment
- variables.
-* The libgomp ABI:: Notes on the external ABI presented by libgomp.
-* Reporting Bugs:: How to report bugs in GNU OpenMP.
-* Copying:: GNU general public license says
- how you can copy and share libgomp.
-* GNU Free Documentation License::
- How you can copy and share this manual.
-* Funding:: How to help assure continued work for free
- software.
-* Index:: Index of this documentation.
-
-\1f
-File: libgomp.info, Node: Enabling OpenMP, Next: Runtime Library Routines, Prev: Top, Up: Top
-
-1 Enabling OpenMP
-*****************
-
-To activate the OpenMP extensions for C/C++ and Fortran, the
-compile-time flag `-fopenmp' must be specified. This enables the OpenMP
-directive `#pragma omp' in C/C++ and `!$omp' directives in free form,
-`c$omp', `*$omp' and `!$omp' directives in fixed form, `!$' conditional
-compilation sentinels in free form and `c$', `*$' and `!$' sentinels in
-fixed form, for Fortran. The flag also arranges for automatic linking
-of the OpenMP runtime library (*note Runtime Library Routines::).
-
- A complete description of all OpenMP directives accepted may be
-found in the OpenMP Application Program Interface
-(http://www.openmp.org) manual, version 3.0.
-
-\1f
-File: libgomp.info, Node: Runtime Library Routines, Next: Environment Variables, Prev: Enabling OpenMP, Up: Top
-
-2 Runtime Library Routines
-**************************
-
-The runtime routines described here are defined by section 3 of the
-OpenMP specifications in version 3.0. The routines are structured in
-following three parts:
-
- Control threads, processors and the parallel environment.
-
-* Menu:
-
-* omp_get_active_level:: Number of active parallel regions
-* omp_get_ancestor_thread_num:: Ancestor thread ID
-* omp_get_dynamic:: Dynamic teams setting
-* omp_get_level:: Number of parallel regions
-* omp_get_max_active_levels:: Maximal number of active regions
-* omp_get_max_threads:: Maximal number of threads of parallel region
-* omp_get_nested:: Nested parallel regions
-* omp_get_num_procs:: Number of processors online
-* omp_get_num_threads:: Size of the active team
-* omp_get_schedule:: Obtain the runtime scheduling method
-* omp_get_team_size:: Number of threads in a team
-* omp_get_thread_limit:: Maximal number of threads
-* omp_get_thread_num:: Current thread ID
-* omp_in_parallel:: Whether a parallel region is active
-* omp_set_dynamic:: Enable/disable dynamic teams
-* omp_set_max_active_levels:: Limits the number of active parallel regions
-* omp_set_nested:: Enable/disable nested parallel regions
-* omp_set_num_threads:: Set upper team size limit
-* omp_set_schedule:: Set the runtime scheduling method
-
- Initialize, set, test, unset and destroy simple and nested locks.
-
-* Menu:
-
-* omp_init_lock:: Initialize simple lock
-* omp_set_lock:: Wait for and set simple lock
-* omp_test_lock:: Test and set simple lock if available
-* omp_unset_lock:: Unset simple lock
-* omp_destroy_lock:: Destroy simple lock
-* omp_init_nest_lock:: Initialize nested lock
-* omp_set_nest_lock:: Wait for and set simple lock
-* omp_test_nest_lock:: Test and set nested lock if available
-* omp_unset_nest_lock:: Unset nested lock
-* omp_destroy_nest_lock:: Destroy nested lock
-
- Portable, thread-based, wall clock timer.
-
-* Menu:
-
-* omp_get_wtick:: Get timer precision.
-* omp_get_wtime:: Elapsed wall clock time.
-
-\1f
-File: libgomp.info, Node: omp_get_active_level, Next: omp_get_ancestor_thread_num, Up: Runtime Library Routines
-
-2.1 `omp_get_active_level' - Number of parallel regions
-=======================================================
-
-_Description_:
- This function returns the nesting level for the active parallel
- blocks, which enclose the calling call.
-
-_C/C++_
- _Prototype_: `int omp_get_active_level();'
-
-_Fortran_:
- _Interface_: `integer omp_get_active_level()'
-
-_See also_:
- *note omp_get_level::, *note omp_get_max_active_levels::, *note
- omp_set_max_active_levels::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.19.
-
-\1f
-File: libgomp.info, Node: omp_get_ancestor_thread_num, Next: omp_get_dynamic, Prev: omp_get_active_level, Up: Runtime Library Routines
-
-2.2 `omp_get_ancestor_thread_num' - Ancestor thread ID
-======================================================
-
-_Description_:
- This function returns the thread identification number for the
- given nesting level of the current thread. For values of LEVEL
- outside zero to `omp_get_level' -1 is returned; if LEVEL is
- `omp_get_level' the result is identical to `omp_get_thread_num'.
-
-_C/C++_
- _Prototype_: `int omp_get_ancestor_thread_num(int level);'
-
-_Fortran_:
- _Interface_: `integer omp_ancestor_thread_num(level)'
- `integer level'
-
-_See also_:
- *note omp_get_level::, *note omp_get_thread_num::, *note
- omp_get_team_size::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.17.
-
-\1f
-File: libgomp.info, Node: omp_get_dynamic, Next: omp_get_level, Prev: omp_get_ancestor_thread_num, Up: Runtime Library Routines
-
-2.3 `omp_get_dynamic' - Dynamic teams setting
-=============================================
-
-_Description_:
- This function returns `true' if enabled, `false' otherwise. Here,
- `true' and `false' represent their language-specific counterparts.
-
- The dynamic team setting may be initialized at startup by the
- `OMP_DYNAMIC' environment variable or at runtime using
- `omp_set_dynamic'. If undefined, dynamic adjustment is disabled by
- default.
-
-_C/C++_:
- _Prototype_: `int omp_get_dynamic();'
-
-_Fortran_:
- _Interface_: `logical function omp_get_dynamic()'
-
-_See also_:
- *note omp_set_dynamic::, *note OMP_DYNAMIC::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.8.
-
-\1f
-File: libgomp.info, Node: omp_get_level, Next: omp_get_max_active_levels, Prev: omp_get_dynamic, Up: Runtime Library Routines
-
-2.4 `omp_get_level' - Obtain the current nesting level
-======================================================
-
-_Description_:
- This function returns the nesting level for the parallel blocks,
- which enclose the calling call.
-
-_C/C++_
- _Prototype_: `int omp_get level();'
-
-_Fortran_:
- _Interface_: `integer omp_level()'
-
-_See also_:
- *note omp_get_active_level::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.16.
-
-\1f
-File: libgomp.info, Node: omp_get_max_active_levels, Next: omp_get_max_threads, Prev: omp_get_level, Up: Runtime Library Routines
-
-2.5 `omp_set_max_active_levels' - Maximal number of active regions
-==================================================================
-
-_Description_:
- This function obtains the maximally allowed number of nested,
- active parallel regions.
-
-_C/C++_
- _Prototype_: `int omp_get_max_active_levels();'
-
-_Fortran_:
- _Interface_: `int omp_get_max_active_levels()'
-
-_See also_:
- *note omp_set_max_active_levels::, *note omp_get_active_level::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.14.
-
-\1f
-File: libgomp.info, Node: omp_get_max_threads, Next: omp_get_nested, Prev: omp_get_max_active_levels, Up: Runtime Library Routines
-
-2.6 `omp_get_max_threads' - Maximal number of threads of parallel region
-========================================================================
-
-_Description_:
- Return the maximal number of threads used for the current parallel
- region that does not use the clause `num_threads'.
-
-_C/C++_:
- _Prototype_: `int omp_get_max_threads();'
-
-_Fortran_:
- _Interface_: `integer function omp_get_max_threads()'
-
-_See also_:
- *note omp_set_num_threads::, *note omp_set_dynamic::, *note
- omp_get_thread_limit::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.3.
-
-\1f
-File: libgomp.info, Node: omp_get_nested, Next: omp_get_num_procs, Prev: omp_get_max_threads, Up: Runtime Library Routines
-
-2.7 `omp_get_nested' - Nested parallel regions
-==============================================
-
-_Description_:
- This function returns `true' if nested parallel regions are
- enabled, `false' otherwise. Here, `true' and `false' represent
- their language-specific counterparts.
-
- Nested parallel regions may be initialized at startup by the
- `OMP_NESTED' environment variable or at runtime using
- `omp_set_nested'. If undefined, nested parallel regions are
- disabled by default.
-
-_C/C++_:
- _Prototype_: `int omp_get_nested();'
-
-_Fortran_:
- _Interface_: `integer function omp_get_nested()'
-
-_See also_:
- *note omp_set_nested::, *note OMP_NESTED::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.10.
-
-\1f
-File: libgomp.info, Node: omp_get_num_procs, Next: omp_get_num_threads, Prev: omp_get_nested, Up: Runtime Library Routines
-
-2.8 `omp_get_num_procs' - Number of processors online
-=====================================================
-
-_Description_:
- Returns the number of processors online.
-
-_C/C++_:
- _Prototype_: `int omp_get_num_procs();'
-
-_Fortran_:
- _Interface_: `integer function omp_get_num_procs()'
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.5.
-
-\1f
-File: libgomp.info, Node: omp_get_num_threads, Next: omp_get_schedule, Prev: omp_get_num_procs, Up: Runtime Library Routines
-
-2.9 `omp_get_num_threads' - Size of the active team
-===================================================
-
-_Description_:
- The number of threads in the current team. In a sequential section
- of the program `omp_get_num_threads' returns 1.
-
- The default team size may be initialized at startup by the
- `OMP_NUM_THREADS' environment variable. At runtime, the size of
- the current team may be set either by the `NUM_THREADS' clause or
- by `omp_set_num_threads'. If none of the above were used to define
- a specific value and `OMP_DYNAMIC' is disabled, one thread per CPU
- online is used.
-
-_C/C++_:
- _Prototype_: `int omp_get_num_threads();'
-
-_Fortran_:
- _Interface_: `integer function omp_get_num_threads()'
-
-_See also_:
- *note omp_get_max_threads::, *note omp_set_num_threads::, *note
- OMP_NUM_THREADS::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.2.
-
-\1f
-File: libgomp.info, Node: omp_get_schedule, Next: omp_get_team_size, Prev: omp_get_num_threads, Up: Runtime Library Routines
-
-2.10 `omp_get_schedule' - Obtain the runtime scheduling method
-==============================================================
-
-_Description_:
- Obtain runtime the scheduling method. The KIND argument will be
- set to the value `omp_sched_static', `omp_sched_dynamic',
- `opm_sched_guided' or `auto'. The second argument, MODIFIER, is
- set to the chunk size.
-
-_C/C++_
- _Prototype_: `omp_schedule(omp_sched_t * kind, int *modifier);'
-
-_Fortran_:
- _Interface_: `subroutine omp_schedule(kind, modifier)'
- `integer(kind=omp_sched_kind) kind'
- `integer modifier'
-
-_See also_:
- *note omp_set_schedule::, *note OMP_SCHEDULE::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.12.
-
-\1f
-File: libgomp.info, Node: omp_get_team_size, Next: omp_get_thread_limit, Prev: omp_get_schedule, Up: Runtime Library Routines
-
-2.11 `omp_get_team_size' - Number of threads in a team
-======================================================
-
-_Description_:
- This function returns the number of threads in a thread team to
- which either the current thread or its ancestor belongs. For
- values of LEVEL outside zero to `omp_get_level' -1 is returned; if
- LEVEL is zero 1 is returned and for `omp_get_level' the result is
- identical to `omp_get_num_threads'.
-
-_C/C++_:
- _Prototype_: `int omp_get_time_size(int level);'
-
-_Fortran_:
- _Interface_: `integer function omp_get_team_size(level)'
- `integer level'
-
-_See also_:
- *note omp_get_num_threads::, *note omp_get_level::, *note
- omp_get_ancestor_thread_num::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.18.
-
-\1f
-File: libgomp.info, Node: omp_get_thread_limit, Next: omp_get_thread_num, Prev: omp_get_team_size, Up: Runtime Library Routines
-
-2.12 `omp_get_thread_limit' - Maximal number of threads
-=======================================================
-
-_Description_:
- Return the maximal number of threads of the program.
-
-_C/C++_:
- _Prototype_: `int omp_get_thread_limit();'
-
-_Fortran_:
- _Interface_: `integer function omp_get_thread_limit()'
-
-_See also_:
- *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.13.
-
-\1f
-File: libgomp.info, Node: omp_get_thread_num, Next: omp_in_parallel, Prev: omp_get_thread_limit, Up: Runtime Library Routines
-
-2.13 `omp_get_thread_num' - Current thread ID
-=============================================
-
-_Description_:
- Unique thread identification number within the current team. In a
- sequential parts of the program, `omp_get_thread_num' always
- returns 0. In parallel regions the return value varies from 0 to
- `omp_get_num_threads'-1 inclusive. The return value of the master
- thread of a team is always 0.
-
-_C/C++_:
- _Prototype_: `int omp_get_thread_num();'
-
-_Fortran_:
- _Interface_: `integer function omp_get_thread_num()'
-
-_See also_:
- *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.4.
-
-\1f
-File: libgomp.info, Node: omp_in_parallel, Next: omp_set_dynamic, Prev: omp_get_thread_num, Up: Runtime Library Routines
-
-2.14 `omp_in_parallel' - Whether a parallel region is active
-============================================================
-
-_Description_:
- This function returns `true' if currently running in parallel,
- `false' otherwise. Here, `true' and `false' represent their
- language-specific counterparts.
-
-_C/C++_:
- _Prototype_: `int omp_in_parallel();'
-
-_Fortran_:
- _Interface_: `logical function omp_in_parallel()'
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.6.
-
-\1f
-File: libgomp.info, Node: omp_set_dynamic, Next: omp_set_max_active_levels, Prev: omp_in_parallel, Up: Runtime Library Routines
-
-2.15 `omp_set_dynamic' - Enable/disable dynamic teams
-=====================================================
-
-_Description_:
- Enable or disable the dynamic adjustment of the number of threads
- within a team. The function takes the language-specific equivalent
- of `true' and `false', where `true' enables dynamic adjustment of
- team sizes and `false' disables it.
-
-_C/C++_:
- _Prototype_: `void omp_set_dynamic(int);'
-
-_Fortran_:
- _Interface_: `subroutine omp_set_dynamic(set)'
- `integer, intent(in) :: set'
-
-_See also_:
- *note OMP_DYNAMIC::, *note omp_get_dynamic::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.7.
-
-\1f
-File: libgomp.info, Node: omp_set_max_active_levels, Next: omp_set_nested, Prev: omp_set_dynamic, Up: Runtime Library Routines
-
-2.16 `omp_set_max_active_levels' - Limits the number of active parallel regions
-===============================================================================
-
-_Description_:
- This function limits the maximally allowed number of nested,
- active parallel regions.
-
-_C/C++_
- _Prototype_: `omp_set_max_active_levels(int max_levels);'
-
-_Fortran_:
- _Interface_: `omp_max_active_levels(max_levels)'
- `integer max_levels'
-
-_See also_:
- *note omp_get_max_active_levels::, *note omp_get_active_level::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.14.
-
-\1f
-File: libgomp.info, Node: omp_set_nested, Next: omp_set_num_threads, Prev: omp_set_max_active_levels, Up: Runtime Library Routines
-
-2.17 `omp_set_nested' - Enable/disable nested parallel regions
-==============================================================
-
-_Description_:
- Enable or disable nested parallel regions, i.e., whether team
- members are allowed to create new teams. The function takes the
- language-specific equivalent of `true' and `false', where `true'
- enables dynamic adjustment of team sizes and `false' disables it.
-
-_C/C++_:
- _Prototype_: `void omp_set_dynamic(int);'
-
-_Fortran_:
- _Interface_: `subroutine omp_set_dynamic(set)'
- `integer, intent(in) :: set'
-
-_See also_:
- *note OMP_NESTED::, *note omp_get_nested::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.9.
-
-\1f
-File: libgomp.info, Node: omp_set_num_threads, Next: omp_set_schedule, Prev: omp_set_nested, Up: Runtime Library Routines
-
-2.18 `omp_set_num_threads' - Set upper team size limit
-======================================================
-
-_Description_:
- Specifies the number of threads used by default in subsequent
- parallel sections, if those do not specify a `num_threads' clause.
- The argument of `omp_set_num_threads' shall be a positive integer.
-
-_C/C++_:
- _Prototype_: `void omp_set_num_threads(int);'
-
-_Fortran_:
- _Interface_: `subroutine omp_set_num_threads(set)'
- `integer, intent(in) :: set'
-
-_See also_:
- *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
- omp_get_max_threads::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.1.
-
-\1f
-File: libgomp.info, Node: omp_set_schedule, Next: omp_init_lock, Prev: omp_set_num_threads, Up: Runtime Library Routines
-
-2.19 `omp_set_schedule' - Set the runtime scheduling method
-===========================================================
-
-_Description_:
- Sets the runtime scheduling method. The KIND argument can have the
- value `omp_sched_static', `omp_sched_dynamic', `opm_sched_guided'
- or `omp_sched_auto'. Except for `omp_sched_auto', the chunk size
- is set to the value of MODIFIER if positive or to the default
- value if zero or negative. For `omp_sched_auto' the MODIFIER
- argument is ignored.
-
-_C/C++_
- _Prototype_: `int omp_schedule(omp_sched_t * kind, int *modifier);'
-
-_Fortran_:
- _Interface_: `subroutine omp_schedule(kind, modifier)'
- `integer(kind=omp_sched_kind) kind'
- `integer modifier'
-
-_See also_:
- *note omp_get_schedule:: *note OMP_SCHEDULE::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section
- 3.2.11.
-
-\1f
-File: libgomp.info, Node: omp_init_lock, Next: omp_set_lock, Prev: omp_set_schedule, Up: Runtime Library Routines
-
-2.20 `omp_init_lock' - Initialize simple lock
-=============================================
-
-_Description_:
- Initialize a simple lock. After initialization, the lock is in an
- unlocked state.
-
-_C/C++_:
- _Prototype_: `void omp_init_lock(omp_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `subroutine omp_init_lock(lock)'
- `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
- *note omp_destroy_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.1.
-
-\1f
-File: libgomp.info, Node: omp_set_lock, Next: omp_test_lock, Prev: omp_init_lock, Up: Runtime Library Routines
-
-2.21 `omp_set_lock' - Wait for and set simple lock
-==================================================
-
-_Description_:
- Before setting a simple lock, the lock variable must be
- initialized by `omp_init_lock'. The calling thread is blocked
- until the lock is available. If the lock is already held by the
- current thread, a deadlock occurs.
-
-_C/C++_:
- _Prototype_: `void omp_set_lock(omp_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `subroutine omp_set_lock(lock)'
- `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
- *note omp_init_lock::, *note omp_test_lock::, *note
- omp_unset_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.3.
-
-\1f
-File: libgomp.info, Node: omp_test_lock, Next: omp_unset_lock, Prev: omp_set_lock, Up: Runtime Library Routines
-
-2.22 `omp_test_lock' - Test and set simple lock if available
-============================================================
-
-_Description_:
- Before setting a simple lock, the lock variable must be
- initialized by `omp_init_lock'. Contrary to `omp_set_lock',
- `omp_test_lock' does not block if the lock is not available. This
- function returns `true' upon success, `false' otherwise. Here,
- `true' and `false' represent their language-specific counterparts.
-
-_C/C++_:
- _Prototype_: `int omp_test_lock(omp_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `subroutine omp_test_lock(lock)'
- `logical(omp_logical_kind) :: omp_test_lock'
- `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
- *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.5.
-
-\1f
-File: libgomp.info, Node: omp_unset_lock, Next: omp_destroy_lock, Prev: omp_test_lock, Up: Runtime Library Routines
-
-2.23 `omp_unset_lock' - Unset simple lock
-=========================================
-
-_Description_:
- A simple lock about to be unset must have been locked by
- `omp_set_lock' or `omp_test_lock' before. In addition, the lock
- must be held by the thread calling `omp_unset_lock'. Then, the
- lock becomes unlocked. If one ore more threads attempted to set
- the lock before, one of them is chosen to, again, set the lock for
- itself.
-
-_C/C++_:
- _Prototype_: `void omp_unset_lock(omp_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `subroutine omp_unset_lock(lock)'
- `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
- *note omp_set_lock::, *note omp_test_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.4.
-
-\1f
-File: libgomp.info, Node: omp_destroy_lock, Next: omp_init_nest_lock, Prev: omp_unset_lock, Up: Runtime Library Routines
-
-2.24 `omp_destroy_lock' - Destroy simple lock
-=============================================
-
-_Description_:
- Destroy a simple lock. In order to be destroyed, a simple lock
- must be in the unlocked state.
-
-_C/C++_:
- _Prototype_: `void omp_destroy_lock(omp_lock_t *);'
-
-_Fortran_:
- _Interface_: `subroutine omp_destroy_lock(lock)'
- `integer(omp_lock_kind), intent(inout) :: lock'
-
-_See also_:
- *note omp_init_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.2.
-
-\1f
-File: libgomp.info, Node: omp_init_nest_lock, Next: omp_set_nest_lock, Prev: omp_destroy_lock, Up: Runtime Library Routines
-
-2.25 `omp_init_nest_lock' - Initialize nested lock
-==================================================
-
-_Description_:
- Initialize a nested lock. After initialization, the lock is in an
- unlocked state and the nesting count is set to zero.
-
-_C/C++_:
- _Prototype_: `void omp_init_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `subroutine omp_init_nest_lock(lock)'
- `integer(omp_nest_lock_kind), intent(out) :: lock'
-
-_See also_:
- *note omp_destroy_nest_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.1.
-
-\1f
-File: libgomp.info, Node: omp_set_nest_lock, Next: omp_test_nest_lock, Prev: omp_init_nest_lock, Up: Runtime Library Routines
-
-2.26 `omp_set_nest_lock' - Wait for and set simple lock
-=======================================================
-
-_Description_:
- Before setting a nested lock, the lock variable must be
- initialized by `omp_init_nest_lock'. The calling thread is blocked
- until the lock is available. If the lock is already held by the
- current thread, the nesting count for the lock in incremented.
-
-_C/C++_:
- _Prototype_: `void omp_set_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `subroutine omp_set_nest_lock(lock)'
- `integer(omp_nest_lock_kind), intent(out) :: lock'
-
-_See also_:
- *note omp_init_nest_lock::, *note omp_unset_nest_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.3.
-
-\1f
-File: libgomp.info, Node: omp_test_nest_lock, Next: omp_unset_nest_lock, Prev: omp_set_nest_lock, Up: Runtime Library Routines
-
-2.27 `omp_test_nest_lock' - Test and set nested lock if available
-=================================================================
-
-_Description_:
- Before setting a nested lock, the lock variable must be
- initialized by `omp_init_nest_lock'. Contrary to
- `omp_set_nest_lock', `omp_test_nest_lock' does not block if the
- lock is not available. If the lock is already held by the current
- thread, the new nesting count is returned. Otherwise, the return
- value equals zero.
-
-_C/C++_:
- _Prototype_: `int omp_test_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `integer function omp_test_nest_lock(lock)'
- `integer(omp_integer_kind) :: omp_test_nest_lock'
- `integer(omp_nest_lock_kind), intent(inout) :: lock'
-
-_See also_:
- *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.5.
-
-\1f
-File: libgomp.info, Node: omp_unset_nest_lock, Next: omp_destroy_nest_lock, Prev: omp_test_nest_lock, Up: Runtime Library Routines
-
-2.28 `omp_unset_nest_lock' - Unset nested lock
-==============================================
-
-_Description_:
- A nested lock about to be unset must have been locked by
- `omp_set_nested_lock' or `omp_test_nested_lock' before. In
- addition, the lock must be held by the thread calling
- `omp_unset_nested_lock'. If the nesting count drops to zero, the
- lock becomes unlocked. If one ore more threads attempted to set
- the lock before, one of them is chosen to, again, set the lock for
- itself.
-
-_C/C++_:
- _Prototype_: `void omp_unset_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
- _Interface_: `subroutine omp_unset_nest_lock(lock)'
- `integer(omp_nest_lock_kind), intent(out) :: lock'
-
-_See also_:
- *note omp_set_nest_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.4.
-
-\1f
-File: libgomp.info, Node: omp_destroy_nest_lock, Next: omp_get_wtick, Prev: omp_unset_nest_lock, Up: Runtime Library Routines
-
-2.29 `omp_destroy_nest_lock' - Destroy nested lock
-==================================================
-
-_Description_:
- Destroy a nested lock. In order to be destroyed, a nested lock
- must be in the unlocked state and its nesting count must equal
- zero.
-
-_C/C++_:
- _Prototype_: `void omp_destroy_nest_lock(omp_nest_lock_t *);'
-
-_Fortran_:
- _Interface_: `subroutine omp_destroy_nest_lock(lock)'
- `integer(omp_nest_lock_kind), intent(inout) :: lock'
-
-_See also_:
- *note omp_init_lock::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.2.
-
-\1f
-File: libgomp.info, Node: omp_get_wtick, Next: omp_get_wtime, Prev: omp_destroy_nest_lock, Up: Runtime Library Routines
-
-2.30 `omp_get_wtick' - Get timer precision
-==========================================
-
-_Description_:
- Gets the timer precision, i.e., the number of seconds between two
- successive clock ticks.
-
-_C/C++_:
- _Prototype_: `double omp_get_wtick();'
-
-_Fortran_:
- _Interface_: `double precision function omp_get_wtick()'
-
-_See also_:
- *note omp_get_wtime::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.4.2.
-
-\1f
-File: libgomp.info, Node: omp_get_wtime, Prev: omp_get_wtick, Up: Runtime Library Routines
-
-2.31 `omp_get_wtime' - Elapsed wall clock time
-==============================================
-
-_Description_:
- Elapsed wall clock time in seconds. The time is measured per
- thread, no guarantee can bee made that two distinct threads
- measure the same time. Time is measured from some "time in the
- past". On POSIX compliant systems the seconds since the Epoch
- (00:00:00 UTC, January 1, 1970) are returned.
-
-_C/C++_:
- _Prototype_: `double omp_get_wtime();'
-
-_Fortran_:
- _Interface_: `double precision function omp_get_wtime()'
-
-_See also_:
- *note omp_get_wtick::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 3.4.1.
-
-\1f
-File: libgomp.info, Node: Environment Variables, Next: The libgomp ABI, Prev: Runtime Library Routines, Up: Top
-
-3 Environment Variables
-***********************
-
-The variables `OMP_DYNAMIC', `OMP_MAX_ACTIVE_LEVELS', `OMP_NESTED',
-`OMP_NUM_THREADS', `OMP_SCHEDULE', `OMP_STACKSIZE',`OMP_THREAD_LIMIT'
-and `OMP_WAIT_POLICY' are defined by section 4 of the OpenMP
-specifications in version 3.0, while `GOMP_CPU_AFFINITY' and
-`GOMP_STACKSIZE' are GNU extensions.
-
-* Menu:
-
-* OMP_DYNAMIC:: Dynamic adjustment of threads
-* OMP_MAX_ACTIVE_LEVELS:: Set the maximal number of nested parallel regions
-* OMP_NESTED:: Nested parallel regions
-* OMP_NUM_THREADS:: Specifies the number of threads to use
-* OMP_STACKSIZE:: Set default thread stack size
-* OMP_SCHEDULE:: How threads are scheduled
-* OMP_THREAD_LIMIT:: Set the maximal number of threads
-* OMP_WAIT_POLICY:: How waiting threads are handled
-* GOMP_CPU_AFFINITY:: Bind threads to specific CPUs
-* GOMP_STACKSIZE:: Set default thread stack size
-
-\1f
-File: libgomp.info, Node: OMP_DYNAMIC, Next: OMP_MAX_ACTIVE_LEVELS, Up: Environment Variables
-
-3.1 `OMP_DYNAMIC' - Dynamic adjustment of threads
-=================================================
-
-_Description_:
- Enable or disable the dynamic adjustment of the number of threads
- within a team. The value of this environment variable shall be
- `TRUE' or `FALSE'. If undefined, dynamic adjustment is disabled by
- default.
-
-_See also_:
- *note omp_set_dynamic::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 4.3
-
-\1f
-File: libgomp.info, Node: OMP_MAX_ACTIVE_LEVELS, Next: OMP_NESTED, Prev: OMP_DYNAMIC, Up: Environment Variables
-
-3.2 `OMP_MAX_ACTIVE_LEVELS' - Set the maximal number of nested parallel regions
-===============================================================================
-
-_Description_:
- Specifies the initial value for the maximal number of nested
- parallel regions. The value of this variable shall be positive
- integer. If undefined, the number of active levels is unlimited.
-
-_See also_:
- *note omp_set_max_active_levels::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 4.7
-
-\1f
-File: libgomp.info, Node: OMP_NESTED, Next: OMP_NUM_THREADS, Prev: OMP_MAX_ACTIVE_LEVELS, Up: Environment Variables
-
-3.3 `OMP_NESTED' - Nested parallel regions
-==========================================
-
-_Description_:
- Enable or disable nested parallel regions, i.e., whether team
- members are allowed to create new teams. The value of this
- environment variable shall be `TRUE' or `FALSE'. If undefined,
- nested parallel regions are disabled by default.
-
-_See also_:
- *note omp_set_nested::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 4.4
-
-\1f
-File: libgomp.info, Node: OMP_NUM_THREADS, Next: OMP_STACKSIZE, Prev: OMP_NESTED, Up: Environment Variables
-
-3.4 `OMP_NUM_THREADS' - Specifies the number of threads to use
-==============================================================
-
-_Description_:
- Specifies the default number of threads to use in parallel
- regions. The value of this variable shall be positive integer. If
- undefined one thread per CPU online is used.
-
-_See also_:
- *note omp_set_num_threads::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 4.2
-
-\1f
-File: libgomp.info, Node: OMP_SCHEDULE, Next: OMP_THREAD_LIMIT, Prev: OMP_STACKSIZE, Up: Environment Variables
-
-3.5 `OMP_SCHEDULE' - How threads are scheduled
-==============================================
-
-_Description_:
- Allows to specify `schedule type' and `chunk size'. The value of
- the variable shall have the form: `type[,chunk]' where `type' is
- one of `static', `dynamic', `guided' or `auto' The optional
- `chunk' size shall be a positive integer. If undefined, dynamic
- scheduling and a chunk size of 1 is used.
-
-_See also_:
- *note omp_set_schedule::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), sections
- 2.5.1 and 4.1
-
-\1f
-File: libgomp.info, Node: OMP_STACKSIZE, Next: OMP_SCHEDULE, Prev: OMP_NUM_THREADS, Up: Environment Variables
-
-3.6 `OMP_STACKSIZE' - Set default thread stack size
-===================================================
-
-_Description_:
- Set the default thread stack size in kilobytes, unless the number
- is suffixed by `B', `K', `M' or `G', in which case the size is,
- respectively, in bytes, kilobytes, megabytes or gigabytes. This is
- different from `pthread_attr_setstacksize' which gets the number
- of bytes as an argument. If the stacksize can not be set due to
- system constraints, an error is reported and the initial stacksize
- is left unchanged. If undefined, the stack size is system
- dependent.
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), sections 4.5
-
-\1f
-File: libgomp.info, Node: OMP_THREAD_LIMIT, Next: OMP_WAIT_POLICY, Prev: OMP_SCHEDULE, Up: Environment Variables
-
-3.7 `OMP_THREAD_LIMIT' - Set the maximal number of threads
-==========================================================
-
-_Description_:
- Specifies the number of threads to use for the whole program. The
- value of this variable shall be positive integer. If undefined,
- the number of threads is not limited.
-
-_See also_:
- *note OMP_NUM_THREADS:: *note omp_get_thread_limit::
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), section 4.8
-
-\1f
-File: libgomp.info, Node: OMP_WAIT_POLICY, Next: GOMP_CPU_AFFINITY, Prev: OMP_THREAD_LIMIT, Up: Environment Variables
-
-3.8 `OMP_WAIT_POLICY' - How waiting threads are handled
-=======================================================
-
-_Description_:
- Specifies whether waiting threads should be active or passive. If
- the value is `PASSIVE', waiting threads should not consume CPU
- power while waiting; while the value is `ACTIVE' specifies that
- they should.
-
-_Reference_:
- OpenMP specifications v3.0 (http://www.openmp.org/), sections 4.6
-
-\1f
-File: libgomp.info, Node: GOMP_CPU_AFFINITY, Next: GOMP_STACKSIZE, Prev: OMP_WAIT_POLICY, Up: Environment Variables
-
-3.9 `GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
-=======================================================
-
-_Description_:
- Binds threads to specific CPUs. The variable should contain a
- space- or comma-separated list of CPUs. This list may contain
- different kind of entries: either single CPU numbers in any order,
- a range of CPUs (M-N) or a range with some stride (M-N:S). CPU
- numbers are zero based. For example, `GOMP_CPU_AFFINITY="0 3 1-2
- 4-15:2"' will bind the initial thread to CPU 0, the second to CPU
- 3, the third to CPU 1, the fourth to CPU 2, the fifth to CPU 4,
- the sixth through tenth to CPUs 6, 8, 10, 12, and 14 respectively
- and then start assigning back from the beginning of the list.
- `GOMP_CPU_AFFINITY=0' binds all threads to CPU 0.
-
- There is no GNU OpenMP library routine to determine whether a CPU
- affinity specification is in effect. As a workaround,
- language-specific library functions, e.g., `getenv' in C or
- `GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
- setting of the `GOMP_CPU_AFFINITY' environment variable. A defined
- CPU affinity on startup cannot be changed or disabled during the
- runtime of the application.
-
- If this environment variable is omitted, the host system will
- handle the assignment of threads to CPUs.
-
-\1f
-File: libgomp.info, Node: GOMP_STACKSIZE, Prev: GOMP_CPU_AFFINITY, Up: Environment Variables
-
-3.10 `GOMP_STACKSIZE' - Set default thread stack size
-=====================================================
-
-_Description_:
- Set the default thread stack size in kilobytes. This is different
- from `pthread_attr_setstacksize' which gets the number of bytes as
- an argument. If the stacksize can not be set due to system
- constraints, an error is reported and the initial stacksize is
- left unchanged. If undefined, the stack size is system dependent.
-
-_See also_:
- *note GOMP_STACKSIZE::
-
-_Reference_:
- GCC Patches Mailinglist
- (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00493.html), GCC
- Patches Mailinglist
- (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00496.html)
-
-\1f
-File: libgomp.info, Node: The libgomp ABI, Next: Reporting Bugs, Prev: Environment Variables, Up: Top
-
-4 The libgomp ABI
-*****************
-
-The following sections present notes on the external ABI as presented
-by libgomp. Only maintainers should need them.
-
-* Menu:
-
-* Implementing MASTER construct::
-* Implementing CRITICAL construct::
-* Implementing ATOMIC construct::
-* Implementing FLUSH construct::
-* Implementing BARRIER construct::
-* Implementing THREADPRIVATE construct::
-* Implementing PRIVATE clause::
-* Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses::
-* Implementing REDUCTION clause::
-* Implementing PARALLEL construct::
-* Implementing FOR construct::
-* Implementing ORDERED construct::
-* Implementing SECTIONS construct::
-* Implementing SINGLE construct::
-
-\1f
-File: libgomp.info, Node: Implementing MASTER construct, Next: Implementing CRITICAL construct, Up: The libgomp ABI
-
-4.1 Implementing MASTER construct
-=================================
-
- if (omp_get_thread_num () == 0)
- block
-
- Alternately, we generate two copies of the parallel subfunction and
-only include this in the version run by the master thread. Surely
-that's not worthwhile though...
-
-\1f
-File: libgomp.info, Node: Implementing CRITICAL construct, Next: Implementing ATOMIC construct, Prev: Implementing MASTER construct, Up: The libgomp ABI
-
-4.2 Implementing CRITICAL construct
-===================================
-
-Without a specified name,
-
- void GOMP_critical_start (void);
- void GOMP_critical_end (void);
-
- so that we don't get COPY relocations from libgomp to the main
-application.
-
- With a specified name, use omp_set_lock and omp_unset_lock with name
-being transformed into a variable declared like
-
- omp_lock_t gomp_critical_user_<name> __attribute__((common))
-
- Ideally the ABI would specify that all zero is a valid unlocked
-state, and so we wouldn't actually need to initialize this at startup.
-
-\1f
-File: libgomp.info, Node: Implementing ATOMIC construct, Next: Implementing FLUSH construct, Prev: Implementing CRITICAL construct, Up: The libgomp ABI
-
-4.3 Implementing ATOMIC construct
-=================================
-
-The target should implement the `__sync' builtins.
-
- Failing that we could add
-
- void GOMP_atomic_enter (void)
- void GOMP_atomic_exit (void)
-
- which reuses the regular lock code, but with yet another lock object
-private to the library.
-
-\1f
-File: libgomp.info, Node: Implementing FLUSH construct, Next: Implementing BARRIER construct, Prev: Implementing ATOMIC construct, Up: The libgomp ABI
-
-4.4 Implementing FLUSH construct
-================================
-
-Expands to the `__sync_synchronize' builtin.
-
-\1f
-File: libgomp.info, Node: Implementing BARRIER construct, Next: Implementing THREADPRIVATE construct, Prev: Implementing FLUSH construct, Up: The libgomp ABI
-
-4.5 Implementing BARRIER construct
-==================================
-
- void GOMP_barrier (void)
-
-\1f
-File: libgomp.info, Node: Implementing THREADPRIVATE construct, Next: Implementing PRIVATE clause, Prev: Implementing BARRIER construct, Up: The libgomp ABI
-
-4.6 Implementing THREADPRIVATE construct
-========================================
-
-In _most_ cases we can map this directly to `__thread'. Except that
-OMP allows constructors for C++ objects. We can either refuse to
-support this (how often is it used?) or we can implement something akin
-to .ctors.
-
- Even more ideally, this ctor feature is handled by extensions to the
-main pthreads library. Failing that, we can have a set of entry points
-to register ctor functions to be called.
-
-\1f
-File: libgomp.info, Node: Implementing PRIVATE clause, Next: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Prev: Implementing THREADPRIVATE construct, Up: The libgomp ABI
-
-4.7 Implementing PRIVATE clause
-===============================
-
-In association with a PARALLEL, or within the lexical extent of a
-PARALLEL block, the variable becomes a local variable in the parallel
-subfunction.
-
- In association with FOR or SECTIONS blocks, create a new automatic
-variable within the current function. This preserves the semantic of
-new variable creation.
-
-\1f
-File: libgomp.info, Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Next: Implementing REDUCTION clause, Prev: Implementing PRIVATE clause, Up: The libgomp ABI
-
-4.8 Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses
-========================================================================
-
-Seems simple enough for PARALLEL blocks. Create a private struct for
-communicating between parent and subfunction. In the parent, copy in
-values for scalar and "small" structs; copy in addresses for others
-TREE_ADDRESSABLE types. In the subfunction, copy the value into the
-local variable.
-
- Not clear at all what to do with bare FOR or SECTION blocks. The
-only thing I can figure is that we do something like
-
- #pragma omp for firstprivate(x) lastprivate(y)
- for (int i = 0; i < n; ++i)
- body;
-
- which becomes
-
- {
- int x = x, y;
-
- // for stuff
-
- if (i == n)
- y = y;
- }
-
- where the "x=x" and "y=y" assignments actually have different uids
-for the two variables, i.e. not something you could write directly in
-C. Presumably this only makes sense if the "outer" x and y are global
-variables.
-
- COPYPRIVATE would work the same way, except the structure broadcast
-would have to happen via SINGLE machinery instead.
-
-\1f
-File: libgomp.info, Node: Implementing REDUCTION clause, Next: Implementing PARALLEL construct, Prev: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Up: The libgomp ABI
-
-4.9 Implementing REDUCTION clause
-=================================
-
-The private struct mentioned in the previous section should have a
-pointer to an array of the type of the variable, indexed by the
-thread's TEAM_ID. The thread stores its final value into the array,
-and after the barrier the master thread iterates over the array to
-collect the values.
-
-\1f
-File: libgomp.info, Node: Implementing PARALLEL construct, Next: Implementing FOR construct, Prev: Implementing REDUCTION clause, Up: The libgomp ABI
-
-4.10 Implementing PARALLEL construct
-====================================
-
- #pragma omp parallel
- {
- body;
- }
-
- becomes
-
- void subfunction (void *data)
- {
- use data;
- body;
- }
-
- setup data;
- GOMP_parallel_start (subfunction, &data, num_threads);
- subfunction (&data);
- GOMP_parallel_end ();
-
- void GOMP_parallel_start (void (*fn)(void *), void *data, unsigned num_threads)
-
- The FN argument is the subfunction to be run in parallel.
-
- The DATA argument is a pointer to a structure used to communicate
-data in and out of the subfunction, as discussed above with respect to
-FIRSTPRIVATE et al.
-
- The NUM_THREADS argument is 1 if an IF clause is present and false,
-or the value of the NUM_THREADS clause, if present, or 0.
-
- The function needs to create the appropriate number of threads
-and/or launch them from the dock. It needs to create the team
-structure and assign team ids.
-
- void GOMP_parallel_end (void)
-
- Tears down the team and returns us to the previous
-`omp_in_parallel()' state.
-
-\1f
-File: libgomp.info, Node: Implementing FOR construct, Next: Implementing ORDERED construct, Prev: Implementing PARALLEL construct, Up: The libgomp ABI
-
-4.11 Implementing FOR construct
-===============================
-
- #pragma omp parallel for
- for (i = lb; i <= ub; i++)
- body;
-
- becomes
-
- void subfunction (void *data)
- {
- long _s0, _e0;
- while (GOMP_loop_static_next (&_s0, &_e0))
- {
- long _e1 = _e0, i;
- for (i = _s0; i < _e1; i++)
- body;
- }
- GOMP_loop_end_nowait ();
- }
-
- GOMP_parallel_loop_static (subfunction, NULL, 0, lb, ub+1, 1, 0);
- subfunction (NULL);
- GOMP_parallel_end ();
-
- #pragma omp for schedule(runtime)
- for (i = 0; i < n; i++)
- body;
-
- becomes
-
- {
- long i, _s0, _e0;
- if (GOMP_loop_runtime_start (0, n, 1, &_s0, &_e0))
- do {
- long _e1 = _e0;
- for (i = _s0, i < _e0; i++)
- body;
- } while (GOMP_loop_runtime_next (&_s0, _&e0));
- GOMP_loop_end ();
- }
-
- Note that while it looks like there is trickyness to propagating a
-non-constant STEP, there isn't really. We're explicitly allowed to
-evaluate it as many times as we want, and any variables involved should
-automatically be handled as PRIVATE or SHARED like any other variables.
-So the expression should remain evaluable in the subfunction. We can
-also pull it into a local variable if we like, but since its supposed
-to remain unchanged, we can also not if we like.
-
- If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be
-able to get away with no work-sharing context at all, since we can
-simply perform the arithmetic directly in each thread to divide up the
-iterations. Which would mean that we wouldn't need to call any of
-these routines.
-
- There are separate routines for handling loops with an ORDERED
-clause. Bookkeeping for that is non-trivial...
-
-\1f
-File: libgomp.info, Node: Implementing ORDERED construct, Next: Implementing SECTIONS construct, Prev: Implementing FOR construct, Up: The libgomp ABI
-
-4.12 Implementing ORDERED construct
-===================================
-
- void GOMP_ordered_start (void)
- void GOMP_ordered_end (void)
-
-\1f
-File: libgomp.info, Node: Implementing SECTIONS construct, Next: Implementing SINGLE construct, Prev: Implementing ORDERED construct, Up: The libgomp ABI
-
-4.13 Implementing SECTIONS construct
-====================================
-
-A block as
-
- #pragma omp sections
- {
- #pragma omp section
- stmt1;
- #pragma omp section
- stmt2;
- #pragma omp section
- stmt3;
- }
-
- becomes
-
- for (i = GOMP_sections_start (3); i != 0; i = GOMP_sections_next ())
- switch (i)
- {
- case 1:
- stmt1;
- break;
- case 2:
- stmt2;
- break;
- case 3:
- stmt3;
- break;
- }
- GOMP_barrier ();
-
-\1f
-File: libgomp.info, Node: Implementing SINGLE construct, Prev: Implementing SECTIONS construct, Up: The libgomp ABI
-
-4.14 Implementing SINGLE construct
-==================================
-
-A block like
-
- #pragma omp single
- {
- body;
- }
-
- becomes
-
- if (GOMP_single_start ())
- body;
- GOMP_barrier ();
-
- while
-
- #pragma omp single copyprivate(x)
- body;
-
- becomes
-
- datap = GOMP_single_copy_start ();
- if (datap == NULL)
- {
- body;
- data.x = x;
- GOMP_single_copy_end (&data);
- }
- else
- x = datap->x;
- GOMP_barrier ();
-
-\1f
-File: libgomp.info, Node: Reporting Bugs, Next: Copying, Prev: The libgomp ABI, Up: Top
-
-5 Reporting Bugs
-****************
-
-Bugs in the GNU OpenMP implementation should be reported via bugzilla
-(http://gcc.gnu.org/bugzilla/). In all cases, please add "openmp" to
-the keywords field in the bug report.
-
-\1f
-File: libgomp.info, Node: Copying, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-========
-
-The licenses for most software are designed to take away your freedom
-to share and change it. By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- 0. This License applies to any program or other work which contains a
- notice placed by the copyright holder saying it may be distributed
- under the terms of this General Public License. The "Program",
- below, refers to any such program or work, and a "work based on
- the Program" means either the Program or any derivative work under
- copyright law: that is to say, a work containing the Program or a
- portion of it, either verbatim or with modifications and/or
- translated into another language. (Hereinafter, translation is
- included without limitation in the term "modification".) Each
- licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The act
- of running the Program is not restricted, and the output from the
- Program is covered only if its contents constitute a work based on
- the Program (independent of having been made by running the
- Program). Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an appropriate
- copyright notice and disclaimer of warranty; keep intact all the
- notices that refer to this License and to the absence of any
- warranty; and give any other recipients of the Program a copy of
- this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange
- for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
- of it, thus forming a work based on the Program, and copy and
- distribute such modifications or work under the terms of Section 1
- above, provided that you also meet all of these conditions:
-
- a. You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b. You must cause any work that you distribute or publish, that
- in whole or in part contains or is derived from the Program
- or any part thereof, to be licensed as a whole at no charge
- to all third parties under the terms of this License.
-
- c. If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display
- an announcement including an appropriate copyright notice and
- a notice that there is no warranty (or else, saying that you
- provide a warranty) and that users may redistribute the
- program under these conditions, and telling the user how to
- view a copy of this License. (Exception: if the Program
- itself is interactive but does not normally print such an
- announcement, your work based on the Program is not required
- to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and separate
- works in themselves, then this License, and its terms, do not
- apply to those sections when you distribute them as separate
- works. But when you distribute the same sections as part of a
- whole which is a work based on the Program, the distribution of
- the whole must be on the terms of this License, whose permissions
- for other licensees extend to the entire whole, and thus to each
- and every part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program) on
- a volume of a storage or distribution medium does not bring the
- other work under the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms
- of Sections 1 and 2 above provided that you also do one of the
- following:
-
- a. Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Sections 1 and 2 above on a medium customarily used for
- software interchange; or,
-
- b. Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a
- medium customarily used for software interchange; or,
-
- c. Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with
- such an offer, in accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work for
- making modifications to it. For an executable work, complete
- source code means all the source code for all modules it contains,
- plus any associated interface definition files, plus the scripts
- used to control compilation and installation of the executable.
- However, as a special exception, the source code distributed need
- not include anything that is normally distributed (in either
- source or binary form) with the major components (compiler,
- kernel, and so on) of the operating system on which the executable
- runs, unless that component itself accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify
- or distribute the Program or its derivative works. These actions
- are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any work
- based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
- Program), the recipient automatically receives a license from the
- original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
- infringement or for any other reason (not limited to patent
- issues), conditions are imposed on you (whether by court order,
- agreement or otherwise) that contradict the conditions of this
- License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy simultaneously
- your obligations under this License and any other pertinent
- obligations, then as a consequence you may not distribute the
- Program at all. For example, if a patent license would not permit
- royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only
- way you could satisfy both it and this License would be to refrain
- entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to apply
- in other circumstances.
-
- It is not the purpose of this section to induce you to infringe any
- patents or other property right claims or to contest validity of
- any such claims; this section has the sole purpose of protecting
- the integrity of the free software distribution system, which is
- implemented by public license practices. Many people have made
- generous contributions to the wide range of software distributed
- through that system in reliance on consistent application of that
- system; it is up to the author/donor to decide if he or she is
- willing to distribute software through any other system and a
- licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed
- to be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces,
- the original copyright holder who places the Program under this
- License may add an explicit geographical distribution limitation
- excluding those countries, so that distribution is permitted only
- in or among countries not thus excluded. In such case, this
- License incorporates the limitation as if written in the body of
- this License.
-
- 9. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the Program
- does not specify a version number of this License, you may choose
- any version ever published by the Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
- programs whose distribution conditions are different, write to the
- author to ask for permission. For software which is copyrighted
- by the Free Software Foundation, write to the Free Software
- Foundation; we sometimes make exceptions for this. Our decision
- will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing
- and reuse of software generally.
-
- NO WARRANTY
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
- QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
- SERVICING, REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-Appendix: How to Apply These Terms to Your New Programs
-=======================================================
-
-If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- Copyright (C) YEAR NAME OF AUTHOR
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
- type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
- The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
- You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- SIGNATURE OF TY COON, 1 April 1989
- Ty Coon, President of Vice
-
- This General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library. If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-
-\1f
-File: libgomp.info, Node: GNU Free Documentation License, Next: Funding, Prev: Copying, Up: Top
-
-GNU Free Documentation License
-******************************
-
- Version 1.2, November 2002
-
- Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 0. PREAMBLE
-
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
-
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
-
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book.
- We recommend this License principally for works whose purpose is
- instruction or reference.
-
- 1. APPLICABILITY AND DEFINITIONS
-
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it
- can be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You
- accept the license if you copy, modify or distribute the work in a
- way requiring permission under copyright law.
-
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
-
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
-
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in
- the notice that says that the Document is released under this
- License. If a section does not fit the above definition of
- Secondary then it is not allowed to be designated as Invariant.
- The Document may contain zero Invariant Sections. If the Document
- does not identify any Invariant Sections then there are none.
-
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
-
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images
- composed of pixels) generic paint programs or (for drawings) some
- widely available drawing editor, and that is suitable for input to
- text formatters or for automatic translation to a variety of
- formats suitable for input to text formatters. A copy made in an
- otherwise Transparent file format whose markup, or absence of
- markup, has been arranged to thwart or discourage subsequent
- modification by readers is not Transparent. An image format is
- not Transparent if used for any substantial amount of text. A
- copy that is not "Transparent" is called "Opaque".
-
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and
- standard-conforming simple HTML, PostScript or PDF designed for
- human modification. Examples of transparent image formats include
- PNG, XCF and JPG. Opaque formats include proprietary formats that
- can be read and edited only by proprietary word processors, SGML or
- XML for which the DTD and/or processing tools are not generally
- available, and the machine-generated HTML, PostScript or PDF
- produced by some word processors for output purposes only.
-
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
-
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
-
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
-
- 2. VERBATIM COPYING
-
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow
- the conditions in section 3.
-
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
-
- 3. COPYING IN QUANTITY
-
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the
- title equally prominent and visible. You may add other material
- on the covers in addition. Copying with changes limited to the
- covers, as long as they preserve the title of the Document and
- satisfy these conditions, can be treated as verbatim copying in
- other respects.
-
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
-
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a
- machine-readable Transparent copy along with each Opaque copy, or
- state in or with each Opaque copy a computer-network location from
- which the general network-using public has access to download
- using public-standard network protocols a complete Transparent
- copy of the Document, free of added material. If you use the
- latter option, you must take reasonably prudent steps, when you
- begin distribution of Opaque copies in quantity, to ensure that
- this Transparent copy will remain thus accessible at the stated
- location until at least one year after the last time you
- distribute an Opaque copy (directly or through your agents or
- retailers) of that edition to the public.
-
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of
- copies, to give them a chance to provide you with an updated
- version of the Document.
-
- 4. MODIFICATIONS
-
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with
- the Modified Version filling the role of the Document, thus
- licensing distribution and modification of the Modified Version to
- whoever possesses a copy of it. In addition, you must do these
- things in the Modified Version:
-
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of
- previous versions (which should, if there were any, be listed
- in the History section of the Document). You may use the
- same title as a previous version if the original publisher of
- that version gives permission.
-
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
-
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
- D. Preserve all the copyright notices of the Document.
-
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
-
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
-
- H. Include an unaltered copy of this License.
-
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on
- the Title Page. If there is no section Entitled "History" in
- the Document, create one stating the title, year, authors,
- and publisher of the Document as given on its Title Page,
- then add an item describing the Modified Version as stated in
- the previous sentence.
-
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in
- the "History" section. You may omit a network location for a
- work that was published at least four years before the
- Document itself, or if the original publisher of the version
- it refers to gives permission.
-
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the
- section all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
-
- L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section
- titles.
-
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
-
- O. Preserve any Warranty Disclaimers.
-
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option
- designate some or all of these sections as invariant. To do this,
- add their titles to the list of Invariant Sections in the Modified
- Version's license notice. These titles must be distinct from any
- other section titles.
-
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
-
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end
- of the list of Cover Texts in the Modified Version. Only one
- passage of Front-Cover Text and one of Back-Cover Text may be
- added by (or through arrangements made by) any one entity. If the
- Document already includes a cover text for the same cover,
- previously added by you or by arrangement made by the same entity
- you are acting on behalf of, you may not add another; but you may
- replace the old one, on explicit permission from the previous
- publisher that added the old one.
-
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
-
- 5. COMBINING DOCUMENTS
-
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination
- all of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
-
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
-
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
-
- 6. COLLECTIONS OF DOCUMENTS
-
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the
- documents in all other respects.
-
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow
- this License in all other respects regarding verbatim copying of
- that document.
-
- 7. AGGREGATION WITH INDEPENDENT WORKS
-
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of
- a storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
-
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
-
- 8. TRANSLATION
-
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
-
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
-
- 9. TERMINATION
-
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided for under this License. Any other
- attempt to copy, modify, sublicense or distribute the Document is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- `http://www.gnu.org/copyleft/'.
-
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If
- the Document does not specify a version number of this License,
- you may choose any version ever published (not as a draft) by the
- Free Software Foundation.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
-
- If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License, to
-permit their use in free software.
-
-\1f
-File: libgomp.info, Node: Funding, Next: Index, Prev: GNU Free Documentation License, Up: Top
-
-Funding Free Software
-*********************
-
-If you want to have more free software a few years from now, it makes
-sense for you to help encourage people to contribute funds for its
-development. The most effective approach known is to encourage
-commercial redistributors to donate.
-
- Users of free software systems can boost the pace of development by
-encouraging for-a-fee distributors to donate part of their selling price
-to free software developers--the Free Software Foundation, and others.
-
- The way to convince distributors to do this is to demand it and
-expect it from them. So when you compare distributors, judge them
-partly by how much they give to free software development. Show
-distributors they must compete to be the one who gives the most.
-
- To make this approach work, you must insist on numbers that you can
-compare, such as, "We will donate ten dollars to the Frobnitz project
-for each disk sold." Don't be satisfied with a vague promise, such as
-"A portion of the profits are donated," since it doesn't give a basis
-for comparison.
-
- Even a precise fraction "of the profits from this disk" is not very
-meaningful, since creative accounting and unrelated business decisions
-can greatly alter what fraction of the sales price counts as profit.
-If the price you pay is $50, ten percent of the profit is probably less
-than a dollar; it might be a few cents, or nothing at all.
-
- Some redistributors do development work themselves. This is useful
-too; but to keep everyone honest, you need to inquire how much they do,
-and what kind. Some kinds of development make much more long-term
-difference than others. For example, maintaining a separate version of
-a program contributes very little; maintaining the standard version of a
-program for the whole community contributes much. Easy new ports
-contribute little, since someone else would surely do them; difficult
-ports such as adding a new CPU to the GNU Compiler Collection
-contribute more; major new features or packages contribute the most.
-
- By establishing the idea that supporting further development is "the
-proper thing to do" when distributing free software for a fee, we can
-assure a steady flow of resources into making more free software.
-
- Copyright (C) 1994 Free Software Foundation, Inc.
- Verbatim copying and redistribution of this section is permitted
- without royalty; alteration is not permitted.
-
-\1f
-File: libgomp.info, Node: Index, Prev: Funding, Up: Top
-
-Index
-*****
-
-\0\b[index\0\b]
-* Menu:
-
-* Environment Variable <1>: GOMP_STACKSIZE. (line 6)
-* Environment Variable <2>: GOMP_CPU_AFFINITY. (line 6)
-* Environment Variable <3>: OMP_WAIT_POLICY. (line 6)
-* Environment Variable <4>: OMP_THREAD_LIMIT. (line 6)
-* Environment Variable <5>: OMP_STACKSIZE. (line 6)
-* Environment Variable <6>: OMP_SCHEDULE. (line 6)
-* Environment Variable <7>: OMP_NUM_THREADS. (line 6)
-* Environment Variable <8>: OMP_NESTED. (line 6)
-* Environment Variable <9>: OMP_MAX_ACTIVE_LEVELS. (line 6)
-* Environment Variable: OMP_DYNAMIC. (line 6)
-* FDL, GNU Free Documentation License: GNU Free Documentation License.
- (line 6)
-* Implementation specific setting <1>: GOMP_STACKSIZE. (line 6)
-* Implementation specific setting <2>: OMP_SCHEDULE. (line 6)
-* Implementation specific setting <3>: OMP_NUM_THREADS. (line 6)
-* Implementation specific setting: OMP_NESTED. (line 6)
-* Introduction: Top. (line 6)
-
-
-\1f
-Tag Table:
-Node: Top\7f2039
-Node: Enabling OpenMP\7f3233
-Node: Runtime Library Routines\7f4018
-Node: omp_get_active_level\7f6393
-Node: omp_get_ancestor_thread_num\7f7084
-Node: omp_get_dynamic\7f7998
-Node: omp_get_level\7f8872
-Node: omp_get_max_active_levels\7f9483
-Node: omp_get_max_threads\7f10171
-Node: omp_get_nested\7f10923
-Node: omp_get_num_procs\7f11831
-Node: omp_get_num_threads\7f12345
-Node: omp_get_schedule\7f13415
-Node: omp_get_team_size\7f14322
-Node: omp_get_thread_limit\7f15280
-Node: omp_get_thread_num\7f15899
-Node: omp_in_parallel\7f16753
-Node: omp_set_dynamic\7f17399
-Node: omp_set_max_active_levels\7f18235
-Node: omp_set_nested\7f18997
-Node: omp_set_num_threads\7f19874
-Node: omp_set_schedule\7f20712
-Node: omp_init_lock\7f21756
-Node: omp_set_lock\7f22406
-Node: omp_test_lock\7f23255
-Node: omp_unset_lock\7f24282
-Node: omp_destroy_lock\7f25208
-Node: omp_init_nest_lock\7f25878
-Node: omp_set_nest_lock\7f26610
-Node: omp_test_nest_lock\7f27519
-Node: omp_unset_nest_lock\7f28617
-Node: omp_destroy_nest_lock\7f29626
-Node: omp_get_wtick\7f30374
-Node: omp_get_wtime\7f30961
-Node: Environment Variables\7f31744
-Node: OMP_DYNAMIC\7f32805
-Node: OMP_MAX_ACTIVE_LEVELS\7f33373
-Node: OMP_NESTED\7f34010
-Node: OMP_NUM_THREADS\7f34614
-Node: OMP_SCHEDULE\7f35187
-Node: OMP_STACKSIZE\7f35881
-Node: OMP_THREAD_LIMIT\7f36706
-Node: OMP_WAIT_POLICY\7f37299
-Node: GOMP_CPU_AFFINITY\7f37864
-Node: GOMP_STACKSIZE\7f39348
-Node: The libgomp ABI\7f40158
-Node: Implementing MASTER construct\7f40956
-Node: Implementing CRITICAL construct\7f41369
-Node: Implementing ATOMIC construct\7f42117
-Node: Implementing FLUSH construct\7f42598
-Node: Implementing BARRIER construct\7f42869
-Node: Implementing THREADPRIVATE construct\7f43138
-Node: Implementing PRIVATE clause\7f43790
-Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses\7f44371
-Node: Implementing REDUCTION clause\7f45686
-Node: Implementing PARALLEL construct\7f46242
-Node: Implementing FOR construct\7f47499
-Node: Implementing ORDERED construct\7f49497
-Node: Implementing SECTIONS construct\7f49803
-Node: Implementing SINGLE construct\7f50569
-Node: Reporting Bugs\7f51231
-Node: Copying\7f51539
-Node: GNU Free Documentation License\7f70749
-Node: Funding\7f93160
-Node: Index\7f95677
-\1f
-End Tag Table