OpenMP.html 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1999-2017 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>The GNU Fortran Compiler: OpenMP</title>
  20. <meta name="description" content="The GNU Fortran Compiler: OpenMP">
  21. <meta name="keywords" content="The GNU Fortran Compiler: OpenMP">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="Extensions-implemented-in-GNU-Fortran.html#Extensions-implemented-in-GNU-Fortran" rel="up" title="Extensions implemented in GNU Fortran">
  30. <link href="OpenACC.html#OpenACC" rel="next" title="OpenACC">
  31. <link href="CONVERT-specifier.html#CONVERT-specifier" rel="prev" title="CONVERT specifier">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style:oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="OpenMP"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="OpenACC.html#OpenACC" accesskey="n" rel="next">OpenACC</a>, Previous: <a href="CONVERT-specifier.html#CONVERT-specifier" accesskey="p" rel="prev">CONVERT specifier</a>, Up: <a href="Extensions-implemented-in-GNU-Fortran.html#Extensions-implemented-in-GNU-Fortran" accesskey="u" rel="up">Extensions implemented in GNU Fortran</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  66. </div>
  67. <hr>
  68. <a name="OpenMP-1"></a>
  69. <h4 class="subsection">6.1.16 OpenMP</h4>
  70. <a name="index-OpenMP-1"></a>
  71. <p>OpenMP (Open Multi-Processing) is an application programming
  72. interface (API) that supports multi-platform shared memory
  73. multiprocessing programming in C/C++ and Fortran on many
  74. architectures, including Unix and Microsoft Windows platforms.
  75. It consists of a set of compiler directives, library routines,
  76. and environment variables that influence run-time behavior.
  77. </p>
  78. <p>GNU Fortran strives to be compatible to the
  79. <a href="http://openmp.org/wp/openmp-specifications/">OpenMP Application Program Interface v4.5</a>.
  80. </p>
  81. <p>To enable the processing of the OpenMP directive <code>!$omp</code> in
  82. free-form source code; the <code>c$omp</code>, <code>*$omp</code> and <code>!$omp</code>
  83. directives in fixed form; the <code>!$</code> conditional compilation sentinels
  84. in free form; and the <code>c$</code>, <code>*$</code> and <code>!$</code> sentinels
  85. in fixed form, <code>gfortran</code> needs to be invoked with the
  86. <samp>-fopenmp</samp>. This also arranges for automatic linking of the
  87. GNU Offloading and Multi Processing Runtime Library
  88. <a href="http://gcc.gnu.org/onlinedocs/libgomp/index.html#Top">libgomp</a> in <cite>GNU Offloading and Multi Processing Runtime
  89. Library</cite>.
  90. </p>
  91. <p>The OpenMP Fortran runtime library routines are provided both in a
  92. form of a Fortran 90 module named <code>omp_lib</code> and in a form of
  93. a Fortran <code>include</code> file named <samp>omp_lib.h</samp>.
  94. </p>
  95. <p>An example of a parallelized loop taken from Appendix A.1 of
  96. the OpenMP Application Program Interface v2.5:
  97. </p><div class="smallexample">
  98. <pre class="smallexample">SUBROUTINE A1(N, A, B)
  99. INTEGER I, N
  100. REAL B(N), A(N)
  101. !$OMP PARALLEL DO !I is private by default
  102. DO I=2,N
  103. B(I) = (A(I) + A(I-1)) / 2.0
  104. ENDDO
  105. !$OMP END PARALLEL DO
  106. END SUBROUTINE A1
  107. </pre></div>
  108. <p>Please note:
  109. </p><ul>
  110. <li> <samp>-fopenmp</samp> implies <samp>-frecursive</samp>, i.e., all local arrays
  111. will be allocated on the stack. When porting existing code to OpenMP,
  112. this may lead to surprising results, especially to segmentation faults
  113. if the stacksize is limited.
  114. </li><li> On glibc-based systems, OpenMP enabled applications cannot be statically
  115. linked due to limitations of the underlying pthreads-implementation. It
  116. might be possible to get a working solution if
  117. <code>-Wl,--whole-archive -lpthread -Wl,--no-whole-archive</code> is added
  118. to the command line. However, this is not supported by <code>gcc</code> and
  119. thus not recommended.
  120. </li></ul>
  121. <hr>
  122. <div class="header">
  123. <p>
  124. Next: <a href="OpenACC.html#OpenACC" accesskey="n" rel="next">OpenACC</a>, Previous: <a href="CONVERT-specifier.html#CONVERT-specifier" accesskey="p" rel="prev">CONVERT specifier</a>, Up: <a href="Extensions-implemented-in-GNU-Fortran.html#Extensions-implemented-in-GNU-Fortran" accesskey="u" rel="up">Extensions implemented in GNU Fortran</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  125. </div>
  126. </body>
  127. </html>