libgomp.info revision 1.1.1.1 1 1.1 mrg This is libgomp.info, produced by makeinfo version 4.12 from
2 1.1 mrg /space/rguenther/gcc-4.5.4/gcc-4.5.4/libgomp/libgomp.texi.
3 1.1 mrg
4 1.1 mrg Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
5 1.1 mrg
6 1.1 mrg Permission is granted to copy, distribute and/or modify this document
7 1.1 mrg under the terms of the GNU Free Documentation License, Version 1.2 or
8 1.1 mrg any later version published by the Free Software Foundation; with the
9 1.1 mrg Invariant Sections being "Funding Free Software", the Front-Cover texts
10 1.1 mrg being (a) (see below), and with the Back-Cover Texts being (b) (see
11 1.1 mrg below). A copy of the license is included in the section entitled "GNU
12 1.1 mrg Free Documentation License".
13 1.1 mrg
14 1.1 mrg (a) The FSF's Front-Cover Text is:
15 1.1 mrg
16 1.1 mrg A GNU Manual
17 1.1 mrg
18 1.1 mrg (b) The FSF's Back-Cover Text is:
19 1.1 mrg
20 1.1 mrg You have freedom to copy and modify this GNU Manual, like GNU
21 1.1 mrg software. Copies published by the Free Software Foundation raise
22 1.1 mrg funds for GNU development.
23 1.1 mrg
24 1.1 mrg INFO-DIR-SECTION GNU Libraries
25 1.1 mrg START-INFO-DIR-ENTRY
26 1.1 mrg * libgomp: (libgomp). GNU OpenMP runtime library
27 1.1 mrg END-INFO-DIR-ENTRY
28 1.1 mrg
29 1.1 mrg This manual documents the GNU implementation of the OpenMP API for
30 1.1 mrg multi-platform shared-memory parallel programming in C/C++ and Fortran.
31 1.1 mrg
32 1.1 mrg Published by the Free Software Foundation 51 Franklin Street, Fifth
33 1.1 mrg Floor Boston, MA 02110-1301 USA
34 1.1 mrg
35 1.1 mrg Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
36 1.1 mrg
37 1.1 mrg Permission is granted to copy, distribute and/or modify this document
38 1.1 mrg under the terms of the GNU Free Documentation License, Version 1.2 or
39 1.1 mrg any later version published by the Free Software Foundation; with the
40 1.1 mrg Invariant Sections being "Funding Free Software", the Front-Cover texts
41 1.1 mrg being (a) (see below), and with the Back-Cover Texts being (b) (see
42 1.1 mrg below). A copy of the license is included in the section entitled "GNU
43 1.1 mrg Free Documentation License".
44 1.1 mrg
45 1.1 mrg (a) The FSF's Front-Cover Text is:
46 1.1 mrg
47 1.1 mrg A GNU Manual
48 1.1 mrg
49 1.1 mrg (b) The FSF's Back-Cover Text is:
50 1.1 mrg
51 1.1 mrg You have freedom to copy and modify this GNU Manual, like GNU
52 1.1 mrg software. Copies published by the Free Software Foundation raise
53 1.1 mrg funds for GNU development.
54 1.1 mrg
55 1.1 mrg
56 1.1 mrg File: libgomp.info, Node: Top, Next: Enabling OpenMP, Up: (dir)
57 1.1 mrg
58 1.1 mrg Introduction
59 1.1 mrg ************
60 1.1 mrg
61 1.1 mrg This manual documents the usage of libgomp, the GNU implementation of
62 1.1 mrg the OpenMP (http://www.openmp.org) Application Programming Interface
63 1.1 mrg (API) for multi-platform shared-memory parallel programming in C/C++
64 1.1 mrg and Fortran.
65 1.1 mrg
66 1.1 mrg * Menu:
67 1.1 mrg
68 1.1 mrg * Enabling OpenMP:: How to enable OpenMP for your applications.
69 1.1 mrg * Runtime Library Routines:: The OpenMP runtime application programming
70 1.1 mrg interface.
71 1.1 mrg * Environment Variables:: Influencing runtime behavior with environment
72 1.1 mrg variables.
73 1.1 mrg * The libgomp ABI:: Notes on the external ABI presented by libgomp.
74 1.1 mrg * Reporting Bugs:: How to report bugs in GNU OpenMP.
75 1.1 mrg * Copying:: GNU general public license says
76 1.1 mrg how you can copy and share libgomp.
77 1.1 mrg * GNU Free Documentation License::
78 1.1 mrg How you can copy and share this manual.
79 1.1 mrg * Funding:: How to help assure continued work for free
80 1.1 mrg software.
81 1.1 mrg * Index:: Index of this documentation.
82 1.1 mrg
83 1.1 mrg
84 1.1 mrg File: libgomp.info, Node: Enabling OpenMP, Next: Runtime Library Routines, Prev: Top, Up: Top
85 1.1 mrg
86 1.1 mrg 1 Enabling OpenMP
87 1.1 mrg *****************
88 1.1 mrg
89 1.1 mrg To activate the OpenMP extensions for C/C++ and Fortran, the
90 1.1 mrg compile-time flag `-fopenmp' must be specified. This enables the OpenMP
91 1.1 mrg directive `#pragma omp' in C/C++ and `!$omp' directives in free form,
92 1.1 mrg `c$omp', `*$omp' and `!$omp' directives in fixed form, `!$' conditional
93 1.1 mrg compilation sentinels in free form and `c$', `*$' and `!$' sentinels in
94 1.1 mrg fixed form, for Fortran. The flag also arranges for automatic linking
95 1.1 mrg of the OpenMP runtime library (*note Runtime Library Routines::).
96 1.1 mrg
97 1.1 mrg A complete description of all OpenMP directives accepted may be
98 1.1 mrg found in the OpenMP Application Program Interface
99 1.1 mrg (http://www.openmp.org) manual, version 3.0.
100 1.1 mrg
101 1.1 mrg
102 1.1 mrg File: libgomp.info, Node: Runtime Library Routines, Next: Environment Variables, Prev: Enabling OpenMP, Up: Top
103 1.1 mrg
104 1.1 mrg 2 Runtime Library Routines
105 1.1 mrg **************************
106 1.1 mrg
107 1.1 mrg The runtime routines described here are defined by section 3 of the
108 1.1 mrg OpenMP specifications in version 3.0. The routines are structured in
109 1.1 mrg following three parts:
110 1.1 mrg
111 1.1 mrg Control threads, processors and the parallel environment.
112 1.1 mrg
113 1.1 mrg * Menu:
114 1.1 mrg
115 1.1 mrg * omp_get_active_level:: Number of active parallel regions
116 1.1 mrg * omp_get_ancestor_thread_num:: Ancestor thread ID
117 1.1 mrg * omp_get_dynamic:: Dynamic teams setting
118 1.1 mrg * omp_get_level:: Number of parallel regions
119 1.1 mrg * omp_get_max_active_levels:: Maximal number of active regions
120 1.1 mrg * omp_get_max_threads:: Maximal number of threads of parallel region
121 1.1 mrg * omp_get_nested:: Nested parallel regions
122 1.1 mrg * omp_get_num_procs:: Number of processors online
123 1.1 mrg * omp_get_num_threads:: Size of the active team
124 1.1 mrg * omp_get_schedule:: Obtain the runtime scheduling method
125 1.1 mrg * omp_get_team_size:: Number of threads in a team
126 1.1 mrg * omp_get_thread_limit:: Maximal number of threads
127 1.1 mrg * omp_get_thread_num:: Current thread ID
128 1.1 mrg * omp_in_parallel:: Whether a parallel region is active
129 1.1 mrg * omp_set_dynamic:: Enable/disable dynamic teams
130 1.1 mrg * omp_set_max_active_levels:: Limits the number of active parallel regions
131 1.1 mrg * omp_set_nested:: Enable/disable nested parallel regions
132 1.1 mrg * omp_set_num_threads:: Set upper team size limit
133 1.1 mrg * omp_set_schedule:: Set the runtime scheduling method
134 1.1 mrg
135 1.1 mrg Initialize, set, test, unset and destroy simple and nested locks.
136 1.1 mrg
137 1.1 mrg * Menu:
138 1.1 mrg
139 1.1 mrg * omp_init_lock:: Initialize simple lock
140 1.1 mrg * omp_set_lock:: Wait for and set simple lock
141 1.1 mrg * omp_test_lock:: Test and set simple lock if available
142 1.1 mrg * omp_unset_lock:: Unset simple lock
143 1.1 mrg * omp_destroy_lock:: Destroy simple lock
144 1.1 mrg * omp_init_nest_lock:: Initialize nested lock
145 1.1 mrg * omp_set_nest_lock:: Wait for and set simple lock
146 1.1 mrg * omp_test_nest_lock:: Test and set nested lock if available
147 1.1 mrg * omp_unset_nest_lock:: Unset nested lock
148 1.1 mrg * omp_destroy_nest_lock:: Destroy nested lock
149 1.1 mrg
150 1.1 mrg Portable, thread-based, wall clock timer.
151 1.1 mrg
152 1.1 mrg * Menu:
153 1.1 mrg
154 1.1 mrg * omp_get_wtick:: Get timer precision.
155 1.1 mrg * omp_get_wtime:: Elapsed wall clock time.
156 1.1 mrg
157 1.1 mrg
158 1.1 mrg File: libgomp.info, Node: omp_get_active_level, Next: omp_get_ancestor_thread_num, Up: Runtime Library Routines
159 1.1 mrg
160 1.1 mrg 2.1 `omp_get_active_level' - Number of parallel regions
161 1.1 mrg =======================================================
162 1.1 mrg
163 1.1 mrg _Description_:
164 1.1 mrg This function returns the nesting level for the active parallel
165 1.1 mrg blocks, which enclose the calling call.
166 1.1 mrg
167 1.1 mrg _C/C++_
168 1.1 mrg _Prototype_: `int omp_get_active_level();'
169 1.1 mrg
170 1.1 mrg _Fortran_:
171 1.1 mrg _Interface_: `integer omp_get_active_level()'
172 1.1 mrg
173 1.1 mrg _See also_:
174 1.1 mrg *note omp_get_level::, *note omp_get_max_active_levels::, *note
175 1.1 mrg omp_set_max_active_levels::
176 1.1 mrg
177 1.1 mrg _Reference_:
178 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
179 1.1 mrg 3.2.19.
180 1.1 mrg
181 1.1 mrg
182 1.1 mrg File: libgomp.info, Node: omp_get_ancestor_thread_num, Next: omp_get_dynamic, Prev: omp_get_active_level, Up: Runtime Library Routines
183 1.1 mrg
184 1.1 mrg 2.2 `omp_get_ancestor_thread_num' - Ancestor thread ID
185 1.1 mrg ======================================================
186 1.1 mrg
187 1.1 mrg _Description_:
188 1.1 mrg This function returns the thread identification number for the
189 1.1 mrg given nesting level of the current thread. For values of LEVEL
190 1.1 mrg outside zero to `omp_get_level' -1 is returned; if LEVEL is
191 1.1 mrg `omp_get_level' the result is identical to `omp_get_thread_num'.
192 1.1 mrg
193 1.1 mrg _C/C++_
194 1.1 mrg _Prototype_: `int omp_get_ancestor_thread_num(int level);'
195 1.1 mrg
196 1.1 mrg _Fortran_:
197 1.1 mrg _Interface_: `integer omp_ancestor_thread_num(level)'
198 1.1 mrg `integer level'
199 1.1 mrg
200 1.1 mrg _See also_:
201 1.1 mrg *note omp_get_level::, *note omp_get_thread_num::, *note
202 1.1 mrg omp_get_team_size::
203 1.1 mrg
204 1.1 mrg _Reference_:
205 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
206 1.1 mrg 3.2.17.
207 1.1 mrg
208 1.1 mrg
209 1.1 mrg File: libgomp.info, Node: omp_get_dynamic, Next: omp_get_level, Prev: omp_get_ancestor_thread_num, Up: Runtime Library Routines
210 1.1 mrg
211 1.1 mrg 2.3 `omp_get_dynamic' - Dynamic teams setting
212 1.1 mrg =============================================
213 1.1 mrg
214 1.1 mrg _Description_:
215 1.1 mrg This function returns `true' if enabled, `false' otherwise. Here,
216 1.1 mrg `true' and `false' represent their language-specific counterparts.
217 1.1 mrg
218 1.1 mrg The dynamic team setting may be initialized at startup by the
219 1.1 mrg `OMP_DYNAMIC' environment variable or at runtime using
220 1.1 mrg `omp_set_dynamic'. If undefined, dynamic adjustment is disabled by
221 1.1 mrg default.
222 1.1 mrg
223 1.1 mrg _C/C++_:
224 1.1 mrg _Prototype_: `int omp_get_dynamic();'
225 1.1 mrg
226 1.1 mrg _Fortran_:
227 1.1 mrg _Interface_: `logical function omp_get_dynamic()'
228 1.1 mrg
229 1.1 mrg _See also_:
230 1.1 mrg *note omp_set_dynamic::, *note OMP_DYNAMIC::
231 1.1 mrg
232 1.1 mrg _Reference_:
233 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.8.
234 1.1 mrg
235 1.1 mrg
236 1.1 mrg File: libgomp.info, Node: omp_get_level, Next: omp_get_max_active_levels, Prev: omp_get_dynamic, Up: Runtime Library Routines
237 1.1 mrg
238 1.1 mrg 2.4 `omp_get_level' - Obtain the current nesting level
239 1.1 mrg ======================================================
240 1.1 mrg
241 1.1 mrg _Description_:
242 1.1 mrg This function returns the nesting level for the parallel blocks,
243 1.1 mrg which enclose the calling call.
244 1.1 mrg
245 1.1 mrg _C/C++_
246 1.1 mrg _Prototype_: `int omp_get level();'
247 1.1 mrg
248 1.1 mrg _Fortran_:
249 1.1 mrg _Interface_: `integer omp_level()'
250 1.1 mrg
251 1.1 mrg _See also_:
252 1.1 mrg *note omp_get_active_level::
253 1.1 mrg
254 1.1 mrg _Reference_:
255 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
256 1.1 mrg 3.2.16.
257 1.1 mrg
258 1.1 mrg
259 1.1 mrg File: libgomp.info, Node: omp_get_max_active_levels, Next: omp_get_max_threads, Prev: omp_get_level, Up: Runtime Library Routines
260 1.1 mrg
261 1.1 mrg 2.5 `omp_set_max_active_levels' - Maximal number of active regions
262 1.1 mrg ==================================================================
263 1.1 mrg
264 1.1 mrg _Description_:
265 1.1 mrg This function obtains the maximally allowed number of nested,
266 1.1 mrg active parallel regions.
267 1.1 mrg
268 1.1 mrg _C/C++_
269 1.1 mrg _Prototype_: `int omp_get_max_active_levels();'
270 1.1 mrg
271 1.1 mrg _Fortran_:
272 1.1 mrg _Interface_: `int omp_get_max_active_levels()'
273 1.1 mrg
274 1.1 mrg _See also_:
275 1.1 mrg *note omp_set_max_active_levels::, *note omp_get_active_level::
276 1.1 mrg
277 1.1 mrg _Reference_:
278 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
279 1.1 mrg 3.2.14.
280 1.1 mrg
281 1.1 mrg
282 1.1 mrg File: libgomp.info, Node: omp_get_max_threads, Next: omp_get_nested, Prev: omp_get_max_active_levels, Up: Runtime Library Routines
283 1.1 mrg
284 1.1 mrg 2.6 `omp_get_max_threads' - Maximal number of threads of parallel region
285 1.1 mrg ========================================================================
286 1.1 mrg
287 1.1 mrg _Description_:
288 1.1 mrg Return the maximal number of threads used for the current parallel
289 1.1 mrg region that does not use the clause `num_threads'.
290 1.1 mrg
291 1.1 mrg _C/C++_:
292 1.1 mrg _Prototype_: `int omp_get_max_threads();'
293 1.1 mrg
294 1.1 mrg _Fortran_:
295 1.1 mrg _Interface_: `integer function omp_get_max_threads()'
296 1.1 mrg
297 1.1 mrg _See also_:
298 1.1 mrg *note omp_set_num_threads::, *note omp_set_dynamic::, *note
299 1.1 mrg omp_get_thread_limit::
300 1.1 mrg
301 1.1 mrg _Reference_:
302 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.3.
303 1.1 mrg
304 1.1 mrg
305 1.1 mrg File: libgomp.info, Node: omp_get_nested, Next: omp_get_num_procs, Prev: omp_get_max_threads, Up: Runtime Library Routines
306 1.1 mrg
307 1.1 mrg 2.7 `omp_get_nested' - Nested parallel regions
308 1.1 mrg ==============================================
309 1.1 mrg
310 1.1 mrg _Description_:
311 1.1 mrg This function returns `true' if nested parallel regions are
312 1.1 mrg enabled, `false' otherwise. Here, `true' and `false' represent
313 1.1 mrg their language-specific counterparts.
314 1.1 mrg
315 1.1 mrg Nested parallel regions may be initialized at startup by the
316 1.1 mrg `OMP_NESTED' environment variable or at runtime using
317 1.1 mrg `omp_set_nested'. If undefined, nested parallel regions are
318 1.1 mrg disabled by default.
319 1.1 mrg
320 1.1 mrg _C/C++_:
321 1.1 mrg _Prototype_: `int omp_get_nested();'
322 1.1 mrg
323 1.1 mrg _Fortran_:
324 1.1 mrg _Interface_: `integer function omp_get_nested()'
325 1.1 mrg
326 1.1 mrg _See also_:
327 1.1 mrg *note omp_set_nested::, *note OMP_NESTED::
328 1.1 mrg
329 1.1 mrg _Reference_:
330 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
331 1.1 mrg 3.2.10.
332 1.1 mrg
333 1.1 mrg
334 1.1 mrg File: libgomp.info, Node: omp_get_num_procs, Next: omp_get_num_threads, Prev: omp_get_nested, Up: Runtime Library Routines
335 1.1 mrg
336 1.1 mrg 2.8 `omp_get_num_procs' - Number of processors online
337 1.1 mrg =====================================================
338 1.1 mrg
339 1.1 mrg _Description_:
340 1.1 mrg Returns the number of processors online.
341 1.1 mrg
342 1.1 mrg _C/C++_:
343 1.1 mrg _Prototype_: `int omp_get_num_procs();'
344 1.1 mrg
345 1.1 mrg _Fortran_:
346 1.1 mrg _Interface_: `integer function omp_get_num_procs()'
347 1.1 mrg
348 1.1 mrg _Reference_:
349 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.5.
350 1.1 mrg
351 1.1 mrg
352 1.1 mrg File: libgomp.info, Node: omp_get_num_threads, Next: omp_get_schedule, Prev: omp_get_num_procs, Up: Runtime Library Routines
353 1.1 mrg
354 1.1 mrg 2.9 `omp_get_num_threads' - Size of the active team
355 1.1 mrg ===================================================
356 1.1 mrg
357 1.1 mrg _Description_:
358 1.1 mrg The number of threads in the current team. In a sequential section
359 1.1 mrg of the program `omp_get_num_threads' returns 1.
360 1.1 mrg
361 1.1 mrg The default team size may be initialized at startup by the
362 1.1 mrg `OMP_NUM_THREADS' environment variable. At runtime, the size of
363 1.1 mrg the current team may be set either by the `NUM_THREADS' clause or
364 1.1 mrg by `omp_set_num_threads'. If none of the above were used to define
365 1.1 mrg a specific value and `OMP_DYNAMIC' is disabled, one thread per CPU
366 1.1 mrg online is used.
367 1.1 mrg
368 1.1 mrg _C/C++_:
369 1.1 mrg _Prototype_: `int omp_get_num_threads();'
370 1.1 mrg
371 1.1 mrg _Fortran_:
372 1.1 mrg _Interface_: `integer function omp_get_num_threads()'
373 1.1 mrg
374 1.1 mrg _See also_:
375 1.1 mrg *note omp_get_max_threads::, *note omp_set_num_threads::, *note
376 1.1 mrg OMP_NUM_THREADS::
377 1.1 mrg
378 1.1 mrg _Reference_:
379 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.2.
380 1.1 mrg
381 1.1 mrg
382 1.1 mrg File: libgomp.info, Node: omp_get_schedule, Next: omp_get_team_size, Prev: omp_get_num_threads, Up: Runtime Library Routines
383 1.1 mrg
384 1.1 mrg 2.10 `omp_get_schedule' - Obtain the runtime scheduling method
385 1.1 mrg ==============================================================
386 1.1 mrg
387 1.1 mrg _Description_:
388 1.1 mrg Obtain runtime the scheduling method. The KIND argument will be
389 1.1 mrg set to the value `omp_sched_static', `omp_sched_dynamic',
390 1.1 mrg `opm_sched_guided' or `auto'. The second argument, MODIFIER, is
391 1.1 mrg set to the chunk size.
392 1.1 mrg
393 1.1 mrg _C/C++_
394 1.1 mrg _Prototype_: `omp_schedule(omp_sched_t * kind, int *modifier);'
395 1.1 mrg
396 1.1 mrg _Fortran_:
397 1.1 mrg _Interface_: `subroutine omp_schedule(kind, modifier)'
398 1.1 mrg `integer(kind=omp_sched_kind) kind'
399 1.1 mrg `integer modifier'
400 1.1 mrg
401 1.1 mrg _See also_:
402 1.1 mrg *note omp_set_schedule::, *note OMP_SCHEDULE::
403 1.1 mrg
404 1.1 mrg _Reference_:
405 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
406 1.1 mrg 3.2.12.
407 1.1 mrg
408 1.1 mrg
409 1.1 mrg File: libgomp.info, Node: omp_get_team_size, Next: omp_get_thread_limit, Prev: omp_get_schedule, Up: Runtime Library Routines
410 1.1 mrg
411 1.1 mrg 2.11 `omp_get_team_size' - Number of threads in a team
412 1.1 mrg ======================================================
413 1.1 mrg
414 1.1 mrg _Description_:
415 1.1 mrg This function returns the number of threads in a thread team to
416 1.1 mrg which either the current thread or its ancestor belongs. For
417 1.1 mrg values of LEVEL outside zero to `omp_get_level' -1 is returned; if
418 1.1 mrg LEVEL is zero 1 is returned and for `omp_get_level' the result is
419 1.1 mrg identical to `omp_get_num_threads'.
420 1.1 mrg
421 1.1 mrg _C/C++_:
422 1.1 mrg _Prototype_: `int omp_get_time_size(int level);'
423 1.1 mrg
424 1.1 mrg _Fortran_:
425 1.1 mrg _Interface_: `integer function omp_get_team_size(level)'
426 1.1 mrg `integer level'
427 1.1 mrg
428 1.1 mrg _See also_:
429 1.1 mrg *note omp_get_num_threads::, *note omp_get_level::, *note
430 1.1 mrg omp_get_ancestor_thread_num::
431 1.1 mrg
432 1.1 mrg _Reference_:
433 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
434 1.1 mrg 3.2.18.
435 1.1 mrg
436 1.1 mrg
437 1.1 mrg File: libgomp.info, Node: omp_get_thread_limit, Next: omp_get_thread_num, Prev: omp_get_team_size, Up: Runtime Library Routines
438 1.1 mrg
439 1.1 mrg 2.12 `omp_get_thread_limit' - Maximal number of threads
440 1.1 mrg =======================================================
441 1.1 mrg
442 1.1 mrg _Description_:
443 1.1 mrg Return the maximal number of threads of the program.
444 1.1 mrg
445 1.1 mrg _C/C++_:
446 1.1 mrg _Prototype_: `int omp_get_thread_limit();'
447 1.1 mrg
448 1.1 mrg _Fortran_:
449 1.1 mrg _Interface_: `integer function omp_get_thread_limit()'
450 1.1 mrg
451 1.1 mrg _See also_:
452 1.1 mrg *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
453 1.1 mrg
454 1.1 mrg _Reference_:
455 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
456 1.1 mrg 3.2.13.
457 1.1 mrg
458 1.1 mrg
459 1.1 mrg File: libgomp.info, Node: omp_get_thread_num, Next: omp_in_parallel, Prev: omp_get_thread_limit, Up: Runtime Library Routines
460 1.1 mrg
461 1.1 mrg 2.13 `omp_get_thread_num' - Current thread ID
462 1.1 mrg =============================================
463 1.1 mrg
464 1.1 mrg _Description_:
465 1.1 mrg Unique thread identification number within the current team. In a
466 1.1 mrg sequential parts of the program, `omp_get_thread_num' always
467 1.1 mrg returns 0. In parallel regions the return value varies from 0 to
468 1.1 mrg `omp_get_num_threads'-1 inclusive. The return value of the master
469 1.1 mrg thread of a team is always 0.
470 1.1 mrg
471 1.1 mrg _C/C++_:
472 1.1 mrg _Prototype_: `int omp_get_thread_num();'
473 1.1 mrg
474 1.1 mrg _Fortran_:
475 1.1 mrg _Interface_: `integer function omp_get_thread_num()'
476 1.1 mrg
477 1.1 mrg _See also_:
478 1.1 mrg *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
479 1.1 mrg
480 1.1 mrg _Reference_:
481 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.4.
482 1.1 mrg
483 1.1 mrg
484 1.1 mrg File: libgomp.info, Node: omp_in_parallel, Next: omp_set_dynamic, Prev: omp_get_thread_num, Up: Runtime Library Routines
485 1.1 mrg
486 1.1 mrg 2.14 `omp_in_parallel' - Whether a parallel region is active
487 1.1 mrg ============================================================
488 1.1 mrg
489 1.1 mrg _Description_:
490 1.1 mrg This function returns `true' if currently running in parallel,
491 1.1 mrg `false' otherwise. Here, `true' and `false' represent their
492 1.1 mrg language-specific counterparts.
493 1.1 mrg
494 1.1 mrg _C/C++_:
495 1.1 mrg _Prototype_: `int omp_in_parallel();'
496 1.1 mrg
497 1.1 mrg _Fortran_:
498 1.1 mrg _Interface_: `logical function omp_in_parallel()'
499 1.1 mrg
500 1.1 mrg _Reference_:
501 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.6.
502 1.1 mrg
503 1.1 mrg
504 1.1 mrg File: libgomp.info, Node: omp_set_dynamic, Next: omp_set_max_active_levels, Prev: omp_in_parallel, Up: Runtime Library Routines
505 1.1 mrg
506 1.1 mrg 2.15 `omp_set_dynamic' - Enable/disable dynamic teams
507 1.1 mrg =====================================================
508 1.1 mrg
509 1.1 mrg _Description_:
510 1.1 mrg Enable or disable the dynamic adjustment of the number of threads
511 1.1 mrg within a team. The function takes the language-specific equivalent
512 1.1 mrg of `true' and `false', where `true' enables dynamic adjustment of
513 1.1 mrg team sizes and `false' disables it.
514 1.1 mrg
515 1.1 mrg _C/C++_:
516 1.1 mrg _Prototype_: `void omp_set_dynamic(int);'
517 1.1 mrg
518 1.1 mrg _Fortran_:
519 1.1 mrg _Interface_: `subroutine omp_set_dynamic(set)'
520 1.1 mrg `integer, intent(in) :: set'
521 1.1 mrg
522 1.1 mrg _See also_:
523 1.1 mrg *note OMP_DYNAMIC::, *note omp_get_dynamic::
524 1.1 mrg
525 1.1 mrg _Reference_:
526 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.7.
527 1.1 mrg
528 1.1 mrg
529 1.1 mrg File: libgomp.info, Node: omp_set_max_active_levels, Next: omp_set_nested, Prev: omp_set_dynamic, Up: Runtime Library Routines
530 1.1 mrg
531 1.1 mrg 2.16 `omp_set_max_active_levels' - Limits the number of active parallel regions
532 1.1 mrg ===============================================================================
533 1.1 mrg
534 1.1 mrg _Description_:
535 1.1 mrg This function limits the maximally allowed number of nested,
536 1.1 mrg active parallel regions.
537 1.1 mrg
538 1.1 mrg _C/C++_
539 1.1 mrg _Prototype_: `omp_set_max_active_levels(int max_levels);'
540 1.1 mrg
541 1.1 mrg _Fortran_:
542 1.1 mrg _Interface_: `omp_max_active_levels(max_levels)'
543 1.1 mrg `integer max_levels'
544 1.1 mrg
545 1.1 mrg _See also_:
546 1.1 mrg *note omp_get_max_active_levels::, *note omp_get_active_level::
547 1.1 mrg
548 1.1 mrg _Reference_:
549 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
550 1.1 mrg 3.2.14.
551 1.1 mrg
552 1.1 mrg
553 1.1 mrg File: libgomp.info, Node: omp_set_nested, Next: omp_set_num_threads, Prev: omp_set_max_active_levels, Up: Runtime Library Routines
554 1.1 mrg
555 1.1 mrg 2.17 `omp_set_nested' - Enable/disable nested parallel regions
556 1.1 mrg ==============================================================
557 1.1 mrg
558 1.1 mrg _Description_:
559 1.1 mrg Enable or disable nested parallel regions, i.e., whether team
560 1.1 mrg members are allowed to create new teams. The function takes the
561 1.1 mrg language-specific equivalent of `true' and `false', where `true'
562 1.1 mrg enables dynamic adjustment of team sizes and `false' disables it.
563 1.1 mrg
564 1.1 mrg _C/C++_:
565 1.1 mrg _Prototype_: `void omp_set_dynamic(int);'
566 1.1 mrg
567 1.1 mrg _Fortran_:
568 1.1 mrg _Interface_: `subroutine omp_set_dynamic(set)'
569 1.1 mrg `integer, intent(in) :: set'
570 1.1 mrg
571 1.1 mrg _See also_:
572 1.1 mrg *note OMP_NESTED::, *note omp_get_nested::
573 1.1 mrg
574 1.1 mrg _Reference_:
575 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.9.
576 1.1 mrg
577 1.1 mrg
578 1.1 mrg File: libgomp.info, Node: omp_set_num_threads, Next: omp_set_schedule, Prev: omp_set_nested, Up: Runtime Library Routines
579 1.1 mrg
580 1.1 mrg 2.18 `omp_set_num_threads' - Set upper team size limit
581 1.1 mrg ======================================================
582 1.1 mrg
583 1.1 mrg _Description_:
584 1.1 mrg Specifies the number of threads used by default in subsequent
585 1.1 mrg parallel sections, if those do not specify a `num_threads' clause.
586 1.1 mrg The argument of `omp_set_num_threads' shall be a positive integer.
587 1.1 mrg
588 1.1 mrg _C/C++_:
589 1.1 mrg _Prototype_: `void omp_set_num_threads(int);'
590 1.1 mrg
591 1.1 mrg _Fortran_:
592 1.1 mrg _Interface_: `subroutine omp_set_num_threads(set)'
593 1.1 mrg `integer, intent(in) :: set'
594 1.1 mrg
595 1.1 mrg _See also_:
596 1.1 mrg *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
597 1.1 mrg omp_get_max_threads::
598 1.1 mrg
599 1.1 mrg _Reference_:
600 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.1.
601 1.1 mrg
602 1.1 mrg
603 1.1 mrg File: libgomp.info, Node: omp_set_schedule, Next: omp_init_lock, Prev: omp_set_num_threads, Up: Runtime Library Routines
604 1.1 mrg
605 1.1 mrg 2.19 `omp_set_schedule' - Set the runtime scheduling method
606 1.1 mrg ===========================================================
607 1.1 mrg
608 1.1 mrg _Description_:
609 1.1 mrg Sets the runtime scheduling method. The KIND argument can have the
610 1.1 mrg value `omp_sched_static', `omp_sched_dynamic', `opm_sched_guided'
611 1.1 mrg or `omp_sched_auto'. Except for `omp_sched_auto', the chunk size
612 1.1 mrg is set to the value of MODIFIER if positive or to the default
613 1.1 mrg value if zero or negative. For `omp_sched_auto' the MODIFIER
614 1.1 mrg argument is ignored.
615 1.1 mrg
616 1.1 mrg _C/C++_
617 1.1 mrg _Prototype_: `int omp_schedule(omp_sched_t * kind, int *modifier);'
618 1.1 mrg
619 1.1 mrg _Fortran_:
620 1.1 mrg _Interface_: `subroutine omp_schedule(kind, modifier)'
621 1.1 mrg `integer(kind=omp_sched_kind) kind'
622 1.1 mrg `integer modifier'
623 1.1 mrg
624 1.1 mrg _See also_:
625 1.1 mrg *note omp_get_schedule:: *note OMP_SCHEDULE::
626 1.1 mrg
627 1.1 mrg _Reference_:
628 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section
629 1.1 mrg 3.2.11.
630 1.1 mrg
631 1.1 mrg
632 1.1 mrg File: libgomp.info, Node: omp_init_lock, Next: omp_set_lock, Prev: omp_set_schedule, Up: Runtime Library Routines
633 1.1 mrg
634 1.1 mrg 2.20 `omp_init_lock' - Initialize simple lock
635 1.1 mrg =============================================
636 1.1 mrg
637 1.1 mrg _Description_:
638 1.1 mrg Initialize a simple lock. After initialization, the lock is in an
639 1.1 mrg unlocked state.
640 1.1 mrg
641 1.1 mrg _C/C++_:
642 1.1 mrg _Prototype_: `void omp_init_lock(omp_lock_t *lock);'
643 1.1 mrg
644 1.1 mrg _Fortran_:
645 1.1 mrg _Interface_: `subroutine omp_init_lock(lock)'
646 1.1 mrg `integer(omp_lock_kind), intent(out) :: lock'
647 1.1 mrg
648 1.1 mrg _See also_:
649 1.1 mrg *note omp_destroy_lock::
650 1.1 mrg
651 1.1 mrg _Reference_:
652 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.1.
653 1.1 mrg
654 1.1 mrg
655 1.1 mrg File: libgomp.info, Node: omp_set_lock, Next: omp_test_lock, Prev: omp_init_lock, Up: Runtime Library Routines
656 1.1 mrg
657 1.1 mrg 2.21 `omp_set_lock' - Wait for and set simple lock
658 1.1 mrg ==================================================
659 1.1 mrg
660 1.1 mrg _Description_:
661 1.1 mrg Before setting a simple lock, the lock variable must be
662 1.1 mrg initialized by `omp_init_lock'. The calling thread is blocked
663 1.1 mrg until the lock is available. If the lock is already held by the
664 1.1 mrg current thread, a deadlock occurs.
665 1.1 mrg
666 1.1 mrg _C/C++_:
667 1.1 mrg _Prototype_: `void omp_set_lock(omp_lock_t *lock);'
668 1.1 mrg
669 1.1 mrg _Fortran_:
670 1.1 mrg _Interface_: `subroutine omp_set_lock(lock)'
671 1.1 mrg `integer(omp_lock_kind), intent(out) :: lock'
672 1.1 mrg
673 1.1 mrg _See also_:
674 1.1 mrg *note omp_init_lock::, *note omp_test_lock::, *note
675 1.1 mrg omp_unset_lock::
676 1.1 mrg
677 1.1 mrg _Reference_:
678 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.3.
679 1.1 mrg
680 1.1 mrg
681 1.1 mrg File: libgomp.info, Node: omp_test_lock, Next: omp_unset_lock, Prev: omp_set_lock, Up: Runtime Library Routines
682 1.1 mrg
683 1.1 mrg 2.22 `omp_test_lock' - Test and set simple lock if available
684 1.1 mrg ============================================================
685 1.1 mrg
686 1.1 mrg _Description_:
687 1.1 mrg Before setting a simple lock, the lock variable must be
688 1.1 mrg initialized by `omp_init_lock'. Contrary to `omp_set_lock',
689 1.1 mrg `omp_test_lock' does not block if the lock is not available. This
690 1.1 mrg function returns `true' upon success, `false' otherwise. Here,
691 1.1 mrg `true' and `false' represent their language-specific counterparts.
692 1.1 mrg
693 1.1 mrg _C/C++_:
694 1.1 mrg _Prototype_: `int omp_test_lock(omp_lock_t *lock);'
695 1.1 mrg
696 1.1 mrg _Fortran_:
697 1.1 mrg _Interface_: `subroutine omp_test_lock(lock)'
698 1.1 mrg `logical(omp_logical_kind) :: omp_test_lock'
699 1.1 mrg `integer(omp_lock_kind), intent(out) :: lock'
700 1.1 mrg
701 1.1 mrg _See also_:
702 1.1 mrg *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
703 1.1 mrg
704 1.1 mrg _Reference_:
705 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.5.
706 1.1 mrg
707 1.1 mrg
708 1.1 mrg File: libgomp.info, Node: omp_unset_lock, Next: omp_destroy_lock, Prev: omp_test_lock, Up: Runtime Library Routines
709 1.1 mrg
710 1.1 mrg 2.23 `omp_unset_lock' - Unset simple lock
711 1.1 mrg =========================================
712 1.1 mrg
713 1.1 mrg _Description_:
714 1.1 mrg A simple lock about to be unset must have been locked by
715 1.1 mrg `omp_set_lock' or `omp_test_lock' before. In addition, the lock
716 1.1 mrg must be held by the thread calling `omp_unset_lock'. Then, the
717 1.1 mrg lock becomes unlocked. If one ore more threads attempted to set
718 1.1 mrg the lock before, one of them is chosen to, again, set the lock for
719 1.1 mrg itself.
720 1.1 mrg
721 1.1 mrg _C/C++_:
722 1.1 mrg _Prototype_: `void omp_unset_lock(omp_lock_t *lock);'
723 1.1 mrg
724 1.1 mrg _Fortran_:
725 1.1 mrg _Interface_: `subroutine omp_unset_lock(lock)'
726 1.1 mrg `integer(omp_lock_kind), intent(out) :: lock'
727 1.1 mrg
728 1.1 mrg _See also_:
729 1.1 mrg *note omp_set_lock::, *note omp_test_lock::
730 1.1 mrg
731 1.1 mrg _Reference_:
732 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.4.
733 1.1 mrg
734 1.1 mrg
735 1.1 mrg File: libgomp.info, Node: omp_destroy_lock, Next: omp_init_nest_lock, Prev: omp_unset_lock, Up: Runtime Library Routines
736 1.1 mrg
737 1.1 mrg 2.24 `omp_destroy_lock' - Destroy simple lock
738 1.1 mrg =============================================
739 1.1 mrg
740 1.1 mrg _Description_:
741 1.1 mrg Destroy a simple lock. In order to be destroyed, a simple lock
742 1.1 mrg must be in the unlocked state.
743 1.1 mrg
744 1.1 mrg _C/C++_:
745 1.1 mrg _Prototype_: `void omp_destroy_lock(omp_lock_t *);'
746 1.1 mrg
747 1.1 mrg _Fortran_:
748 1.1 mrg _Interface_: `subroutine omp_destroy_lock(lock)'
749 1.1 mrg `integer(omp_lock_kind), intent(inout) :: lock'
750 1.1 mrg
751 1.1 mrg _See also_:
752 1.1 mrg *note omp_init_lock::
753 1.1 mrg
754 1.1 mrg _Reference_:
755 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.2.
756 1.1 mrg
757 1.1 mrg
758 1.1 mrg File: libgomp.info, Node: omp_init_nest_lock, Next: omp_set_nest_lock, Prev: omp_destroy_lock, Up: Runtime Library Routines
759 1.1 mrg
760 1.1 mrg 2.25 `omp_init_nest_lock' - Initialize nested lock
761 1.1 mrg ==================================================
762 1.1 mrg
763 1.1 mrg _Description_:
764 1.1 mrg Initialize a nested lock. After initialization, the lock is in an
765 1.1 mrg unlocked state and the nesting count is set to zero.
766 1.1 mrg
767 1.1 mrg _C/C++_:
768 1.1 mrg _Prototype_: `void omp_init_nest_lock(omp_nest_lock_t *lock);'
769 1.1 mrg
770 1.1 mrg _Fortran_:
771 1.1 mrg _Interface_: `subroutine omp_init_nest_lock(lock)'
772 1.1 mrg `integer(omp_nest_lock_kind), intent(out) :: lock'
773 1.1 mrg
774 1.1 mrg _See also_:
775 1.1 mrg *note omp_destroy_nest_lock::
776 1.1 mrg
777 1.1 mrg _Reference_:
778 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.1.
779 1.1 mrg
780 1.1 mrg
781 1.1 mrg File: libgomp.info, Node: omp_set_nest_lock, Next: omp_test_nest_lock, Prev: omp_init_nest_lock, Up: Runtime Library Routines
782 1.1 mrg
783 1.1 mrg 2.26 `omp_set_nest_lock' - Wait for and set simple lock
784 1.1 mrg =======================================================
785 1.1 mrg
786 1.1 mrg _Description_:
787 1.1 mrg Before setting a nested lock, the lock variable must be
788 1.1 mrg initialized by `omp_init_nest_lock'. The calling thread is blocked
789 1.1 mrg until the lock is available. If the lock is already held by the
790 1.1 mrg current thread, the nesting count for the lock in incremented.
791 1.1 mrg
792 1.1 mrg _C/C++_:
793 1.1 mrg _Prototype_: `void omp_set_nest_lock(omp_nest_lock_t *lock);'
794 1.1 mrg
795 1.1 mrg _Fortran_:
796 1.1 mrg _Interface_: `subroutine omp_set_nest_lock(lock)'
797 1.1 mrg `integer(omp_nest_lock_kind), intent(out) :: lock'
798 1.1 mrg
799 1.1 mrg _See also_:
800 1.1 mrg *note omp_init_nest_lock::, *note omp_unset_nest_lock::
801 1.1 mrg
802 1.1 mrg _Reference_:
803 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.3.
804 1.1 mrg
805 1.1 mrg
806 1.1 mrg File: libgomp.info, Node: omp_test_nest_lock, Next: omp_unset_nest_lock, Prev: omp_set_nest_lock, Up: Runtime Library Routines
807 1.1 mrg
808 1.1 mrg 2.27 `omp_test_nest_lock' - Test and set nested lock if available
809 1.1 mrg =================================================================
810 1.1 mrg
811 1.1 mrg _Description_:
812 1.1 mrg Before setting a nested lock, the lock variable must be
813 1.1 mrg initialized by `omp_init_nest_lock'. Contrary to
814 1.1 mrg `omp_set_nest_lock', `omp_test_nest_lock' does not block if the
815 1.1 mrg lock is not available. If the lock is already held by the current
816 1.1 mrg thread, the new nesting count is returned. Otherwise, the return
817 1.1 mrg value equals zero.
818 1.1 mrg
819 1.1 mrg _C/C++_:
820 1.1 mrg _Prototype_: `int omp_test_nest_lock(omp_nest_lock_t *lock);'
821 1.1 mrg
822 1.1 mrg _Fortran_:
823 1.1 mrg _Interface_: `integer function omp_test_nest_lock(lock)'
824 1.1 mrg `integer(omp_integer_kind) :: omp_test_nest_lock'
825 1.1 mrg `integer(omp_nest_lock_kind), intent(inout) :: lock'
826 1.1 mrg
827 1.1 mrg _See also_:
828 1.1 mrg *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
829 1.1 mrg
830 1.1 mrg _Reference_:
831 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.5.
832 1.1 mrg
833 1.1 mrg
834 1.1 mrg File: libgomp.info, Node: omp_unset_nest_lock, Next: omp_destroy_nest_lock, Prev: omp_test_nest_lock, Up: Runtime Library Routines
835 1.1 mrg
836 1.1 mrg 2.28 `omp_unset_nest_lock' - Unset nested lock
837 1.1 mrg ==============================================
838 1.1 mrg
839 1.1 mrg _Description_:
840 1.1 mrg A nested lock about to be unset must have been locked by
841 1.1 mrg `omp_set_nested_lock' or `omp_test_nested_lock' before. In
842 1.1 mrg addition, the lock must be held by the thread calling
843 1.1 mrg `omp_unset_nested_lock'. If the nesting count drops to zero, the
844 1.1 mrg lock becomes unlocked. If one ore more threads attempted to set
845 1.1 mrg the lock before, one of them is chosen to, again, set the lock for
846 1.1 mrg itself.
847 1.1 mrg
848 1.1 mrg _C/C++_:
849 1.1 mrg _Prototype_: `void omp_unset_nest_lock(omp_nest_lock_t *lock);'
850 1.1 mrg
851 1.1 mrg _Fortran_:
852 1.1 mrg _Interface_: `subroutine omp_unset_nest_lock(lock)'
853 1.1 mrg `integer(omp_nest_lock_kind), intent(out) :: lock'
854 1.1 mrg
855 1.1 mrg _See also_:
856 1.1 mrg *note omp_set_nest_lock::
857 1.1 mrg
858 1.1 mrg _Reference_:
859 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.4.
860 1.1 mrg
861 1.1 mrg
862 1.1 mrg File: libgomp.info, Node: omp_destroy_nest_lock, Next: omp_get_wtick, Prev: omp_unset_nest_lock, Up: Runtime Library Routines
863 1.1 mrg
864 1.1 mrg 2.29 `omp_destroy_nest_lock' - Destroy nested lock
865 1.1 mrg ==================================================
866 1.1 mrg
867 1.1 mrg _Description_:
868 1.1 mrg Destroy a nested lock. In order to be destroyed, a nested lock
869 1.1 mrg must be in the unlocked state and its nesting count must equal
870 1.1 mrg zero.
871 1.1 mrg
872 1.1 mrg _C/C++_:
873 1.1 mrg _Prototype_: `void omp_destroy_nest_lock(omp_nest_lock_t *);'
874 1.1 mrg
875 1.1 mrg _Fortran_:
876 1.1 mrg _Interface_: `subroutine omp_destroy_nest_lock(lock)'
877 1.1 mrg `integer(omp_nest_lock_kind), intent(inout) :: lock'
878 1.1 mrg
879 1.1 mrg _See also_:
880 1.1 mrg *note omp_init_lock::
881 1.1 mrg
882 1.1 mrg _Reference_:
883 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.2.
884 1.1 mrg
885 1.1 mrg
886 1.1 mrg File: libgomp.info, Node: omp_get_wtick, Next: omp_get_wtime, Prev: omp_destroy_nest_lock, Up: Runtime Library Routines
887 1.1 mrg
888 1.1 mrg 2.30 `omp_get_wtick' - Get timer precision
889 1.1 mrg ==========================================
890 1.1 mrg
891 1.1 mrg _Description_:
892 1.1 mrg Gets the timer precision, i.e., the number of seconds between two
893 1.1 mrg successive clock ticks.
894 1.1 mrg
895 1.1 mrg _C/C++_:
896 1.1 mrg _Prototype_: `double omp_get_wtick();'
897 1.1 mrg
898 1.1 mrg _Fortran_:
899 1.1 mrg _Interface_: `double precision function omp_get_wtick()'
900 1.1 mrg
901 1.1 mrg _See also_:
902 1.1 mrg *note omp_get_wtime::
903 1.1 mrg
904 1.1 mrg _Reference_:
905 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.4.2.
906 1.1 mrg
907 1.1 mrg
908 1.1 mrg File: libgomp.info, Node: omp_get_wtime, Prev: omp_get_wtick, Up: Runtime Library Routines
909 1.1 mrg
910 1.1 mrg 2.31 `omp_get_wtime' - Elapsed wall clock time
911 1.1 mrg ==============================================
912 1.1 mrg
913 1.1 mrg _Description_:
914 1.1 mrg Elapsed wall clock time in seconds. The time is measured per
915 1.1 mrg thread, no guarantee can bee made that two distinct threads
916 1.1 mrg measure the same time. Time is measured from some "time in the
917 1.1 mrg past". On POSIX compliant systems the seconds since the Epoch
918 1.1 mrg (00:00:00 UTC, January 1, 1970) are returned.
919 1.1 mrg
920 1.1 mrg _C/C++_:
921 1.1 mrg _Prototype_: `double omp_get_wtime();'
922 1.1 mrg
923 1.1 mrg _Fortran_:
924 1.1 mrg _Interface_: `double precision function omp_get_wtime()'
925 1.1 mrg
926 1.1 mrg _See also_:
927 1.1 mrg *note omp_get_wtick::
928 1.1 mrg
929 1.1 mrg _Reference_:
930 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 3.4.1.
931 1.1 mrg
932 1.1 mrg
933 1.1 mrg File: libgomp.info, Node: Environment Variables, Next: The libgomp ABI, Prev: Runtime Library Routines, Up: Top
934 1.1 mrg
935 1.1 mrg 3 Environment Variables
936 1.1 mrg ***********************
937 1.1 mrg
938 1.1 mrg The variables `OMP_DYNAMIC', `OMP_MAX_ACTIVE_LEVELS', `OMP_NESTED',
939 1.1 mrg `OMP_NUM_THREADS', `OMP_SCHEDULE', `OMP_STACKSIZE',`OMP_THREAD_LIMIT'
940 1.1 mrg and `OMP_WAIT_POLICY' are defined by section 4 of the OpenMP
941 1.1 mrg specifications in version 3.0, while `GOMP_CPU_AFFINITY' and
942 1.1 mrg `GOMP_STACKSIZE' are GNU extensions.
943 1.1 mrg
944 1.1 mrg * Menu:
945 1.1 mrg
946 1.1 mrg * OMP_DYNAMIC:: Dynamic adjustment of threads
947 1.1 mrg * OMP_MAX_ACTIVE_LEVELS:: Set the maximal number of nested parallel regions
948 1.1 mrg * OMP_NESTED:: Nested parallel regions
949 1.1 mrg * OMP_NUM_THREADS:: Specifies the number of threads to use
950 1.1 mrg * OMP_STACKSIZE:: Set default thread stack size
951 1.1 mrg * OMP_SCHEDULE:: How threads are scheduled
952 1.1 mrg * OMP_THREAD_LIMIT:: Set the maximal number of threads
953 1.1 mrg * OMP_WAIT_POLICY:: How waiting threads are handled
954 1.1 mrg * GOMP_CPU_AFFINITY:: Bind threads to specific CPUs
955 1.1 mrg * GOMP_STACKSIZE:: Set default thread stack size
956 1.1 mrg
957 1.1 mrg
958 1.1 mrg File: libgomp.info, Node: OMP_DYNAMIC, Next: OMP_MAX_ACTIVE_LEVELS, Up: Environment Variables
959 1.1 mrg
960 1.1 mrg 3.1 `OMP_DYNAMIC' - Dynamic adjustment of threads
961 1.1 mrg =================================================
962 1.1 mrg
963 1.1 mrg _Description_:
964 1.1 mrg Enable or disable the dynamic adjustment of the number of threads
965 1.1 mrg within a team. The value of this environment variable shall be
966 1.1 mrg `TRUE' or `FALSE'. If undefined, dynamic adjustment is disabled by
967 1.1 mrg default.
968 1.1 mrg
969 1.1 mrg _See also_:
970 1.1 mrg *note omp_set_dynamic::
971 1.1 mrg
972 1.1 mrg _Reference_:
973 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 4.3
974 1.1 mrg
975 1.1 mrg
976 1.1 mrg File: libgomp.info, Node: OMP_MAX_ACTIVE_LEVELS, Next: OMP_NESTED, Prev: OMP_DYNAMIC, Up: Environment Variables
977 1.1 mrg
978 1.1 mrg 3.2 `OMP_MAX_ACTIVE_LEVELS' - Set the maximal number of nested parallel regions
979 1.1 mrg ===============================================================================
980 1.1 mrg
981 1.1 mrg _Description_:
982 1.1 mrg Specifies the initial value for the maximal number of nested
983 1.1 mrg parallel regions. The value of this variable shall be positive
984 1.1 mrg integer. If undefined, the number of active levels is unlimited.
985 1.1 mrg
986 1.1 mrg _See also_:
987 1.1 mrg *note omp_set_max_active_levels::
988 1.1 mrg
989 1.1 mrg _Reference_:
990 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 4.7
991 1.1 mrg
992 1.1 mrg
993 1.1 mrg File: libgomp.info, Node: OMP_NESTED, Next: OMP_NUM_THREADS, Prev: OMP_MAX_ACTIVE_LEVELS, Up: Environment Variables
994 1.1 mrg
995 1.1 mrg 3.3 `OMP_NESTED' - Nested parallel regions
996 1.1 mrg ==========================================
997 1.1 mrg
998 1.1 mrg _Description_:
999 1.1 mrg Enable or disable nested parallel regions, i.e., whether team
1000 1.1 mrg members are allowed to create new teams. The value of this
1001 1.1 mrg environment variable shall be `TRUE' or `FALSE'. If undefined,
1002 1.1 mrg nested parallel regions are disabled by default.
1003 1.1 mrg
1004 1.1 mrg _See also_:
1005 1.1 mrg *note omp_set_nested::
1006 1.1 mrg
1007 1.1 mrg _Reference_:
1008 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 4.4
1009 1.1 mrg
1010 1.1 mrg
1011 1.1 mrg File: libgomp.info, Node: OMP_NUM_THREADS, Next: OMP_STACKSIZE, Prev: OMP_NESTED, Up: Environment Variables
1012 1.1 mrg
1013 1.1 mrg 3.4 `OMP_NUM_THREADS' - Specifies the number of threads to use
1014 1.1 mrg ==============================================================
1015 1.1 mrg
1016 1.1 mrg _Description_:
1017 1.1 mrg Specifies the default number of threads to use in parallel
1018 1.1 mrg regions. The value of this variable shall be positive integer. If
1019 1.1 mrg undefined one thread per CPU online is used.
1020 1.1 mrg
1021 1.1 mrg _See also_:
1022 1.1 mrg *note omp_set_num_threads::
1023 1.1 mrg
1024 1.1 mrg _Reference_:
1025 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 4.2
1026 1.1 mrg
1027 1.1 mrg
1028 1.1 mrg File: libgomp.info, Node: OMP_SCHEDULE, Next: OMP_THREAD_LIMIT, Prev: OMP_STACKSIZE, Up: Environment Variables
1029 1.1 mrg
1030 1.1 mrg 3.5 `OMP_SCHEDULE' - How threads are scheduled
1031 1.1 mrg ==============================================
1032 1.1 mrg
1033 1.1 mrg _Description_:
1034 1.1 mrg Allows to specify `schedule type' and `chunk size'. The value of
1035 1.1 mrg the variable shall have the form: `type[,chunk]' where `type' is
1036 1.1 mrg one of `static', `dynamic', `guided' or `auto' The optional
1037 1.1 mrg `chunk' size shall be a positive integer. If undefined, dynamic
1038 1.1 mrg scheduling and a chunk size of 1 is used.
1039 1.1 mrg
1040 1.1 mrg _See also_:
1041 1.1 mrg *note omp_set_schedule::
1042 1.1 mrg
1043 1.1 mrg _Reference_:
1044 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), sections
1045 1.1 mrg 2.5.1 and 4.1
1046 1.1 mrg
1047 1.1 mrg
1048 1.1 mrg File: libgomp.info, Node: OMP_STACKSIZE, Next: OMP_SCHEDULE, Prev: OMP_NUM_THREADS, Up: Environment Variables
1049 1.1 mrg
1050 1.1 mrg 3.6 `OMP_STACKSIZE' - Set default thread stack size
1051 1.1 mrg ===================================================
1052 1.1 mrg
1053 1.1 mrg _Description_:
1054 1.1 mrg Set the default thread stack size in kilobytes, unless the number
1055 1.1 mrg is suffixed by `B', `K', `M' or `G', in which case the size is,
1056 1.1 mrg respectively, in bytes, kilobytes, megabytes or gigabytes. This is
1057 1.1 mrg different from `pthread_attr_setstacksize' which gets the number
1058 1.1 mrg of bytes as an argument. If the stacksize can not be set due to
1059 1.1 mrg system constraints, an error is reported and the initial stacksize
1060 1.1 mrg is left unchanged. If undefined, the stack size is system
1061 1.1 mrg dependent.
1062 1.1 mrg
1063 1.1 mrg _Reference_:
1064 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), sections 4.5
1065 1.1 mrg
1066 1.1 mrg
1067 1.1 mrg File: libgomp.info, Node: OMP_THREAD_LIMIT, Next: OMP_WAIT_POLICY, Prev: OMP_SCHEDULE, Up: Environment Variables
1068 1.1 mrg
1069 1.1 mrg 3.7 `OMP_THREAD_LIMIT' - Set the maximal number of threads
1070 1.1 mrg ==========================================================
1071 1.1 mrg
1072 1.1 mrg _Description_:
1073 1.1 mrg Specifies the number of threads to use for the whole program. The
1074 1.1 mrg value of this variable shall be positive integer. If undefined,
1075 1.1 mrg the number of threads is not limited.
1076 1.1 mrg
1077 1.1 mrg _See also_:
1078 1.1 mrg *note OMP_NUM_THREADS:: *note omp_get_thread_limit::
1079 1.1 mrg
1080 1.1 mrg _Reference_:
1081 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), section 4.8
1082 1.1 mrg
1083 1.1 mrg
1084 1.1 mrg File: libgomp.info, Node: OMP_WAIT_POLICY, Next: GOMP_CPU_AFFINITY, Prev: OMP_THREAD_LIMIT, Up: Environment Variables
1085 1.1 mrg
1086 1.1 mrg 3.8 `OMP_WAIT_POLICY' - How waiting threads are handled
1087 1.1 mrg =======================================================
1088 1.1 mrg
1089 1.1 mrg _Description_:
1090 1.1 mrg Specifies whether waiting threads should be active or passive. If
1091 1.1 mrg the value is `PASSIVE', waiting threads should not consume CPU
1092 1.1 mrg power while waiting; while the value is `ACTIVE' specifies that
1093 1.1 mrg they should.
1094 1.1 mrg
1095 1.1 mrg _Reference_:
1096 1.1 mrg OpenMP specifications v3.0 (http://www.openmp.org/), sections 4.6
1097 1.1 mrg
1098 1.1 mrg
1099 1.1 mrg File: libgomp.info, Node: GOMP_CPU_AFFINITY, Next: GOMP_STACKSIZE, Prev: OMP_WAIT_POLICY, Up: Environment Variables
1100 1.1 mrg
1101 1.1 mrg 3.9 `GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
1102 1.1 mrg =======================================================
1103 1.1 mrg
1104 1.1 mrg _Description_:
1105 1.1 mrg Binds threads to specific CPUs. The variable should contain a
1106 1.1 mrg space- or comma-separated list of CPUs. This list may contain
1107 1.1 mrg different kind of entries: either single CPU numbers in any order,
1108 1.1 mrg a range of CPUs (M-N) or a range with some stride (M-N:S). CPU
1109 1.1 mrg numbers are zero based. For example, `GOMP_CPU_AFFINITY="0 3 1-2
1110 1.1 mrg 4-15:2"' will bind the initial thread to CPU 0, the second to CPU
1111 1.1 mrg 3, the third to CPU 1, the fourth to CPU 2, the fifth to CPU 4,
1112 1.1 mrg the sixth through tenth to CPUs 6, 8, 10, 12, and 14 respectively
1113 1.1 mrg and then start assigning back from the beginning of the list.
1114 1.1 mrg `GOMP_CPU_AFFINITY=0' binds all threads to CPU 0.
1115 1.1 mrg
1116 1.1 mrg There is no GNU OpenMP library routine to determine whether a CPU
1117 1.1 mrg affinity specification is in effect. As a workaround,
1118 1.1 mrg language-specific library functions, e.g., `getenv' in C or
1119 1.1 mrg `GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
1120 1.1 mrg setting of the `GOMP_CPU_AFFINITY' environment variable. A defined
1121 1.1 mrg CPU affinity on startup cannot be changed or disabled during the
1122 1.1 mrg runtime of the application.
1123 1.1 mrg
1124 1.1 mrg If this environment variable is omitted, the host system will
1125 1.1 mrg handle the assignment of threads to CPUs.
1126 1.1 mrg
1127 1.1 mrg
1128 1.1 mrg File: libgomp.info, Node: GOMP_STACKSIZE, Prev: GOMP_CPU_AFFINITY, Up: Environment Variables
1129 1.1 mrg
1130 1.1 mrg 3.10 `GOMP_STACKSIZE' - Set default thread stack size
1131 1.1 mrg =====================================================
1132 1.1 mrg
1133 1.1 mrg _Description_:
1134 1.1 mrg Set the default thread stack size in kilobytes. This is different
1135 1.1 mrg from `pthread_attr_setstacksize' which gets the number of bytes as
1136 1.1 mrg an argument. If the stacksize can not be set due to system
1137 1.1 mrg constraints, an error is reported and the initial stacksize is
1138 1.1 mrg left unchanged. If undefined, the stack size is system dependent.
1139 1.1 mrg
1140 1.1 mrg _See also_:
1141 1.1 mrg *note GOMP_STACKSIZE::
1142 1.1 mrg
1143 1.1 mrg _Reference_:
1144 1.1 mrg GCC Patches Mailinglist
1145 1.1 mrg (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00493.html), GCC
1146 1.1 mrg Patches Mailinglist
1147 1.1 mrg (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00496.html)
1148 1.1 mrg
1149 1.1 mrg
1150 1.1 mrg File: libgomp.info, Node: The libgomp ABI, Next: Reporting Bugs, Prev: Environment Variables, Up: Top
1151 1.1 mrg
1152 1.1 mrg 4 The libgomp ABI
1153 1.1 mrg *****************
1154 1.1 mrg
1155 1.1 mrg The following sections present notes on the external ABI as presented
1156 1.1 mrg by libgomp. Only maintainers should need them.
1157 1.1 mrg
1158 1.1 mrg * Menu:
1159 1.1 mrg
1160 1.1 mrg * Implementing MASTER construct::
1161 1.1 mrg * Implementing CRITICAL construct::
1162 1.1 mrg * Implementing ATOMIC construct::
1163 1.1 mrg * Implementing FLUSH construct::
1164 1.1 mrg * Implementing BARRIER construct::
1165 1.1 mrg * Implementing THREADPRIVATE construct::
1166 1.1 mrg * Implementing PRIVATE clause::
1167 1.1 mrg * Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses::
1168 1.1 mrg * Implementing REDUCTION clause::
1169 1.1 mrg * Implementing PARALLEL construct::
1170 1.1 mrg * Implementing FOR construct::
1171 1.1 mrg * Implementing ORDERED construct::
1172 1.1 mrg * Implementing SECTIONS construct::
1173 1.1 mrg * Implementing SINGLE construct::
1174 1.1 mrg
1175 1.1 mrg
1176 1.1 mrg File: libgomp.info, Node: Implementing MASTER construct, Next: Implementing CRITICAL construct, Up: The libgomp ABI
1177 1.1 mrg
1178 1.1 mrg 4.1 Implementing MASTER construct
1179 1.1 mrg =================================
1180 1.1 mrg
1181 1.1 mrg if (omp_get_thread_num () == 0)
1182 1.1 mrg block
1183 1.1 mrg
1184 1.1 mrg Alternately, we generate two copies of the parallel subfunction and
1185 1.1 mrg only include this in the version run by the master thread. Surely
1186 1.1 mrg that's not worthwhile though...
1187 1.1 mrg
1188 1.1 mrg
1189 1.1 mrg File: libgomp.info, Node: Implementing CRITICAL construct, Next: Implementing ATOMIC construct, Prev: Implementing MASTER construct, Up: The libgomp ABI
1190 1.1 mrg
1191 1.1 mrg 4.2 Implementing CRITICAL construct
1192 1.1 mrg ===================================
1193 1.1 mrg
1194 1.1 mrg Without a specified name,
1195 1.1 mrg
1196 1.1 mrg void GOMP_critical_start (void);
1197 1.1 mrg void GOMP_critical_end (void);
1198 1.1 mrg
1199 1.1 mrg so that we don't get COPY relocations from libgomp to the main
1200 1.1 mrg application.
1201 1.1 mrg
1202 1.1 mrg With a specified name, use omp_set_lock and omp_unset_lock with name
1203 1.1 mrg being transformed into a variable declared like
1204 1.1 mrg
1205 1.1 mrg omp_lock_t gomp_critical_user_<name> __attribute__((common))
1206 1.1 mrg
1207 1.1 mrg Ideally the ABI would specify that all zero is a valid unlocked
1208 1.1 mrg state, and so we wouldn't actually need to initialize this at startup.
1209 1.1 mrg
1210 1.1 mrg
1211 1.1 mrg File: libgomp.info, Node: Implementing ATOMIC construct, Next: Implementing FLUSH construct, Prev: Implementing CRITICAL construct, Up: The libgomp ABI
1212 1.1 mrg
1213 1.1 mrg 4.3 Implementing ATOMIC construct
1214 1.1 mrg =================================
1215 1.1 mrg
1216 1.1 mrg The target should implement the `__sync' builtins.
1217 1.1 mrg
1218 1.1 mrg Failing that we could add
1219 1.1 mrg
1220 1.1 mrg void GOMP_atomic_enter (void)
1221 1.1 mrg void GOMP_atomic_exit (void)
1222 1.1 mrg
1223 1.1 mrg which reuses the regular lock code, but with yet another lock object
1224 1.1 mrg private to the library.
1225 1.1 mrg
1226 1.1 mrg
1227 1.1 mrg File: libgomp.info, Node: Implementing FLUSH construct, Next: Implementing BARRIER construct, Prev: Implementing ATOMIC construct, Up: The libgomp ABI
1228 1.1 mrg
1229 1.1 mrg 4.4 Implementing FLUSH construct
1230 1.1 mrg ================================
1231 1.1 mrg
1232 1.1 mrg Expands to the `__sync_synchronize' builtin.
1233 1.1 mrg
1234 1.1 mrg
1235 1.1 mrg File: libgomp.info, Node: Implementing BARRIER construct, Next: Implementing THREADPRIVATE construct, Prev: Implementing FLUSH construct, Up: The libgomp ABI
1236 1.1 mrg
1237 1.1 mrg 4.5 Implementing BARRIER construct
1238 1.1 mrg ==================================
1239 1.1 mrg
1240 1.1 mrg void GOMP_barrier (void)
1241 1.1 mrg
1242 1.1 mrg
1243 1.1 mrg File: libgomp.info, Node: Implementing THREADPRIVATE construct, Next: Implementing PRIVATE clause, Prev: Implementing BARRIER construct, Up: The libgomp ABI
1244 1.1 mrg
1245 1.1 mrg 4.6 Implementing THREADPRIVATE construct
1246 1.1 mrg ========================================
1247 1.1 mrg
1248 1.1 mrg In _most_ cases we can map this directly to `__thread'. Except that
1249 1.1 mrg OMP allows constructors for C++ objects. We can either refuse to
1250 1.1 mrg support this (how often is it used?) or we can implement something akin
1251 1.1 mrg to .ctors.
1252 1.1 mrg
1253 1.1 mrg Even more ideally, this ctor feature is handled by extensions to the
1254 1.1 mrg main pthreads library. Failing that, we can have a set of entry points
1255 1.1 mrg to register ctor functions to be called.
1256 1.1 mrg
1257 1.1 mrg
1258 1.1 mrg File: libgomp.info, Node: Implementing PRIVATE clause, Next: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Prev: Implementing THREADPRIVATE construct, Up: The libgomp ABI
1259 1.1 mrg
1260 1.1 mrg 4.7 Implementing PRIVATE clause
1261 1.1 mrg ===============================
1262 1.1 mrg
1263 1.1 mrg In association with a PARALLEL, or within the lexical extent of a
1264 1.1 mrg PARALLEL block, the variable becomes a local variable in the parallel
1265 1.1 mrg subfunction.
1266 1.1 mrg
1267 1.1 mrg In association with FOR or SECTIONS blocks, create a new automatic
1268 1.1 mrg variable within the current function. This preserves the semantic of
1269 1.1 mrg new variable creation.
1270 1.1 mrg
1271 1.1 mrg
1272 1.1 mrg File: libgomp.info, Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Next: Implementing REDUCTION clause, Prev: Implementing PRIVATE clause, Up: The libgomp ABI
1273 1.1 mrg
1274 1.1 mrg 4.8 Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses
1275 1.1 mrg ========================================================================
1276 1.1 mrg
1277 1.1 mrg Seems simple enough for PARALLEL blocks. Create a private struct for
1278 1.1 mrg communicating between parent and subfunction. In the parent, copy in
1279 1.1 mrg values for scalar and "small" structs; copy in addresses for others
1280 1.1 mrg TREE_ADDRESSABLE types. In the subfunction, copy the value into the
1281 1.1 mrg local variable.
1282 1.1 mrg
1283 1.1 mrg Not clear at all what to do with bare FOR or SECTION blocks. The
1284 1.1 mrg only thing I can figure is that we do something like
1285 1.1 mrg
1286 1.1 mrg #pragma omp for firstprivate(x) lastprivate(y)
1287 1.1 mrg for (int i = 0; i < n; ++i)
1288 1.1 mrg body;
1289 1.1 mrg
1290 1.1 mrg which becomes
1291 1.1 mrg
1292 1.1 mrg {
1293 1.1 mrg int x = x, y;
1294 1.1 mrg
1295 1.1 mrg // for stuff
1296 1.1 mrg
1297 1.1 mrg if (i == n)
1298 1.1 mrg y = y;
1299 1.1 mrg }
1300 1.1 mrg
1301 1.1 mrg where the "x=x" and "y=y" assignments actually have different uids
1302 1.1 mrg for the two variables, i.e. not something you could write directly in
1303 1.1 mrg C. Presumably this only makes sense if the "outer" x and y are global
1304 1.1 mrg variables.
1305 1.1 mrg
1306 1.1 mrg COPYPRIVATE would work the same way, except the structure broadcast
1307 1.1 mrg would have to happen via SINGLE machinery instead.
1308 1.1 mrg
1309 1.1 mrg
1310 1.1 mrg File: libgomp.info, Node: Implementing REDUCTION clause, Next: Implementing PARALLEL construct, Prev: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Up: The libgomp ABI
1311 1.1 mrg
1312 1.1 mrg 4.9 Implementing REDUCTION clause
1313 1.1 mrg =================================
1314 1.1 mrg
1315 1.1 mrg The private struct mentioned in the previous section should have a
1316 1.1 mrg pointer to an array of the type of the variable, indexed by the
1317 1.1 mrg thread's TEAM_ID. The thread stores its final value into the array,
1318 1.1 mrg and after the barrier the master thread iterates over the array to
1319 1.1 mrg collect the values.
1320 1.1 mrg
1321 1.1 mrg
1322 1.1 mrg File: libgomp.info, Node: Implementing PARALLEL construct, Next: Implementing FOR construct, Prev: Implementing REDUCTION clause, Up: The libgomp ABI
1323 1.1 mrg
1324 1.1 mrg 4.10 Implementing PARALLEL construct
1325 1.1 mrg ====================================
1326 1.1 mrg
1327 1.1 mrg #pragma omp parallel
1328 1.1 mrg {
1329 1.1 mrg body;
1330 1.1 mrg }
1331 1.1 mrg
1332 1.1 mrg becomes
1333 1.1 mrg
1334 1.1 mrg void subfunction (void *data)
1335 1.1 mrg {
1336 1.1 mrg use data;
1337 1.1 mrg body;
1338 1.1 mrg }
1339 1.1 mrg
1340 1.1 mrg setup data;
1341 1.1 mrg GOMP_parallel_start (subfunction, &data, num_threads);
1342 1.1 mrg subfunction (&data);
1343 1.1 mrg GOMP_parallel_end ();
1344 1.1 mrg
1345 1.1 mrg void GOMP_parallel_start (void (*fn)(void *), void *data, unsigned num_threads)
1346 1.1 mrg
1347 1.1 mrg The FN argument is the subfunction to be run in parallel.
1348 1.1 mrg
1349 1.1 mrg The DATA argument is a pointer to a structure used to communicate
1350 1.1 mrg data in and out of the subfunction, as discussed above with respect to
1351 1.1 mrg FIRSTPRIVATE et al.
1352 1.1 mrg
1353 1.1 mrg The NUM_THREADS argument is 1 if an IF clause is present and false,
1354 1.1 mrg or the value of the NUM_THREADS clause, if present, or 0.
1355 1.1 mrg
1356 1.1 mrg The function needs to create the appropriate number of threads
1357 1.1 mrg and/or launch them from the dock. It needs to create the team
1358 1.1 mrg structure and assign team ids.
1359 1.1 mrg
1360 1.1 mrg void GOMP_parallel_end (void)
1361 1.1 mrg
1362 1.1 mrg Tears down the team and returns us to the previous
1363 1.1 mrg `omp_in_parallel()' state.
1364 1.1 mrg
1365 1.1 mrg
1366 1.1 mrg File: libgomp.info, Node: Implementing FOR construct, Next: Implementing ORDERED construct, Prev: Implementing PARALLEL construct, Up: The libgomp ABI
1367 1.1 mrg
1368 1.1 mrg 4.11 Implementing FOR construct
1369 1.1 mrg ===============================
1370 1.1 mrg
1371 1.1 mrg #pragma omp parallel for
1372 1.1 mrg for (i = lb; i <= ub; i++)
1373 1.1 mrg body;
1374 1.1 mrg
1375 1.1 mrg becomes
1376 1.1 mrg
1377 1.1 mrg void subfunction (void *data)
1378 1.1 mrg {
1379 1.1 mrg long _s0, _e0;
1380 1.1 mrg while (GOMP_loop_static_next (&_s0, &_e0))
1381 1.1 mrg {
1382 1.1 mrg long _e1 = _e0, i;
1383 1.1 mrg for (i = _s0; i < _e1; i++)
1384 1.1 mrg body;
1385 1.1 mrg }
1386 1.1 mrg GOMP_loop_end_nowait ();
1387 1.1 mrg }
1388 1.1 mrg
1389 1.1 mrg GOMP_parallel_loop_static (subfunction, NULL, 0, lb, ub+1, 1, 0);
1390 1.1 mrg subfunction (NULL);
1391 1.1 mrg GOMP_parallel_end ();
1392 1.1 mrg
1393 1.1 mrg #pragma omp for schedule(runtime)
1394 1.1 mrg for (i = 0; i < n; i++)
1395 1.1 mrg body;
1396 1.1 mrg
1397 1.1 mrg becomes
1398 1.1 mrg
1399 1.1 mrg {
1400 1.1 mrg long i, _s0, _e0;
1401 1.1 mrg if (GOMP_loop_runtime_start (0, n, 1, &_s0, &_e0))
1402 1.1 mrg do {
1403 1.1 mrg long _e1 = _e0;
1404 1.1 mrg for (i = _s0, i < _e0; i++)
1405 1.1 mrg body;
1406 1.1 mrg } while (GOMP_loop_runtime_next (&_s0, _&e0));
1407 1.1 mrg GOMP_loop_end ();
1408 1.1 mrg }
1409 1.1 mrg
1410 1.1 mrg Note that while it looks like there is trickyness to propagating a
1411 1.1 mrg non-constant STEP, there isn't really. We're explicitly allowed to
1412 1.1 mrg evaluate it as many times as we want, and any variables involved should
1413 1.1 mrg automatically be handled as PRIVATE or SHARED like any other variables.
1414 1.1 mrg So the expression should remain evaluable in the subfunction. We can
1415 1.1 mrg also pull it into a local variable if we like, but since its supposed
1416 1.1 mrg to remain unchanged, we can also not if we like.
1417 1.1 mrg
1418 1.1 mrg If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be
1419 1.1 mrg able to get away with no work-sharing context at all, since we can
1420 1.1 mrg simply perform the arithmetic directly in each thread to divide up the
1421 1.1 mrg iterations. Which would mean that we wouldn't need to call any of
1422 1.1 mrg these routines.
1423 1.1 mrg
1424 1.1 mrg There are separate routines for handling loops with an ORDERED
1425 1.1 mrg clause. Bookkeeping for that is non-trivial...
1426 1.1 mrg
1427 1.1 mrg
1428 1.1 mrg File: libgomp.info, Node: Implementing ORDERED construct, Next: Implementing SECTIONS construct, Prev: Implementing FOR construct, Up: The libgomp ABI
1429 1.1 mrg
1430 1.1 mrg 4.12 Implementing ORDERED construct
1431 1.1 mrg ===================================
1432 1.1 mrg
1433 1.1 mrg void GOMP_ordered_start (void)
1434 1.1 mrg void GOMP_ordered_end (void)
1435 1.1 mrg
1436 1.1 mrg
1437 1.1 mrg File: libgomp.info, Node: Implementing SECTIONS construct, Next: Implementing SINGLE construct, Prev: Implementing ORDERED construct, Up: The libgomp ABI
1438 1.1 mrg
1439 1.1 mrg 4.13 Implementing SECTIONS construct
1440 1.1 mrg ====================================
1441 1.1 mrg
1442 1.1 mrg A block as
1443 1.1 mrg
1444 1.1 mrg #pragma omp sections
1445 1.1 mrg {
1446 1.1 mrg #pragma omp section
1447 1.1 mrg stmt1;
1448 1.1 mrg #pragma omp section
1449 1.1 mrg stmt2;
1450 1.1 mrg #pragma omp section
1451 1.1 mrg stmt3;
1452 1.1 mrg }
1453 1.1 mrg
1454 1.1 mrg becomes
1455 1.1 mrg
1456 1.1 mrg for (i = GOMP_sections_start (3); i != 0; i = GOMP_sections_next ())
1457 1.1 mrg switch (i)
1458 1.1 mrg {
1459 1.1 mrg case 1:
1460 1.1 mrg stmt1;
1461 1.1 mrg break;
1462 1.1 mrg case 2:
1463 1.1 mrg stmt2;
1464 1.1 mrg break;
1465 1.1 mrg case 3:
1466 1.1 mrg stmt3;
1467 1.1 mrg break;
1468 1.1 mrg }
1469 1.1 mrg GOMP_barrier ();
1470 1.1 mrg
1471 1.1 mrg
1472 1.1 mrg File: libgomp.info, Node: Implementing SINGLE construct, Prev: Implementing SECTIONS construct, Up: The libgomp ABI
1473 1.1 mrg
1474 1.1 mrg 4.14 Implementing SINGLE construct
1475 1.1 mrg ==================================
1476 1.1 mrg
1477 1.1 mrg A block like
1478 1.1 mrg
1479 1.1 mrg #pragma omp single
1480 1.1 mrg {
1481 1.1 mrg body;
1482 1.1 mrg }
1483 1.1 mrg
1484 1.1 mrg becomes
1485 1.1 mrg
1486 1.1 mrg if (GOMP_single_start ())
1487 1.1 mrg body;
1488 1.1 mrg GOMP_barrier ();
1489 1.1 mrg
1490 1.1 mrg while
1491 1.1 mrg
1492 1.1 mrg #pragma omp single copyprivate(x)
1493 1.1 mrg body;
1494 1.1 mrg
1495 1.1 mrg becomes
1496 1.1 mrg
1497 1.1 mrg datap = GOMP_single_copy_start ();
1498 1.1 mrg if (datap == NULL)
1499 1.1 mrg {
1500 1.1 mrg body;
1501 1.1 mrg data.x = x;
1502 1.1 mrg GOMP_single_copy_end (&data);
1503 1.1 mrg }
1504 1.1 mrg else
1505 1.1 mrg x = datap->x;
1506 1.1 mrg GOMP_barrier ();
1507 1.1 mrg
1508 1.1 mrg
1509 1.1 mrg File: libgomp.info, Node: Reporting Bugs, Next: Copying, Prev: The libgomp ABI, Up: Top
1510 1.1 mrg
1511 1.1 mrg 5 Reporting Bugs
1512 1.1 mrg ****************
1513 1.1 mrg
1514 1.1 mrg Bugs in the GNU OpenMP implementation should be reported via bugzilla
1515 1.1 mrg (http://gcc.gnu.org/bugzilla/). In all cases, please add "openmp" to
1516 1.1 mrg the keywords field in the bug report.
1517 1.1 mrg
1518 1.1 mrg
1519 1.1 mrg File: libgomp.info, Node: Copying, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
1520 1.1 mrg
1521 1.1 mrg GNU GENERAL PUBLIC LICENSE
1522 1.1 mrg **************************
1523 1.1 mrg
1524 1.1 mrg Version 2, June 1991
1525 1.1 mrg
1526 1.1 mrg Copyright (C) 1989, 1991 Free Software Foundation, Inc.
1527 1.1 mrg 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
1528 1.1 mrg
1529 1.1 mrg Everyone is permitted to copy and distribute verbatim copies
1530 1.1 mrg of this license document, but changing it is not allowed.
1531 1.1 mrg
1532 1.1 mrg Preamble
1533 1.1 mrg ========
1534 1.1 mrg
1535 1.1 mrg The licenses for most software are designed to take away your freedom
1536 1.1 mrg to share and change it. By contrast, the GNU General Public License is
1537 1.1 mrg intended to guarantee your freedom to share and change free
1538 1.1 mrg software--to make sure the software is free for all its users. This
1539 1.1 mrg General Public License applies to most of the Free Software
1540 1.1 mrg Foundation's software and to any other program whose authors commit to
1541 1.1 mrg using it. (Some other Free Software Foundation software is covered by
1542 1.1 mrg the GNU Library General Public License instead.) You can apply it to
1543 1.1 mrg your programs, too.
1544 1.1 mrg
1545 1.1 mrg When we speak of free software, we are referring to freedom, not
1546 1.1 mrg price. Our General Public Licenses are designed to make sure that you
1547 1.1 mrg have the freedom to distribute copies of free software (and charge for
1548 1.1 mrg this service if you wish), that you receive source code or can get it
1549 1.1 mrg if you want it, that you can change the software or use pieces of it in
1550 1.1 mrg new free programs; and that you know you can do these things.
1551 1.1 mrg
1552 1.1 mrg To protect your rights, we need to make restrictions that forbid
1553 1.1 mrg anyone to deny you these rights or to ask you to surrender the rights.
1554 1.1 mrg These restrictions translate to certain responsibilities for you if you
1555 1.1 mrg distribute copies of the software, or if you modify it.
1556 1.1 mrg
1557 1.1 mrg For example, if you distribute copies of such a program, whether
1558 1.1 mrg gratis or for a fee, you must give the recipients all the rights that
1559 1.1 mrg you have. You must make sure that they, too, receive or can get the
1560 1.1 mrg source code. And you must show them these terms so they know their
1561 1.1 mrg rights.
1562 1.1 mrg
1563 1.1 mrg We protect your rights with two steps: (1) copyright the software,
1564 1.1 mrg and (2) offer you this license which gives you legal permission to copy,
1565 1.1 mrg distribute and/or modify the software.
1566 1.1 mrg
1567 1.1 mrg Also, for each author's protection and ours, we want to make certain
1568 1.1 mrg that everyone understands that there is no warranty for this free
1569 1.1 mrg software. If the software is modified by someone else and passed on, we
1570 1.1 mrg want its recipients to know that what they have is not the original, so
1571 1.1 mrg that any problems introduced by others will not reflect on the original
1572 1.1 mrg authors' reputations.
1573 1.1 mrg
1574 1.1 mrg Finally, any free program is threatened constantly by software
1575 1.1 mrg patents. We wish to avoid the danger that redistributors of a free
1576 1.1 mrg program will individually obtain patent licenses, in effect making the
1577 1.1 mrg program proprietary. To prevent this, we have made it clear that any
1578 1.1 mrg patent must be licensed for everyone's free use or not licensed at all.
1579 1.1 mrg
1580 1.1 mrg The precise terms and conditions for copying, distribution and
1581 1.1 mrg modification follow.
1582 1.1 mrg
1583 1.1 mrg TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1584 1.1 mrg 0. This License applies to any program or other work which contains a
1585 1.1 mrg notice placed by the copyright holder saying it may be distributed
1586 1.1 mrg under the terms of this General Public License. The "Program",
1587 1.1 mrg below, refers to any such program or work, and a "work based on
1588 1.1 mrg the Program" means either the Program or any derivative work under
1589 1.1 mrg copyright law: that is to say, a work containing the Program or a
1590 1.1 mrg portion of it, either verbatim or with modifications and/or
1591 1.1 mrg translated into another language. (Hereinafter, translation is
1592 1.1 mrg included without limitation in the term "modification".) Each
1593 1.1 mrg licensee is addressed as "you".
1594 1.1 mrg
1595 1.1 mrg Activities other than copying, distribution and modification are
1596 1.1 mrg not covered by this License; they are outside its scope. The act
1597 1.1 mrg of running the Program is not restricted, and the output from the
1598 1.1 mrg Program is covered only if its contents constitute a work based on
1599 1.1 mrg the Program (independent of having been made by running the
1600 1.1 mrg Program). Whether that is true depends on what the Program does.
1601 1.1 mrg
1602 1.1 mrg 1. You may copy and distribute verbatim copies of the Program's
1603 1.1 mrg source code as you receive it, in any medium, provided that you
1604 1.1 mrg conspicuously and appropriately publish on each copy an appropriate
1605 1.1 mrg copyright notice and disclaimer of warranty; keep intact all the
1606 1.1 mrg notices that refer to this License and to the absence of any
1607 1.1 mrg warranty; and give any other recipients of the Program a copy of
1608 1.1 mrg this License along with the Program.
1609 1.1 mrg
1610 1.1 mrg You may charge a fee for the physical act of transferring a copy,
1611 1.1 mrg and you may at your option offer warranty protection in exchange
1612 1.1 mrg for a fee.
1613 1.1 mrg
1614 1.1 mrg 2. You may modify your copy or copies of the Program or any portion
1615 1.1 mrg of it, thus forming a work based on the Program, and copy and
1616 1.1 mrg distribute such modifications or work under the terms of Section 1
1617 1.1 mrg above, provided that you also meet all of these conditions:
1618 1.1 mrg
1619 1.1 mrg a. You must cause the modified files to carry prominent notices
1620 1.1 mrg stating that you changed the files and the date of any change.
1621 1.1 mrg
1622 1.1 mrg b. You must cause any work that you distribute or publish, that
1623 1.1 mrg in whole or in part contains or is derived from the Program
1624 1.1 mrg or any part thereof, to be licensed as a whole at no charge
1625 1.1 mrg to all third parties under the terms of this License.
1626 1.1 mrg
1627 1.1 mrg c. If the modified program normally reads commands interactively
1628 1.1 mrg when run, you must cause it, when started running for such
1629 1.1 mrg interactive use in the most ordinary way, to print or display
1630 1.1 mrg an announcement including an appropriate copyright notice and
1631 1.1 mrg a notice that there is no warranty (or else, saying that you
1632 1.1 mrg provide a warranty) and that users may redistribute the
1633 1.1 mrg program under these conditions, and telling the user how to
1634 1.1 mrg view a copy of this License. (Exception: if the Program
1635 1.1 mrg itself is interactive but does not normally print such an
1636 1.1 mrg announcement, your work based on the Program is not required
1637 1.1 mrg to print an announcement.)
1638 1.1 mrg
1639 1.1 mrg These requirements apply to the modified work as a whole. If
1640 1.1 mrg identifiable sections of that work are not derived from the
1641 1.1 mrg Program, and can be reasonably considered independent and separate
1642 1.1 mrg works in themselves, then this License, and its terms, do not
1643 1.1 mrg apply to those sections when you distribute them as separate
1644 1.1 mrg works. But when you distribute the same sections as part of a
1645 1.1 mrg whole which is a work based on the Program, the distribution of
1646 1.1 mrg the whole must be on the terms of this License, whose permissions
1647 1.1 mrg for other licensees extend to the entire whole, and thus to each
1648 1.1 mrg and every part regardless of who wrote it.
1649 1.1 mrg
1650 1.1 mrg Thus, it is not the intent of this section to claim rights or
1651 1.1 mrg contest your rights to work written entirely by you; rather, the
1652 1.1 mrg intent is to exercise the right to control the distribution of
1653 1.1 mrg derivative or collective works based on the Program.
1654 1.1 mrg
1655 1.1 mrg In addition, mere aggregation of another work not based on the
1656 1.1 mrg Program with the Program (or with a work based on the Program) on
1657 1.1 mrg a volume of a storage or distribution medium does not bring the
1658 1.1 mrg other work under the scope of this License.
1659 1.1 mrg
1660 1.1 mrg 3. You may copy and distribute the Program (or a work based on it,
1661 1.1 mrg under Section 2) in object code or executable form under the terms
1662 1.1 mrg of Sections 1 and 2 above provided that you also do one of the
1663 1.1 mrg following:
1664 1.1 mrg
1665 1.1 mrg a. Accompany it with the complete corresponding machine-readable
1666 1.1 mrg source code, which must be distributed under the terms of
1667 1.1 mrg Sections 1 and 2 above on a medium customarily used for
1668 1.1 mrg software interchange; or,
1669 1.1 mrg
1670 1.1 mrg b. Accompany it with a written offer, valid for at least three
1671 1.1 mrg years, to give any third party, for a charge no more than your
1672 1.1 mrg cost of physically performing source distribution, a complete
1673 1.1 mrg machine-readable copy of the corresponding source code, to be
1674 1.1 mrg distributed under the terms of Sections 1 and 2 above on a
1675 1.1 mrg medium customarily used for software interchange; or,
1676 1.1 mrg
1677 1.1 mrg c. Accompany it with the information you received as to the offer
1678 1.1 mrg to distribute corresponding source code. (This alternative is
1679 1.1 mrg allowed only for noncommercial distribution and only if you
1680 1.1 mrg received the program in object code or executable form with
1681 1.1 mrg such an offer, in accord with Subsection b above.)
1682 1.1 mrg
1683 1.1 mrg The source code for a work means the preferred form of the work for
1684 1.1 mrg making modifications to it. For an executable work, complete
1685 1.1 mrg source code means all the source code for all modules it contains,
1686 1.1 mrg plus any associated interface definition files, plus the scripts
1687 1.1 mrg used to control compilation and installation of the executable.
1688 1.1 mrg However, as a special exception, the source code distributed need
1689 1.1 mrg not include anything that is normally distributed (in either
1690 1.1 mrg source or binary form) with the major components (compiler,
1691 1.1 mrg kernel, and so on) of the operating system on which the executable
1692 1.1 mrg runs, unless that component itself accompanies the executable.
1693 1.1 mrg
1694 1.1 mrg If distribution of executable or object code is made by offering
1695 1.1 mrg access to copy from a designated place, then offering equivalent
1696 1.1 mrg access to copy the source code from the same place counts as
1697 1.1 mrg distribution of the source code, even though third parties are not
1698 1.1 mrg compelled to copy the source along with the object code.
1699 1.1 mrg
1700 1.1 mrg 4. You may not copy, modify, sublicense, or distribute the Program
1701 1.1 mrg except as expressly provided under this License. Any attempt
1702 1.1 mrg otherwise to copy, modify, sublicense or distribute the Program is
1703 1.1 mrg void, and will automatically terminate your rights under this
1704 1.1 mrg License. However, parties who have received copies, or rights,
1705 1.1 mrg from you under this License will not have their licenses
1706 1.1 mrg terminated so long as such parties remain in full compliance.
1707 1.1 mrg
1708 1.1 mrg 5. You are not required to accept this License, since you have not
1709 1.1 mrg signed it. However, nothing else grants you permission to modify
1710 1.1 mrg or distribute the Program or its derivative works. These actions
1711 1.1 mrg are prohibited by law if you do not accept this License.
1712 1.1 mrg Therefore, by modifying or distributing the Program (or any work
1713 1.1 mrg based on the Program), you indicate your acceptance of this
1714 1.1 mrg License to do so, and all its terms and conditions for copying,
1715 1.1 mrg distributing or modifying the Program or works based on it.
1716 1.1 mrg
1717 1.1 mrg 6. Each time you redistribute the Program (or any work based on the
1718 1.1 mrg Program), the recipient automatically receives a license from the
1719 1.1 mrg original licensor to copy, distribute or modify the Program
1720 1.1 mrg subject to these terms and conditions. You may not impose any
1721 1.1 mrg further restrictions on the recipients' exercise of the rights
1722 1.1 mrg granted herein. You are not responsible for enforcing compliance
1723 1.1 mrg by third parties to this License.
1724 1.1 mrg
1725 1.1 mrg 7. If, as a consequence of a court judgment or allegation of patent
1726 1.1 mrg infringement or for any other reason (not limited to patent
1727 1.1 mrg issues), conditions are imposed on you (whether by court order,
1728 1.1 mrg agreement or otherwise) that contradict the conditions of this
1729 1.1 mrg License, they do not excuse you from the conditions of this
1730 1.1 mrg License. If you cannot distribute so as to satisfy simultaneously
1731 1.1 mrg your obligations under this License and any other pertinent
1732 1.1 mrg obligations, then as a consequence you may not distribute the
1733 1.1 mrg Program at all. For example, if a patent license would not permit
1734 1.1 mrg royalty-free redistribution of the Program by all those who
1735 1.1 mrg receive copies directly or indirectly through you, then the only
1736 1.1 mrg way you could satisfy both it and this License would be to refrain
1737 1.1 mrg entirely from distribution of the Program.
1738 1.1 mrg
1739 1.1 mrg If any portion of this section is held invalid or unenforceable
1740 1.1 mrg under any particular circumstance, the balance of the section is
1741 1.1 mrg intended to apply and the section as a whole is intended to apply
1742 1.1 mrg in other circumstances.
1743 1.1 mrg
1744 1.1 mrg It is not the purpose of this section to induce you to infringe any
1745 1.1 mrg patents or other property right claims or to contest validity of
1746 1.1 mrg any such claims; this section has the sole purpose of protecting
1747 1.1 mrg the integrity of the free software distribution system, which is
1748 1.1 mrg implemented by public license practices. Many people have made
1749 1.1 mrg generous contributions to the wide range of software distributed
1750 1.1 mrg through that system in reliance on consistent application of that
1751 1.1 mrg system; it is up to the author/donor to decide if he or she is
1752 1.1 mrg willing to distribute software through any other system and a
1753 1.1 mrg licensee cannot impose that choice.
1754 1.1 mrg
1755 1.1 mrg This section is intended to make thoroughly clear what is believed
1756 1.1 mrg to be a consequence of the rest of this License.
1757 1.1 mrg
1758 1.1 mrg 8. If the distribution and/or use of the Program is restricted in
1759 1.1 mrg certain countries either by patents or by copyrighted interfaces,
1760 1.1 mrg the original copyright holder who places the Program under this
1761 1.1 mrg License may add an explicit geographical distribution limitation
1762 1.1 mrg excluding those countries, so that distribution is permitted only
1763 1.1 mrg in or among countries not thus excluded. In such case, this
1764 1.1 mrg License incorporates the limitation as if written in the body of
1765 1.1 mrg this License.
1766 1.1 mrg
1767 1.1 mrg 9. The Free Software Foundation may publish revised and/or new
1768 1.1 mrg versions of the General Public License from time to time. Such
1769 1.1 mrg new versions will be similar in spirit to the present version, but
1770 1.1 mrg may differ in detail to address new problems or concerns.
1771 1.1 mrg
1772 1.1 mrg Each version is given a distinguishing version number. If the
1773 1.1 mrg Program specifies a version number of this License which applies
1774 1.1 mrg to it and "any later version", you have the option of following
1775 1.1 mrg the terms and conditions either of that version or of any later
1776 1.1 mrg version published by the Free Software Foundation. If the Program
1777 1.1 mrg does not specify a version number of this License, you may choose
1778 1.1 mrg any version ever published by the Free Software Foundation.
1779 1.1 mrg
1780 1.1 mrg 10. If you wish to incorporate parts of the Program into other free
1781 1.1 mrg programs whose distribution conditions are different, write to the
1782 1.1 mrg author to ask for permission. For software which is copyrighted
1783 1.1 mrg by the Free Software Foundation, write to the Free Software
1784 1.1 mrg Foundation; we sometimes make exceptions for this. Our decision
1785 1.1 mrg will be guided by the two goals of preserving the free status of
1786 1.1 mrg all derivatives of our free software and of promoting the sharing
1787 1.1 mrg and reuse of software generally.
1788 1.1 mrg
1789 1.1 mrg NO WARRANTY
1790 1.1 mrg 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
1791 1.1 mrg WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
1792 1.1 mrg LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
1793 1.1 mrg HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
1794 1.1 mrg WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
1795 1.1 mrg NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
1796 1.1 mrg FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
1797 1.1 mrg QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
1798 1.1 mrg PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
1799 1.1 mrg SERVICING, REPAIR OR CORRECTION.
1800 1.1 mrg
1801 1.1 mrg 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
1802 1.1 mrg WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
1803 1.1 mrg MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
1804 1.1 mrg LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
1805 1.1 mrg INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
1806 1.1 mrg INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
1807 1.1 mrg DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
1808 1.1 mrg OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
1809 1.1 mrg OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
1810 1.1 mrg ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
1811 1.1 mrg
1812 1.1 mrg END OF TERMS AND CONDITIONS
1813 1.1 mrg Appendix: How to Apply These Terms to Your New Programs
1814 1.1 mrg =======================================================
1815 1.1 mrg
1816 1.1 mrg If you develop a new program, and you want it to be of the greatest
1817 1.1 mrg possible use to the public, the best way to achieve this is to make it
1818 1.1 mrg free software which everyone can redistribute and change under these
1819 1.1 mrg terms.
1820 1.1 mrg
1821 1.1 mrg To do so, attach the following notices to the program. It is safest
1822 1.1 mrg to attach them to the start of each source file to most effectively
1823 1.1 mrg convey the exclusion of warranty; and each file should have at least
1824 1.1 mrg the "copyright" line and a pointer to where the full notice is found.
1825 1.1 mrg
1826 1.1 mrg ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
1827 1.1 mrg Copyright (C) YEAR NAME OF AUTHOR
1828 1.1 mrg
1829 1.1 mrg This program is free software; you can redistribute it and/or modify
1830 1.1 mrg it under the terms of the GNU General Public License as published by
1831 1.1 mrg the Free Software Foundation; either version 2 of the License, or
1832 1.1 mrg (at your option) any later version.
1833 1.1 mrg
1834 1.1 mrg This program is distributed in the hope that it will be useful,
1835 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
1836 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1837 1.1 mrg GNU General Public License for more details.
1838 1.1 mrg
1839 1.1 mrg You should have received a copy of the GNU General Public License
1840 1.1 mrg along with this program; if not, write to the Free Software
1841 1.1 mrg Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
1842 1.1 mrg
1843 1.1 mrg Also add information on how to contact you by electronic and paper
1844 1.1 mrg mail.
1845 1.1 mrg
1846 1.1 mrg If the program is interactive, make it output a short notice like
1847 1.1 mrg this when it starts in an interactive mode:
1848 1.1 mrg
1849 1.1 mrg Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
1850 1.1 mrg Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
1851 1.1 mrg type `show w'.
1852 1.1 mrg This is free software, and you are welcome to redistribute it
1853 1.1 mrg under certain conditions; type `show c' for details.
1854 1.1 mrg
1855 1.1 mrg The hypothetical commands `show w' and `show c' should show the
1856 1.1 mrg appropriate parts of the General Public License. Of course, the
1857 1.1 mrg commands you use may be called something other than `show w' and `show
1858 1.1 mrg c'; they could even be mouse-clicks or menu items--whatever suits your
1859 1.1 mrg program.
1860 1.1 mrg
1861 1.1 mrg You should also get your employer (if you work as a programmer) or
1862 1.1 mrg your school, if any, to sign a "copyright disclaimer" for the program,
1863 1.1 mrg if necessary. Here is a sample; alter the names:
1864 1.1 mrg
1865 1.1 mrg Yoyodyne, Inc., hereby disclaims all copyright interest in the program
1866 1.1 mrg `Gnomovision' (which makes passes at compilers) written by James Hacker.
1867 1.1 mrg
1868 1.1 mrg SIGNATURE OF TY COON, 1 April 1989
1869 1.1 mrg Ty Coon, President of Vice
1870 1.1 mrg
1871 1.1 mrg This General Public License does not permit incorporating your
1872 1.1 mrg program into proprietary programs. If your program is a subroutine
1873 1.1 mrg library, you may consider it more useful to permit linking proprietary
1874 1.1 mrg applications with the library. If this is what you want to do, use the
1875 1.1 mrg GNU Library General Public License instead of this License.
1876 1.1 mrg
1877 1.1 mrg
1878 1.1 mrg File: libgomp.info, Node: GNU Free Documentation License, Next: Funding, Prev: Copying, Up: Top
1879 1.1 mrg
1880 1.1 mrg GNU Free Documentation License
1881 1.1 mrg ******************************
1882 1.1 mrg
1883 1.1 mrg Version 1.2, November 2002
1884 1.1 mrg
1885 1.1 mrg Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
1886 1.1 mrg 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
1887 1.1 mrg
1888 1.1 mrg Everyone is permitted to copy and distribute verbatim copies
1889 1.1 mrg of this license document, but changing it is not allowed.
1890 1.1 mrg
1891 1.1 mrg 0. PREAMBLE
1892 1.1 mrg
1893 1.1 mrg The purpose of this License is to make a manual, textbook, or other
1894 1.1 mrg functional and useful document "free" in the sense of freedom: to
1895 1.1 mrg assure everyone the effective freedom to copy and redistribute it,
1896 1.1 mrg with or without modifying it, either commercially or
1897 1.1 mrg noncommercially. Secondarily, this License preserves for the
1898 1.1 mrg author and publisher a way to get credit for their work, while not
1899 1.1 mrg being considered responsible for modifications made by others.
1900 1.1 mrg
1901 1.1 mrg This License is a kind of "copyleft", which means that derivative
1902 1.1 mrg works of the document must themselves be free in the same sense.
1903 1.1 mrg It complements the GNU General Public License, which is a copyleft
1904 1.1 mrg license designed for free software.
1905 1.1 mrg
1906 1.1 mrg We have designed this License in order to use it for manuals for
1907 1.1 mrg free software, because free software needs free documentation: a
1908 1.1 mrg free program should come with manuals providing the same freedoms
1909 1.1 mrg that the software does. But this License is not limited to
1910 1.1 mrg software manuals; it can be used for any textual work, regardless
1911 1.1 mrg of subject matter or whether it is published as a printed book.
1912 1.1 mrg We recommend this License principally for works whose purpose is
1913 1.1 mrg instruction or reference.
1914 1.1 mrg
1915 1.1 mrg 1. APPLICABILITY AND DEFINITIONS
1916 1.1 mrg
1917 1.1 mrg This License applies to any manual or other work, in any medium,
1918 1.1 mrg that contains a notice placed by the copyright holder saying it
1919 1.1 mrg can be distributed under the terms of this License. Such a notice
1920 1.1 mrg grants a world-wide, royalty-free license, unlimited in duration,
1921 1.1 mrg to use that work under the conditions stated herein. The
1922 1.1 mrg "Document", below, refers to any such manual or work. Any member
1923 1.1 mrg of the public is a licensee, and is addressed as "you". You
1924 1.1 mrg accept the license if you copy, modify or distribute the work in a
1925 1.1 mrg way requiring permission under copyright law.
1926 1.1 mrg
1927 1.1 mrg A "Modified Version" of the Document means any work containing the
1928 1.1 mrg Document or a portion of it, either copied verbatim, or with
1929 1.1 mrg modifications and/or translated into another language.
1930 1.1 mrg
1931 1.1 mrg A "Secondary Section" is a named appendix or a front-matter section
1932 1.1 mrg of the Document that deals exclusively with the relationship of the
1933 1.1 mrg publishers or authors of the Document to the Document's overall
1934 1.1 mrg subject (or to related matters) and contains nothing that could
1935 1.1 mrg fall directly within that overall subject. (Thus, if the Document
1936 1.1 mrg is in part a textbook of mathematics, a Secondary Section may not
1937 1.1 mrg explain any mathematics.) The relationship could be a matter of
1938 1.1 mrg historical connection with the subject or with related matters, or
1939 1.1 mrg of legal, commercial, philosophical, ethical or political position
1940 1.1 mrg regarding them.
1941 1.1 mrg
1942 1.1 mrg The "Invariant Sections" are certain Secondary Sections whose
1943 1.1 mrg titles are designated, as being those of Invariant Sections, in
1944 1.1 mrg the notice that says that the Document is released under this
1945 1.1 mrg License. If a section does not fit the above definition of
1946 1.1 mrg Secondary then it is not allowed to be designated as Invariant.
1947 1.1 mrg The Document may contain zero Invariant Sections. If the Document
1948 1.1 mrg does not identify any Invariant Sections then there are none.
1949 1.1 mrg
1950 1.1 mrg The "Cover Texts" are certain short passages of text that are
1951 1.1 mrg listed, as Front-Cover Texts or Back-Cover Texts, in the notice
1952 1.1 mrg that says that the Document is released under this License. A
1953 1.1 mrg Front-Cover Text may be at most 5 words, and a Back-Cover Text may
1954 1.1 mrg be at most 25 words.
1955 1.1 mrg
1956 1.1 mrg A "Transparent" copy of the Document means a machine-readable copy,
1957 1.1 mrg represented in a format whose specification is available to the
1958 1.1 mrg general public, that is suitable for revising the document
1959 1.1 mrg straightforwardly with generic text editors or (for images
1960 1.1 mrg composed of pixels) generic paint programs or (for drawings) some
1961 1.1 mrg widely available drawing editor, and that is suitable for input to
1962 1.1 mrg text formatters or for automatic translation to a variety of
1963 1.1 mrg formats suitable for input to text formatters. A copy made in an
1964 1.1 mrg otherwise Transparent file format whose markup, or absence of
1965 1.1 mrg markup, has been arranged to thwart or discourage subsequent
1966 1.1 mrg modification by readers is not Transparent. An image format is
1967 1.1 mrg not Transparent if used for any substantial amount of text. A
1968 1.1 mrg copy that is not "Transparent" is called "Opaque".
1969 1.1 mrg
1970 1.1 mrg Examples of suitable formats for Transparent copies include plain
1971 1.1 mrg ASCII without markup, Texinfo input format, LaTeX input format,
1972 1.1 mrg SGML or XML using a publicly available DTD, and
1973 1.1 mrg standard-conforming simple HTML, PostScript or PDF designed for
1974 1.1 mrg human modification. Examples of transparent image formats include
1975 1.1 mrg PNG, XCF and JPG. Opaque formats include proprietary formats that
1976 1.1 mrg can be read and edited only by proprietary word processors, SGML or
1977 1.1 mrg XML for which the DTD and/or processing tools are not generally
1978 1.1 mrg available, and the machine-generated HTML, PostScript or PDF
1979 1.1 mrg produced by some word processors for output purposes only.
1980 1.1 mrg
1981 1.1 mrg The "Title Page" means, for a printed book, the title page itself,
1982 1.1 mrg plus such following pages as are needed to hold, legibly, the
1983 1.1 mrg material this License requires to appear in the title page. For
1984 1.1 mrg works in formats which do not have any title page as such, "Title
1985 1.1 mrg Page" means the text near the most prominent appearance of the
1986 1.1 mrg work's title, preceding the beginning of the body of the text.
1987 1.1 mrg
1988 1.1 mrg A section "Entitled XYZ" means a named subunit of the Document
1989 1.1 mrg whose title either is precisely XYZ or contains XYZ in parentheses
1990 1.1 mrg following text that translates XYZ in another language. (Here XYZ
1991 1.1 mrg stands for a specific section name mentioned below, such as
1992 1.1 mrg "Acknowledgements", "Dedications", "Endorsements", or "History".)
1993 1.1 mrg To "Preserve the Title" of such a section when you modify the
1994 1.1 mrg Document means that it remains a section "Entitled XYZ" according
1995 1.1 mrg to this definition.
1996 1.1 mrg
1997 1.1 mrg The Document may include Warranty Disclaimers next to the notice
1998 1.1 mrg which states that this License applies to the Document. These
1999 1.1 mrg Warranty Disclaimers are considered to be included by reference in
2000 1.1 mrg this License, but only as regards disclaiming warranties: any other
2001 1.1 mrg implication that these Warranty Disclaimers may have is void and
2002 1.1 mrg has no effect on the meaning of this License.
2003 1.1 mrg
2004 1.1 mrg 2. VERBATIM COPYING
2005 1.1 mrg
2006 1.1 mrg You may copy and distribute the Document in any medium, either
2007 1.1 mrg commercially or noncommercially, provided that this License, the
2008 1.1 mrg copyright notices, and the license notice saying this License
2009 1.1 mrg applies to the Document are reproduced in all copies, and that you
2010 1.1 mrg add no other conditions whatsoever to those of this License. You
2011 1.1 mrg may not use technical measures to obstruct or control the reading
2012 1.1 mrg or further copying of the copies you make or distribute. However,
2013 1.1 mrg you may accept compensation in exchange for copies. If you
2014 1.1 mrg distribute a large enough number of copies you must also follow
2015 1.1 mrg the conditions in section 3.
2016 1.1 mrg
2017 1.1 mrg You may also lend copies, under the same conditions stated above,
2018 1.1 mrg and you may publicly display copies.
2019 1.1 mrg
2020 1.1 mrg 3. COPYING IN QUANTITY
2021 1.1 mrg
2022 1.1 mrg If you publish printed copies (or copies in media that commonly
2023 1.1 mrg have printed covers) of the Document, numbering more than 100, and
2024 1.1 mrg the Document's license notice requires Cover Texts, you must
2025 1.1 mrg enclose the copies in covers that carry, clearly and legibly, all
2026 1.1 mrg these Cover Texts: Front-Cover Texts on the front cover, and
2027 1.1 mrg Back-Cover Texts on the back cover. Both covers must also clearly
2028 1.1 mrg and legibly identify you as the publisher of these copies. The
2029 1.1 mrg front cover must present the full title with all words of the
2030 1.1 mrg title equally prominent and visible. You may add other material
2031 1.1 mrg on the covers in addition. Copying with changes limited to the
2032 1.1 mrg covers, as long as they preserve the title of the Document and
2033 1.1 mrg satisfy these conditions, can be treated as verbatim copying in
2034 1.1 mrg other respects.
2035 1.1 mrg
2036 1.1 mrg If the required texts for either cover are too voluminous to fit
2037 1.1 mrg legibly, you should put the first ones listed (as many as fit
2038 1.1 mrg reasonably) on the actual cover, and continue the rest onto
2039 1.1 mrg adjacent pages.
2040 1.1 mrg
2041 1.1 mrg If you publish or distribute Opaque copies of the Document
2042 1.1 mrg numbering more than 100, you must either include a
2043 1.1 mrg machine-readable Transparent copy along with each Opaque copy, or
2044 1.1 mrg state in or with each Opaque copy a computer-network location from
2045 1.1 mrg which the general network-using public has access to download
2046 1.1 mrg using public-standard network protocols a complete Transparent
2047 1.1 mrg copy of the Document, free of added material. If you use the
2048 1.1 mrg latter option, you must take reasonably prudent steps, when you
2049 1.1 mrg begin distribution of Opaque copies in quantity, to ensure that
2050 1.1 mrg this Transparent copy will remain thus accessible at the stated
2051 1.1 mrg location until at least one year after the last time you
2052 1.1 mrg distribute an Opaque copy (directly or through your agents or
2053 1.1 mrg retailers) of that edition to the public.
2054 1.1 mrg
2055 1.1 mrg It is requested, but not required, that you contact the authors of
2056 1.1 mrg the Document well before redistributing any large number of
2057 1.1 mrg copies, to give them a chance to provide you with an updated
2058 1.1 mrg version of the Document.
2059 1.1 mrg
2060 1.1 mrg 4. MODIFICATIONS
2061 1.1 mrg
2062 1.1 mrg You may copy and distribute a Modified Version of the Document
2063 1.1 mrg under the conditions of sections 2 and 3 above, provided that you
2064 1.1 mrg release the Modified Version under precisely this License, with
2065 1.1 mrg the Modified Version filling the role of the Document, thus
2066 1.1 mrg licensing distribution and modification of the Modified Version to
2067 1.1 mrg whoever possesses a copy of it. In addition, you must do these
2068 1.1 mrg things in the Modified Version:
2069 1.1 mrg
2070 1.1 mrg A. Use in the Title Page (and on the covers, if any) a title
2071 1.1 mrg distinct from that of the Document, and from those of
2072 1.1 mrg previous versions (which should, if there were any, be listed
2073 1.1 mrg in the History section of the Document). You may use the
2074 1.1 mrg same title as a previous version if the original publisher of
2075 1.1 mrg that version gives permission.
2076 1.1 mrg
2077 1.1 mrg B. List on the Title Page, as authors, one or more persons or
2078 1.1 mrg entities responsible for authorship of the modifications in
2079 1.1 mrg the Modified Version, together with at least five of the
2080 1.1 mrg principal authors of the Document (all of its principal
2081 1.1 mrg authors, if it has fewer than five), unless they release you
2082 1.1 mrg from this requirement.
2083 1.1 mrg
2084 1.1 mrg C. State on the Title page the name of the publisher of the
2085 1.1 mrg Modified Version, as the publisher.
2086 1.1 mrg
2087 1.1 mrg D. Preserve all the copyright notices of the Document.
2088 1.1 mrg
2089 1.1 mrg E. Add an appropriate copyright notice for your modifications
2090 1.1 mrg adjacent to the other copyright notices.
2091 1.1 mrg
2092 1.1 mrg F. Include, immediately after the copyright notices, a license
2093 1.1 mrg notice giving the public permission to use the Modified
2094 1.1 mrg Version under the terms of this License, in the form shown in
2095 1.1 mrg the Addendum below.
2096 1.1 mrg
2097 1.1 mrg G. Preserve in that license notice the full lists of Invariant
2098 1.1 mrg Sections and required Cover Texts given in the Document's
2099 1.1 mrg license notice.
2100 1.1 mrg
2101 1.1 mrg H. Include an unaltered copy of this License.
2102 1.1 mrg
2103 1.1 mrg I. Preserve the section Entitled "History", Preserve its Title,
2104 1.1 mrg and add to it an item stating at least the title, year, new
2105 1.1 mrg authors, and publisher of the Modified Version as given on
2106 1.1 mrg the Title Page. If there is no section Entitled "History" in
2107 1.1 mrg the Document, create one stating the title, year, authors,
2108 1.1 mrg and publisher of the Document as given on its Title Page,
2109 1.1 mrg then add an item describing the Modified Version as stated in
2110 1.1 mrg the previous sentence.
2111 1.1 mrg
2112 1.1 mrg J. Preserve the network location, if any, given in the Document
2113 1.1 mrg for public access to a Transparent copy of the Document, and
2114 1.1 mrg likewise the network locations given in the Document for
2115 1.1 mrg previous versions it was based on. These may be placed in
2116 1.1 mrg the "History" section. You may omit a network location for a
2117 1.1 mrg work that was published at least four years before the
2118 1.1 mrg Document itself, or if the original publisher of the version
2119 1.1 mrg it refers to gives permission.
2120 1.1 mrg
2121 1.1 mrg K. For any section Entitled "Acknowledgements" or "Dedications",
2122 1.1 mrg Preserve the Title of the section, and preserve in the
2123 1.1 mrg section all the substance and tone of each of the contributor
2124 1.1 mrg acknowledgements and/or dedications given therein.
2125 1.1 mrg
2126 1.1 mrg L. Preserve all the Invariant Sections of the Document,
2127 1.1 mrg unaltered in their text and in their titles. Section numbers
2128 1.1 mrg or the equivalent are not considered part of the section
2129 1.1 mrg titles.
2130 1.1 mrg
2131 1.1 mrg M. Delete any section Entitled "Endorsements". Such a section
2132 1.1 mrg may not be included in the Modified Version.
2133 1.1 mrg
2134 1.1 mrg N. Do not retitle any existing section to be Entitled
2135 1.1 mrg "Endorsements" or to conflict in title with any Invariant
2136 1.1 mrg Section.
2137 1.1 mrg
2138 1.1 mrg O. Preserve any Warranty Disclaimers.
2139 1.1 mrg
2140 1.1 mrg If the Modified Version includes new front-matter sections or
2141 1.1 mrg appendices that qualify as Secondary Sections and contain no
2142 1.1 mrg material copied from the Document, you may at your option
2143 1.1 mrg designate some or all of these sections as invariant. To do this,
2144 1.1 mrg add their titles to the list of Invariant Sections in the Modified
2145 1.1 mrg Version's license notice. These titles must be distinct from any
2146 1.1 mrg other section titles.
2147 1.1 mrg
2148 1.1 mrg You may add a section Entitled "Endorsements", provided it contains
2149 1.1 mrg nothing but endorsements of your Modified Version by various
2150 1.1 mrg parties--for example, statements of peer review or that the text
2151 1.1 mrg has been approved by an organization as the authoritative
2152 1.1 mrg definition of a standard.
2153 1.1 mrg
2154 1.1 mrg You may add a passage of up to five words as a Front-Cover Text,
2155 1.1 mrg and a passage of up to 25 words as a Back-Cover Text, to the end
2156 1.1 mrg of the list of Cover Texts in the Modified Version. Only one
2157 1.1 mrg passage of Front-Cover Text and one of Back-Cover Text may be
2158 1.1 mrg added by (or through arrangements made by) any one entity. If the
2159 1.1 mrg Document already includes a cover text for the same cover,
2160 1.1 mrg previously added by you or by arrangement made by the same entity
2161 1.1 mrg you are acting on behalf of, you may not add another; but you may
2162 1.1 mrg replace the old one, on explicit permission from the previous
2163 1.1 mrg publisher that added the old one.
2164 1.1 mrg
2165 1.1 mrg The author(s) and publisher(s) of the Document do not by this
2166 1.1 mrg License give permission to use their names for publicity for or to
2167 1.1 mrg assert or imply endorsement of any Modified Version.
2168 1.1 mrg
2169 1.1 mrg 5. COMBINING DOCUMENTS
2170 1.1 mrg
2171 1.1 mrg You may combine the Document with other documents released under
2172 1.1 mrg this License, under the terms defined in section 4 above for
2173 1.1 mrg modified versions, provided that you include in the combination
2174 1.1 mrg all of the Invariant Sections of all of the original documents,
2175 1.1 mrg unmodified, and list them all as Invariant Sections of your
2176 1.1 mrg combined work in its license notice, and that you preserve all
2177 1.1 mrg their Warranty Disclaimers.
2178 1.1 mrg
2179 1.1 mrg The combined work need only contain one copy of this License, and
2180 1.1 mrg multiple identical Invariant Sections may be replaced with a single
2181 1.1 mrg copy. If there are multiple Invariant Sections with the same name
2182 1.1 mrg but different contents, make the title of each such section unique
2183 1.1 mrg by adding at the end of it, in parentheses, the name of the
2184 1.1 mrg original author or publisher of that section if known, or else a
2185 1.1 mrg unique number. Make the same adjustment to the section titles in
2186 1.1 mrg the list of Invariant Sections in the license notice of the
2187 1.1 mrg combined work.
2188 1.1 mrg
2189 1.1 mrg In the combination, you must combine any sections Entitled
2190 1.1 mrg "History" in the various original documents, forming one section
2191 1.1 mrg Entitled "History"; likewise combine any sections Entitled
2192 1.1 mrg "Acknowledgements", and any sections Entitled "Dedications". You
2193 1.1 mrg must delete all sections Entitled "Endorsements."
2194 1.1 mrg
2195 1.1 mrg 6. COLLECTIONS OF DOCUMENTS
2196 1.1 mrg
2197 1.1 mrg You may make a collection consisting of the Document and other
2198 1.1 mrg documents released under this License, and replace the individual
2199 1.1 mrg copies of this License in the various documents with a single copy
2200 1.1 mrg that is included in the collection, provided that you follow the
2201 1.1 mrg rules of this License for verbatim copying of each of the
2202 1.1 mrg documents in all other respects.
2203 1.1 mrg
2204 1.1 mrg You may extract a single document from such a collection, and
2205 1.1 mrg distribute it individually under this License, provided you insert
2206 1.1 mrg a copy of this License into the extracted document, and follow
2207 1.1 mrg this License in all other respects regarding verbatim copying of
2208 1.1 mrg that document.
2209 1.1 mrg
2210 1.1 mrg 7. AGGREGATION WITH INDEPENDENT WORKS
2211 1.1 mrg
2212 1.1 mrg A compilation of the Document or its derivatives with other
2213 1.1 mrg separate and independent documents or works, in or on a volume of
2214 1.1 mrg a storage or distribution medium, is called an "aggregate" if the
2215 1.1 mrg copyright resulting from the compilation is not used to limit the
2216 1.1 mrg legal rights of the compilation's users beyond what the individual
2217 1.1 mrg works permit. When the Document is included in an aggregate, this
2218 1.1 mrg License does not apply to the other works in the aggregate which
2219 1.1 mrg are not themselves derivative works of the Document.
2220 1.1 mrg
2221 1.1 mrg If the Cover Text requirement of section 3 is applicable to these
2222 1.1 mrg copies of the Document, then if the Document is less than one half
2223 1.1 mrg of the entire aggregate, the Document's Cover Texts may be placed
2224 1.1 mrg on covers that bracket the Document within the aggregate, or the
2225 1.1 mrg electronic equivalent of covers if the Document is in electronic
2226 1.1 mrg form. Otherwise they must appear on printed covers that bracket
2227 1.1 mrg the whole aggregate.
2228 1.1 mrg
2229 1.1 mrg 8. TRANSLATION
2230 1.1 mrg
2231 1.1 mrg Translation is considered a kind of modification, so you may
2232 1.1 mrg distribute translations of the Document under the terms of section
2233 1.1 mrg 4. Replacing Invariant Sections with translations requires special
2234 1.1 mrg permission from their copyright holders, but you may include
2235 1.1 mrg translations of some or all Invariant Sections in addition to the
2236 1.1 mrg original versions of these Invariant Sections. You may include a
2237 1.1 mrg translation of this License, and all the license notices in the
2238 1.1 mrg Document, and any Warranty Disclaimers, provided that you also
2239 1.1 mrg include the original English version of this License and the
2240 1.1 mrg original versions of those notices and disclaimers. In case of a
2241 1.1 mrg disagreement between the translation and the original version of
2242 1.1 mrg this License or a notice or disclaimer, the original version will
2243 1.1 mrg prevail.
2244 1.1 mrg
2245 1.1 mrg If a section in the Document is Entitled "Acknowledgements",
2246 1.1 mrg "Dedications", or "History", the requirement (section 4) to
2247 1.1 mrg Preserve its Title (section 1) will typically require changing the
2248 1.1 mrg actual title.
2249 1.1 mrg
2250 1.1 mrg 9. TERMINATION
2251 1.1 mrg
2252 1.1 mrg You may not copy, modify, sublicense, or distribute the Document
2253 1.1 mrg except as expressly provided for under this License. Any other
2254 1.1 mrg attempt to copy, modify, sublicense or distribute the Document is
2255 1.1 mrg void, and will automatically terminate your rights under this
2256 1.1 mrg License. However, parties who have received copies, or rights,
2257 1.1 mrg from you under this License will not have their licenses
2258 1.1 mrg terminated so long as such parties remain in full compliance.
2259 1.1 mrg
2260 1.1 mrg 10. FUTURE REVISIONS OF THIS LICENSE
2261 1.1 mrg
2262 1.1 mrg The Free Software Foundation may publish new, revised versions of
2263 1.1 mrg the GNU Free Documentation License from time to time. Such new
2264 1.1 mrg versions will be similar in spirit to the present version, but may
2265 1.1 mrg differ in detail to address new problems or concerns. See
2266 1.1 mrg `http://www.gnu.org/copyleft/'.
2267 1.1 mrg
2268 1.1 mrg Each version of the License is given a distinguishing version
2269 1.1 mrg number. If the Document specifies that a particular numbered
2270 1.1 mrg version of this License "or any later version" applies to it, you
2271 1.1 mrg have the option of following the terms and conditions either of
2272 1.1 mrg that specified version or of any later version that has been
2273 1.1 mrg published (not as a draft) by the Free Software Foundation. If
2274 1.1 mrg the Document does not specify a version number of this License,
2275 1.1 mrg you may choose any version ever published (not as a draft) by the
2276 1.1 mrg Free Software Foundation.
2277 1.1 mrg
2278 1.1 mrg ADDENDUM: How to use this License for your documents
2279 1.1 mrg ====================================================
2280 1.1 mrg
2281 1.1 mrg To use this License in a document you have written, include a copy of
2282 1.1 mrg the License in the document and put the following copyright and license
2283 1.1 mrg notices just after the title page:
2284 1.1 mrg
2285 1.1 mrg Copyright (C) YEAR YOUR NAME.
2286 1.1 mrg Permission is granted to copy, distribute and/or modify this document
2287 1.1 mrg under the terms of the GNU Free Documentation License, Version 1.2
2288 1.1 mrg or any later version published by the Free Software Foundation;
2289 1.1 mrg with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
2290 1.1 mrg Texts. A copy of the license is included in the section entitled ``GNU
2291 1.1 mrg Free Documentation License''.
2292 1.1 mrg
2293 1.1 mrg If you have Invariant Sections, Front-Cover Texts and Back-Cover
2294 1.1 mrg Texts, replace the "with...Texts." line with this:
2295 1.1 mrg
2296 1.1 mrg with the Invariant Sections being LIST THEIR TITLES, with
2297 1.1 mrg the Front-Cover Texts being LIST, and with the Back-Cover Texts
2298 1.1 mrg being LIST.
2299 1.1 mrg
2300 1.1 mrg If you have Invariant Sections without Cover Texts, or some other
2301 1.1 mrg combination of the three, merge those two alternatives to suit the
2302 1.1 mrg situation.
2303 1.1 mrg
2304 1.1 mrg If your document contains nontrivial examples of program code, we
2305 1.1 mrg recommend releasing these examples in parallel under your choice of
2306 1.1 mrg free software license, such as the GNU General Public License, to
2307 1.1 mrg permit their use in free software.
2308 1.1 mrg
2309 1.1 mrg
2310 1.1 mrg File: libgomp.info, Node: Funding, Next: Index, Prev: GNU Free Documentation License, Up: Top
2311 1.1 mrg
2312 1.1 mrg Funding Free Software
2313 1.1 mrg *********************
2314 1.1 mrg
2315 1.1 mrg If you want to have more free software a few years from now, it makes
2316 1.1 mrg sense for you to help encourage people to contribute funds for its
2317 1.1 mrg development. The most effective approach known is to encourage
2318 1.1 mrg commercial redistributors to donate.
2319 1.1 mrg
2320 1.1 mrg Users of free software systems can boost the pace of development by
2321 1.1 mrg encouraging for-a-fee distributors to donate part of their selling price
2322 1.1 mrg to free software developers--the Free Software Foundation, and others.
2323 1.1 mrg
2324 1.1 mrg The way to convince distributors to do this is to demand it and
2325 1.1 mrg expect it from them. So when you compare distributors, judge them
2326 1.1 mrg partly by how much they give to free software development. Show
2327 1.1 mrg distributors they must compete to be the one who gives the most.
2328 1.1 mrg
2329 1.1 mrg To make this approach work, you must insist on numbers that you can
2330 1.1 mrg compare, such as, "We will donate ten dollars to the Frobnitz project
2331 1.1 mrg for each disk sold." Don't be satisfied with a vague promise, such as
2332 1.1 mrg "A portion of the profits are donated," since it doesn't give a basis
2333 1.1 mrg for comparison.
2334 1.1 mrg
2335 1.1 mrg Even a precise fraction "of the profits from this disk" is not very
2336 1.1 mrg meaningful, since creative accounting and unrelated business decisions
2337 1.1 mrg can greatly alter what fraction of the sales price counts as profit.
2338 1.1 mrg If the price you pay is $50, ten percent of the profit is probably less
2339 1.1 mrg than a dollar; it might be a few cents, or nothing at all.
2340 1.1 mrg
2341 1.1 mrg Some redistributors do development work themselves. This is useful
2342 1.1 mrg too; but to keep everyone honest, you need to inquire how much they do,
2343 1.1 mrg and what kind. Some kinds of development make much more long-term
2344 1.1 mrg difference than others. For example, maintaining a separate version of
2345 1.1 mrg a program contributes very little; maintaining the standard version of a
2346 1.1 mrg program for the whole community contributes much. Easy new ports
2347 1.1 mrg contribute little, since someone else would surely do them; difficult
2348 1.1 mrg ports such as adding a new CPU to the GNU Compiler Collection
2349 1.1 mrg contribute more; major new features or packages contribute the most.
2350 1.1 mrg
2351 1.1 mrg By establishing the idea that supporting further development is "the
2352 1.1 mrg proper thing to do" when distributing free software for a fee, we can
2353 1.1 mrg assure a steady flow of resources into making more free software.
2354 1.1 mrg
2355 1.1 mrg Copyright (C) 1994 Free Software Foundation, Inc.
2356 1.1 mrg Verbatim copying and redistribution of this section is permitted
2357 1.1 mrg without royalty; alteration is not permitted.
2358 1.1 mrg
2359 1.1 mrg
2360 1.1 mrg File: libgomp.info, Node: Index, Prev: Funding, Up: Top
2361 1.1 mrg
2362 1.1 mrg Index
2363 1.1 mrg *****
2364 1.1 mrg
2365 1.1 mrg [index]
2366 1.1 mrg * Menu:
2367 1.1 mrg
2368 1.1 mrg * Environment Variable <1>: GOMP_STACKSIZE. (line 6)
2369 1.1 mrg * Environment Variable <2>: GOMP_CPU_AFFINITY. (line 6)
2370 1.1 mrg * Environment Variable <3>: OMP_WAIT_POLICY. (line 6)
2371 1.1 mrg * Environment Variable <4>: OMP_THREAD_LIMIT. (line 6)
2372 1.1 mrg * Environment Variable <5>: OMP_STACKSIZE. (line 6)
2373 1.1 mrg * Environment Variable <6>: OMP_SCHEDULE. (line 6)
2374 1.1 mrg * Environment Variable <7>: OMP_NUM_THREADS. (line 6)
2375 1.1 mrg * Environment Variable <8>: OMP_NESTED. (line 6)
2376 1.1 mrg * Environment Variable <9>: OMP_MAX_ACTIVE_LEVELS. (line 6)
2377 1.1 mrg * Environment Variable: OMP_DYNAMIC. (line 6)
2378 1.1 mrg * FDL, GNU Free Documentation License: GNU Free Documentation License.
2379 1.1 mrg (line 6)
2380 1.1 mrg * Implementation specific setting <1>: GOMP_STACKSIZE. (line 6)
2381 1.1 mrg * Implementation specific setting <2>: OMP_SCHEDULE. (line 6)
2382 1.1 mrg * Implementation specific setting <3>: OMP_NUM_THREADS. (line 6)
2383 1.1 mrg * Implementation specific setting: OMP_NESTED. (line 6)
2384 1.1 mrg * Introduction: Top. (line 6)
2385 1.1 mrg
2386 1.1 mrg
2387 1.1 mrg
2388 1.1 mrg Tag Table:
2389 1.1 mrg Node: Top2053
2390 1.1 mrg Node: Enabling OpenMP3247
2391 1.1 mrg Node: Runtime Library Routines4032
2392 1.1 mrg Node: omp_get_active_level6407
2393 1.1 mrg Node: omp_get_ancestor_thread_num7098
2394 1.1 mrg Node: omp_get_dynamic8012
2395 1.1 mrg Node: omp_get_level8886
2396 1.1 mrg Node: omp_get_max_active_levels9497
2397 1.1 mrg Node: omp_get_max_threads10185
2398 1.1 mrg Node: omp_get_nested10937
2399 1.1 mrg Node: omp_get_num_procs11845
2400 1.1 mrg Node: omp_get_num_threads12359
2401 1.1 mrg Node: omp_get_schedule13429
2402 1.1 mrg Node: omp_get_team_size14336
2403 1.1 mrg Node: omp_get_thread_limit15294
2404 1.1 mrg Node: omp_get_thread_num15913
2405 1.1 mrg Node: omp_in_parallel16767
2406 1.1 mrg Node: omp_set_dynamic17413
2407 1.1 mrg Node: omp_set_max_active_levels18249
2408 1.1 mrg Node: omp_set_nested19011
2409 1.1 mrg Node: omp_set_num_threads19888
2410 1.1 mrg Node: omp_set_schedule20726
2411 1.1 mrg Node: omp_init_lock21770
2412 1.1 mrg Node: omp_set_lock22420
2413 1.1 mrg Node: omp_test_lock23269
2414 1.1 mrg Node: omp_unset_lock24296
2415 1.1 mrg Node: omp_destroy_lock25222
2416 1.1 mrg Node: omp_init_nest_lock25892
2417 1.1 mrg Node: omp_set_nest_lock26624
2418 1.1 mrg Node: omp_test_nest_lock27533
2419 1.1 mrg Node: omp_unset_nest_lock28631
2420 1.1 mrg Node: omp_destroy_nest_lock29640
2421 1.1 mrg Node: omp_get_wtick30388
2422 1.1 mrg Node: omp_get_wtime30975
2423 1.1 mrg Node: Environment Variables31758
2424 1.1 mrg Node: OMP_DYNAMIC32819
2425 1.1 mrg Node: OMP_MAX_ACTIVE_LEVELS33387
2426 1.1 mrg Node: OMP_NESTED34024
2427 1.1 mrg Node: OMP_NUM_THREADS34628
2428 1.1 mrg Node: OMP_SCHEDULE35201
2429 1.1 mrg Node: OMP_STACKSIZE35895
2430 1.1 mrg Node: OMP_THREAD_LIMIT36720
2431 1.1 mrg Node: OMP_WAIT_POLICY37313
2432 1.1 mrg Node: GOMP_CPU_AFFINITY37878
2433 1.1 mrg Node: GOMP_STACKSIZE39362
2434 1.1 mrg Node: The libgomp ABI40172
2435 1.1 mrg Node: Implementing MASTER construct40970
2436 1.1 mrg Node: Implementing CRITICAL construct41383
2437 1.1 mrg Node: Implementing ATOMIC construct42131
2438 1.1 mrg Node: Implementing FLUSH construct42612
2439 1.1 mrg Node: Implementing BARRIER construct42883
2440 1.1 mrg Node: Implementing THREADPRIVATE construct43152
2441 1.1 mrg Node: Implementing PRIVATE clause43804
2442 1.1 mrg Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses44385
2443 1.1 mrg Node: Implementing REDUCTION clause45700
2444 1.1 mrg Node: Implementing PARALLEL construct46256
2445 1.1 mrg Node: Implementing FOR construct47513
2446 1.1 mrg Node: Implementing ORDERED construct49511
2447 1.1 mrg Node: Implementing SECTIONS construct49817
2448 1.1 mrg Node: Implementing SINGLE construct50583
2449 1.1 mrg Node: Reporting Bugs51245
2450 1.1 mrg Node: Copying51553
2451 1.1 mrg Node: GNU Free Documentation License70763
2452 1.1 mrg Node: Funding93174
2453 1.1 mrg Node: Index95691
2454 1.1 mrg
2455 1.1 mrg End Tag Table
2456