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