libgomp.info revision 1.12 1 This is libgomp.info, produced by makeinfo version 6.5 from
2 libgomp.texi.
3
4 Copyright (C) 2006-2019 Free Software Foundation, Inc.
5
6 Permission is granted to copy, distribute and/or modify this document
7 under the terms of the GNU Free Documentation License, Version 1.3 or
8 any later version published by the Free Software Foundation; with the
9 Invariant Sections being "Funding Free Software", the Front-Cover texts
10 being (a) (see below), and with the Back-Cover Texts being (b) (see
11 below). A copy of the license is included in the section entitled "GNU
12 Free Documentation License".
13
14 (a) The FSF's Front-Cover Text is:
15
16 A GNU Manual
17
18 (b) The FSF's Back-Cover Text is:
19
20 You have freedom to copy and modify this GNU Manual, like GNU
21 software. Copies published by the Free Software Foundation raise funds
22 for GNU development.
23 INFO-DIR-SECTION GNU Libraries
24 START-INFO-DIR-ENTRY
25 * libgomp: (libgomp). GNU Offloading and Multi Processing Runtime Library.
26 END-INFO-DIR-ENTRY
27
28 This manual documents libgomp, the GNU Offloading and Multi
29 Processing Runtime library. This is the GNU implementation of the
30 OpenMP and OpenACC APIs for parallel and accelerator programming in
31 C/C++ and Fortran.
32
33 Published by the Free Software Foundation 51 Franklin Street, Fifth
34 Floor Boston, MA 02110-1301 USA
35
36 Copyright (C) 2006-2019 Free Software Foundation, Inc.
37
38 Permission is granted to copy, distribute and/or modify this document
39 under the terms of the GNU Free Documentation License, Version 1.3 or
40 any later version published by the Free Software Foundation; with the
41 Invariant Sections being "Funding Free Software", the Front-Cover texts
42 being (a) (see below), and with the Back-Cover Texts being (b) (see
43 below). A copy of the license is included in the section entitled "GNU
44 Free Documentation License".
45
46 (a) The FSF's Front-Cover Text is:
47
48 A GNU Manual
49
50 (b) The FSF's Back-Cover Text is:
51
52 You have freedom to copy and modify this GNU Manual, like GNU
53 software. Copies published by the Free Software Foundation raise funds
54 for GNU development.
55
56
57 File: libgomp.info, Node: Top, Next: Enabling OpenMP, Up: (dir)
58
59 Introduction
60 ************
61
62 This manual documents the usage of libgomp, the GNU Offloading and Multi
63 Processing Runtime Library. This includes the GNU implementation of the
64 OpenMP (https://www.openmp.org) Application Programming Interface (API)
65 for multi-platform shared-memory parallel programming in C/C++ and
66 Fortran, and the GNU implementation of the OpenACC
67 (https://www.openacc.org) Application Programming Interface (API) for
68 offloading of code to accelerator devices in C/C++ and Fortran.
69
70 Originally, libgomp implemented the GNU OpenMP Runtime Library.
71 Based on this, support for OpenACC and offloading (both OpenACC and
72 OpenMP 4's target construct) has been added later on, and the library's
73 name changed to GNU Offloading and Multi Processing Runtime Library.
74
75 * Menu:
76
77 * Enabling OpenMP:: How to enable OpenMP for your applications.
78 * OpenMP Runtime Library Routines: Runtime Library Routines.
79 The OpenMP runtime application programming
80 interface.
81 * OpenMP Environment Variables: Environment Variables.
82 Influencing OpenMP runtime behavior with
83 environment variables.
84 * Enabling OpenACC:: How to enable OpenACC for your
85 applications.
86 * OpenACC Runtime Library Routines:: The OpenACC runtime application
87 programming interface.
88 * OpenACC Environment Variables:: Influencing OpenACC runtime behavior with
89 environment variables.
90 * CUDA Streams Usage:: Notes on the implementation of
91 asynchronous operations.
92 * OpenACC Library Interoperability:: OpenACC library interoperability with the
93 NVIDIA CUBLAS library.
94 * The libgomp ABI:: Notes on the external ABI presented by libgomp.
95 * Reporting Bugs:: How to report bugs in the GNU Offloading and
96 Multi Processing Runtime Library.
97 * Copying:: GNU general public license says
98 how you can copy and share libgomp.
99 * GNU Free Documentation License::
100 How you can copy and share this manual.
101 * Funding:: How to help assure continued work for free
102 software.
103 * Library Index:: Index of this documentation.
104
105
106 File: libgomp.info, Node: Enabling OpenMP, Next: Runtime Library Routines, Prev: Top, Up: Top
107
108 1 Enabling OpenMP
109 *****************
110
111 To activate the OpenMP extensions for C/C++ and Fortran, the
112 compile-time flag '-fopenmp' must be specified. This enables the OpenMP
113 directive '#pragma omp' in C/C++ and '!$omp' directives in free form,
114 'c$omp', '*$omp' and '!$omp' directives in fixed form, '!$' conditional
115 compilation sentinels in free form and 'c$', '*$' and '!$' sentinels in
116 fixed form, for Fortran. The flag also arranges for automatic linking
117 of the OpenMP runtime library (*note Runtime Library Routines::).
118
119 A complete description of all OpenMP directives accepted may be found
120 in the OpenMP Application Program Interface (https://www.openmp.org)
121 manual, version 4.5.
122
123
124 File: libgomp.info, Node: Runtime Library Routines, Next: Environment Variables, Prev: Enabling OpenMP, Up: Top
125
126 2 OpenMP Runtime Library Routines
127 *********************************
128
129 The runtime routines described here are defined by Section 3 of the
130 OpenMP specification in version 4.5. The routines are structured in
131 following three parts:
132
133 * Menu:
134
135 Control threads, processors and the parallel environment. They have C
136 linkage, and do not throw exceptions.
137
138 * omp_get_active_level:: Number of active parallel regions
139 * omp_get_ancestor_thread_num:: Ancestor thread ID
140 * omp_get_cancellation:: Whether cancellation support is enabled
141 * omp_get_default_device:: Get the default device for target regions
142 * omp_get_dynamic:: Dynamic teams setting
143 * omp_get_level:: Number of parallel regions
144 * omp_get_max_active_levels:: Maximum number of active regions
145 * omp_get_max_task_priority:: Maximum task priority value that can be set
146 * omp_get_max_threads:: Maximum number of threads of parallel region
147 * omp_get_nested:: Nested parallel regions
148 * omp_get_num_devices:: Number of target devices
149 * omp_get_num_procs:: Number of processors online
150 * omp_get_num_teams:: Number of teams
151 * omp_get_num_threads:: Size of the active team
152 * omp_get_proc_bind:: Whether theads may be moved between CPUs
153 * omp_get_schedule:: Obtain the runtime scheduling method
154 * omp_get_team_num:: Get team number
155 * omp_get_team_size:: Number of threads in a team
156 * omp_get_thread_limit:: Maximum number of threads
157 * omp_get_thread_num:: Current thread ID
158 * omp_in_parallel:: Whether a parallel region is active
159 * omp_in_final:: Whether in final or included task region
160 * omp_is_initial_device:: Whether executing on the host device
161 * omp_set_default_device:: Set the default device for target regions
162 * omp_set_dynamic:: Enable/disable dynamic teams
163 * omp_set_max_active_levels:: Limits the number of active parallel regions
164 * omp_set_nested:: Enable/disable nested parallel regions
165 * omp_set_num_threads:: Set upper team size limit
166 * omp_set_schedule:: Set the runtime scheduling method
167
168 Initialize, set, test, unset and destroy simple and nested locks.
169
170 * omp_init_lock:: Initialize simple lock
171 * omp_set_lock:: Wait for and set simple lock
172 * omp_test_lock:: Test and set simple lock if available
173 * omp_unset_lock:: Unset simple lock
174 * omp_destroy_lock:: Destroy simple lock
175 * omp_init_nest_lock:: Initialize nested lock
176 * omp_set_nest_lock:: Wait for and set simple lock
177 * omp_test_nest_lock:: Test and set nested lock if available
178 * omp_unset_nest_lock:: Unset nested lock
179 * omp_destroy_nest_lock:: Destroy nested lock
180
181 Portable, thread-based, wall clock timer.
182
183 * omp_get_wtick:: Get timer precision.
184 * omp_get_wtime:: Elapsed wall clock time.
185
186
187 File: libgomp.info, Node: omp_get_active_level, Next: omp_get_ancestor_thread_num, Up: Runtime Library Routines
188
189 2.1 'omp_get_active_level' - Number of parallel regions
190 =======================================================
191
192 _Description_:
193 This function returns the nesting level for the active parallel
194 blocks, which enclose the calling call.
195
196 _C/C++_
197 _Prototype_: 'int omp_get_active_level(void);'
198
199 _Fortran_:
200 _Interface_: 'integer function omp_get_active_level()'
201
202 _See also_:
203 *note omp_get_level::, *note omp_get_max_active_levels::, *note
204 omp_set_max_active_levels::
205
206 _Reference_:
207 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.20.
208
209
210 File: libgomp.info, Node: omp_get_ancestor_thread_num, Next: omp_get_cancellation, Prev: omp_get_active_level, Up: Runtime Library Routines
211
212 2.2 'omp_get_ancestor_thread_num' - Ancestor thread ID
213 ======================================================
214
215 _Description_:
216 This function returns the thread identification number for the
217 given nesting level of the current thread. For values of LEVEL
218 outside zero to 'omp_get_level' -1 is returned; if LEVEL is
219 'omp_get_level' the result is identical to 'omp_get_thread_num'.
220
221 _C/C++_
222 _Prototype_: 'int omp_get_ancestor_thread_num(int level);'
223
224 _Fortran_:
225 _Interface_: 'integer function omp_get_ancestor_thread_num(level)'
226 'integer level'
227
228 _See also_:
229 *note omp_get_level::, *note omp_get_thread_num::, *note
230 omp_get_team_size::
231
232 _Reference_:
233 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.18.
234
235
236 File: libgomp.info, Node: omp_get_cancellation, Next: omp_get_default_device, Prev: omp_get_ancestor_thread_num, Up: Runtime Library Routines
237
238 2.3 'omp_get_cancellation' - Whether cancellation support is enabled
239 ====================================================================
240
241 _Description_:
242 This function returns 'true' if cancellation is activated, 'false'
243 otherwise. Here, 'true' and 'false' represent their
244 language-specific counterparts. Unless 'OMP_CANCELLATION' is set
245 true, cancellations are deactivated.
246
247 _C/C++_:
248 _Prototype_: 'int omp_get_cancellation(void);'
249
250 _Fortran_:
251 _Interface_: 'logical function omp_get_cancellation()'
252
253 _See also_:
254 *note OMP_CANCELLATION::
255
256 _Reference_:
257 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.9.
258
259
260 File: libgomp.info, Node: omp_get_default_device, Next: omp_get_dynamic, Prev: omp_get_cancellation, Up: Runtime Library Routines
261
262 2.4 'omp_get_default_device' - Get the default device for target regions
263 ========================================================================
264
265 _Description_:
266 Get the default device for target regions without device clause.
267
268 _C/C++_:
269 _Prototype_: 'int omp_get_default_device(void);'
270
271 _Fortran_:
272 _Interface_: 'integer function omp_get_default_device()'
273
274 _See also_:
275 *note OMP_DEFAULT_DEVICE::, *note omp_set_default_device::
276
277 _Reference_:
278 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.30.
279
280
281 File: libgomp.info, Node: omp_get_dynamic, Next: omp_get_level, Prev: omp_get_default_device, Up: Runtime Library Routines
282
283 2.5 'omp_get_dynamic' - Dynamic teams setting
284 =============================================
285
286 _Description_:
287 This function returns 'true' if enabled, 'false' otherwise. Here,
288 'true' and 'false' represent their language-specific counterparts.
289
290 The dynamic team setting may be initialized at startup by the
291 'OMP_DYNAMIC' environment variable or at runtime using
292 'omp_set_dynamic'. If undefined, dynamic adjustment is disabled by
293 default.
294
295 _C/C++_:
296 _Prototype_: 'int omp_get_dynamic(void);'
297
298 _Fortran_:
299 _Interface_: 'logical function omp_get_dynamic()'
300
301 _See also_:
302 *note omp_set_dynamic::, *note OMP_DYNAMIC::
303
304 _Reference_:
305 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.8.
306
307
308 File: libgomp.info, Node: omp_get_level, Next: omp_get_max_active_levels, Prev: omp_get_dynamic, Up: Runtime Library Routines
309
310 2.6 'omp_get_level' - Obtain the current nesting level
311 ======================================================
312
313 _Description_:
314 This function returns the nesting level for the parallel blocks,
315 which enclose the calling call.
316
317 _C/C++_
318 _Prototype_: 'int omp_get_level(void);'
319
320 _Fortran_:
321 _Interface_: 'integer function omp_level()'
322
323 _See also_:
324 *note omp_get_active_level::
325
326 _Reference_:
327 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.17.
328
329
330 File: libgomp.info, Node: omp_get_max_active_levels, Next: omp_get_max_task_priority, Prev: omp_get_level, Up: Runtime Library Routines
331
332 2.7 'omp_get_max_active_levels' - Maximum number of active regions
333 ==================================================================
334
335 _Description_:
336 This function obtains the maximum allowed number of nested, active
337 parallel regions.
338
339 _C/C++_
340 _Prototype_: 'int omp_get_max_active_levels(void);'
341
342 _Fortran_:
343 _Interface_: 'integer function omp_get_max_active_levels()'
344
345 _See also_:
346 *note omp_set_max_active_levels::, *note omp_get_active_level::
347
348 _Reference_:
349 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.16.
350
351
352 File: libgomp.info, Node: omp_get_max_task_priority, Next: omp_get_max_threads, Prev: omp_get_max_active_levels, Up: Runtime Library Routines
353
354 2.8 'omp_get_max_task_priority' - Maximum priority value
355 ========================================================
356
357 that can be set for tasks.
358 _Description_:
359 This function obtains the maximum allowed priority number for
360 tasks.
361
362 _C/C++_
363 _Prototype_: 'int omp_get_max_task_priority(void);'
364
365 _Fortran_:
366 _Interface_: 'integer function omp_get_max_task_priority()'
367
368 _Reference_:
369 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.29.
370
371
372 File: libgomp.info, Node: omp_get_max_threads, Next: omp_get_nested, Prev: omp_get_max_task_priority, Up: Runtime Library Routines
373
374 2.9 'omp_get_max_threads' - Maximum number of threads of parallel region
375 ========================================================================
376
377 _Description_:
378 Return the maximum number of threads used for the current parallel
379 region that does not use the clause 'num_threads'.
380
381 _C/C++_:
382 _Prototype_: 'int omp_get_max_threads(void);'
383
384 _Fortran_:
385 _Interface_: 'integer function omp_get_max_threads()'
386
387 _See also_:
388 *note omp_set_num_threads::, *note omp_set_dynamic::, *note
389 omp_get_thread_limit::
390
391 _Reference_:
392 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.3.
393
394
395 File: libgomp.info, Node: omp_get_nested, Next: omp_get_num_devices, Prev: omp_get_max_threads, Up: Runtime Library Routines
396
397 2.10 'omp_get_nested' - Nested parallel regions
398 ===============================================
399
400 _Description_:
401 This function returns 'true' if nested parallel regions are
402 enabled, 'false' otherwise. Here, 'true' and 'false' represent
403 their language-specific counterparts.
404
405 Nested parallel regions may be initialized at startup by the
406 'OMP_NESTED' environment variable or at runtime using
407 'omp_set_nested'. If undefined, nested parallel regions are
408 disabled by default.
409
410 _C/C++_:
411 _Prototype_: 'int omp_get_nested(void);'
412
413 _Fortran_:
414 _Interface_: 'logical function omp_get_nested()'
415
416 _See also_:
417 *note omp_set_nested::, *note OMP_NESTED::
418
419 _Reference_:
420 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.11.
421
422
423 File: libgomp.info, Node: omp_get_num_devices, Next: omp_get_num_procs, Prev: omp_get_nested, Up: Runtime Library Routines
424
425 2.11 'omp_get_num_devices' - Number of target devices
426 =====================================================
427
428 _Description_:
429 Returns the number of target devices.
430
431 _C/C++_:
432 _Prototype_: 'int omp_get_num_devices(void);'
433
434 _Fortran_:
435 _Interface_: 'integer function omp_get_num_devices()'
436
437 _Reference_:
438 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.31.
439
440
441 File: libgomp.info, Node: omp_get_num_procs, Next: omp_get_num_teams, Prev: omp_get_num_devices, Up: Runtime Library Routines
442
443 2.12 'omp_get_num_procs' - Number of processors online
444 ======================================================
445
446 _Description_:
447 Returns the number of processors online on that device.
448
449 _C/C++_:
450 _Prototype_: 'int omp_get_num_procs(void);'
451
452 _Fortran_:
453 _Interface_: 'integer function omp_get_num_procs()'
454
455 _Reference_:
456 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.5.
457
458
459 File: libgomp.info, Node: omp_get_num_teams, Next: omp_get_num_threads, Prev: omp_get_num_procs, Up: Runtime Library Routines
460
461 2.13 'omp_get_num_teams' - Number of teams
462 ==========================================
463
464 _Description_:
465 Returns the number of teams in the current team region.
466
467 _C/C++_:
468 _Prototype_: 'int omp_get_num_teams(void);'
469
470 _Fortran_:
471 _Interface_: 'integer function omp_get_num_teams()'
472
473 _Reference_:
474 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.32.
475
476
477 File: libgomp.info, Node: omp_get_num_threads, Next: omp_get_proc_bind, Prev: omp_get_num_teams, Up: Runtime Library Routines
478
479 2.14 'omp_get_num_threads' - Size of the active team
480 ====================================================
481
482 _Description_:
483 Returns the number of threads in the current team. In a sequential
484 section of the program 'omp_get_num_threads' returns 1.
485
486 The default team size may be initialized at startup by the
487 'OMP_NUM_THREADS' environment variable. At runtime, the size of
488 the current team may be set either by the 'NUM_THREADS' clause or
489 by 'omp_set_num_threads'. If none of the above were used to define
490 a specific value and 'OMP_DYNAMIC' is disabled, one thread per CPU
491 online is used.
492
493 _C/C++_:
494 _Prototype_: 'int omp_get_num_threads(void);'
495
496 _Fortran_:
497 _Interface_: 'integer function omp_get_num_threads()'
498
499 _See also_:
500 *note omp_get_max_threads::, *note omp_set_num_threads::, *note
501 OMP_NUM_THREADS::
502
503 _Reference_:
504 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.2.
505
506
507 File: libgomp.info, Node: omp_get_proc_bind, Next: omp_get_schedule, Prev: omp_get_num_threads, Up: Runtime Library Routines
508
509 2.15 'omp_get_proc_bind' - Whether theads may be moved between CPUs
510 ===================================================================
511
512 _Description_:
513 This functions returns the currently active thread affinity policy,
514 which is set via 'OMP_PROC_BIND'. Possible values are
515 'omp_proc_bind_false', 'omp_proc_bind_true',
516 'omp_proc_bind_master', 'omp_proc_bind_close' and
517 'omp_proc_bind_spread'.
518
519 _C/C++_:
520 _Prototype_: 'omp_proc_bind_t omp_get_proc_bind(void);'
521
522 _Fortran_:
523 _Interface_: 'integer(kind=omp_proc_bind_kind) function
524 omp_get_proc_bind()'
525
526 _See also_:
527 *note OMP_PROC_BIND::, *note OMP_PLACES::, *note
528 GOMP_CPU_AFFINITY::,
529
530 _Reference_:
531 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.22.
532
533
534 File: libgomp.info, Node: omp_get_schedule, Next: omp_get_team_num, Prev: omp_get_proc_bind, Up: Runtime Library Routines
535
536 2.16 'omp_get_schedule' - Obtain the runtime scheduling method
537 ==============================================================
538
539 _Description_:
540 Obtain the runtime scheduling method. The KIND argument will be
541 set to the value 'omp_sched_static', 'omp_sched_dynamic',
542 'omp_sched_guided' or 'omp_sched_auto'. The second argument,
543 CHUNK_SIZE, is set to the chunk size.
544
545 _C/C++_
546 _Prototype_: 'void omp_get_schedule(omp_sched_t *kind, int
547 *chunk_size);'
548
549 _Fortran_:
550 _Interface_: 'subroutine omp_get_schedule(kind, chunk_size)'
551 'integer(kind=omp_sched_kind) kind'
552 'integer chunk_size'
553
554 _See also_:
555 *note omp_set_schedule::, *note OMP_SCHEDULE::
556
557 _Reference_:
558 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.13.
559
560
561 File: libgomp.info, Node: omp_get_team_num, Next: omp_get_team_size, Prev: omp_get_schedule, Up: Runtime Library Routines
562
563 2.17 'omp_get_team_num' - Get team number
564 =========================================
565
566 _Description_:
567 Returns the team number of the calling thread.
568
569 _C/C++_:
570 _Prototype_: 'int omp_get_team_num(void);'
571
572 _Fortran_:
573 _Interface_: 'integer function omp_get_team_num()'
574
575 _Reference_:
576 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.33.
577
578
579 File: libgomp.info, Node: omp_get_team_size, Next: omp_get_thread_limit, Prev: omp_get_team_num, Up: Runtime Library Routines
580
581 2.18 'omp_get_team_size' - Number of threads in a team
582 ======================================================
583
584 _Description_:
585 This function returns the number of threads in a thread team to
586 which either the current thread or its ancestor belongs. For
587 values of LEVEL outside zero to 'omp_get_level', -1 is returned; if
588 LEVEL is zero, 1 is returned, and for 'omp_get_level', the result
589 is identical to 'omp_get_num_threads'.
590
591 _C/C++_:
592 _Prototype_: 'int omp_get_team_size(int level);'
593
594 _Fortran_:
595 _Interface_: 'integer function omp_get_team_size(level)'
596 'integer level'
597
598 _See also_:
599 *note omp_get_num_threads::, *note omp_get_level::, *note
600 omp_get_ancestor_thread_num::
601
602 _Reference_:
603 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.19.
604
605
606 File: libgomp.info, Node: omp_get_thread_limit, Next: omp_get_thread_num, Prev: omp_get_team_size, Up: Runtime Library Routines
607
608 2.19 'omp_get_thread_limit' - Maximum number of threads
609 =======================================================
610
611 _Description_:
612 Return the maximum number of threads of the program.
613
614 _C/C++_:
615 _Prototype_: 'int omp_get_thread_limit(void);'
616
617 _Fortran_:
618 _Interface_: 'integer function omp_get_thread_limit()'
619
620 _See also_:
621 *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
622
623 _Reference_:
624 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.14.
625
626
627 File: libgomp.info, Node: omp_get_thread_num, Next: omp_in_parallel, Prev: omp_get_thread_limit, Up: Runtime Library Routines
628
629 2.20 'omp_get_thread_num' - Current thread ID
630 =============================================
631
632 _Description_:
633 Returns a unique thread identification number within the current
634 team. In a sequential parts of the program, 'omp_get_thread_num'
635 always returns 0. In parallel regions the return value varies from
636 0 to 'omp_get_num_threads'-1 inclusive. The return value of the
637 master thread of a team is always 0.
638
639 _C/C++_:
640 _Prototype_: 'int omp_get_thread_num(void);'
641
642 _Fortran_:
643 _Interface_: 'integer function omp_get_thread_num()'
644
645 _See also_:
646 *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
647
648 _Reference_:
649 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.4.
650
651
652 File: libgomp.info, Node: omp_in_parallel, Next: omp_in_final, Prev: omp_get_thread_num, Up: Runtime Library Routines
653
654 2.21 'omp_in_parallel' - Whether a parallel region is active
655 ============================================================
656
657 _Description_:
658 This function returns 'true' if currently running in parallel,
659 'false' otherwise. Here, 'true' and 'false' represent their
660 language-specific counterparts.
661
662 _C/C++_:
663 _Prototype_: 'int omp_in_parallel(void);'
664
665 _Fortran_:
666 _Interface_: 'logical function omp_in_parallel()'
667
668 _Reference_:
669 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.6.
670
671
672 File: libgomp.info, Node: omp_in_final, Next: omp_is_initial_device, Prev: omp_in_parallel, Up: Runtime Library Routines
673
674 2.22 'omp_in_final' - Whether in final or included task region
675 ==============================================================
676
677 _Description_:
678 This function returns 'true' if currently running in a final or
679 included task region, 'false' otherwise. Here, 'true' and 'false'
680 represent their language-specific counterparts.
681
682 _C/C++_:
683 _Prototype_: 'int omp_in_final(void);'
684
685 _Fortran_:
686 _Interface_: 'logical function omp_in_final()'
687
688 _Reference_:
689 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.21.
690
691
692 File: libgomp.info, Node: omp_is_initial_device, Next: omp_set_default_device, Prev: omp_in_final, Up: Runtime Library Routines
693
694 2.23 'omp_is_initial_device' - Whether executing on the host device
695 ===================================================================
696
697 _Description_:
698 This function returns 'true' if currently running on the host
699 device, 'false' otherwise. Here, 'true' and 'false' represent
700 their language-specific counterparts.
701
702 _C/C++_:
703 _Prototype_: 'int omp_is_initial_device(void);'
704
705 _Fortran_:
706 _Interface_: 'logical function omp_is_initial_device()'
707
708 _Reference_:
709 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.34.
710
711
712 File: libgomp.info, Node: omp_set_default_device, Next: omp_set_dynamic, Prev: omp_is_initial_device, Up: Runtime Library Routines
713
714 2.24 'omp_set_default_device' - Set the default device for target regions
715 =========================================================================
716
717 _Description_:
718 Set the default device for target regions without device clause.
719 The argument shall be a nonnegative device number.
720
721 _C/C++_:
722 _Prototype_: 'void omp_set_default_device(int device_num);'
723
724 _Fortran_:
725 _Interface_: 'subroutine omp_set_default_device(device_num)'
726 'integer device_num'
727
728 _See also_:
729 *note OMP_DEFAULT_DEVICE::, *note omp_get_default_device::
730
731 _Reference_:
732 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.29.
733
734
735 File: libgomp.info, Node: omp_set_dynamic, Next: omp_set_max_active_levels, Prev: omp_set_default_device, Up: Runtime Library Routines
736
737 2.25 'omp_set_dynamic' - Enable/disable dynamic teams
738 =====================================================
739
740 _Description_:
741 Enable or disable the dynamic adjustment of the number of threads
742 within a team. The function takes the language-specific equivalent
743 of 'true' and 'false', where 'true' enables dynamic adjustment of
744 team sizes and 'false' disables it.
745
746 _C/C++_:
747 _Prototype_: 'void omp_set_dynamic(int dynamic_threads);'
748
749 _Fortran_:
750 _Interface_: 'subroutine omp_set_dynamic(dynamic_threads)'
751 'logical, intent(in) :: dynamic_threads'
752
753 _See also_:
754 *note OMP_DYNAMIC::, *note omp_get_dynamic::
755
756 _Reference_:
757 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.7.
758
759
760 File: libgomp.info, Node: omp_set_max_active_levels, Next: omp_set_nested, Prev: omp_set_dynamic, Up: Runtime Library Routines
761
762 2.26 'omp_set_max_active_levels' - Limits the number of active parallel regions
763 ===============================================================================
764
765 _Description_:
766 This function limits the maximum allowed number of nested, active
767 parallel regions.
768
769 _C/C++_
770 _Prototype_: 'void omp_set_max_active_levels(int max_levels);'
771
772 _Fortran_:
773 _Interface_: 'subroutine omp_set_max_active_levels(max_levels)'
774 'integer max_levels'
775
776 _See also_:
777 *note omp_get_max_active_levels::, *note omp_get_active_level::
778
779 _Reference_:
780 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.15.
781
782
783 File: libgomp.info, Node: omp_set_nested, Next: omp_set_num_threads, Prev: omp_set_max_active_levels, Up: Runtime Library Routines
784
785 2.27 'omp_set_nested' - Enable/disable nested parallel regions
786 ==============================================================
787
788 _Description_:
789 Enable or disable nested parallel regions, i.e., whether team
790 members are allowed to create new teams. The function takes the
791 language-specific equivalent of 'true' and 'false', where 'true'
792 enables dynamic adjustment of team sizes and 'false' disables it.
793
794 _C/C++_:
795 _Prototype_: 'void omp_set_nested(int nested);'
796
797 _Fortran_:
798 _Interface_: 'subroutine omp_set_nested(nested)'
799 'logical, intent(in) :: nested'
800
801 _See also_:
802 *note OMP_NESTED::, *note omp_get_nested::
803
804 _Reference_:
805 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.10.
806
807
808 File: libgomp.info, Node: omp_set_num_threads, Next: omp_set_schedule, Prev: omp_set_nested, Up: Runtime Library Routines
809
810 2.28 'omp_set_num_threads' - Set upper team size limit
811 ======================================================
812
813 _Description_:
814 Specifies the number of threads used by default in subsequent
815 parallel sections, if those do not specify a 'num_threads' clause.
816 The argument of 'omp_set_num_threads' shall be a positive integer.
817
818 _C/C++_:
819 _Prototype_: 'void omp_set_num_threads(int num_threads);'
820
821 _Fortran_:
822 _Interface_: 'subroutine omp_set_num_threads(num_threads)'
823 'integer, intent(in) :: num_threads'
824
825 _See also_:
826 *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
827 omp_get_max_threads::
828
829 _Reference_:
830 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.1.
831
832
833 File: libgomp.info, Node: omp_set_schedule, Next: omp_init_lock, Prev: omp_set_num_threads, Up: Runtime Library Routines
834
835 2.29 'omp_set_schedule' - Set the runtime scheduling method
836 ===========================================================
837
838 _Description_:
839 Sets the runtime scheduling method. The KIND argument can have the
840 value 'omp_sched_static', 'omp_sched_dynamic', 'omp_sched_guided'
841 or 'omp_sched_auto'. Except for 'omp_sched_auto', the chunk size
842 is set to the value of CHUNK_SIZE if positive, or to the default
843 value if zero or negative. For 'omp_sched_auto' the CHUNK_SIZE
844 argument is ignored.
845
846 _C/C++_
847 _Prototype_: 'void omp_set_schedule(omp_sched_t kind, int
848 chunk_size);'
849
850 _Fortran_:
851 _Interface_: 'subroutine omp_set_schedule(kind, chunk_size)'
852 'integer(kind=omp_sched_kind) kind'
853 'integer chunk_size'
854
855 _See also_:
856 *note omp_get_schedule:: *note OMP_SCHEDULE::
857
858 _Reference_:
859 OpenMP specification v4.5 (https://www.openmp.org), Section 3.2.12.
860
861
862 File: libgomp.info, Node: omp_init_lock, Next: omp_set_lock, Prev: omp_set_schedule, Up: Runtime Library Routines
863
864 2.30 'omp_init_lock' - Initialize simple lock
865 =============================================
866
867 _Description_:
868 Initialize a simple lock. After initialization, the lock is in an
869 unlocked state.
870
871 _C/C++_:
872 _Prototype_: 'void omp_init_lock(omp_lock_t *lock);'
873
874 _Fortran_:
875 _Interface_: 'subroutine omp_init_lock(svar)'
876 'integer(omp_lock_kind), intent(out) :: svar'
877
878 _See also_:
879 *note omp_destroy_lock::
880
881 _Reference_:
882 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.1.
883
884
885 File: libgomp.info, Node: omp_set_lock, Next: omp_test_lock, Prev: omp_init_lock, Up: Runtime Library Routines
886
887 2.31 'omp_set_lock' - Wait for and set simple lock
888 ==================================================
889
890 _Description_:
891 Before setting a simple lock, the lock variable must be initialized
892 by 'omp_init_lock'. The calling thread is blocked until the lock
893 is available. If the lock is already held by the current thread, a
894 deadlock occurs.
895
896 _C/C++_:
897 _Prototype_: 'void omp_set_lock(omp_lock_t *lock);'
898
899 _Fortran_:
900 _Interface_: 'subroutine omp_set_lock(svar)'
901 'integer(omp_lock_kind), intent(inout) :: svar'
902
903 _See also_:
904 *note omp_init_lock::, *note omp_test_lock::, *note
905 omp_unset_lock::
906
907 _Reference_:
908 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.4.
909
910
911 File: libgomp.info, Node: omp_test_lock, Next: omp_unset_lock, Prev: omp_set_lock, Up: Runtime Library Routines
912
913 2.32 'omp_test_lock' - Test and set simple lock if available
914 ============================================================
915
916 _Description_:
917 Before setting a simple lock, the lock variable must be initialized
918 by 'omp_init_lock'. Contrary to 'omp_set_lock', 'omp_test_lock'
919 does not block if the lock is not available. This function returns
920 'true' upon success, 'false' otherwise. Here, 'true' and 'false'
921 represent their language-specific counterparts.
922
923 _C/C++_:
924 _Prototype_: 'int omp_test_lock(omp_lock_t *lock);'
925
926 _Fortran_:
927 _Interface_: 'logical function omp_test_lock(svar)'
928 'integer(omp_lock_kind), intent(inout) :: svar'
929
930 _See also_:
931 *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
932
933 _Reference_:
934 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.6.
935
936
937 File: libgomp.info, Node: omp_unset_lock, Next: omp_destroy_lock, Prev: omp_test_lock, Up: Runtime Library Routines
938
939 2.33 'omp_unset_lock' - Unset simple lock
940 =========================================
941
942 _Description_:
943 A simple lock about to be unset must have been locked by
944 'omp_set_lock' or 'omp_test_lock' before. In addition, the lock
945 must be held by the thread calling 'omp_unset_lock'. Then, the
946 lock becomes unlocked. If one or more threads attempted to set the
947 lock before, one of them is chosen to, again, set the lock to
948 itself.
949
950 _C/C++_:
951 _Prototype_: 'void omp_unset_lock(omp_lock_t *lock);'
952
953 _Fortran_:
954 _Interface_: 'subroutine omp_unset_lock(svar)'
955 'integer(omp_lock_kind), intent(inout) :: svar'
956
957 _See also_:
958 *note omp_set_lock::, *note omp_test_lock::
959
960 _Reference_:
961 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.5.
962
963
964 File: libgomp.info, Node: omp_destroy_lock, Next: omp_init_nest_lock, Prev: omp_unset_lock, Up: Runtime Library Routines
965
966 2.34 'omp_destroy_lock' - Destroy simple lock
967 =============================================
968
969 _Description_:
970 Destroy a simple lock. In order to be destroyed, a simple lock
971 must be in the unlocked state.
972
973 _C/C++_:
974 _Prototype_: 'void omp_destroy_lock(omp_lock_t *lock);'
975
976 _Fortran_:
977 _Interface_: 'subroutine omp_destroy_lock(svar)'
978 'integer(omp_lock_kind), intent(inout) :: svar'
979
980 _See also_:
981 *note omp_init_lock::
982
983 _Reference_:
984 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.3.
985
986
987 File: libgomp.info, Node: omp_init_nest_lock, Next: omp_set_nest_lock, Prev: omp_destroy_lock, Up: Runtime Library Routines
988
989 2.35 'omp_init_nest_lock' - Initialize nested lock
990 ==================================================
991
992 _Description_:
993 Initialize a nested lock. After initialization, the lock is in an
994 unlocked state and the nesting count is set to zero.
995
996 _C/C++_:
997 _Prototype_: 'void omp_init_nest_lock(omp_nest_lock_t *lock);'
998
999 _Fortran_:
1000 _Interface_: 'subroutine omp_init_nest_lock(nvar)'
1001 'integer(omp_nest_lock_kind), intent(out) :: nvar'
1002
1003 _See also_:
1004 *note omp_destroy_nest_lock::
1005
1006 _Reference_:
1007 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.1.
1008
1009
1010 File: libgomp.info, Node: omp_set_nest_lock, Next: omp_test_nest_lock, Prev: omp_init_nest_lock, Up: Runtime Library Routines
1011
1012 2.36 'omp_set_nest_lock' - Wait for and set nested lock
1013 =======================================================
1014
1015 _Description_:
1016 Before setting a nested lock, the lock variable must be initialized
1017 by 'omp_init_nest_lock'. The calling thread is blocked until the
1018 lock is available. If the lock is already held by the current
1019 thread, the nesting count for the lock is incremented.
1020
1021 _C/C++_:
1022 _Prototype_: 'void omp_set_nest_lock(omp_nest_lock_t *lock);'
1023
1024 _Fortran_:
1025 _Interface_: 'subroutine omp_set_nest_lock(nvar)'
1026 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
1027
1028 _See also_:
1029 *note omp_init_nest_lock::, *note omp_unset_nest_lock::
1030
1031 _Reference_:
1032 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.4.
1033
1034
1035 File: libgomp.info, Node: omp_test_nest_lock, Next: omp_unset_nest_lock, Prev: omp_set_nest_lock, Up: Runtime Library Routines
1036
1037 2.37 'omp_test_nest_lock' - Test and set nested lock if available
1038 =================================================================
1039
1040 _Description_:
1041 Before setting a nested lock, the lock variable must be initialized
1042 by 'omp_init_nest_lock'. Contrary to 'omp_set_nest_lock',
1043 'omp_test_nest_lock' does not block if the lock is not available.
1044 If the lock is already held by the current thread, the new nesting
1045 count is returned. Otherwise, the return value equals zero.
1046
1047 _C/C++_:
1048 _Prototype_: 'int omp_test_nest_lock(omp_nest_lock_t *lock);'
1049
1050 _Fortran_:
1051 _Interface_: 'logical function omp_test_nest_lock(nvar)'
1052 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
1053
1054 _See also_:
1055 *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
1056
1057 _Reference_:
1058 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.6.
1059
1060
1061 File: libgomp.info, Node: omp_unset_nest_lock, Next: omp_destroy_nest_lock, Prev: omp_test_nest_lock, Up: Runtime Library Routines
1062
1063 2.38 'omp_unset_nest_lock' - Unset nested lock
1064 ==============================================
1065
1066 _Description_:
1067 A nested lock about to be unset must have been locked by
1068 'omp_set_nested_lock' or 'omp_test_nested_lock' before. In
1069 addition, the lock must be held by the thread calling
1070 'omp_unset_nested_lock'. If the nesting count drops to zero, the
1071 lock becomes unlocked. If one ore more threads attempted to set
1072 the lock before, one of them is chosen to, again, set the lock to
1073 itself.
1074
1075 _C/C++_:
1076 _Prototype_: 'void omp_unset_nest_lock(omp_nest_lock_t *lock);'
1077
1078 _Fortran_:
1079 _Interface_: 'subroutine omp_unset_nest_lock(nvar)'
1080 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
1081
1082 _See also_:
1083 *note omp_set_nest_lock::
1084
1085 _Reference_:
1086 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.5.
1087
1088
1089 File: libgomp.info, Node: omp_destroy_nest_lock, Next: omp_get_wtick, Prev: omp_unset_nest_lock, Up: Runtime Library Routines
1090
1091 2.39 'omp_destroy_nest_lock' - Destroy nested lock
1092 ==================================================
1093
1094 _Description_:
1095 Destroy a nested lock. In order to be destroyed, a nested lock
1096 must be in the unlocked state and its nesting count must equal
1097 zero.
1098
1099 _C/C++_:
1100 _Prototype_: 'void omp_destroy_nest_lock(omp_nest_lock_t *);'
1101
1102 _Fortran_:
1103 _Interface_: 'subroutine omp_destroy_nest_lock(nvar)'
1104 'integer(omp_nest_lock_kind), intent(inout) :: nvar'
1105
1106 _See also_:
1107 *note omp_init_lock::
1108
1109 _Reference_:
1110 OpenMP specification v4.5 (https://www.openmp.org), Section 3.3.3.
1111
1112
1113 File: libgomp.info, Node: omp_get_wtick, Next: omp_get_wtime, Prev: omp_destroy_nest_lock, Up: Runtime Library Routines
1114
1115 2.40 'omp_get_wtick' - Get timer precision
1116 ==========================================
1117
1118 _Description_:
1119 Gets the timer precision, i.e., the number of seconds between two
1120 successive clock ticks.
1121
1122 _C/C++_:
1123 _Prototype_: 'double omp_get_wtick(void);'
1124
1125 _Fortran_:
1126 _Interface_: 'double precision function omp_get_wtick()'
1127
1128 _See also_:
1129 *note omp_get_wtime::
1130
1131 _Reference_:
1132 OpenMP specification v4.5 (https://www.openmp.org), Section 3.4.2.
1133
1134
1135 File: libgomp.info, Node: omp_get_wtime, Prev: omp_get_wtick, Up: Runtime Library Routines
1136
1137 2.41 'omp_get_wtime' - Elapsed wall clock time
1138 ==============================================
1139
1140 _Description_:
1141 Elapsed wall clock time in seconds. The time is measured per
1142 thread, no guarantee can be made that two distinct threads measure
1143 the same time. Time is measured from some "time in the past",
1144 which is an arbitrary time guaranteed not to change during the
1145 execution of the program.
1146
1147 _C/C++_:
1148 _Prototype_: 'double omp_get_wtime(void);'
1149
1150 _Fortran_:
1151 _Interface_: 'double precision function omp_get_wtime()'
1152
1153 _See also_:
1154 *note omp_get_wtick::
1155
1156 _Reference_:
1157 OpenMP specification v4.5 (https://www.openmp.org), Section 3.4.1.
1158
1159
1160 File: libgomp.info, Node: Environment Variables, Next: Enabling OpenACC, Prev: Runtime Library Routines, Up: Top
1161
1162 3 OpenMP Environment Variables
1163 ******************************
1164
1165 The environment variables which beginning with 'OMP_' are defined by
1166 section 4 of the OpenMP specification in version 4.5, while those
1167 beginning with 'GOMP_' are GNU extensions.
1168
1169 * Menu:
1170
1171 * OMP_CANCELLATION:: Set whether cancellation is activated
1172 * OMP_DISPLAY_ENV:: Show OpenMP version and environment variables
1173 * OMP_DEFAULT_DEVICE:: Set the device used in target regions
1174 * OMP_DYNAMIC:: Dynamic adjustment of threads
1175 * OMP_MAX_ACTIVE_LEVELS:: Set the maximum number of nested parallel regions
1176 * OMP_MAX_TASK_PRIORITY:: Set the maximum task priority value
1177 * OMP_NESTED:: Nested parallel regions
1178 * OMP_NUM_THREADS:: Specifies the number of threads to use
1179 * OMP_PROC_BIND:: Whether theads may be moved between CPUs
1180 * OMP_PLACES:: Specifies on which CPUs the theads should be placed
1181 * OMP_STACKSIZE:: Set default thread stack size
1182 * OMP_SCHEDULE:: How threads are scheduled
1183 * OMP_THREAD_LIMIT:: Set the maximum number of threads
1184 * OMP_WAIT_POLICY:: How waiting threads are handled
1185 * GOMP_CPU_AFFINITY:: Bind threads to specific CPUs
1186 * GOMP_DEBUG:: Enable debugging output
1187 * GOMP_STACKSIZE:: Set default thread stack size
1188 * GOMP_SPINCOUNT:: Set the busy-wait spin count
1189 * GOMP_RTEMS_THREAD_POOLS:: Set the RTEMS specific thread pools
1190
1191
1192 File: libgomp.info, Node: OMP_CANCELLATION, Next: OMP_DISPLAY_ENV, Up: Environment Variables
1193
1194 3.1 'OMP_CANCELLATION' - Set whether cancellation is activated
1195 ==============================================================
1196
1197 _Description_:
1198 If set to 'TRUE', the cancellation is activated. If set to 'FALSE'
1199 or if unset, cancellation is disabled and the 'cancel' construct is
1200 ignored.
1201
1202 _See also_:
1203 *note omp_get_cancellation::
1204
1205 _Reference_:
1206 OpenMP specification v4.5 (https://www.openmp.org), Section 4.11
1207
1208
1209 File: libgomp.info, Node: OMP_DISPLAY_ENV, Next: OMP_DEFAULT_DEVICE, Prev: OMP_CANCELLATION, Up: Environment Variables
1210
1211 3.2 'OMP_DISPLAY_ENV' - Show OpenMP version and environment variables
1212 =====================================================================
1213
1214 _Description_:
1215 If set to 'TRUE', the OpenMP version number and the values
1216 associated with the OpenMP environment variables are printed to
1217 'stderr'. If set to 'VERBOSE', it additionally shows the value of
1218 the environment variables which are GNU extensions. If undefined
1219 or set to 'FALSE', this information will not be shown.
1220
1221 _Reference_:
1222 OpenMP specification v4.5 (https://www.openmp.org), Section 4.12
1223
1224
1225 File: libgomp.info, Node: OMP_DEFAULT_DEVICE, Next: OMP_DYNAMIC, Prev: OMP_DISPLAY_ENV, Up: Environment Variables
1226
1227 3.3 'OMP_DEFAULT_DEVICE' - Set the device used in target regions
1228 ================================================================
1229
1230 _Description_:
1231 Set to choose the device which is used in a 'target' region, unless
1232 the value is overridden by 'omp_set_default_device' or by a
1233 'device' clause. The value shall be the nonnegative device number.
1234 If no device with the given device number exists, the code is
1235 executed on the host. If unset, device number 0 will be used.
1236
1237 _See also_:
1238 *note omp_get_default_device::, *note omp_set_default_device::,
1239
1240 _Reference_:
1241 OpenMP specification v4.5 (https://www.openmp.org), Section 4.13
1242
1243
1244 File: libgomp.info, Node: OMP_DYNAMIC, Next: OMP_MAX_ACTIVE_LEVELS, Prev: OMP_DEFAULT_DEVICE, Up: Environment Variables
1245
1246 3.4 'OMP_DYNAMIC' - Dynamic adjustment of threads
1247 =================================================
1248
1249 _Description_:
1250 Enable or disable the dynamic adjustment of the number of threads
1251 within a team. The value of this environment variable shall be
1252 'TRUE' or 'FALSE'. If undefined, dynamic adjustment is disabled by
1253 default.
1254
1255 _See also_:
1256 *note omp_set_dynamic::
1257
1258 _Reference_:
1259 OpenMP specification v4.5 (https://www.openmp.org), Section 4.3
1260
1261
1262 File: libgomp.info, Node: OMP_MAX_ACTIVE_LEVELS, Next: OMP_MAX_TASK_PRIORITY, Prev: OMP_DYNAMIC, Up: Environment Variables
1263
1264 3.5 'OMP_MAX_ACTIVE_LEVELS' - Set the maximum number of nested parallel regions
1265 ===============================================================================
1266
1267 _Description_:
1268 Specifies the initial value for the maximum number of nested
1269 parallel regions. The value of this variable shall be a positive
1270 integer. If undefined, the number of active levels is unlimited.
1271
1272 _See also_:
1273 *note omp_set_max_active_levels::
1274
1275 _Reference_:
1276 OpenMP specification v4.5 (https://www.openmp.org), Section 4.9
1277
1278
1279 File: libgomp.info, Node: OMP_MAX_TASK_PRIORITY, Next: OMP_NESTED, Prev: OMP_MAX_ACTIVE_LEVELS, Up: Environment Variables
1280
1281 3.6 'OMP_MAX_TASK_PRIORITY' - Set the maximum priority
1282 ======================================================
1283
1284 number that can be set for a task.
1285 _Description_:
1286 Specifies the initial value for the maximum priority value that can
1287 be set for a task. The value of this variable shall be a
1288 non-negative integer, and zero is allowed. If undefined, the
1289 default priority is 0.
1290
1291 _See also_:
1292 *note omp_get_max_task_priority::
1293
1294 _Reference_:
1295 OpenMP specification v4.5 (https://www.openmp.org), Section 4.14
1296
1297
1298 File: libgomp.info, Node: OMP_NESTED, Next: OMP_NUM_THREADS, Prev: OMP_MAX_TASK_PRIORITY, Up: Environment Variables
1299
1300 3.7 'OMP_NESTED' - Nested parallel regions
1301 ==========================================
1302
1303 _Description_:
1304 Enable or disable nested parallel regions, i.e., whether team
1305 members are allowed to create new teams. The value of this
1306 environment variable shall be 'TRUE' or 'FALSE'. If undefined,
1307 nested parallel regions are disabled by default.
1308
1309 _See also_:
1310 *note omp_set_nested::
1311
1312 _Reference_:
1313 OpenMP specification v4.5 (https://www.openmp.org), Section 4.6
1314
1315
1316 File: libgomp.info, Node: OMP_NUM_THREADS, Next: OMP_PROC_BIND, Prev: OMP_NESTED, Up: Environment Variables
1317
1318 3.8 'OMP_NUM_THREADS' - Specifies the number of threads to use
1319 ==============================================================
1320
1321 _Description_:
1322 Specifies the default number of threads to use in parallel regions.
1323 The value of this variable shall be a comma-separated list of
1324 positive integers; the value specified the number of threads to use
1325 for the corresponding nested level. If undefined one thread per
1326 CPU is used.
1327
1328 _See also_:
1329 *note omp_set_num_threads::
1330
1331 _Reference_:
1332 OpenMP specification v4.5 (https://www.openmp.org), Section 4.2
1333
1334
1335 File: libgomp.info, Node: OMP_PROC_BIND, Next: OMP_PLACES, Prev: OMP_NUM_THREADS, Up: Environment Variables
1336
1337 3.9 'OMP_PROC_BIND' - Whether theads may be moved between CPUs
1338 ==============================================================
1339
1340 _Description_:
1341 Specifies whether threads may be moved between processors. If set
1342 to 'TRUE', OpenMP theads should not be moved; if set to 'FALSE'
1343 they may be moved. Alternatively, a comma separated list with the
1344 values 'MASTER', 'CLOSE' and 'SPREAD' can be used to specify the
1345 thread affinity policy for the corresponding nesting level. With
1346 'MASTER' the worker threads are in the same place partition as the
1347 master thread. With 'CLOSE' those are kept close to the master
1348 thread in contiguous place partitions. And with 'SPREAD' a sparse
1349 distribution across the place partitions is used.
1350
1351 When undefined, 'OMP_PROC_BIND' defaults to 'TRUE' when
1352 'OMP_PLACES' or 'GOMP_CPU_AFFINITY' is set and 'FALSE' otherwise.
1353
1354 _See also_:
1355 *note OMP_PLACES::, *note GOMP_CPU_AFFINITY::, *note
1356 omp_get_proc_bind::
1357
1358 _Reference_:
1359 OpenMP specification v4.5 (https://www.openmp.org), Section 4.4
1360
1361
1362 File: libgomp.info, Node: OMP_PLACES, Next: OMP_STACKSIZE, Prev: OMP_PROC_BIND, Up: Environment Variables
1363
1364 3.10 'OMP_PLACES' - Specifies on which CPUs the theads should be placed
1365 =======================================================================
1366
1367 _Description_:
1368 The thread placement can be either specified using an abstract name
1369 or by an explicit list of the places. The abstract names
1370 'threads', 'cores' and 'sockets' can be optionally followed by a
1371 positive number in parentheses, which denotes the how many places
1372 shall be created. With 'threads' each place corresponds to a
1373 single hardware thread; 'cores' to a single core with the
1374 corresponding number of hardware threads; and with 'sockets' the
1375 place corresponds to a single socket. The resulting placement can
1376 be shown by setting the 'OMP_DISPLAY_ENV' environment variable.
1377
1378 Alternatively, the placement can be specified explicitly as
1379 comma-separated list of places. A place is specified by set of
1380 nonnegative numbers in curly braces, denoting the denoting the
1381 hardware threads. The hardware threads belonging to a place can
1382 either be specified as comma-separated list of nonnegative thread
1383 numbers or using an interval. Multiple places can also be either
1384 specified by a comma-separated list of places or by an interval.
1385 To specify an interval, a colon followed by the count is placed
1386 after after the hardware thread number or the place. Optionally,
1387 the length can be followed by a colon and the stride number -
1388 otherwise a unit stride is assumed. For instance, the following
1389 specifies the same places list: '"{0,1,2}, {3,4,6}, {7,8,9},
1390 {10,11,12}"'; '"{0:3}, {3:3}, {7:3}, {10:3}"'; and '"{0:2}:4:3"'.
1391
1392 If 'OMP_PLACES' and 'GOMP_CPU_AFFINITY' are unset and
1393 'OMP_PROC_BIND' is either unset or 'false', threads may be moved
1394 between CPUs following no placement policy.
1395
1396 _See also_:
1397 *note OMP_PROC_BIND::, *note GOMP_CPU_AFFINITY::, *note
1398 omp_get_proc_bind::, *note OMP_DISPLAY_ENV::
1399
1400 _Reference_:
1401 OpenMP specification v4.5 (https://www.openmp.org), Section 4.5
1402
1403
1404 File: libgomp.info, Node: OMP_STACKSIZE, Next: OMP_SCHEDULE, Prev: OMP_PLACES, Up: Environment Variables
1405
1406 3.11 'OMP_STACKSIZE' - Set default thread stack size
1407 ====================================================
1408
1409 _Description_:
1410 Set the default thread stack size in kilobytes, unless the number
1411 is suffixed by 'B', 'K', 'M' or 'G', in which case the size is,
1412 respectively, in bytes, kilobytes, megabytes or gigabytes. This is
1413 different from 'pthread_attr_setstacksize' which gets the number of
1414 bytes as an argument. If the stack size cannot be set due to
1415 system constraints, an error is reported and the initial stack size
1416 is left unchanged. If undefined, the stack size is system
1417 dependent.
1418
1419 _Reference_:
1420 OpenMP specification v4.5 (https://www.openmp.org), Section 4.7
1421
1422
1423 File: libgomp.info, Node: OMP_SCHEDULE, Next: OMP_THREAD_LIMIT, Prev: OMP_STACKSIZE, Up: Environment Variables
1424
1425 3.12 'OMP_SCHEDULE' - How threads are scheduled
1426 ===============================================
1427
1428 _Description_:
1429 Allows to specify 'schedule type' and 'chunk size'. The value of
1430 the variable shall have the form: 'type[,chunk]' where 'type' is
1431 one of 'static', 'dynamic', 'guided' or 'auto' The optional 'chunk'
1432 size shall be a positive integer. If undefined, dynamic scheduling
1433 and a chunk size of 1 is used.
1434
1435 _See also_:
1436 *note omp_set_schedule::
1437
1438 _Reference_:
1439 OpenMP specification v4.5 (https://www.openmp.org), Sections
1440 2.7.1.1 and 4.1
1441
1442
1443 File: libgomp.info, Node: OMP_THREAD_LIMIT, Next: OMP_WAIT_POLICY, Prev: OMP_SCHEDULE, Up: Environment Variables
1444
1445 3.13 'OMP_THREAD_LIMIT' - Set the maximum number of threads
1446 ===========================================================
1447
1448 _Description_:
1449 Specifies the number of threads to use for the whole program. The
1450 value of this variable shall be a positive integer. If undefined,
1451 the number of threads is not limited.
1452
1453 _See also_:
1454 *note OMP_NUM_THREADS::, *note omp_get_thread_limit::
1455
1456 _Reference_:
1457 OpenMP specification v4.5 (https://www.openmp.org), Section 4.10
1458
1459
1460 File: libgomp.info, Node: OMP_WAIT_POLICY, Next: GOMP_CPU_AFFINITY, Prev: OMP_THREAD_LIMIT, Up: Environment Variables
1461
1462 3.14 'OMP_WAIT_POLICY' - How waiting threads are handled
1463 ========================================================
1464
1465 _Description_:
1466 Specifies whether waiting threads should be active or passive. If
1467 the value is 'PASSIVE', waiting threads should not consume CPU
1468 power while waiting; while the value is 'ACTIVE' specifies that
1469 they should. If undefined, threads wait actively for a short time
1470 before waiting passively.
1471
1472 _See also_:
1473 *note GOMP_SPINCOUNT::
1474
1475 _Reference_:
1476 OpenMP specification v4.5 (https://www.openmp.org), Section 4.8
1477
1478
1479 File: libgomp.info, Node: GOMP_CPU_AFFINITY, Next: GOMP_DEBUG, Prev: OMP_WAIT_POLICY, Up: Environment Variables
1480
1481 3.15 'GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
1482 ========================================================
1483
1484 _Description_:
1485 Binds threads to specific CPUs. The variable should contain a
1486 space-separated or comma-separated list of CPUs. This list may
1487 contain different kinds of entries: either single CPU numbers in
1488 any order, a range of CPUs (M-N) or a range with some stride
1489 (M-N:S). CPU numbers are zero based. For example,
1490 'GOMP_CPU_AFFINITY="0 3 1-2 4-15:2"' will bind the initial thread
1491 to CPU 0, the second to CPU 3, the third to CPU 1, the fourth to
1492 CPU 2, the fifth to CPU 4, the sixth through tenth to CPUs 6, 8,
1493 10, 12, and 14 respectively and then start assigning back from the
1494 beginning of the list. 'GOMP_CPU_AFFINITY=0' binds all threads to
1495 CPU 0.
1496
1497 There is no libgomp library routine to determine whether a CPU
1498 affinity specification is in effect. As a workaround,
1499 language-specific library functions, e.g., 'getenv' in C or
1500 'GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
1501 setting of the 'GOMP_CPU_AFFINITY' environment variable. A defined
1502 CPU affinity on startup cannot be changed or disabled during the
1503 runtime of the application.
1504
1505 If both 'GOMP_CPU_AFFINITY' and 'OMP_PROC_BIND' are set,
1506 'OMP_PROC_BIND' has a higher precedence. If neither has been set
1507 and 'OMP_PROC_BIND' is unset, or when 'OMP_PROC_BIND' is set to
1508 'FALSE', the host system will handle the assignment of threads to
1509 CPUs.
1510
1511 _See also_:
1512 *note OMP_PLACES::, *note OMP_PROC_BIND::
1513
1514
1515 File: libgomp.info, Node: GOMP_DEBUG, Next: GOMP_STACKSIZE, Prev: GOMP_CPU_AFFINITY, Up: Environment Variables
1516
1517 3.16 'GOMP_DEBUG' - Enable debugging output
1518 ===========================================
1519
1520 _Description_:
1521 Enable debugging output. The variable should be set to '0'
1522 (disabled, also the default if not set), or '1' (enabled).
1523
1524 If enabled, some debugging output will be printed during execution.
1525 This is currently not specified in more detail, and subject to
1526 change.
1527
1528
1529 File: libgomp.info, Node: GOMP_STACKSIZE, Next: GOMP_SPINCOUNT, Prev: GOMP_DEBUG, Up: Environment Variables
1530
1531 3.17 'GOMP_STACKSIZE' - Set default thread stack size
1532 =====================================================
1533
1534 _Description_:
1535 Set the default thread stack size in kilobytes. This is different
1536 from 'pthread_attr_setstacksize' which gets the number of bytes as
1537 an argument. If the stack size cannot be set due to system
1538 constraints, an error is reported and the initial stack size is
1539 left unchanged. If undefined, the stack size is system dependent.
1540
1541 _See also_:
1542 *note OMP_STACKSIZE::
1543
1544 _Reference_:
1545 GCC Patches Mailinglist
1546 (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00493.html), GCC
1547 Patches Mailinglist
1548 (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00496.html)
1549
1550
1551 File: libgomp.info, Node: GOMP_SPINCOUNT, Next: GOMP_RTEMS_THREAD_POOLS, Prev: GOMP_STACKSIZE, Up: Environment Variables
1552
1553 3.18 'GOMP_SPINCOUNT' - Set the busy-wait spin count
1554 ====================================================
1555
1556 _Description_:
1557 Determines how long a threads waits actively with consuming CPU
1558 power before waiting passively without consuming CPU power. The
1559 value may be either 'INFINITE', 'INFINITY' to always wait actively
1560 or an integer which gives the number of spins of the busy-wait
1561 loop. The integer may optionally be followed by the following
1562 suffixes acting as multiplication factors: 'k' (kilo, thousand),
1563 'M' (mega, million), 'G' (giga, billion), or 'T' (tera, trillion).
1564 If undefined, 0 is used when 'OMP_WAIT_POLICY' is 'PASSIVE',
1565 300,000 is used when 'OMP_WAIT_POLICY' is undefined and 30 billion
1566 is used when 'OMP_WAIT_POLICY' is 'ACTIVE'. If there are more
1567 OpenMP threads than available CPUs, 1000 and 100 spins are used for
1568 'OMP_WAIT_POLICY' being 'ACTIVE' or undefined, respectively; unless
1569 the 'GOMP_SPINCOUNT' is lower or 'OMP_WAIT_POLICY' is 'PASSIVE'.
1570
1571 _See also_:
1572 *note OMP_WAIT_POLICY::
1573
1574
1575 File: libgomp.info, Node: GOMP_RTEMS_THREAD_POOLS, Prev: GOMP_SPINCOUNT, Up: Environment Variables
1576
1577 3.19 'GOMP_RTEMS_THREAD_POOLS' - Set the RTEMS specific thread pools
1578 ====================================================================
1579
1580 _Description_:
1581 This environment variable is only used on the RTEMS real-time
1582 operating system. It determines the scheduler instance specific
1583 thread pools. The format for 'GOMP_RTEMS_THREAD_POOLS' is a list
1584 of optional '<thread-pool-count>[$<priority>]@<scheduler-name>'
1585 configurations separated by ':' where:
1586 * '<thread-pool-count>' is the thread pool count for this
1587 scheduler instance.
1588 * '$<priority>' is an optional priority for the worker threads
1589 of a thread pool according to 'pthread_setschedparam'. In
1590 case a priority value is omitted, then a worker thread will
1591 inherit the priority of the OpenMP master thread that created
1592 it. The priority of the worker thread is not changed after
1593 creation, even if a new OpenMP master thread using the worker
1594 has a different priority.
1595 * '@<scheduler-name>' is the scheduler instance name according
1596 to the RTEMS application configuration.
1597 In case no thread pool configuration is specified for a scheduler
1598 instance, then each OpenMP master thread of this scheduler instance
1599 will use its own dynamically allocated thread pool. To limit the
1600 worker thread count of the thread pools, each OpenMP master thread
1601 must call 'omp_set_num_threads'.
1602 _Example_:
1603 Lets suppose we have three scheduler instances 'IO', 'WRK0', and
1604 'WRK1' with 'GOMP_RTEMS_THREAD_POOLS' set to '"1@WRK0:3$4@WRK1"'.
1605 Then there are no thread pool restrictions for scheduler instance
1606 'IO'. In the scheduler instance 'WRK0' there is one thread pool
1607 available. Since no priority is specified for this scheduler
1608 instance, the worker thread inherits the priority of the OpenMP
1609 master thread that created it. In the scheduler instance 'WRK1'
1610 there are three thread pools available and their worker threads run
1611 at priority four.
1612
1613
1614 File: libgomp.info, Node: Enabling OpenACC, Next: OpenACC Runtime Library Routines, Prev: Environment Variables, Up: Top
1615
1616 4 Enabling OpenACC
1617 ******************
1618
1619 To activate the OpenACC extensions for C/C++ and Fortran, the
1620 compile-time flag '-fopenacc' must be specified. This enables the
1621 OpenACC directive '#pragma acc' in C/C++ and '!$accp' directives in free
1622 form, 'c$acc', '*$acc' and '!$acc' directives in fixed form, '!$'
1623 conditional compilation sentinels in free form and 'c$', '*$' and '!$'
1624 sentinels in fixed form, for Fortran. The flag also arranges for
1625 automatic linking of the OpenACC runtime library (*note OpenACC Runtime
1626 Library Routines::).
1627
1628 A complete description of all OpenACC directives accepted may be
1629 found in the OpenACC (https://www.openacc.org) Application Programming
1630 Interface manual, version 2.0.
1631
1632 Note that this is an experimental feature and subject to change in
1633 future versions of GCC. See <https://gcc.gnu.org/wiki/OpenACC> for more
1634 information.
1635
1636
1637 File: libgomp.info, Node: OpenACC Runtime Library Routines, Next: OpenACC Environment Variables, Prev: Enabling OpenACC, Up: Top
1638
1639 5 OpenACC Runtime Library Routines
1640 **********************************
1641
1642 The runtime routines described here are defined by section 3 of the
1643 OpenACC specifications in version 2.0. They have C linkage, and do not
1644 throw exceptions. Generally, they are available only for the host, with
1645 the exception of 'acc_on_device', which is available for both the host
1646 and the acceleration device.
1647
1648 * Menu:
1649
1650 * acc_get_num_devices:: Get number of devices for the given device
1651 type.
1652 * acc_set_device_type:: Set type of device accelerator to use.
1653 * acc_get_device_type:: Get type of device accelerator to be used.
1654 * acc_set_device_num:: Set device number to use.
1655 * acc_get_device_num:: Get device number to be used.
1656 * acc_async_test:: Tests for completion of a specific asynchronous
1657 operation.
1658 * acc_async_test_all:: Tests for completion of all asychronous
1659 operations.
1660 * acc_wait:: Wait for completion of a specific asynchronous
1661 operation.
1662 * acc_wait_all:: Waits for completion of all asyncrhonous
1663 operations.
1664 * acc_wait_all_async:: Wait for completion of all asynchronous
1665 operations.
1666 * acc_wait_async:: Wait for completion of asynchronous operations.
1667 * acc_init:: Initialize runtime for a specific device type.
1668 * acc_shutdown:: Shuts down the runtime for a specific device
1669 type.
1670 * acc_on_device:: Whether executing on a particular device
1671 * acc_malloc:: Allocate device memory.
1672 * acc_free:: Free device memory.
1673 * acc_copyin:: Allocate device memory and copy host memory to
1674 it.
1675 * acc_present_or_copyin:: If the data is not present on the device,
1676 allocate device memory and copy from host
1677 memory.
1678 * acc_create:: Allocate device memory and map it to host
1679 memory.
1680 * acc_present_or_create:: If the data is not present on the device,
1681 allocate device memory and map it to host
1682 memory.
1683 * acc_copyout:: Copy device memory to host memory.
1684 * acc_delete:: Free device memory.
1685 * acc_update_device:: Update device memory from mapped host memory.
1686 * acc_update_self:: Update host memory from mapped device memory.
1687 * acc_map_data:: Map previously allocated device memory to host
1688 memory.
1689 * acc_unmap_data:: Unmap device memory from host memory.
1690 * acc_deviceptr:: Get device pointer associated with specific
1691 host address.
1692 * acc_hostptr:: Get host pointer associated with specific
1693 device address.
1694 * acc_is_present:: Indiciate whether host variable / array is
1695 present on device.
1696 * acc_memcpy_to_device:: Copy host memory to device memory.
1697 * acc_memcpy_from_device:: Copy device memory to host memory.
1698
1699 API routines for target platforms.
1700
1701 * acc_get_current_cuda_device:: Get CUDA device handle.
1702 * acc_get_current_cuda_context::Get CUDA context handle.
1703 * acc_get_cuda_stream:: Get CUDA stream handle.
1704 * acc_set_cuda_stream:: Set CUDA stream handle.
1705
1706
1707 File: libgomp.info, Node: acc_get_num_devices, Next: acc_set_device_type, Up: OpenACC Runtime Library Routines
1708
1709 5.1 'acc_get_num_devices' - Get number of devices for given device type
1710 =======================================================================
1711
1712 _Description_
1713 This function returns a value indicating the number of devices
1714 available for the device type specified in DEVICETYPE.
1715
1716 _C/C++_:
1717 _Prototype_: 'int acc_get_num_devices(acc_device_t devicetype);'
1718
1719 _Fortran_:
1720 _Interface_: 'integer function acc_get_num_devices(devicetype)'
1721 'integer(kind=acc_device_kind) devicetype'
1722
1723 _Reference_:
1724 OpenACC specification v2.0 (https://www.openacc.org), section
1725 3.2.1.
1726
1727
1728 File: libgomp.info, Node: acc_set_device_type, Next: acc_get_device_type, Prev: acc_get_num_devices, Up: OpenACC Runtime Library Routines
1729
1730 5.2 'acc_set_device_type' - Set type of device accelerator to use.
1731 ==================================================================
1732
1733 _Description_
1734 This function indicates to the runtime library which device typr,
1735 specified in DEVICETYPE, to use when executing a parallel or
1736 kernels region.
1737
1738 _C/C++_:
1739 _Prototype_: 'acc_set_device_type(acc_device_t devicetype);'
1740
1741 _Fortran_:
1742 _Interface_: 'subroutine acc_set_device_type(devicetype)'
1743 'integer(kind=acc_device_kind) devicetype'
1744
1745 _Reference_:
1746 OpenACC specification v2.0 (https://www.openacc.org), section
1747 3.2.2.
1748
1749
1750 File: libgomp.info, Node: acc_get_device_type, Next: acc_set_device_num, Prev: acc_set_device_type, Up: OpenACC Runtime Library Routines
1751
1752 5.3 'acc_get_device_type' - Get type of device accelerator to be used.
1753 ======================================================================
1754
1755 _Description_
1756 This function returns what device type will be used when executing
1757 a parallel or kernels region.
1758
1759 _C/C++_:
1760 _Prototype_: 'acc_device_t acc_get_device_type(void);'
1761
1762 _Fortran_:
1763 _Interface_: 'function acc_get_device_type(void)'
1764 'integer(kind=acc_device_kind) acc_get_device_type'
1765
1766 _Reference_:
1767 OpenACC specification v2.0 (https://www.openacc.org), section
1768 3.2.3.
1769
1770
1771 File: libgomp.info, Node: acc_set_device_num, Next: acc_get_device_num, Prev: acc_get_device_type, Up: OpenACC Runtime Library Routines
1772
1773 5.4 'acc_set_device_num' - Set device number to use.
1774 ====================================================
1775
1776 _Description_
1777 This function will indicate to the runtime which device number,
1778 specified by NUM, associated with the specifed device type
1779 DEVICETYPE.
1780
1781 _C/C++_:
1782 _Prototype_: 'acc_set_device_num(int num, acc_device_t devicetype);'
1783
1784 _Fortran_:
1785 _Interface_: 'subroutine acc_set_device_num(devicenum, devicetype)'
1786 'integer devicenum'
1787 'integer(kind=acc_device_kind) devicetype'
1788
1789 _Reference_:
1790 OpenACC specification v2.0 (https://www.openacc.org), section
1791 3.2.4.
1792
1793
1794 File: libgomp.info, Node: acc_get_device_num, Next: acc_async_test, Prev: acc_set_device_num, Up: OpenACC Runtime Library Routines
1795
1796 5.5 'acc_get_device_num' - Get device number to be used.
1797 ========================================================
1798
1799 _Description_
1800 This function returns which device number associated with the
1801 specified device type DEVICETYPE, will be used when executing a
1802 parallel or kernels region.
1803
1804 _C/C++_:
1805 _Prototype_: 'int acc_get_device_num(acc_device_t devicetype);'
1806
1807 _Fortran_:
1808 _Interface_: 'function acc_get_device_num(devicetype)'
1809 'integer(kind=acc_device_kind) devicetype'
1810 'integer acc_get_device_num'
1811
1812 _Reference_:
1813 OpenACC specification v2.0 (https://www.openacc.org), section
1814 3.2.5.
1815
1816
1817 File: libgomp.info, Node: acc_async_test, Next: acc_async_test_all, Prev: acc_get_device_num, Up: OpenACC Runtime Library Routines
1818
1819 5.6 'acc_async_test' - Test for completion of a specific asynchronous operation.
1820 ================================================================================
1821
1822 _Description_
1823 This function tests for completion of the asynchrounous operation
1824 specified in ARG. In C/C++, a non-zero value will be returned to
1825 indicate the specified asynchronous operation has completed. While
1826 Fortran will return a 'true'. If the asynchrounous operation has
1827 not completed, C/C++ returns a zero and Fortran returns a 'false'.
1828
1829 _C/C++_:
1830 _Prototype_: 'int acc_async_test(int arg);'
1831
1832 _Fortran_:
1833 _Interface_: 'function acc_async_test(arg)'
1834 'integer(kind=acc_handle_kind) arg'
1835 'logical acc_async_test'
1836
1837 _Reference_:
1838 OpenACC specification v2.0 (https://www.openacc.org), section
1839 3.2.6.
1840
1841
1842 File: libgomp.info, Node: acc_async_test_all, Next: acc_wait, Prev: acc_async_test, Up: OpenACC Runtime Library Routines
1843
1844 5.7 'acc_async_test_all' - Tests for completion of all asynchronous operations.
1845 ===============================================================================
1846
1847 _Description_
1848 This function tests for completion of all asynchrounous operations.
1849 In C/C++, a non-zero value will be returned to indicate all
1850 asynchronous operations have completed. While Fortran will return
1851 a 'true'. If any asynchronous operation has not completed, C/C++
1852 returns a zero and Fortran returns a 'false'.
1853
1854 _C/C++_:
1855 _Prototype_: 'int acc_async_test_all(void);'
1856
1857 _Fortran_:
1858 _Interface_: 'function acc_async_test()'
1859 'logical acc_get_device_num'
1860
1861 _Reference_:
1862 OpenACC specification v2.0 (https://www.openacc.org), section
1863 3.2.7.
1864
1865
1866 File: libgomp.info, Node: acc_wait, Next: acc_wait_all, Prev: acc_async_test_all, Up: OpenACC Runtime Library Routines
1867
1868 5.8 'acc_wait' - Wait for completion of a specific asynchronous operation.
1869 ==========================================================================
1870
1871 _Description_
1872 This function waits for completion of the asynchronous operation
1873 specified in ARG.
1874
1875 _C/C++_:
1876 _Prototype_: 'acc_wait(arg);'
1877 _Prototype 'acc_async_wait(arg);'
1878 (OpenACC 1.0
1879 compatibility)_:
1880
1881 _Fortran_:
1882 _Interface_: 'subroutine acc_wait(arg)'
1883 'integer(acc_handle_kind) arg'
1884 _Interface 'subroutine acc_async_wait(arg)'
1885 (OpenACC 1.0
1886 compatibility)_:
1887 'integer(acc_handle_kind) arg'
1888
1889 _Reference_:
1890 OpenACC specification v2.0 (https://www.openacc.org), section
1891 3.2.8.
1892
1893
1894 File: libgomp.info, Node: acc_wait_all, Next: acc_wait_all_async, Prev: acc_wait, Up: OpenACC Runtime Library Routines
1895
1896 5.9 'acc_wait_all' - Waits for completion of all asynchronous operations.
1897 =========================================================================
1898
1899 _Description_
1900 This function waits for the completion of all asynchronous
1901 operations.
1902
1903 _C/C++_:
1904 _Prototype_: 'acc_wait_all(void);'
1905 _Prototype 'acc_async_wait_all(void);'
1906 (OpenACC 1.0
1907 compatibility)_:
1908
1909 _Fortran_:
1910 _Interface_: 'subroutine acc_wait_all()'
1911 _Interface 'subroutine acc_async_wait_all()'
1912 (OpenACC 1.0
1913 compatibility)_:
1914
1915 _Reference_:
1916 OpenACC specification v2.0 (https://www.openacc.org), section
1917 3.2.10.
1918
1919
1920 File: libgomp.info, Node: acc_wait_all_async, Next: acc_wait_async, Prev: acc_wait_all, Up: OpenACC Runtime Library Routines
1921
1922 5.10 'acc_wait_all_async' - Wait for completion of all asynchronous operations.
1923 ===============================================================================
1924
1925 _Description_
1926 This function enqueues a wait operation on the queue ASYNC for any
1927 and all asynchronous operations that have been previously enqueued
1928 on any queue.
1929
1930 _C/C++_:
1931 _Prototype_: 'acc_wait_all_async(int async);'
1932
1933 _Fortran_:
1934 _Interface_: 'subroutine acc_wait_all_async(async)'
1935 'integer(acc_handle_kind) async'
1936
1937 _Reference_:
1938 OpenACC specification v2.0 (https://www.openacc.org), section
1939 3.2.11.
1940
1941
1942 File: libgomp.info, Node: acc_wait_async, Next: acc_init, Prev: acc_wait_all_async, Up: OpenACC Runtime Library Routines
1943
1944 5.11 'acc_wait_async' - Wait for completion of asynchronous operations.
1945 =======================================================================
1946
1947 _Description_
1948 This function enqueues a wait operation on queue ASYNC for any and
1949 all asynchronous operations enqueued on queue ARG.
1950
1951 _C/C++_:
1952 _Prototype_: 'acc_wait_async(int arg, int async);'
1953
1954 _Fortran_:
1955 _Interface_: 'subroutine acc_wait_async(arg, async)'
1956 'integer(acc_handle_kind) arg, async'
1957
1958 _Reference_:
1959 OpenACC specification v2.0 (https://www.openacc.org), section
1960 3.2.9.
1961
1962
1963 File: libgomp.info, Node: acc_init, Next: acc_shutdown, Prev: acc_wait_async, Up: OpenACC Runtime Library Routines
1964
1965 5.12 'acc_init' - Initialize runtime for a specific device type.
1966 ================================================================
1967
1968 _Description_
1969 This function initializes the runtime for the device type specified
1970 in DEVICETYPE.
1971
1972 _C/C++_:
1973 _Prototype_: 'acc_init(acc_device_t devicetype);'
1974
1975 _Fortran_:
1976 _Interface_: 'subroutine acc_init(devicetype)'
1977 'integer(acc_device_kind) devicetype'
1978
1979 _Reference_:
1980 OpenACC specification v2.0 (https://www.openacc.org), section
1981 3.2.12.
1982
1983
1984 File: libgomp.info, Node: acc_shutdown, Next: acc_on_device, Prev: acc_init, Up: OpenACC Runtime Library Routines
1985
1986 5.13 'acc_shutdown' - Shuts down the runtime for a specific device type.
1987 ========================================================================
1988
1989 _Description_
1990 This function shuts down the runtime for the device type specified
1991 in DEVICETYPE.
1992
1993 _C/C++_:
1994 _Prototype_: 'acc_shutdown(acc_device_t devicetype);'
1995
1996 _Fortran_:
1997 _Interface_: 'subroutine acc_shutdown(devicetype)'
1998 'integer(acc_device_kind) devicetype'
1999
2000 _Reference_:
2001 OpenACC specification v2.0 (https://www.openacc.org), section
2002 3.2.13.
2003
2004
2005 File: libgomp.info, Node: acc_on_device, Next: acc_malloc, Prev: acc_shutdown, Up: OpenACC Runtime Library Routines
2006
2007 5.14 'acc_on_device' - Whether executing on a particular device
2008 ===============================================================
2009
2010 _Description_:
2011 This function returns whether the program is executing on a
2012 particular device specified in DEVICETYPE. In C/C++ a non-zero
2013 value is returned to indicate the device is execiting on the
2014 specified device type. In Fortran, 'true' will be returned. If
2015 the program is not executing on the specified device type C/C++
2016 will return a zero, while Fortran will return 'false'.
2017
2018 _C/C++_:
2019 _Prototype_: 'acc_on_device(acc_device_t devicetype);'
2020
2021 _Fortran_:
2022 _Interface_: 'function acc_on_device(devicetype)'
2023 'integer(acc_device_kind) devicetype'
2024 'logical acc_on_device'
2025
2026 _Reference_:
2027 OpenACC specification v2.0 (https://www.openacc.org), section
2028 3.2.14.
2029
2030
2031 File: libgomp.info, Node: acc_malloc, Next: acc_free, Prev: acc_on_device, Up: OpenACC Runtime Library Routines
2032
2033 5.15 'acc_malloc' - Allocate device memory.
2034 ===========================================
2035
2036 _Description_
2037 This function allocates LEN bytes of device memory. It returns the
2038 device address of the allocated memory.
2039
2040 _C/C++_:
2041 _Prototype_: 'd_void* acc_malloc(size_t len);'
2042
2043 _Reference_:
2044 OpenACC specification v2.0 (https://www.openacc.org), section
2045 3.2.15.
2046
2047
2048 File: libgomp.info, Node: acc_free, Next: acc_copyin, Prev: acc_malloc, Up: OpenACC Runtime Library Routines
2049
2050 5.16 'acc_free' - Free device memory.
2051 =====================================
2052
2053 _Description_
2054 Free previously allocated device memory at the device address 'a'.
2055
2056 _C/C++_:
2057 _Prototype_: 'acc_free(d_void *a);'
2058
2059 _Reference_:
2060 OpenACC specification v2.0 (https://www.openacc.org), section
2061 3.2.16.
2062
2063
2064 File: libgomp.info, Node: acc_copyin, Next: acc_present_or_copyin, Prev: acc_free, Up: OpenACC Runtime Library Routines
2065
2066 5.17 'acc_copyin' - Allocate device memory and copy host memory to it.
2067 ======================================================================
2068
2069 _Description_
2070 In C/C++, this function allocates LEN bytes of device memory and
2071 maps it to the specified host address in A. The device address of
2072 the newly allocated device memory is returned.
2073
2074 In Fortran, two (2) forms are supported. In the first form, A
2075 specifies a contiguous array section. The second form A specifies
2076 a variable or array element and LEN specifies the length in bytes.
2077
2078 _C/C++_:
2079 _Prototype_: 'void *acc_copyin(h_void *a, size_t len);'
2080
2081 _Fortran_:
2082 _Interface_: 'subroutine acc_copyin(a)'
2083 'type, dimension(:[,:]...) :: a'
2084 _Interface_: 'subroutine acc_copyin(a, len)'
2085 'type, dimension(:[,:]...) :: a'
2086 'integer len'
2087
2088 _Reference_:
2089 OpenACC specification v2.0 (https://www.openacc.org), section
2090 3.2.17.
2091
2092
2093 File: libgomp.info, Node: acc_present_or_copyin, Next: acc_create, Prev: acc_copyin, Up: OpenACC Runtime Library Routines
2094
2095 5.18 'acc_present_or_copyin' - If the data is not present on the device, allocate device memory and copy from host memory.
2096 ==========================================================================================================================
2097
2098 _Description_
2099 This function tests if the host data specifed by A and of length
2100 LEN is present or not. If it is not present, then device memory
2101 will be allocated and the host memory copied. The device address
2102 of the newly allocated device memory is returned.
2103
2104 In Fortran, two (2) forms are supported. In the first form, A
2105 specifies a contiguous array section. The second form A specifies
2106 a variable or array element and LEN specifies the length in bytes.
2107
2108 _C/C++_:
2109 _Prototype_: 'void *acc_present_or_copyin(h_void *a, size_t len);'
2110 _Prototype_: 'void *acc_pcopyin(h_void *a, size_t len);'
2111
2112 _Fortran_:
2113 _Interface_: 'subroutine acc_present_or_copyin(a)'
2114 'type, dimension(:[,:]...) :: a'
2115 _Interface_: 'subroutine acc_present_or_copyin(a, len)'
2116 'type, dimension(:[,:]...) :: a'
2117 'integer len'
2118 _Interface_: 'subroutine acc_pcopyin(a)'
2119 'type, dimension(:[,:]...) :: a'
2120 _Interface_: 'subroutine acc_pcopyin(a, len)'
2121 'type, dimension(:[,:]...) :: a'
2122 'integer len'
2123
2124 _Reference_:
2125 OpenACC specification v2.0 (https://www.openacc.org), section
2126 3.2.18.
2127
2128
2129 File: libgomp.info, Node: acc_create, Next: acc_present_or_create, Prev: acc_present_or_copyin, Up: OpenACC Runtime Library Routines
2130
2131 5.19 'acc_create' - Allocate device memory and map it to host memory.
2132 =====================================================================
2133
2134 _Description_
2135 This function allocates device memory and maps it to host memory
2136 specified by the host address A with a length of LEN bytes. In
2137 C/C++, the function returns the device address of the allocated
2138 device memory.
2139
2140 In Fortran, two (2) forms are supported. In the first form, A
2141 specifies a contiguous array section. The second form A specifies
2142 a variable or array element and LEN specifies the length in bytes.
2143
2144 _C/C++_:
2145 _Prototype_: 'void *acc_create(h_void *a, size_t len);'
2146
2147 _Fortran_:
2148 _Interface_: 'subroutine acc_create(a)'
2149 'type, dimension(:[,:]...) :: a'
2150 _Interface_: 'subroutine acc_create(a, len)'
2151 'type, dimension(:[,:]...) :: a'
2152 'integer len'
2153
2154 _Reference_:
2155 OpenACC specification v2.0 (https://www.openacc.org), section
2156 3.2.19.
2157
2158
2159 File: libgomp.info, Node: acc_present_or_create, Next: acc_copyout, Prev: acc_create, Up: OpenACC Runtime Library Routines
2160
2161 5.20 'acc_present_or_create' - If the data is not present on the device, allocate device memory and map it to host memory.
2162 ==========================================================================================================================
2163
2164 _Description_
2165 This function tests if the host data specifed by A and of length
2166 LEN is present or not. If it is not present, then device memory
2167 will be allocated and mapped to host memory. In C/C++, the device
2168 address of the newly allocated device memory is returned.
2169
2170 In Fortran, two (2) forms are supported. In the first form, A
2171 specifies a contiguous array section. The second form A specifies
2172 a variable or array element and LEN specifies the length in bytes.
2173
2174 _C/C++_:
2175 _Prototype_: 'void *acc_present_or_create(h_void *a, size_t len)'
2176 _Prototype_: 'void *acc_pcreate(h_void *a, size_t len)'
2177
2178 _Fortran_:
2179 _Interface_: 'subroutine acc_present_or_create(a)'
2180 'type, dimension(:[,:]...) :: a'
2181 _Interface_: 'subroutine acc_present_or_create(a, len)'
2182 'type, dimension(:[,:]...) :: a'
2183 'integer len'
2184 _Interface_: 'subroutine acc_pcreate(a)'
2185 'type, dimension(:[,:]...) :: a'
2186 _Interface_: 'subroutine acc_pcreate(a, len)'
2187 'type, dimension(:[,:]...) :: a'
2188 'integer len'
2189
2190 _Reference_:
2191 OpenACC specification v2.0 (https://www.openacc.org), section
2192 3.2.20.
2193
2194
2195 File: libgomp.info, Node: acc_copyout, Next: acc_delete, Prev: acc_present_or_create, Up: OpenACC Runtime Library Routines
2196
2197 5.21 'acc_copyout' - Copy device memory to host memory.
2198 =======================================================
2199
2200 _Description_
2201 This function copies mapped device memory to host memory which is
2202 specified by host address A for a length LEN bytes in C/C++.
2203
2204 In Fortran, two (2) forms are supported. In the first form, A
2205 specifies a contiguous array section. The second form A specifies
2206 a variable or array element and LEN specifies the length in bytes.
2207
2208 _C/C++_:
2209 _Prototype_: 'acc_copyout(h_void *a, size_t len);'
2210
2211 _Fortran_:
2212 _Interface_: 'subroutine acc_copyout(a)'
2213 'type, dimension(:[,:]...) :: a'
2214 _Interface_: 'subroutine acc_copyout(a, len)'
2215 'type, dimension(:[,:]...) :: a'
2216 'integer len'
2217
2218 _Reference_:
2219 OpenACC specification v2.0 (https://www.openacc.org), section
2220 3.2.21.
2221
2222
2223 File: libgomp.info, Node: acc_delete, Next: acc_update_device, Prev: acc_copyout, Up: OpenACC Runtime Library Routines
2224
2225 5.22 'acc_delete' - Free device memory.
2226 =======================================
2227
2228 _Description_
2229 This function frees previously allocated device memory specified by
2230 the device address A and the length of LEN bytes.
2231
2232 In Fortran, two (2) forms are supported. In the first form, A
2233 specifies a contiguous array section. The second form A specifies
2234 a variable or array element and LEN specifies the length in bytes.
2235
2236 _C/C++_:
2237 _Prototype_: 'acc_delete(h_void *a, size_t len);'
2238
2239 _Fortran_:
2240 _Interface_: 'subroutine acc_delete(a)'
2241 'type, dimension(:[,:]...) :: a'
2242 _Interface_: 'subroutine acc_delete(a, len)'
2243 'type, dimension(:[,:]...) :: a'
2244 'integer len'
2245
2246 _Reference_:
2247 OpenACC specification v2.0 (https://www.openacc.org), section
2248 3.2.22.
2249
2250
2251 File: libgomp.info, Node: acc_update_device, Next: acc_update_self, Prev: acc_delete, Up: OpenACC Runtime Library Routines
2252
2253 5.23 'acc_update_device' - Update device memory from mapped host memory.
2254 ========================================================================
2255
2256 _Description_
2257 This function updates the device copy from the previously mapped
2258 host memory. The host memory is specified with the host address A
2259 and a length of LEN bytes.
2260
2261 In Fortran, two (2) forms are supported. In the first form, A
2262 specifies a contiguous array section. The second form A specifies
2263 a variable or array element and LEN specifies the length in bytes.
2264
2265 _C/C++_:
2266 _Prototype_: 'acc_update_device(h_void *a, size_t len);'
2267
2268 _Fortran_:
2269 _Interface_: 'subroutine acc_update_device(a)'
2270 'type, dimension(:[,:]...) :: a'
2271 _Interface_: 'subroutine acc_update_device(a, len)'
2272 'type, dimension(:[,:]...) :: a'
2273 'integer len'
2274
2275 _Reference_:
2276 OpenACC specification v2.0 (https://www.openacc.org), section
2277 3.2.23.
2278
2279
2280 File: libgomp.info, Node: acc_update_self, Next: acc_map_data, Prev: acc_update_device, Up: OpenACC Runtime Library Routines
2281
2282 5.24 'acc_update_self' - Update host memory from mapped device memory.
2283 ======================================================================
2284
2285 _Description_
2286 This function updates the host copy from the previously mapped
2287 device memory. The host memory is specified with the host address
2288 A and a length of LEN bytes.
2289
2290 In Fortran, two (2) forms are supported. In the first form, A
2291 specifies a contiguous array section. The second form A specifies
2292 a variable or array element and LEN specifies the length in bytes.
2293
2294 _C/C++_:
2295 _Prototype_: 'acc_update_self(h_void *a, size_t len);'
2296
2297 _Fortran_:
2298 _Interface_: 'subroutine acc_update_self(a)'
2299 'type, dimension(:[,:]...) :: a'
2300 _Interface_: 'subroutine acc_update_self(a, len)'
2301 'type, dimension(:[,:]...) :: a'
2302 'integer len'
2303
2304 _Reference_:
2305 OpenACC specification v2.0 (https://www.openacc.org), section
2306 3.2.24.
2307
2308
2309 File: libgomp.info, Node: acc_map_data, Next: acc_unmap_data, Prev: acc_update_self, Up: OpenACC Runtime Library Routines
2310
2311 5.25 'acc_map_data' - Map previously allocated device memory to host memory.
2312 ============================================================================
2313
2314 _Description_
2315 This function maps previously allocated device and host memory.
2316 The device memory is specified with the device address D. The host
2317 memory is specified with the host address H and a length of LEN.
2318
2319 _C/C++_:
2320 _Prototype_: 'acc_map_data(h_void *h, d_void *d, size_t len);'
2321
2322 _Reference_:
2323 OpenACC specification v2.0 (https://www.openacc.org), section
2324 3.2.25.
2325
2326
2327 File: libgomp.info, Node: acc_unmap_data, Next: acc_deviceptr, Prev: acc_map_data, Up: OpenACC Runtime Library Routines
2328
2329 5.26 'acc_unmap_data' - Unmap device memory from host memory.
2330 =============================================================
2331
2332 _Description_
2333 This function unmaps previously mapped device and host memory. The
2334 latter specified by H.
2335
2336 _C/C++_:
2337 _Prototype_: 'acc_unmap_data(h_void *h);'
2338
2339 _Reference_:
2340 OpenACC specification v2.0 (https://www.openacc.org), section
2341 3.2.26.
2342
2343
2344 File: libgomp.info, Node: acc_deviceptr, Next: acc_hostptr, Prev: acc_unmap_data, Up: OpenACC Runtime Library Routines
2345
2346 5.27 'acc_deviceptr' - Get device pointer associated with specific host address.
2347 ================================================================================
2348
2349 _Description_
2350 This function returns the device address that has been mapped to
2351 the host address specified by H.
2352
2353 _C/C++_:
2354 _Prototype_: 'void *acc_deviceptr(h_void *h);'
2355
2356 _Reference_:
2357 OpenACC specification v2.0 (https://www.openacc.org), section
2358 3.2.27.
2359
2360
2361 File: libgomp.info, Node: acc_hostptr, Next: acc_is_present, Prev: acc_deviceptr, Up: OpenACC Runtime Library Routines
2362
2363 5.28 'acc_hostptr' - Get host pointer associated with specific device address.
2364 ==============================================================================
2365
2366 _Description_
2367 This function returns the host address that has been mapped to the
2368 device address specified by D.
2369
2370 _C/C++_:
2371 _Prototype_: 'void *acc_hostptr(d_void *d);'
2372
2373 _Reference_:
2374 OpenACC specification v2.0 (https://www.openacc.org), section
2375 3.2.28.
2376
2377
2378 File: libgomp.info, Node: acc_is_present, Next: acc_memcpy_to_device, Prev: acc_hostptr, Up: OpenACC Runtime Library Routines
2379
2380 5.29 'acc_is_present' - Indicate whether host variable / array is present on device.
2381 ====================================================================================
2382
2383 _Description_
2384 This function indicates whether the specified host address in A and
2385 a length of LEN bytes is present on the device. In C/C++, a
2386 non-zero value is returned to indicate the presence of the mapped
2387 memory on the device. A zero is returned to indicate the memory is
2388 not mapped on the device.
2389
2390 In Fortran, two (2) forms are supported. In the first form, A
2391 specifies a contiguous array section. The second form A specifies
2392 a variable or array element and LEN specifies the length in bytes.
2393 If the host memory is mapped to device memory, then a 'true' is
2394 returned. Otherwise, a 'false' is return to indicate the mapped
2395 memory is not present.
2396
2397 _C/C++_:
2398 _Prototype_: 'int acc_is_present(h_void *a, size_t len);'
2399
2400 _Fortran_:
2401 _Interface_: 'function acc_is_present(a)'
2402 'type, dimension(:[,:]...) :: a'
2403 'logical acc_is_present'
2404 _Interface_: 'function acc_is_present(a, len)'
2405 'type, dimension(:[,:]...) :: a'
2406 'integer len'
2407 'logical acc_is_present'
2408
2409 _Reference_:
2410 OpenACC specification v2.0 (https://www.openacc.org), section
2411 3.2.29.
2412
2413
2414 File: libgomp.info, Node: acc_memcpy_to_device, Next: acc_memcpy_from_device, Prev: acc_is_present, Up: OpenACC Runtime Library Routines
2415
2416 5.30 'acc_memcpy_to_device' - Copy host memory to device memory.
2417 ================================================================
2418
2419 _Description_
2420 This function copies host memory specified by host address of SRC
2421 to device memory specified by the device address DEST for a length
2422 of BYTES bytes.
2423
2424 _C/C++_:
2425 _Prototype_: 'acc_memcpy_to_device(d_void *dest, h_void *src, size_t
2426 bytes);'
2427
2428 _Reference_:
2429 OpenACC specification v2.0 (https://www.openacc.org), section
2430 3.2.30.
2431
2432
2433 File: libgomp.info, Node: acc_memcpy_from_device, Next: acc_get_current_cuda_device, Prev: acc_memcpy_to_device, Up: OpenACC Runtime Library Routines
2434
2435 5.31 'acc_memcpy_from_device' - Copy device memory to host memory.
2436 ==================================================================
2437
2438 _Description_
2439 This function copies host memory specified by host address of SRC
2440 from device memory specified by the device address DEST for a
2441 length of BYTES bytes.
2442
2443 _C/C++_:
2444 _Prototype_: 'acc_memcpy_from_device(d_void *dest, h_void *src,
2445 size_t bytes);'
2446
2447 _Reference_:
2448 OpenACC specification v2.0 (https://www.openacc.org), section
2449 3.2.31.
2450
2451
2452 File: libgomp.info, Node: acc_get_current_cuda_device, Next: acc_get_current_cuda_context, Prev: acc_memcpy_from_device, Up: OpenACC Runtime Library Routines
2453
2454 5.32 'acc_get_current_cuda_device' - Get CUDA device handle.
2455 ============================================================
2456
2457 _Description_
2458 This function returns the CUDA device handle. This handle is the
2459 same as used by the CUDA Runtime or Driver API's.
2460
2461 _C/C++_:
2462 _Prototype_: 'void *acc_get_current_cuda_device(void);'
2463
2464 _Reference_:
2465 OpenACC specification v2.0 (https://www.openacc.org), section
2466 A.2.1.1.
2467
2468
2469 File: libgomp.info, Node: acc_get_current_cuda_context, Next: acc_get_cuda_stream, Prev: acc_get_current_cuda_device, Up: OpenACC Runtime Library Routines
2470
2471 5.33 'acc_get_current_cuda_context' - Get CUDA context handle.
2472 ==============================================================
2473
2474 _Description_
2475 This function returns the CUDA context handle. This handle is the
2476 same as used by the CUDA Runtime or Driver API's.
2477
2478 _C/C++_:
2479 _Prototype_: 'void *acc_get_current_cuda_context(void);'
2480
2481 _Reference_:
2482 OpenACC specification v2.0 (https://www.openacc.org), section
2483 A.2.1.2.
2484
2485
2486 File: libgomp.info, Node: acc_get_cuda_stream, Next: acc_set_cuda_stream, Prev: acc_get_current_cuda_context, Up: OpenACC Runtime Library Routines
2487
2488 5.34 'acc_get_cuda_stream' - Get CUDA stream handle.
2489 ====================================================
2490
2491 _Description_
2492 This function returns the CUDA stream handle for the queue ASYNC.
2493 This handle is the same as used by the CUDA Runtime or Driver
2494 API's.
2495
2496 _C/C++_:
2497 _Prototype_: 'void *acc_get_cuda_stream(int async);'
2498
2499 _Reference_:
2500 OpenACC specification v2.0 (https://www.openacc.org), section
2501 A.2.1.3.
2502
2503
2504 File: libgomp.info, Node: acc_set_cuda_stream, Prev: acc_get_cuda_stream, Up: OpenACC Runtime Library Routines
2505
2506 5.35 'acc_set_cuda_stream' - Set CUDA stream handle.
2507 ====================================================
2508
2509 _Description_
2510 This function associates the stream handle specified by STREAM with
2511 the queue ASYNC.
2512
2513 This cannot be used to change the stream handle associated with
2514 'acc_async_sync'.
2515
2516 The return value is not specified.
2517
2518 _C/C++_:
2519 _Prototype_: 'int acc_set_cuda_stream(int async, void *stream);'
2520
2521 _Reference_:
2522 OpenACC specification v2.0 (https://www.openacc.org), section
2523 A.2.1.4.
2524
2525
2526 File: libgomp.info, Node: OpenACC Environment Variables, Next: CUDA Streams Usage, Prev: OpenACC Runtime Library Routines, Up: Top
2527
2528 6 OpenACC Environment Variables
2529 *******************************
2530
2531 The variables 'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM' are defined by
2532 section 4 of the OpenACC specification in version 2.0. The variable
2533 'GCC_ACC_NOTIFY' is used for diagnostic purposes.
2534
2535 * Menu:
2536
2537 * ACC_DEVICE_TYPE::
2538 * ACC_DEVICE_NUM::
2539 * GCC_ACC_NOTIFY::
2540
2541
2542 File: libgomp.info, Node: ACC_DEVICE_TYPE, Next: ACC_DEVICE_NUM, Up: OpenACC Environment Variables
2543
2544 6.1 'ACC_DEVICE_TYPE'
2545 =====================
2546
2547 _Reference_:
2548 OpenACC specification v2.0 (https://www.openacc.org), section 4.1.
2549
2550
2551 File: libgomp.info, Node: ACC_DEVICE_NUM, Next: GCC_ACC_NOTIFY, Prev: ACC_DEVICE_TYPE, Up: OpenACC Environment Variables
2552
2553 6.2 'ACC_DEVICE_NUM'
2554 ====================
2555
2556 _Reference_:
2557 OpenACC specification v2.0 (https://www.openacc.org), section 4.2.
2558
2559
2560 File: libgomp.info, Node: GCC_ACC_NOTIFY, Prev: ACC_DEVICE_NUM, Up: OpenACC Environment Variables
2561
2562 6.3 'GCC_ACC_NOTIFY'
2563 ====================
2564
2565 _Description_:
2566 Print debug information pertaining to the accelerator.
2567
2568
2569 File: libgomp.info, Node: CUDA Streams Usage, Next: OpenACC Library Interoperability, Prev: OpenACC Environment Variables, Up: Top
2570
2571 7 CUDA Streams Usage
2572 ********************
2573
2574 This applies to the 'nvptx' plugin only.
2575
2576 The library provides elements that perform asynchronous movement of
2577 data and asynchronous operation of computing constructs. This
2578 asynchronous functionality is implemented by making use of CUDA
2579 streams(1).
2580
2581 The primary means by that the asychronous functionality is accessed
2582 is through the use of those OpenACC directives which make use of the
2583 'async' and 'wait' clauses. When the 'async' clause is first used with
2584 a directive, it creates a CUDA stream. If an 'async-argument' is used
2585 with the 'async' clause, then the stream is associated with the
2586 specified 'async-argument'.
2587
2588 Following the creation of an association between a CUDA stream and
2589 the 'async-argument' of an 'async' clause, both the 'wait' clause and
2590 the 'wait' directive can be used. When either the clause or directive
2591 is used after stream creation, it creates a rendezvous point whereby
2592 execution waits until all operations associated with the
2593 'async-argument', that is, stream, have completed.
2594
2595 Normally, the management of the streams that are created as a result
2596 of using the 'async' clause, is done without any intervention by the
2597 caller. This implies the association between the 'async-argument' and
2598 the CUDA stream will be maintained for the lifetime of the program.
2599 However, this association can be changed through the use of the library
2600 function 'acc_set_cuda_stream'. When the function 'acc_set_cuda_stream'
2601 is called, the CUDA stream that was originally associated with the
2602 'async' clause will be destroyed. Caution should be taken when changing
2603 the association as subsequent references to the 'async-argument' refer
2604 to a different CUDA stream.
2605
2606 ---------- Footnotes ----------
2607
2608 (1) See "Stream Management" in "CUDA Driver API", TRM-06703-001,
2609 Version 5.5, for additional information
2610
2611
2612 File: libgomp.info, Node: OpenACC Library Interoperability, Next: The libgomp ABI, Prev: CUDA Streams Usage, Up: Top
2613
2614 8 OpenACC Library Interoperability
2615 **********************************
2616
2617 8.1 Introduction
2618 ================
2619
2620 The OpenACC library uses the CUDA Driver API, and may interact with
2621 programs that use the Runtime library directly, or another library based
2622 on the Runtime library, e.g., CUBLAS(1). This chapter describes the use
2623 cases and what changes are required in order to use both the OpenACC
2624 library and the CUBLAS and Runtime libraries within a program.
2625
2626 8.2 First invocation: NVIDIA CUBLAS library API
2627 ===============================================
2628
2629 In this first use case (see below), a function in the CUBLAS library is
2630 called prior to any of the functions in the OpenACC library. More
2631 specifically, the function 'cublasCreate()'.
2632
2633 When invoked, the function initializes the library and allocates the
2634 hardware resources on the host and the device on behalf of the caller.
2635 Once the initialization and allocation has completed, a handle is
2636 returned to the caller. The OpenACC library also requires
2637 initialization and allocation of hardware resources. Since the CUBLAS
2638 library has already allocated the hardware resources for the device, all
2639 that is left to do is to initialize the OpenACC library and acquire the
2640 hardware resources on the host.
2641
2642 Prior to calling the OpenACC function that initializes the library
2643 and allocate the host hardware resources, you need to acquire the device
2644 number that was allocated during the call to 'cublasCreate()'. The
2645 invoking of the runtime library function 'cudaGetDevice()' accomplishes
2646 this. Once acquired, the device number is passed along with the device
2647 type as parameters to the OpenACC library function
2648 'acc_set_device_num()'.
2649
2650 Once the call to 'acc_set_device_num()' has completed, the OpenACC
2651 library uses the context that was created during the call to
2652 'cublasCreate()'. In other words, both libraries will be sharing the
2653 same context.
2654
2655 /* Create the handle */
2656 s = cublasCreate(&h);
2657 if (s != CUBLAS_STATUS_SUCCESS)
2658 {
2659 fprintf(stderr, "cublasCreate failed %d\n", s);
2660 exit(EXIT_FAILURE);
2661 }
2662
2663 /* Get the device number */
2664 e = cudaGetDevice(&dev);
2665 if (e != cudaSuccess)
2666 {
2667 fprintf(stderr, "cudaGetDevice failed %d\n", e);
2668 exit(EXIT_FAILURE);
2669 }
2670
2671 /* Initialize OpenACC library and use device 'dev' */
2672 acc_set_device_num(dev, acc_device_nvidia);
2673
2674 Use Case 1
2675
2676 8.3 First invocation: OpenACC library API
2677 =========================================
2678
2679 In this second use case (see below), a function in the OpenACC library
2680 is called prior to any of the functions in the CUBLAS library. More
2681 specificially, the function 'acc_set_device_num()'.
2682
2683 In the use case presented here, the function 'acc_set_device_num()'
2684 is used to both initialize the OpenACC library and allocate the hardware
2685 resources on the host and the device. In the call to the function, the
2686 call parameters specify which device to use and what device type to use,
2687 i.e., 'acc_device_nvidia'. It should be noted that this is but one
2688 method to initialize the OpenACC library and allocate the appropriate
2689 hardware resources. Other methods are available through the use of
2690 environment variables and these will be discussed in the next section.
2691
2692 Once the call to 'acc_set_device_num()' has completed, other OpenACC
2693 functions can be called as seen with multiple calls being made to
2694 'acc_copyin()'. In addition, calls can be made to functions in the
2695 CUBLAS library. In the use case a call to 'cublasCreate()' is made
2696 subsequent to the calls to 'acc_copyin()'. As seen in the previous use
2697 case, a call to 'cublasCreate()' initializes the CUBLAS library and
2698 allocates the hardware resources on the host and the device. However,
2699 since the device has already been allocated, 'cublasCreate()' will only
2700 initialize the CUBLAS library and allocate the appropriate hardware
2701 resources on the host. The context that was created as part of the
2702 OpenACC initialization is shared with the CUBLAS library, similarly to
2703 the first use case.
2704
2705 dev = 0;
2706
2707 acc_set_device_num(dev, acc_device_nvidia);
2708
2709 /* Copy the first set to the device */
2710 d_X = acc_copyin(&h_X[0], N * sizeof (float));
2711 if (d_X == NULL)
2712 {
2713 fprintf(stderr, "copyin error h_X\n");
2714 exit(EXIT_FAILURE);
2715 }
2716
2717 /* Copy the second set to the device */
2718 d_Y = acc_copyin(&h_Y1[0], N * sizeof (float));
2719 if (d_Y == NULL)
2720 {
2721 fprintf(stderr, "copyin error h_Y1\n");
2722 exit(EXIT_FAILURE);
2723 }
2724
2725 /* Create the handle */
2726 s = cublasCreate(&h);
2727 if (s != CUBLAS_STATUS_SUCCESS)
2728 {
2729 fprintf(stderr, "cublasCreate failed %d\n", s);
2730 exit(EXIT_FAILURE);
2731 }
2732
2733 /* Perform saxpy using CUBLAS library function */
2734 s = cublasSaxpy(h, N, &alpha, d_X, 1, d_Y, 1);
2735 if (s != CUBLAS_STATUS_SUCCESS)
2736 {
2737 fprintf(stderr, "cublasSaxpy failed %d\n", s);
2738 exit(EXIT_FAILURE);
2739 }
2740
2741 /* Copy the results from the device */
2742 acc_memcpy_from_device(&h_Y1[0], d_Y, N * sizeof (float));
2743
2744 Use Case 2
2745
2746 8.4 OpenACC library and environment variables
2747 =============================================
2748
2749 There are two environment variables associated with the OpenACC library
2750 that may be used to control the device type and device number:
2751 'ACC_DEVICE_TYPE' and 'ACC_DEVICE_NUM', respecively. These two
2752 environement variables can be used as an alternative to calling
2753 'acc_set_device_num()'. As seen in the second use case, the device type
2754 and device number were specified using 'acc_set_device_num()'. If
2755 however, the aforementioned environment variables were set, then the
2756 call to 'acc_set_device_num()' would not be required.
2757
2758 The use of the environment variables is only relevant when an OpenACC
2759 function is called prior to a call to 'cudaCreate()'. If 'cudaCreate()'
2760 is called prior to a call to an OpenACC function, then you must call
2761 'acc_set_device_num()'(2)
2762
2763 ---------- Footnotes ----------
2764
2765 (1) See section 2.26, "Interactions with the CUDA Driver API" in
2766 "CUDA Runtime API", Version 5.5, and section 2.27, "VDPAU
2767 Interoperability", in "CUDA Driver API", TRM-06703-001, Version 5.5, for
2768 additional information on library interoperability.
2769
2770 (2) More complete information about 'ACC_DEVICE_TYPE' and
2771 'ACC_DEVICE_NUM' can be found in sections 4.1 and 4.2 of the OpenACC
2772 (https://www.openacc.org) Application Programming Interface, Version
2773 2.0.
2774
2775
2776 File: libgomp.info, Node: The libgomp ABI, Next: Reporting Bugs, Prev: OpenACC Library Interoperability, Up: Top
2777
2778 9 The libgomp ABI
2779 *****************
2780
2781 The following sections present notes on the external ABI as presented by
2782 libgomp. Only maintainers should need them.
2783
2784 * Menu:
2785
2786 * Implementing MASTER construct::
2787 * Implementing CRITICAL construct::
2788 * Implementing ATOMIC construct::
2789 * Implementing FLUSH construct::
2790 * Implementing BARRIER construct::
2791 * Implementing THREADPRIVATE construct::
2792 * Implementing PRIVATE clause::
2793 * Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses::
2794 * Implementing REDUCTION clause::
2795 * Implementing PARALLEL construct::
2796 * Implementing FOR construct::
2797 * Implementing ORDERED construct::
2798 * Implementing SECTIONS construct::
2799 * Implementing SINGLE construct::
2800 * Implementing OpenACC's PARALLEL construct::
2801
2802
2803 File: libgomp.info, Node: Implementing MASTER construct, Next: Implementing CRITICAL construct, Up: The libgomp ABI
2804
2805 9.1 Implementing MASTER construct
2806 =================================
2807
2808 if (omp_get_thread_num () == 0)
2809 block
2810
2811 Alternately, we generate two copies of the parallel subfunction and
2812 only include this in the version run by the master thread. Surely this
2813 is not worthwhile though...
2814
2815
2816 File: libgomp.info, Node: Implementing CRITICAL construct, Next: Implementing ATOMIC construct, Prev: Implementing MASTER construct, Up: The libgomp ABI
2817
2818 9.2 Implementing CRITICAL construct
2819 ===================================
2820
2821 Without a specified name,
2822
2823 void GOMP_critical_start (void);
2824 void GOMP_critical_end (void);
2825
2826 so that we don't get COPY relocations from libgomp to the main
2827 application.
2828
2829 With a specified name, use omp_set_lock and omp_unset_lock with name
2830 being transformed into a variable declared like
2831
2832 omp_lock_t gomp_critical_user_<name> __attribute__((common))
2833
2834 Ideally the ABI would specify that all zero is a valid unlocked
2835 state, and so we wouldn't need to initialize this at startup.
2836
2837
2838 File: libgomp.info, Node: Implementing ATOMIC construct, Next: Implementing FLUSH construct, Prev: Implementing CRITICAL construct, Up: The libgomp ABI
2839
2840 9.3 Implementing ATOMIC construct
2841 =================================
2842
2843 The target should implement the '__sync' builtins.
2844
2845 Failing that we could add
2846
2847 void GOMP_atomic_enter (void)
2848 void GOMP_atomic_exit (void)
2849
2850 which reuses the regular lock code, but with yet another lock object
2851 private to the library.
2852
2853
2854 File: libgomp.info, Node: Implementing FLUSH construct, Next: Implementing BARRIER construct, Prev: Implementing ATOMIC construct, Up: The libgomp ABI
2855
2856 9.4 Implementing FLUSH construct
2857 ================================
2858
2859 Expands to the '__sync_synchronize' builtin.
2860
2861
2862 File: libgomp.info, Node: Implementing BARRIER construct, Next: Implementing THREADPRIVATE construct, Prev: Implementing FLUSH construct, Up: The libgomp ABI
2863
2864 9.5 Implementing BARRIER construct
2865 ==================================
2866
2867 void GOMP_barrier (void)
2868
2869
2870 File: libgomp.info, Node: Implementing THREADPRIVATE construct, Next: Implementing PRIVATE clause, Prev: Implementing BARRIER construct, Up: The libgomp ABI
2871
2872 9.6 Implementing THREADPRIVATE construct
2873 ========================================
2874
2875 In _most_ cases we can map this directly to '__thread'. Except that OMP
2876 allows constructors for C++ objects. We can either refuse to support
2877 this (how often is it used?) or we can implement something akin to
2878 .ctors.
2879
2880 Even more ideally, this ctor feature is handled by extensions to the
2881 main pthreads library. Failing that, we can have a set of entry points
2882 to register ctor functions to be called.
2883
2884
2885 File: libgomp.info, Node: Implementing PRIVATE clause, Next: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Prev: Implementing THREADPRIVATE construct, Up: The libgomp ABI
2886
2887 9.7 Implementing PRIVATE clause
2888 ===============================
2889
2890 In association with a PARALLEL, or within the lexical extent of a
2891 PARALLEL block, the variable becomes a local variable in the parallel
2892 subfunction.
2893
2894 In association with FOR or SECTIONS blocks, create a new automatic
2895 variable within the current function. This preserves the semantic of
2896 new variable creation.
2897
2898
2899 File: libgomp.info, Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Next: Implementing REDUCTION clause, Prev: Implementing PRIVATE clause, Up: The libgomp ABI
2900
2901 9.8 Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses
2902 ========================================================================
2903
2904 This seems simple enough for PARALLEL blocks. Create a private struct
2905 for communicating between the parent and subfunction. In the parent,
2906 copy in values for scalar and "small" structs; copy in addresses for
2907 others TREE_ADDRESSABLE types. In the subfunction, copy the value into
2908 the local variable.
2909
2910 It is not clear what to do with bare FOR or SECTION blocks. The only
2911 thing I can figure is that we do something like:
2912
2913 #pragma omp for firstprivate(x) lastprivate(y)
2914 for (int i = 0; i < n; ++i)
2915 body;
2916
2917 which becomes
2918
2919 {
2920 int x = x, y;
2921
2922 // for stuff
2923
2924 if (i == n)
2925 y = y;
2926 }
2927
2928 where the "x=x" and "y=y" assignments actually have different uids
2929 for the two variables, i.e. not something you could write directly in
2930 C. Presumably this only makes sense if the "outer" x and y are global
2931 variables.
2932
2933 COPYPRIVATE would work the same way, except the structure broadcast
2934 would have to happen via SINGLE machinery instead.
2935
2936
2937 File: libgomp.info, Node: Implementing REDUCTION clause, Next: Implementing PARALLEL construct, Prev: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses, Up: The libgomp ABI
2938
2939 9.9 Implementing REDUCTION clause
2940 =================================
2941
2942 The private struct mentioned in the previous section should have a
2943 pointer to an array of the type of the variable, indexed by the thread's
2944 TEAM_ID. The thread stores its final value into the array, and after
2945 the barrier, the master thread iterates over the array to collect the
2946 values.
2947
2948
2949 File: libgomp.info, Node: Implementing PARALLEL construct, Next: Implementing FOR construct, Prev: Implementing REDUCTION clause, Up: The libgomp ABI
2950
2951 9.10 Implementing PARALLEL construct
2952 ====================================
2953
2954 #pragma omp parallel
2955 {
2956 body;
2957 }
2958
2959 becomes
2960
2961 void subfunction (void *data)
2962 {
2963 use data;
2964 body;
2965 }
2966
2967 setup data;
2968 GOMP_parallel_start (subfunction, &data, num_threads);
2969 subfunction (&data);
2970 GOMP_parallel_end ();
2971
2972 void GOMP_parallel_start (void (*fn)(void *), void *data, unsigned num_threads)
2973
2974 The FN argument is the subfunction to be run in parallel.
2975
2976 The DATA argument is a pointer to a structure used to communicate
2977 data in and out of the subfunction, as discussed above with respect to
2978 FIRSTPRIVATE et al.
2979
2980 The NUM_THREADS argument is 1 if an IF clause is present and false,
2981 or the value of the NUM_THREADS clause, if present, or 0.
2982
2983 The function needs to create the appropriate number of threads and/or
2984 launch them from the dock. It needs to create the team structure and
2985 assign team ids.
2986
2987 void GOMP_parallel_end (void)
2988
2989 Tears down the team and returns us to the previous
2990 'omp_in_parallel()' state.
2991
2992
2993 File: libgomp.info, Node: Implementing FOR construct, Next: Implementing ORDERED construct, Prev: Implementing PARALLEL construct, Up: The libgomp ABI
2994
2995 9.11 Implementing FOR construct
2996 ===============================
2997
2998 #pragma omp parallel for
2999 for (i = lb; i <= ub; i++)
3000 body;
3001
3002 becomes
3003
3004 void subfunction (void *data)
3005 {
3006 long _s0, _e0;
3007 while (GOMP_loop_static_next (&_s0, &_e0))
3008 {
3009 long _e1 = _e0, i;
3010 for (i = _s0; i < _e1; i++)
3011 body;
3012 }
3013 GOMP_loop_end_nowait ();
3014 }
3015
3016 GOMP_parallel_loop_static (subfunction, NULL, 0, lb, ub+1, 1, 0);
3017 subfunction (NULL);
3018 GOMP_parallel_end ();
3019
3020 #pragma omp for schedule(runtime)
3021 for (i = 0; i < n; i++)
3022 body;
3023
3024 becomes
3025
3026 {
3027 long i, _s0, _e0;
3028 if (GOMP_loop_runtime_start (0, n, 1, &_s0, &_e0))
3029 do {
3030 long _e1 = _e0;
3031 for (i = _s0, i < _e0; i++)
3032 body;
3033 } while (GOMP_loop_runtime_next (&_s0, _&e0));
3034 GOMP_loop_end ();
3035 }
3036
3037 Note that while it looks like there is trickiness to propagating a
3038 non-constant STEP, there isn't really. We're explicitly allowed to
3039 evaluate it as many times as we want, and any variables involved should
3040 automatically be handled as PRIVATE or SHARED like any other variables.
3041 So the expression should remain evaluable in the subfunction. We can
3042 also pull it into a local variable if we like, but since its supposed to
3043 remain unchanged, we can also not if we like.
3044
3045 If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be able
3046 to get away with no work-sharing context at all, since we can simply
3047 perform the arithmetic directly in each thread to divide up the
3048 iterations. Which would mean that we wouldn't need to call any of these
3049 routines.
3050
3051 There are separate routines for handling loops with an ORDERED
3052 clause. Bookkeeping for that is non-trivial...
3053
3054
3055 File: libgomp.info, Node: Implementing ORDERED construct, Next: Implementing SECTIONS construct, Prev: Implementing FOR construct, Up: The libgomp ABI
3056
3057 9.12 Implementing ORDERED construct
3058 ===================================
3059
3060 void GOMP_ordered_start (void)
3061 void GOMP_ordered_end (void)
3062
3063
3064 File: libgomp.info, Node: Implementing SECTIONS construct, Next: Implementing SINGLE construct, Prev: Implementing ORDERED construct, Up: The libgomp ABI
3065
3066 9.13 Implementing SECTIONS construct
3067 ====================================
3068
3069 A block as
3070
3071 #pragma omp sections
3072 {
3073 #pragma omp section
3074 stmt1;
3075 #pragma omp section
3076 stmt2;
3077 #pragma omp section
3078 stmt3;
3079 }
3080
3081 becomes
3082
3083 for (i = GOMP_sections_start (3); i != 0; i = GOMP_sections_next ())
3084 switch (i)
3085 {
3086 case 1:
3087 stmt1;
3088 break;
3089 case 2:
3090 stmt2;
3091 break;
3092 case 3:
3093 stmt3;
3094 break;
3095 }
3096 GOMP_barrier ();
3097
3098
3099 File: libgomp.info, Node: Implementing SINGLE construct, Next: Implementing OpenACC's PARALLEL construct, Prev: Implementing SECTIONS construct, Up: The libgomp ABI
3100
3101 9.14 Implementing SINGLE construct
3102 ==================================
3103
3104 A block like
3105
3106 #pragma omp single
3107 {
3108 body;
3109 }
3110
3111 becomes
3112
3113 if (GOMP_single_start ())
3114 body;
3115 GOMP_barrier ();
3116
3117 while
3118
3119 #pragma omp single copyprivate(x)
3120 body;
3121
3122 becomes
3123
3124 datap = GOMP_single_copy_start ();
3125 if (datap == NULL)
3126 {
3127 body;
3128 data.x = x;
3129 GOMP_single_copy_end (&data);
3130 }
3131 else
3132 x = datap->x;
3133 GOMP_barrier ();
3134
3135
3136 File: libgomp.info, Node: Implementing OpenACC's PARALLEL construct, Prev: Implementing SINGLE construct, Up: The libgomp ABI
3137
3138 9.15 Implementing OpenACC's PARALLEL construct
3139 ==============================================
3140
3141 void GOACC_parallel ()
3142
3143
3144 File: libgomp.info, Node: Reporting Bugs, Next: Copying, Prev: The libgomp ABI, Up: Top
3145
3146 10 Reporting Bugs
3147 *****************
3148
3149 Bugs in the GNU Offloading and Multi Processing Runtime Library should
3150 be reported via Bugzilla (http://gcc.gnu.org/bugzilla/). Please add
3151 "openacc", or "openmp", or both to the keywords field in the bug report,
3152 as appropriate.
3153
3154
3155 File: libgomp.info, Node: Copying, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
3156
3157 GNU General Public License
3158 **************************
3159
3160 Version 3, 29 June 2007
3161
3162 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
3163
3164 Everyone is permitted to copy and distribute verbatim copies of this
3165 license document, but changing it is not allowed.
3166
3167 Preamble
3168 ========
3169
3170 The GNU General Public License is a free, copyleft license for software
3171 and other kinds of works.
3172
3173 The licenses for most software and other practical works are designed
3174 to take away your freedom to share and change the works. By contrast,
3175 the GNU General Public License is intended to guarantee your freedom to
3176 share and change all versions of a program-to make sure it remains free
3177 software for all its users. We, the Free Software Foundation, use the
3178 GNU General Public License for most of our software; it applies also to
3179 any other work released this way by its authors. You can apply it to
3180 your programs, too.
3181
3182 When we speak of free software, we are referring to freedom, not
3183 price. Our General Public Licenses are designed to make sure that you
3184 have the freedom to distribute copies of free software (and charge for
3185 them if you wish), that you receive source code or can get it if you
3186 want it, that you can change the software or use pieces of it in new
3187 free programs, and that you know you can do these things.
3188
3189 To protect your rights, we need to prevent others from denying you
3190 these rights or asking you to surrender the rights. Therefore, you have
3191 certain responsibilities if you distribute copies of the software, or if
3192 you modify it: responsibilities to respect the freedom of others.
3193
3194 For example, if you distribute copies of such a program, whether
3195 gratis or for a fee, you must pass on to the recipients the same
3196 freedoms that you received. You must make sure that they, too, receive
3197 or can get the source code. And you must show them these terms so they
3198 know their rights.
3199
3200 Developers that use the GNU GPL protect your rights with two steps:
3201 (1) assert copyright on the software, and (2) offer you this License
3202 giving you legal permission to copy, distribute and/or modify it.
3203
3204 For the developers' and authors' protection, the GPL clearly explains
3205 that there is no warranty for this free software. For both users' and
3206 authors' sake, the GPL requires that modified versions be marked as
3207 changed, so that their problems will not be attributed erroneously to
3208 authors of previous versions.
3209
3210 Some devices are designed to deny users access to install or run
3211 modified versions of the software inside them, although the manufacturer
3212 can do so. This is fundamentally incompatible with the aim of
3213 protecting users' freedom to change the software. The systematic
3214 pattern of such abuse occurs in the area of products for individuals to
3215 use, which is precisely where it is most unacceptable. Therefore, we
3216 have designed this version of the GPL to prohibit the practice for those
3217 products. If such problems arise substantially in other domains, we
3218 stand ready to extend this provision to those domains in future versions
3219 of the GPL, as needed to protect the freedom of users.
3220
3221 Finally, every program is threatened constantly by software patents.
3222 States should not allow patents to restrict development and use of
3223 software on general-purpose computers, but in those that do, we wish to
3224 avoid the special danger that patents applied to a free program could
3225 make it effectively proprietary. To prevent this, the GPL assures that
3226 patents cannot be used to render the program non-free.
3227
3228 The precise terms and conditions for copying, distribution and
3229 modification follow.
3230
3231 TERMS AND CONDITIONS
3232 ====================
3233
3234 0. Definitions.
3235
3236 "This License" refers to version 3 of the GNU General Public
3237 License.
3238
3239 "Copyright" also means copyright-like laws that apply to other
3240 kinds of works, such as semiconductor masks.
3241
3242 "The Program" refers to any copyrightable work licensed under this
3243 License. Each licensee is addressed as "you". "Licensees" and
3244 "recipients" may be individuals or organizations.
3245
3246 To "modify" a work means to copy from or adapt all or part of the
3247 work in a fashion requiring copyright permission, other than the
3248 making of an exact copy. The resulting work is called a "modified
3249 version" of the earlier work or a work "based on" the earlier work.
3250
3251 A "covered work" means either the unmodified Program or a work
3252 based on the Program.
3253
3254 To "propagate" a work means to do anything with it that, without
3255 permission, would make you directly or secondarily liable for
3256 infringement under applicable copyright law, except executing it on
3257 a computer or modifying a private copy. Propagation includes
3258 copying, distribution (with or without modification), making
3259 available to the public, and in some countries other activities as
3260 well.
3261
3262 To "convey" a work means any kind of propagation that enables other
3263 parties to make or receive copies. Mere interaction with a user
3264 through a computer network, with no transfer of a copy, is not
3265 conveying.
3266
3267 An interactive user interface displays "Appropriate Legal Notices"
3268 to the extent that it includes a convenient and prominently visible
3269 feature that (1) displays an appropriate copyright notice, and (2)
3270 tells the user that there is no warranty for the work (except to
3271 the extent that warranties are provided), that licensees may convey
3272 the work under this License, and how to view a copy of this
3273 License. If the interface presents a list of user commands or
3274 options, such as a menu, a prominent item in the list meets this
3275 criterion.
3276
3277 1. Source Code.
3278
3279 The "source code" for a work means the preferred form of the work
3280 for making modifications to it. "Object code" means any non-source
3281 form of a work.
3282
3283 A "Standard Interface" means an interface that either is an
3284 official standard defined by a recognized standards body, or, in
3285 the case of interfaces specified for a particular programming
3286 language, one that is widely used among developers working in that
3287 language.
3288
3289 The "System Libraries" of an executable work include anything,
3290 other than the work as a whole, that (a) is included in the normal
3291 form of packaging a Major Component, but which is not part of that
3292 Major Component, and (b) serves only to enable use of the work with
3293 that Major Component, or to implement a Standard Interface for
3294 which an implementation is available to the public in source code
3295 form. A "Major Component", in this context, means a major
3296 essential component (kernel, window system, and so on) of the
3297 specific operating system (if any) on which the executable work
3298 runs, or a compiler used to produce the work, or an object code
3299 interpreter used to run it.
3300
3301 The "Corresponding Source" for a work in object code form means all
3302 the source code needed to generate, install, and (for an executable
3303 work) run the object code and to modify the work, including scripts
3304 to control those activities. However, it does not include the
3305 work's System Libraries, or general-purpose tools or generally
3306 available free programs which are used unmodified in performing
3307 those activities but which are not part of the work. For example,
3308 Corresponding Source includes interface definition files associated
3309 with source files for the work, and the source code for shared
3310 libraries and dynamically linked subprograms that the work is
3311 specifically designed to require, such as by intimate data
3312 communication or control flow between those subprograms and other
3313 parts of the work.
3314
3315 The Corresponding Source need not include anything that users can
3316 regenerate automatically from other parts of the Corresponding
3317 Source.
3318
3319 The Corresponding Source for a work in source code form is that
3320 same work.
3321
3322 2. Basic Permissions.
3323
3324 All rights granted under this License are granted for the term of
3325 copyright on the Program, and are irrevocable provided the stated
3326 conditions are met. This License explicitly affirms your unlimited
3327 permission to run the unmodified Program. The output from running
3328 a covered work is covered by this License only if the output, given
3329 its content, constitutes a covered work. This License acknowledges
3330 your rights of fair use or other equivalent, as provided by
3331 copyright law.
3332
3333 You may make, run and propagate covered works that you do not
3334 convey, without conditions so long as your license otherwise
3335 remains in force. You may convey covered works to others for the
3336 sole purpose of having them make modifications exclusively for you,
3337 or provide you with facilities for running those works, provided
3338 that you comply with the terms of this License in conveying all
3339 material for which you do not control copyright. Those thus making
3340 or running the covered works for you must do so exclusively on your
3341 behalf, under your direction and control, on terms that prohibit
3342 them from making any copies of your copyrighted material outside
3343 their relationship with you.
3344
3345 Conveying under any other circumstances is permitted solely under
3346 the conditions stated below. Sublicensing is not allowed; section
3347 10 makes it unnecessary.
3348
3349 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
3350
3351 No covered work shall be deemed part of an effective technological
3352 measure under any applicable law fulfilling obligations under
3353 article 11 of the WIPO copyright treaty adopted on 20 December
3354 1996, or similar laws prohibiting or restricting circumvention of
3355 such measures.
3356
3357 When you convey a covered work, you waive any legal power to forbid
3358 circumvention of technological measures to the extent such
3359 circumvention is effected by exercising rights under this License
3360 with respect to the covered work, and you disclaim any intention to
3361 limit operation or modification of the work as a means of
3362 enforcing, against the work's users, your or third parties' legal
3363 rights to forbid circumvention of technological measures.
3364
3365 4. Conveying Verbatim Copies.
3366
3367 You may convey verbatim copies of the Program's source code as you
3368 receive it, in any medium, provided that you conspicuously and
3369 appropriately publish on each copy an appropriate copyright notice;
3370 keep intact all notices stating that this License and any
3371 non-permissive terms added in accord with section 7 apply to the
3372 code; keep intact all notices of the absence of any warranty; and
3373 give all recipients a copy of this License along with the Program.
3374
3375 You may charge any price or no price for each copy that you convey,
3376 and you may offer support or warranty protection for a fee.
3377
3378 5. Conveying Modified Source Versions.
3379
3380 You may convey a work based on the Program, or the modifications to
3381 produce it from the Program, in the form of source code under the
3382 terms of section 4, provided that you also meet all of these
3383 conditions:
3384
3385 a. The work must carry prominent notices stating that you
3386 modified it, and giving a relevant date.
3387
3388 b. The work must carry prominent notices stating that it is
3389 released under this License and any conditions added under
3390 section 7. This requirement modifies the requirement in
3391 section 4 to "keep intact all notices".
3392
3393 c. You must license the entire work, as a whole, under this
3394 License to anyone who comes into possession of a copy. This
3395 License will therefore apply, along with any applicable
3396 section 7 additional terms, to the whole of the work, and all
3397 its parts, regardless of how they are packaged. This License
3398 gives no permission to license the work in any other way, but
3399 it does not invalidate such permission if you have separately
3400 received it.
3401
3402 d. If the work has interactive user interfaces, each must display
3403 Appropriate Legal Notices; however, if the Program has
3404 interactive interfaces that do not display Appropriate Legal
3405 Notices, your work need not make them do so.
3406
3407 A compilation of a covered work with other separate and independent
3408 works, which are not by their nature extensions of the covered
3409 work, and which are not combined with it such as to form a larger
3410 program, in or on a volume of a storage or distribution medium, is
3411 called an "aggregate" if the compilation and its resulting
3412 copyright are not used to limit the access or legal rights of the
3413 compilation's users beyond what the individual works permit.
3414 Inclusion of a covered work in an aggregate does not cause this
3415 License to apply to the other parts of the aggregate.
3416
3417 6. Conveying Non-Source Forms.
3418
3419 You may convey a covered work in object code form under the terms
3420 of sections 4 and 5, provided that you also convey the
3421 machine-readable Corresponding Source under the terms of this
3422 License, in one of these ways:
3423
3424 a. Convey the object code in, or embodied in, a physical product
3425 (including a physical distribution medium), accompanied by the
3426 Corresponding Source fixed on a durable physical medium
3427 customarily used for software interchange.
3428
3429 b. Convey the object code in, or embodied in, a physical product
3430 (including a physical distribution medium), accompanied by a
3431 written offer, valid for at least three years and valid for as
3432 long as you offer spare parts or customer support for that
3433 product model, to give anyone who possesses the object code
3434 either (1) a copy of the Corresponding Source for all the
3435 software in the product that is covered by this License, on a
3436 durable physical medium customarily used for software
3437 interchange, for a price no more than your reasonable cost of
3438 physically performing this conveying of source, or (2) access
3439 to copy the Corresponding Source from a network server at no
3440 charge.
3441
3442 c. Convey individual copies of the object code with a copy of the
3443 written offer to provide the Corresponding Source. This
3444 alternative is allowed only occasionally and noncommercially,
3445 and only if you received the object code with such an offer,
3446 in accord with subsection 6b.
3447
3448 d. Convey the object code by offering access from a designated
3449 place (gratis or for a charge), and offer equivalent access to
3450 the Corresponding Source in the same way through the same
3451 place at no further charge. You need not require recipients
3452 to copy the Corresponding Source along with the object code.
3453 If the place to copy the object code is a network server, the
3454 Corresponding Source may be on a different server (operated by
3455 you or a third party) that supports equivalent copying
3456 facilities, provided you maintain clear directions next to the
3457 object code saying where to find the Corresponding Source.
3458 Regardless of what server hosts the Corresponding Source, you
3459 remain obligated to ensure that it is available for as long as
3460 needed to satisfy these requirements.
3461
3462 e. Convey the object code using peer-to-peer transmission,
3463 provided you inform other peers where the object code and
3464 Corresponding Source of the work are being offered to the
3465 general public at no charge under subsection 6d.
3466
3467 A separable portion of the object code, whose source code is
3468 excluded from the Corresponding Source as a System Library, need
3469 not be included in conveying the object code work.
3470
3471 A "User Product" is either (1) a "consumer product", which means
3472 any tangible personal property which is normally used for personal,
3473 family, or household purposes, or (2) anything designed or sold for
3474 incorporation into a dwelling. In determining whether a product is
3475 a consumer product, doubtful cases shall be resolved in favor of
3476 coverage. For a particular product received by a particular user,
3477 "normally used" refers to a typical or common use of that class of
3478 product, regardless of the status of the particular user or of the
3479 way in which the particular user actually uses, or expects or is
3480 expected to use, the product. A product is a consumer product
3481 regardless of whether the product has substantial commercial,
3482 industrial or non-consumer uses, unless such uses represent the
3483 only significant mode of use of the product.
3484
3485 "Installation Information" for a User Product means any methods,
3486 procedures, authorization keys, or other information required to
3487 install and execute modified versions of a covered work in that
3488 User Product from a modified version of its Corresponding Source.
3489 The information must suffice to ensure that the continued
3490 functioning of the modified object code is in no case prevented or
3491 interfered with solely because modification has been made.
3492
3493 If you convey an object code work under this section in, or with,
3494 or specifically for use in, a User Product, and the conveying
3495 occurs as part of a transaction in which the right of possession
3496 and use of the User Product is transferred to the recipient in
3497 perpetuity or for a fixed term (regardless of how the transaction
3498 is characterized), the Corresponding Source conveyed under this
3499 section must be accompanied by the Installation Information. But
3500 this requirement does not apply if neither you nor any third party
3501 retains the ability to install modified object code on the User
3502 Product (for example, the work has been installed in ROM).
3503
3504 The requirement to provide Installation Information does not
3505 include a requirement to continue to provide support service,
3506 warranty, or updates for a work that has been modified or installed
3507 by the recipient, or for the User Product in which it has been
3508 modified or installed. Access to a network may be denied when the
3509 modification itself materially and adversely affects the operation
3510 of the network or violates the rules and protocols for
3511 communication across the network.
3512
3513 Corresponding Source conveyed, and Installation Information
3514 provided, in accord with this section must be in a format that is
3515 publicly documented (and with an implementation available to the
3516 public in source code form), and must require no special password
3517 or key for unpacking, reading or copying.
3518
3519 7. Additional Terms.
3520
3521 "Additional permissions" are terms that supplement the terms of
3522 this License by making exceptions from one or more of its
3523 conditions. Additional permissions that are applicable to the
3524 entire Program shall be treated as though they were included in
3525 this License, to the extent that they are valid under applicable
3526 law. If additional permissions apply only to part of the Program,
3527 that part may be used separately under those permissions, but the
3528 entire Program remains governed by this License without regard to
3529 the additional permissions.
3530
3531 When you convey a copy of a covered work, you may at your option
3532 remove any additional permissions from that copy, or from any part
3533 of it. (Additional permissions may be written to require their own
3534 removal in certain cases when you modify the work.) You may place
3535 additional permissions on material, added by you to a covered work,
3536 for which you have or can give appropriate copyright permission.
3537
3538 Notwithstanding any other provision of this License, for material
3539 you add to a covered work, you may (if authorized by the copyright
3540 holders of that material) supplement the terms of this License with
3541 terms:
3542
3543 a. Disclaiming warranty or limiting liability differently from
3544 the terms of sections 15 and 16 of this License; or
3545
3546 b. Requiring preservation of specified reasonable legal notices
3547 or author attributions in that material or in the Appropriate
3548 Legal Notices displayed by works containing it; or
3549
3550 c. Prohibiting misrepresentation of the origin of that material,
3551 or requiring that modified versions of such material be marked
3552 in reasonable ways as different from the original version; or
3553
3554 d. Limiting the use for publicity purposes of names of licensors
3555 or authors of the material; or
3556
3557 e. Declining to grant rights under trademark law for use of some
3558 trade names, trademarks, or service marks; or
3559
3560 f. Requiring indemnification of licensors and authors of that
3561 material by anyone who conveys the material (or modified
3562 versions of it) with contractual assumptions of liability to
3563 the recipient, for any liability that these contractual
3564 assumptions directly impose on those licensors and authors.
3565
3566 All other non-permissive additional terms are considered "further
3567 restrictions" within the meaning of section 10. If the Program as
3568 you received it, or any part of it, contains a notice stating that
3569 it is governed by this License along with a term that is a further
3570 restriction, you may remove that term. If a license document
3571 contains a further restriction but permits relicensing or conveying
3572 under this License, you may add to a covered work material governed
3573 by the terms of that license document, provided that the further
3574 restriction does not survive such relicensing or conveying.
3575
3576 If you add terms to a covered work in accord with this section, you
3577 must place, in the relevant source files, a statement of the
3578 additional terms that apply to those files, or a notice indicating
3579 where to find the applicable terms.
3580
3581 Additional terms, permissive or non-permissive, may be stated in
3582 the form of a separately written license, or stated as exceptions;
3583 the above requirements apply either way.
3584
3585 8. Termination.
3586
3587 You may not propagate or modify a covered work except as expressly
3588 provided under this License. Any attempt otherwise to propagate or
3589 modify it is void, and will automatically terminate your rights
3590 under this License (including any patent licenses granted under the
3591 third paragraph of section 11).
3592
3593 However, if you cease all violation of this License, then your
3594 license from a particular copyright holder is reinstated (a)
3595 provisionally, unless and until the copyright holder explicitly and
3596 finally terminates your license, and (b) permanently, if the
3597 copyright holder fails to notify you of the violation by some
3598 reasonable means prior to 60 days after the cessation.
3599
3600 Moreover, your license from a particular copyright holder is
3601 reinstated permanently if the copyright holder notifies you of the
3602 violation by some reasonable means, this is the first time you have
3603 received notice of violation of this License (for any work) from
3604 that copyright holder, and you cure the violation prior to 30 days
3605 after your receipt of the notice.
3606
3607 Termination of your rights under this section does not terminate
3608 the licenses of parties who have received copies or rights from you
3609 under this License. If your rights have been terminated and not
3610 permanently reinstated, you do not qualify to receive new licenses
3611 for the same material under section 10.
3612
3613 9. Acceptance Not Required for Having Copies.
3614
3615 You are not required to accept this License in order to receive or
3616 run a copy of the Program. Ancillary propagation of a covered work
3617 occurring solely as a consequence of using peer-to-peer
3618 transmission to receive a copy likewise does not require
3619 acceptance. However, nothing other than this License grants you
3620 permission to propagate or modify any covered work. These actions
3621 infringe copyright if you do not accept this License. Therefore,
3622 by modifying or propagating a covered work, you indicate your
3623 acceptance of this License to do so.
3624
3625 10. Automatic Licensing of Downstream Recipients.
3626
3627 Each time you convey a covered work, the recipient automatically
3628 receives a license from the original licensors, to run, modify and
3629 propagate that work, subject to this License. You are not
3630 responsible for enforcing compliance by third parties with this
3631 License.
3632
3633 An "entity transaction" is a transaction transferring control of an
3634 organization, or substantially all assets of one, or subdividing an
3635 organization, or merging organizations. If propagation of a
3636 covered work results from an entity transaction, each party to that
3637 transaction who receives a copy of the work also receives whatever
3638 licenses to the work the party's predecessor in interest had or
3639 could give under the previous paragraph, plus a right to possession
3640 of the Corresponding Source of the work from the predecessor in
3641 interest, if the predecessor has it or can get it with reasonable
3642 efforts.
3643
3644 You may not impose any further restrictions on the exercise of the
3645 rights granted or affirmed under this License. For example, you
3646 may not impose a license fee, royalty, or other charge for exercise
3647 of rights granted under this License, and you may not initiate
3648 litigation (including a cross-claim or counterclaim in a lawsuit)
3649 alleging that any patent claim is infringed by making, using,
3650 selling, offering for sale, or importing the Program or any portion
3651 of it.
3652
3653 11. Patents.
3654
3655 A "contributor" is a copyright holder who authorizes use under this
3656 License of the Program or a work on which the Program is based.
3657 The work thus licensed is called the contributor's "contributor
3658 version".
3659
3660 A contributor's "essential patent claims" are all patent claims
3661 owned or controlled by the contributor, whether already acquired or
3662 hereafter acquired, that would be infringed by some manner,
3663 permitted by this License, of making, using, or selling its
3664 contributor version, but do not include claims that would be
3665 infringed only as a consequence of further modification of the
3666 contributor version. For purposes of this definition, "control"
3667 includes the right to grant patent sublicenses in a manner
3668 consistent with the requirements of this License.
3669
3670 Each contributor grants you a non-exclusive, worldwide,
3671 royalty-free patent license under the contributor's essential
3672 patent claims, to make, use, sell, offer for sale, import and
3673 otherwise run, modify and propagate the contents of its contributor
3674 version.
3675
3676 In the following three paragraphs, a "patent license" is any
3677 express agreement or commitment, however denominated, not to
3678 enforce a patent (such as an express permission to practice a
3679 patent or covenant not to sue for patent infringement). To "grant"
3680 such a patent license to a party means to make such an agreement or
3681 commitment not to enforce a patent against the party.
3682
3683 If you convey a covered work, knowingly relying on a patent
3684 license, and the Corresponding Source of the work is not available
3685 for anyone to copy, free of charge and under the terms of this
3686 License, through a publicly available network server or other
3687 readily accessible means, then you must either (1) cause the
3688 Corresponding Source to be so available, or (2) arrange to deprive
3689 yourself of the benefit of the patent license for this particular
3690 work, or (3) arrange, in a manner consistent with the requirements
3691 of this License, to extend the patent license to downstream
3692 recipients. "Knowingly relying" means you have actual knowledge
3693 that, but for the patent license, your conveying the covered work
3694 in a country, or your recipient's use of the covered work in a
3695 country, would infringe one or more identifiable patents in that
3696 country that you have reason to believe are valid.
3697
3698 If, pursuant to or in connection with a single transaction or
3699 arrangement, you convey, or propagate by procuring conveyance of, a
3700 covered work, and grant a patent license to some of the parties
3701 receiving the covered work authorizing them to use, propagate,
3702 modify or convey a specific copy of the covered work, then the
3703 patent license you grant is automatically extended to all
3704 recipients of the covered work and works based on it.
3705
3706 A patent license is "discriminatory" if it does not include within
3707 the scope of its coverage, prohibits the exercise of, or is
3708 conditioned on the non-exercise of one or more of the rights that
3709 are specifically granted under this License. You may not convey a
3710 covered work if you are a party to an arrangement with a third
3711 party that is in the business of distributing software, under which
3712 you make payment to the third party based on the extent of your
3713 activity of conveying the work, and under which the third party
3714 grants, to any of the parties who would receive the covered work
3715 from you, a discriminatory patent license (a) in connection with
3716 copies of the covered work conveyed by you (or copies made from
3717 those copies), or (b) primarily for and in connection with specific
3718 products or compilations that contain the covered work, unless you
3719 entered into that arrangement, or that patent license was granted,
3720 prior to 28 March 2007.
3721
3722 Nothing in this License shall be construed as excluding or limiting
3723 any implied license or other defenses to infringement that may
3724 otherwise be available to you under applicable patent law.
3725
3726 12. No Surrender of Others' Freedom.
3727
3728 If conditions are imposed on you (whether by court order, agreement
3729 or otherwise) that contradict the conditions of this License, they
3730 do not excuse you from the conditions of this License. If you
3731 cannot convey a covered work so as to satisfy simultaneously your
3732 obligations under this License and any other pertinent obligations,
3733 then as a consequence you may not convey it at all. For example,
3734 if you agree to terms that obligate you to collect a royalty for
3735 further conveying from those to whom you convey the Program, the
3736 only way you could satisfy both those terms and this License would
3737 be to refrain entirely from conveying the Program.
3738
3739 13. Use with the GNU Affero General Public License.
3740
3741 Notwithstanding any other provision of this License, you have
3742 permission to link or combine any covered work with a work licensed
3743 under version 3 of the GNU Affero General Public License into a
3744 single combined work, and to convey the resulting work. The terms
3745 of this License will continue to apply to the part which is the
3746 covered work, but the special requirements of the GNU Affero
3747 General Public License, section 13, concerning interaction through
3748 a network will apply to the combination as such.
3749
3750 14. Revised Versions of this License.
3751
3752 The Free Software Foundation may publish revised and/or new
3753 versions of the GNU General Public License from time to time. Such
3754 new versions will be similar in spirit to the present version, but
3755 may differ in detail to address new problems or concerns.
3756
3757 Each version is given a distinguishing version number. If the
3758 Program specifies that a certain numbered version of the GNU
3759 General Public License "or any later version" applies to it, you
3760 have the option of following the terms and conditions either of
3761 that numbered version or of any later version published by the Free
3762 Software Foundation. If the Program does not specify a version
3763 number of the GNU General Public License, you may choose any
3764 version ever published by the Free Software Foundation.
3765
3766 If the Program specifies that a proxy can decide which future
3767 versions of the GNU General Public License can be used, that
3768 proxy's public statement of acceptance of a version permanently
3769 authorizes you to choose that version for the Program.
3770
3771 Later license versions may give you additional or different
3772 permissions. However, no additional obligations are imposed on any
3773 author or copyright holder as a result of your choosing to follow a
3774 later version.
3775
3776 15. Disclaimer of Warranty.
3777
3778 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
3779 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
3780 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
3781 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
3782 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3783 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
3784 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
3785 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
3786 NECESSARY SERVICING, REPAIR OR CORRECTION.
3787
3788 16. Limitation of Liability.
3789
3790 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
3791 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
3792 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
3793 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
3794 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
3795 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
3796 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
3797 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
3798 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
3799 THE POSSIBILITY OF SUCH DAMAGES.
3800
3801 17. Interpretation of Sections 15 and 16.
3802
3803 If the disclaimer of warranty and limitation of liability provided
3804 above cannot be given local legal effect according to their terms,
3805 reviewing courts shall apply local law that most closely
3806 approximates an absolute waiver of all civil liability in
3807 connection with the Program, unless a warranty or assumption of
3808 liability accompanies a copy of the Program in return for a fee.
3809
3810 END OF TERMS AND CONDITIONS
3811 ===========================
3812
3813 How to Apply These Terms to Your New Programs
3814 =============================================
3815
3816 If you develop a new program, and you want it to be of the greatest
3817 possible use to the public, the best way to achieve this is to make it
3818 free software which everyone can redistribute and change under these
3819 terms.
3820
3821 To do so, attach the following notices to the program. It is safest
3822 to attach them to the start of each source file to most effectively
3823 state the exclusion of warranty; and each file should have at least the
3824 "copyright" line and a pointer to where the full notice is found.
3825
3826 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
3827 Copyright (C) YEAR NAME OF AUTHOR
3828
3829 This program is free software: you can redistribute it and/or modify
3830 it under the terms of the GNU General Public License as published by
3831 the Free Software Foundation, either version 3 of the License, or (at
3832 your option) any later version.
3833
3834 This program is distributed in the hope that it will be useful, but
3835 WITHOUT ANY WARRANTY; without even the implied warranty of
3836 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3837 General Public License for more details.
3838
3839 You should have received a copy of the GNU General Public License
3840 along with this program. If not, see <http://www.gnu.org/licenses/>.
3841
3842 Also add information on how to contact you by electronic and paper
3843 mail.
3844
3845 If the program does terminal interaction, make it output a short
3846 notice like this when it starts in an interactive mode:
3847
3848 PROGRAM Copyright (C) YEAR NAME OF AUTHOR
3849 This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
3850 This is free software, and you are welcome to redistribute it
3851 under certain conditions; type 'show c' for details.
3852
3853 The hypothetical commands 'show w' and 'show c' should show the
3854 appropriate parts of the General Public License. Of course, your
3855 program's commands might be different; for a GUI interface, you would
3856 use an "about box".
3857
3858 You should also get your employer (if you work as a programmer) or
3859 school, if any, to sign a "copyright disclaimer" for the program, if
3860 necessary. For more information on this, and how to apply and follow
3861 the GNU GPL, see <http://www.gnu.org/licenses/>.
3862
3863 The GNU General Public License does not permit incorporating your
3864 program into proprietary programs. If your program is a subroutine
3865 library, you may consider it more useful to permit linking proprietary
3866 applications with the library. If this is what you want to do, use the
3867 GNU Lesser General Public License instead of this License. But first,
3868 please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
3869
3870
3871 File: libgomp.info, Node: GNU Free Documentation License, Next: Funding, Prev: Copying, Up: Top
3872
3873 GNU Free Documentation License
3874 ******************************
3875
3876 Version 1.3, 3 November 2008
3877
3878 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
3879 <http://fsf.org/>
3880
3881 Everyone is permitted to copy and distribute verbatim copies
3882 of this license document, but changing it is not allowed.
3883
3884 0. PREAMBLE
3885
3886 The purpose of this License is to make a manual, textbook, or other
3887 functional and useful document "free" in the sense of freedom: to
3888 assure everyone the effective freedom to copy and redistribute it,
3889 with or without modifying it, either commercially or
3890 noncommercially. Secondarily, this License preserves for the
3891 author and publisher a way to get credit for their work, while not
3892 being considered responsible for modifications made by others.
3893
3894 This License is a kind of "copyleft", which means that derivative
3895 works of the document must themselves be free in the same sense.
3896 It complements the GNU General Public License, which is a copyleft
3897 license designed for free software.
3898
3899 We have designed this License in order to use it for manuals for
3900 free software, because free software needs free documentation: a
3901 free program should come with manuals providing the same freedoms
3902 that the software does. But this License is not limited to
3903 software manuals; it can be used for any textual work, regardless
3904 of subject matter or whether it is published as a printed book. We
3905 recommend this License principally for works whose purpose is
3906 instruction or reference.
3907
3908 1. APPLICABILITY AND DEFINITIONS
3909
3910 This License applies to any manual or other work, in any medium,
3911 that contains a notice placed by the copyright holder saying it can
3912 be distributed under the terms of this License. Such a notice
3913 grants a world-wide, royalty-free license, unlimited in duration,
3914 to use that work under the conditions stated herein. The
3915 "Document", below, refers to any such manual or work. Any member
3916 of the public is a licensee, and is addressed as "you". You accept
3917 the license if you copy, modify or distribute the work in a way
3918 requiring permission under copyright law.
3919
3920 A "Modified Version" of the Document means any work containing the
3921 Document or a portion of it, either copied verbatim, or with
3922 modifications and/or translated into another language.
3923
3924 A "Secondary Section" is a named appendix or a front-matter section
3925 of the Document that deals exclusively with the relationship of the
3926 publishers or authors of the Document to the Document's overall
3927 subject (or to related matters) and contains nothing that could
3928 fall directly within that overall subject. (Thus, if the Document
3929 is in part a textbook of mathematics, a Secondary Section may not
3930 explain any mathematics.) The relationship could be a matter of
3931 historical connection with the subject or with related matters, or
3932 of legal, commercial, philosophical, ethical or political position
3933 regarding them.
3934
3935 The "Invariant Sections" are certain Secondary Sections whose
3936 titles are designated, as being those of Invariant Sections, in the
3937 notice that says that the Document is released under this License.
3938 If a section does not fit the above definition of Secondary then it
3939 is not allowed to be designated as Invariant. The Document may
3940 contain zero Invariant Sections. If the Document does not identify
3941 any Invariant Sections then there are none.
3942
3943 The "Cover Texts" are certain short passages of text that are
3944 listed, as Front-Cover Texts or Back-Cover Texts, in the notice
3945 that says that the Document is released under this License. A
3946 Front-Cover Text may be at most 5 words, and a Back-Cover Text may
3947 be at most 25 words.
3948
3949 A "Transparent" copy of the Document means a machine-readable copy,
3950 represented in a format whose specification is available to the
3951 general public, that is suitable for revising the document
3952 straightforwardly with generic text editors or (for images composed
3953 of pixels) generic paint programs or (for drawings) some widely
3954 available drawing editor, and that is suitable for input to text
3955 formatters or for automatic translation to a variety of formats
3956 suitable for input to text formatters. A copy made in an otherwise
3957 Transparent file format whose markup, or absence of markup, has
3958 been arranged to thwart or discourage subsequent modification by
3959 readers is not Transparent. An image format is not Transparent if
3960 used for any substantial amount of text. A copy that is not
3961 "Transparent" is called "Opaque".
3962
3963 Examples of suitable formats for Transparent copies include plain
3964 ASCII without markup, Texinfo input format, LaTeX input format,
3965 SGML or XML using a publicly available DTD, and standard-conforming
3966 simple HTML, PostScript or PDF designed for human modification.
3967 Examples of transparent image formats include PNG, XCF and JPG.
3968 Opaque formats include proprietary formats that can be read and
3969 edited only by proprietary word processors, SGML or XML for which
3970 the DTD and/or processing tools are not generally available, and
3971 the machine-generated HTML, PostScript or PDF produced by some word
3972 processors for output purposes only.
3973
3974 The "Title Page" means, for a printed book, the title page itself,
3975 plus such following pages as are needed to hold, legibly, the
3976 material this License requires to appear in the title page. For
3977 works in formats which do not have any title page as such, "Title
3978 Page" means the text near the most prominent appearance of the
3979 work's title, preceding the beginning of the body of the text.
3980
3981 The "publisher" means any person or entity that distributes copies
3982 of the Document to the public.
3983
3984 A section "Entitled XYZ" means a named subunit of the Document
3985 whose title either is precisely XYZ or contains XYZ in parentheses
3986 following text that translates XYZ in another language. (Here XYZ
3987 stands for a specific section name mentioned below, such as
3988 "Acknowledgements", "Dedications", "Endorsements", or "History".)
3989 To "Preserve the Title" of such a section when you modify the
3990 Document means that it remains a section "Entitled XYZ" according
3991 to this definition.
3992
3993 The Document may include Warranty Disclaimers next to the notice
3994 which states that this License applies to the Document. These
3995 Warranty Disclaimers are considered to be included by reference in
3996 this License, but only as regards disclaiming warranties: any other
3997 implication that these Warranty Disclaimers may have is void and
3998 has no effect on the meaning of this License.
3999
4000 2. VERBATIM COPYING
4001
4002 You may copy and distribute the Document in any medium, either
4003 commercially or noncommercially, provided that this License, the
4004 copyright notices, and the license notice saying this License
4005 applies to the Document are reproduced in all copies, and that you
4006 add no other conditions whatsoever to those of this License. You
4007 may not use technical measures to obstruct or control the reading
4008 or further copying of the copies you make or distribute. However,
4009 you may accept compensation in exchange for copies. If you
4010 distribute a large enough number of copies you must also follow the
4011 conditions in section 3.
4012
4013 You may also lend copies, under the same conditions stated above,
4014 and you may publicly display copies.
4015
4016 3. COPYING IN QUANTITY
4017
4018 If you publish printed copies (or copies in media that commonly
4019 have printed covers) of the Document, numbering more than 100, and
4020 the Document's license notice requires Cover Texts, you must
4021 enclose the copies in covers that carry, clearly and legibly, all
4022 these Cover Texts: Front-Cover Texts on the front cover, and
4023 Back-Cover Texts on the back cover. Both covers must also clearly
4024 and legibly identify you as the publisher of these copies. The
4025 front cover must present the full title with all words of the title
4026 equally prominent and visible. You may add other material on the
4027 covers in addition. Copying with changes limited to the covers, as
4028 long as they preserve the title of the Document and satisfy these
4029 conditions, can be treated as verbatim copying in other respects.
4030
4031 If the required texts for either cover are too voluminous to fit
4032 legibly, you should put the first ones listed (as many as fit
4033 reasonably) on the actual cover, and continue the rest onto
4034 adjacent pages.
4035
4036 If you publish or distribute Opaque copies of the Document
4037 numbering more than 100, you must either include a machine-readable
4038 Transparent copy along with each Opaque copy, or state in or with
4039 each Opaque copy a computer-network location from which the general
4040 network-using public has access to download using public-standard
4041 network protocols a complete Transparent copy of the Document, free
4042 of added material. If you use the latter option, you must take
4043 reasonably prudent steps, when you begin distribution of Opaque
4044 copies in quantity, to ensure that this Transparent copy will
4045 remain thus accessible at the stated location until at least one
4046 year after the last time you distribute an Opaque copy (directly or
4047 through your agents or retailers) of that edition to the public.
4048
4049 It is requested, but not required, that you contact the authors of
4050 the Document well before redistributing any large number of copies,
4051 to give them a chance to provide you with an updated version of the
4052 Document.
4053
4054 4. MODIFICATIONS
4055
4056 You may copy and distribute a Modified Version of the Document
4057 under the conditions of sections 2 and 3 above, provided that you
4058 release the Modified Version under precisely this License, with the
4059 Modified Version filling the role of the Document, thus licensing
4060 distribution and modification of the Modified Version to whoever
4061 possesses a copy of it. In addition, you must do these things in
4062 the Modified Version:
4063
4064 A. Use in the Title Page (and on the covers, if any) a title
4065 distinct from that of the Document, and from those of previous
4066 versions (which should, if there were any, be listed in the
4067 History section of the Document). You may use the same title
4068 as a previous version if the original publisher of that
4069 version gives permission.
4070
4071 B. List on the Title Page, as authors, one or more persons or
4072 entities responsible for authorship of the modifications in
4073 the Modified Version, together with at least five of the
4074 principal authors of the Document (all of its principal
4075 authors, if it has fewer than five), unless they release you
4076 from this requirement.
4077
4078 C. State on the Title page the name of the publisher of the
4079 Modified Version, as the publisher.
4080
4081 D. Preserve all the copyright notices of the Document.
4082
4083 E. Add an appropriate copyright notice for your modifications
4084 adjacent to the other copyright notices.
4085
4086 F. Include, immediately after the copyright notices, a license
4087 notice giving the public permission to use the Modified
4088 Version under the terms of this License, in the form shown in
4089 the Addendum below.
4090
4091 G. Preserve in that license notice the full lists of Invariant
4092 Sections and required Cover Texts given in the Document's
4093 license notice.
4094
4095 H. Include an unaltered copy of this License.
4096
4097 I. Preserve the section Entitled "History", Preserve its Title,
4098 and add to it an item stating at least the title, year, new
4099 authors, and publisher of the Modified Version as given on the
4100 Title Page. If there is no section Entitled "History" in the
4101 Document, create one stating the title, year, authors, and
4102 publisher of the Document as given on its Title Page, then add
4103 an item describing the Modified Version as stated in the
4104 previous sentence.
4105
4106 J. Preserve the network location, if any, given in the Document
4107 for public access to a Transparent copy of the Document, and
4108 likewise the network locations given in the Document for
4109 previous versions it was based on. These may be placed in the
4110 "History" section. You may omit a network location for a work
4111 that was published at least four years before the Document
4112 itself, or if the original publisher of the version it refers
4113 to gives permission.
4114
4115 K. For any section Entitled "Acknowledgements" or "Dedications",
4116 Preserve the Title of the section, and preserve in the section
4117 all the substance and tone of each of the contributor
4118 acknowledgements and/or dedications given therein.
4119
4120 L. Preserve all the Invariant Sections of the Document, unaltered
4121 in their text and in their titles. Section numbers or the
4122 equivalent are not considered part of the section titles.
4123
4124 M. Delete any section Entitled "Endorsements". Such a section
4125 may not be included in the Modified Version.
4126
4127 N. Do not retitle any existing section to be Entitled
4128 "Endorsements" or to conflict in title with any Invariant
4129 Section.
4130
4131 O. Preserve any Warranty Disclaimers.
4132
4133 If the Modified Version includes new front-matter sections or
4134 appendices that qualify as Secondary Sections and contain no
4135 material copied from the Document, you may at your option designate
4136 some or all of these sections as invariant. To do this, add their
4137 titles to the list of Invariant Sections in the Modified Version's
4138 license notice. These titles must be distinct from any other
4139 section titles.
4140
4141 You may add a section Entitled "Endorsements", provided it contains
4142 nothing but endorsements of your Modified Version by various
4143 parties--for example, statements of peer review or that the text
4144 has been approved by an organization as the authoritative
4145 definition of a standard.
4146
4147 You may add a passage of up to five words as a Front-Cover Text,
4148 and a passage of up to 25 words as a Back-Cover Text, to the end of
4149 the list of Cover Texts in the Modified Version. Only one passage
4150 of Front-Cover Text and one of Back-Cover Text may be added by (or
4151 through arrangements made by) any one entity. If the Document
4152 already includes a cover text for the same cover, previously added
4153 by you or by arrangement made by the same entity you are acting on
4154 behalf of, you may not add another; but you may replace the old
4155 one, on explicit permission from the previous publisher that added
4156 the old one.
4157
4158 The author(s) and publisher(s) of the Document do not by this
4159 License give permission to use their names for publicity for or to
4160 assert or imply endorsement of any Modified Version.
4161
4162 5. COMBINING DOCUMENTS
4163
4164 You may combine the Document with other documents released under
4165 this License, under the terms defined in section 4 above for
4166 modified versions, provided that you include in the combination all
4167 of the Invariant Sections of all of the original documents,
4168 unmodified, and list them all as Invariant Sections of your
4169 combined work in its license notice, and that you preserve all
4170 their Warranty Disclaimers.
4171
4172 The combined work need only contain one copy of this License, and
4173 multiple identical Invariant Sections may be replaced with a single
4174 copy. If there are multiple Invariant Sections with the same name
4175 but different contents, make the title of each such section unique
4176 by adding at the end of it, in parentheses, the name of the
4177 original author or publisher of that section if known, or else a
4178 unique number. Make the same adjustment to the section titles in
4179 the list of Invariant Sections in the license notice of the
4180 combined work.
4181
4182 In the combination, you must combine any sections Entitled
4183 "History" in the various original documents, forming one section
4184 Entitled "History"; likewise combine any sections Entitled
4185 "Acknowledgements", and any sections Entitled "Dedications". You
4186 must delete all sections Entitled "Endorsements."
4187
4188 6. COLLECTIONS OF DOCUMENTS
4189
4190 You may make a collection consisting of the Document and other
4191 documents released under this License, and replace the individual
4192 copies of this License in the various documents with a single copy
4193 that is included in the collection, provided that you follow the
4194 rules of this License for verbatim copying of each of the documents
4195 in all other respects.
4196
4197 You may extract a single document from such a collection, and
4198 distribute it individually under this License, provided you insert
4199 a copy of this License into the extracted document, and follow this
4200 License in all other respects regarding verbatim copying of that
4201 document.
4202
4203 7. AGGREGATION WITH INDEPENDENT WORKS
4204
4205 A compilation of the Document or its derivatives with other
4206 separate and independent documents or works, in or on a volume of a
4207 storage or distribution medium, is called an "aggregate" if the
4208 copyright resulting from the compilation is not used to limit the
4209 legal rights of the compilation's users beyond what the individual
4210 works permit. When the Document is included in an aggregate, this
4211 License does not apply to the other works in the aggregate which
4212 are not themselves derivative works of the Document.
4213
4214 If the Cover Text requirement of section 3 is applicable to these
4215 copies of the Document, then if the Document is less than one half
4216 of the entire aggregate, the Document's Cover Texts may be placed
4217 on covers that bracket the Document within the aggregate, or the
4218 electronic equivalent of covers if the Document is in electronic
4219 form. Otherwise they must appear on printed covers that bracket
4220 the whole aggregate.
4221
4222 8. TRANSLATION
4223
4224 Translation is considered a kind of modification, so you may
4225 distribute translations of the Document under the terms of section
4226 4. Replacing Invariant Sections with translations requires special
4227 permission from their copyright holders, but you may include
4228 translations of some or all Invariant Sections in addition to the
4229 original versions of these Invariant Sections. You may include a
4230 translation of this License, and all the license notices in the
4231 Document, and any Warranty Disclaimers, provided that you also
4232 include the original English version of this License and the
4233 original versions of those notices and disclaimers. In case of a
4234 disagreement between the translation and the original version of
4235 this License or a notice or disclaimer, the original version will
4236 prevail.
4237
4238 If a section in the Document is Entitled "Acknowledgements",
4239 "Dedications", or "History", the requirement (section 4) to
4240 Preserve its Title (section 1) will typically require changing the
4241 actual title.
4242
4243 9. TERMINATION
4244
4245 You may not copy, modify, sublicense, or distribute the Document
4246 except as expressly provided under this License. Any attempt
4247 otherwise to copy, modify, sublicense, or distribute it is void,
4248 and will automatically terminate your rights under this License.
4249
4250 However, if you cease all violation of this License, then your
4251 license from a particular copyright holder is reinstated (a)
4252 provisionally, unless and until the copyright holder explicitly and
4253 finally terminates your license, and (b) permanently, if the
4254 copyright holder fails to notify you of the violation by some
4255 reasonable means prior to 60 days after the cessation.
4256
4257 Moreover, your license from a particular copyright holder is
4258 reinstated permanently if the copyright holder notifies you of the
4259 violation by some reasonable means, this is the first time you have
4260 received notice of violation of this License (for any work) from
4261 that copyright holder, and you cure the violation prior to 30 days
4262 after your receipt of the notice.
4263
4264 Termination of your rights under this section does not terminate
4265 the licenses of parties who have received copies or rights from you
4266 under this License. If your rights have been terminated and not
4267 permanently reinstated, receipt of a copy of some or all of the
4268 same material does not give you any rights to use it.
4269
4270 10. FUTURE REVISIONS OF THIS LICENSE
4271
4272 The Free Software Foundation may publish new, revised versions of
4273 the GNU Free Documentation License from time to time. Such new
4274 versions will be similar in spirit to the present version, but may
4275 differ in detail to address new problems or concerns. See
4276 <http://www.gnu.org/copyleft/>.
4277
4278 Each version of the License is given a distinguishing version
4279 number. If the Document specifies that a particular numbered
4280 version of this License "or any later version" applies to it, you
4281 have the option of following the terms and conditions either of
4282 that specified version or of any later version that has been
4283 published (not as a draft) by the Free Software Foundation. If the
4284 Document does not specify a version number of this License, you may
4285 choose any version ever published (not as a draft) by the Free
4286 Software Foundation. If the Document specifies that a proxy can
4287 decide which future versions of this License can be used, that
4288 proxy's public statement of acceptance of a version permanently
4289 authorizes you to choose that version for the Document.
4290
4291 11. RELICENSING
4292
4293 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
4294 World Wide Web server that publishes copyrightable works and also
4295 provides prominent facilities for anybody to edit those works. A
4296 public wiki that anybody can edit is an example of such a server.
4297 A "Massive Multiauthor Collaboration" (or "MMC") contained in the
4298 site means any set of copyrightable works thus published on the MMC
4299 site.
4300
4301 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
4302 license published by Creative Commons Corporation, a not-for-profit
4303 corporation with a principal place of business in San Francisco,
4304 California, as well as future copyleft versions of that license
4305 published by that same organization.
4306
4307 "Incorporate" means to publish or republish a Document, in whole or
4308 in part, as part of another Document.
4309
4310 An MMC is "eligible for relicensing" if it is licensed under this
4311 License, and if all works that were first published under this
4312 License somewhere other than this MMC, and subsequently
4313 incorporated in whole or in part into the MMC, (1) had no cover
4314 texts or invariant sections, and (2) were thus incorporated prior
4315 to November 1, 2008.
4316
4317 The operator of an MMC Site may republish an MMC contained in the
4318 site under CC-BY-SA on the same site at any time before August 1,
4319 2009, provided the MMC is eligible for relicensing.
4320
4321 ADDENDUM: How to use this License for your documents
4322 ====================================================
4323
4324 To use this License in a document you have written, include a copy of
4325 the License in the document and put the following copyright and license
4326 notices just after the title page:
4327
4328 Copyright (C) YEAR YOUR NAME.
4329 Permission is granted to copy, distribute and/or modify this document
4330 under the terms of the GNU Free Documentation License, Version 1.3
4331 or any later version published by the Free Software Foundation;
4332 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
4333 Texts. A copy of the license is included in the section entitled ``GNU
4334 Free Documentation License''.
4335
4336 If you have Invariant Sections, Front-Cover Texts and Back-Cover
4337 Texts, replace the "with...Texts." line with this:
4338
4339 with the Invariant Sections being LIST THEIR TITLES, with
4340 the Front-Cover Texts being LIST, and with the Back-Cover Texts
4341 being LIST.
4342
4343 If you have Invariant Sections without Cover Texts, or some other
4344 combination of the three, merge those two alternatives to suit the
4345 situation.
4346
4347 If your document contains nontrivial examples of program code, we
4348 recommend releasing these examples in parallel under your choice of free
4349 software license, such as the GNU General Public License, to permit
4350 their use in free software.
4351
4352
4353 File: libgomp.info, Node: Funding, Next: Library Index, Prev: GNU Free Documentation License, Up: Top
4354
4355 Funding Free Software
4356 *********************
4357
4358 If you want to have more free software a few years from now, it makes
4359 sense for you to help encourage people to contribute funds for its
4360 development. The most effective approach known is to encourage
4361 commercial redistributors to donate.
4362
4363 Users of free software systems can boost the pace of development by
4364 encouraging for-a-fee distributors to donate part of their selling price
4365 to free software developers--the Free Software Foundation, and others.
4366
4367 The way to convince distributors to do this is to demand it and
4368 expect it from them. So when you compare distributors, judge them
4369 partly by how much they give to free software development. Show
4370 distributors they must compete to be the one who gives the most.
4371
4372 To make this approach work, you must insist on numbers that you can
4373 compare, such as, "We will donate ten dollars to the Frobnitz project
4374 for each disk sold." Don't be satisfied with a vague promise, such as
4375 "A portion of the profits are donated," since it doesn't give a basis
4376 for comparison.
4377
4378 Even a precise fraction "of the profits from this disk" is not very
4379 meaningful, since creative accounting and unrelated business decisions
4380 can greatly alter what fraction of the sales price counts as profit. If
4381 the price you pay is $50, ten percent of the profit is probably less
4382 than a dollar; it might be a few cents, or nothing at all.
4383
4384 Some redistributors do development work themselves. This is useful
4385 too; but to keep everyone honest, you need to inquire how much they do,
4386 and what kind. Some kinds of development make much more long-term
4387 difference than others. For example, maintaining a separate version of
4388 a program contributes very little; maintaining the standard version of a
4389 program for the whole community contributes much. Easy new ports
4390 contribute little, since someone else would surely do them; difficult
4391 ports such as adding a new CPU to the GNU Compiler Collection contribute
4392 more; major new features or packages contribute the most.
4393
4394 By establishing the idea that supporting further development is "the
4395 proper thing to do" when distributing free software for a fee, we can
4396 assure a steady flow of resources into making more free software.
4397
4398 Copyright (C) 1994 Free Software Foundation, Inc.
4399 Verbatim copying and redistribution of this section is permitted
4400 without royalty; alteration is not permitted.
4401
4402
4403 File: libgomp.info, Node: Library Index, Prev: Funding, Up: Top
4404
4405 Library Index
4406 *************
4407
4408 [index]
4409 * Menu:
4410
4411 * Environment Variable: OMP_CANCELLATION. (line 6)
4412 * Environment Variable <1>: OMP_DISPLAY_ENV. (line 6)
4413 * Environment Variable <2>: OMP_DEFAULT_DEVICE. (line 6)
4414 * Environment Variable <3>: OMP_DYNAMIC. (line 6)
4415 * Environment Variable <4>: OMP_MAX_ACTIVE_LEVELS. (line 6)
4416 * Environment Variable <5>: OMP_MAX_TASK_PRIORITY. (line 6)
4417 * Environment Variable <6>: OMP_NESTED. (line 6)
4418 * Environment Variable <7>: OMP_NUM_THREADS. (line 6)
4419 * Environment Variable <8>: OMP_PROC_BIND. (line 6)
4420 * Environment Variable <9>: OMP_PLACES. (line 6)
4421 * Environment Variable <10>: OMP_STACKSIZE. (line 6)
4422 * Environment Variable <11>: OMP_SCHEDULE. (line 6)
4423 * Environment Variable <12>: OMP_THREAD_LIMIT. (line 6)
4424 * Environment Variable <13>: OMP_WAIT_POLICY. (line 6)
4425 * Environment Variable <14>: GOMP_CPU_AFFINITY. (line 6)
4426 * Environment Variable <15>: GOMP_DEBUG. (line 6)
4427 * Environment Variable <16>: GOMP_STACKSIZE. (line 6)
4428 * Environment Variable <17>: GOMP_SPINCOUNT. (line 6)
4429 * Environment Variable <18>: GOMP_RTEMS_THREAD_POOLS.
4430 (line 6)
4431 * FDL, GNU Free Documentation License: GNU Free Documentation License.
4432 (line 6)
4433 * Implementation specific setting: OMP_NESTED. (line 6)
4434 * Implementation specific setting <1>: OMP_NUM_THREADS. (line 6)
4435 * Implementation specific setting <2>: OMP_SCHEDULE. (line 6)
4436 * Implementation specific setting <3>: GOMP_STACKSIZE. (line 6)
4437 * Implementation specific setting <4>: GOMP_SPINCOUNT. (line 6)
4438 * Implementation specific setting <5>: GOMP_RTEMS_THREAD_POOLS.
4439 (line 6)
4440 * Introduction: Top. (line 6)
4441
4442
4443
4444 Tag Table:
4445 Node: Top2083
4446 Node: Enabling OpenMP4613
4447 Node: Runtime Library Routines5401
4448 Node: omp_get_active_level8478
4449 Node: omp_get_ancestor_thread_num9178
4450 Node: omp_get_cancellation10108
4451 Node: omp_get_default_device10922
4452 Node: omp_get_dynamic11598
4453 Node: omp_get_level12473
4454 Node: omp_get_max_active_levels13093
4455 Node: omp_get_max_task_priority13798
4456 Node: omp_get_max_threads14418
4457 Node: omp_get_nested15175
4458 Node: omp_get_num_devices16089
4459 Node: omp_get_num_procs16610
4460 Node: omp_get_num_teams17149
4461 Node: omp_get_num_threads17665
4462 Node: omp_get_proc_bind18754
4463 Node: omp_get_schedule19675
4464 Node: omp_get_team_num20629
4465 Node: omp_get_team_size21128
4466 Node: omp_get_thread_limit22088
4467 Node: omp_get_thread_num22707
4468 Node: omp_in_parallel23578
4469 Node: omp_in_final24227
4470 Node: omp_is_initial_device24901
4471 Node: omp_set_default_device25594
4472 Node: omp_set_dynamic26385
4473 Node: omp_set_max_active_levels27271
4474 Node: omp_set_nested28048
4475 Node: omp_set_num_threads28940
4476 Node: omp_set_schedule29808
4477 Node: omp_init_lock30889
4478 Node: omp_set_lock31542
4479 Node: omp_test_lock32397
4480 Node: omp_unset_lock33373
4481 Node: omp_destroy_lock34304
4482 Node: omp_init_nest_lock34981
4483 Node: omp_set_nest_lock35716
4484 Node: omp_test_nest_lock36631
4485 Node: omp_unset_nest_lock37658
4486 Node: omp_destroy_nest_lock38673
4487 Node: omp_get_wtick39424
4488 Node: omp_get_wtime40016
4489 Node: Environment Variables40792
4490 Node: OMP_CANCELLATION42361
4491 Node: OMP_DISPLAY_ENV42894
4492 Node: OMP_DEFAULT_DEVICE43597
4493 Node: OMP_DYNAMIC44377
4494 Node: OMP_MAX_ACTIVE_LEVELS44973
4495 Node: OMP_MAX_TASK_PRIORITY45623
4496 Node: OMP_NESTED46281
4497 Node: OMP_NUM_THREADS46886
4498 Node: OMP_PROC_BIND47574
4499 Node: OMP_PLACES48766
4500 Node: OMP_STACKSIZE50943
4501 Node: OMP_SCHEDULE51767
4502 Node: OMP_THREAD_LIMIT52465
4503 Node: OMP_WAIT_POLICY53065
4504 Node: GOMP_CPU_AFFINITY53757
4505 Node: GOMP_DEBUG55487
4506 Node: GOMP_STACKSIZE55994
4507 Node: GOMP_SPINCOUNT56823
4508 Node: GOMP_RTEMS_THREAD_POOLS58027
4509 Node: Enabling OpenACC60205
4510 Node: OpenACC Runtime Library Routines61198
4511 Node: acc_get_num_devices64992
4512 Node: acc_set_device_type65718
4513 Node: acc_get_device_type66482
4514 Node: acc_set_device_num67197
4515 Node: acc_get_device_num67981
4516 Node: acc_async_test68778
4517 Node: acc_async_test_all69770
4518 Node: acc_wait70670
4519 Node: acc_wait_all71532
4520 Node: acc_wait_all_async72291
4521 Node: acc_wait_async73043
4522 Node: acc_init73750
4523 Node: acc_shutdown74396
4524 Node: acc_on_device75064
4525 Node: acc_malloc76068
4526 Node: acc_free76567
4527 Node: acc_copyin76994
4528 Node: acc_present_or_copyin78104
4529 Node: acc_create79730
4530 Node: acc_present_or_create80885
4531 Node: acc_copyout82519
4532 Node: acc_delete83542
4533 Node: acc_update_device84517
4534 Node: acc_update_self85629
4535 Node: acc_map_data86733
4536 Node: acc_unmap_data87418
4537 Node: acc_deviceptr87939
4538 Node: acc_hostptr88509
4539 Node: acc_is_present89073
4540 Node: acc_memcpy_to_device90600
4541 Node: acc_memcpy_from_device91263
4542 Node: acc_get_current_cuda_device91947
4543 Node: acc_get_current_cuda_context92544
4544 Node: acc_get_cuda_stream93144
4545 Node: acc_set_cuda_stream93735
4546 Node: OpenACC Environment Variables94380
4547 Node: ACC_DEVICE_TYPE94839
4548 Node: ACC_DEVICE_NUM95075
4549 Node: GCC_ACC_NOTIFY95332
4550 Node: CUDA Streams Usage95555
4551 Ref: CUDA Streams Usage-Footnote-197455
4552 Node: OpenACC Library Interoperability97564
4553 Ref: OpenACC Library Interoperability-Footnote-1103920
4554 Ref: OpenACC Library Interoperability-Footnote-2104172
4555 Node: The libgomp ABI104380
4556 Node: Implementing MASTER construct105236
4557 Node: Implementing CRITICAL construct105650
4558 Node: Implementing ATOMIC construct106389
4559 Node: Implementing FLUSH construct106870
4560 Node: Implementing BARRIER construct107141
4561 Node: Implementing THREADPRIVATE construct107410
4562 Node: Implementing PRIVATE clause108063
4563 Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses108644
4564 Node: Implementing REDUCTION clause109968
4565 Node: Implementing PARALLEL construct110525
4566 Node: Implementing FOR construct111782
4567 Node: Implementing ORDERED construct113780
4568 Node: Implementing SECTIONS construct114086
4569 Node: Implementing SINGLE construct114852
4570 Node: Implementing OpenACC's PARALLEL construct115564
4571 Node: Reporting Bugs115822
4572 Node: Copying116184
4573 Node: GNU Free Documentation License153731
4574 Node: Funding178854
4575 Node: Library Index181380
4576
4577 End Tag Table
4578