Differences between revisions 11 and 47 (spanning 36 versions)
Revision 11 as of 2010-08-04 13:22:13
Size: 2602
Editor: TobiasBurnus
Comment: Add links to OWOMP slides under the OpenMP 3.1 item
Revision 47 as of 2021-10-06 21:04:21
Size: 8029
Editor: TobiasBurnus
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
This page contains information on GCC's implementation of the [[http://openmp.org/wp/|OpenMP]] standard and related functionality like the auto parallelizer ({{{-ftree-parallelize-loops}}}). This page contains information on GCC's implementation of the [[http://openmp.org/|OpenMP]] specification and related functionality like the auto parallelizer ({{{-ftree-parallelize-loops}}}).
Line 4: Line 4:
As of GCC 4.2, the compiler implements version 2.5 of the OpenMP standard and as of 4.4 it implements version 3.0 of the OpenMP standard. As of GCC 4.2, the compiler implements version 2.5 of the OpenMP specification, as of 4.4 it implements version 3.0 and since GCC 4.7 it supports the OpenMP 3.1 specification. GCC 4.9 supports OpenMP 4.0 for C/C++, GCC 4.9.1 also for Fortran. GCC 5 adds support for [[Offloading]]. OpenMP 4.5 is supported for C/C++ since GCC 6 and since GCC 7 for Fortran (with omissions, largest missing item is structure element mapping). Since GCC 9, there is initial OpenMP 5 support (essentially C/C++, only). GCC 10 added some more features, mainly for C/C++ but also for Fortran.

GCC 11 extended the Fortran compiler to fully support OpenMP 4.5 and support more OpenMP 5.0; additionally, nonrectangular loops are now supported.

GCC 12 (ongoing development) has a growing support of OpenMP 5.0 features.

= Release Notes =

 * [[https://gcc.gnu.org/gcc-12/changes.html|GCC 12 Changes]] [[https://gcc.gnu.org/onlinedocs/libgomp/OpenMP-Implementation-Status.html|OpenMP Implementation Status]] – work in progress (as of 2021)
 * [[https://gcc.gnu.org/gcc-11/changes.html|GCC 11 Changes]]
 * [[https://gcc.gnu.org/gcc-10/changes.html|GCC 10 Changes]]
 * [[https://gcc.gnu.org/gcc-9/changes.html|GCC 9 Changes]] – contains a TODO list
 * [[https://gcc.gnu.org/gcc-8/changes.html|GCC 8 Changes]]
 * [[https://gcc.gnu.org/gcc-7/changes.html|GCC 7 Changes]]
 * [[https://gcc.gnu.org/gcc-6/changes.html|GCC 6 Changes]]
 * [[https://gcc.gnu.org/gcc-5/changes.html|GCC 5 Changes]]
 * [[https://gcc.gnu.org/gcc-4.9/changes.html|GCC 4.9 Changes]]
 * [[https://gcc.gnu.org/gcc-4.8/changes.html|GCC 4.8 Changes]]
 * [[https://gcc.gnu.org/gcc-4.7/changes.html|GCC 4.7 Changes]]
 * [[https://gcc.gnu.org/gcc-4.6/changes.html|GCC 4.6 Changes]]
 * [[https://gcc.gnu.org/gcc-4.5/changes.html|GCC 4.5 Changes]]
 * [[https://gcc.gnu.org/gcc-4.4/changes.html|GCC 4.4 Changes]]
 * [[https://gcc.gnu.org/gcc-4.3/changes.html|GCC 4.3 Changes]]
 * [[https://gcc.gnu.org/gcc-4.2/changes.html|GCC 4.2 Changes]]

Line 8: Line 33:
 * Documentation on [[http://gcc.gnu.org/onlinedocs/libgomp/|libgomp]] (OpenMP runtime for GCC).
 * [[http://www.openmp.org/mp-documents/spec25.pdf|OpenMP v2.5 standard]]
 * [[http://www.openmp.org/mp-documents/spec30.pdf|OpenMP v3.0 standard]]
 * Documentation on [[http://gcc.gnu.org/onlinedocs/libgomp/|libgomp]] (GNU Offloading and Multi Processing Runtime Library).
 * [[https://www.openmp.org/mp-documents/spec25.pdf|OpenMP v2.5 specification]]
 * [[https://www.openmp.org/mp-documents/spec30.pdf|OpenMP v3.0 specification]]
 * [[https://www.openmp.org/mp-documents/OpenMP3.1.pdf|OpenMP v3.1 specification]] (July 2011)
 * [[https://www.openmp.org/mp-documents/OpenMP4.0.0.pdf|OpenMP v4.0 specification]] (July2013) (Official [[https://www.openmp.org/wp-content/uploads/openmp-examples-4.0.2.pdf|OpenMP 4.0.2 Examples]], [[https://forum.openmp.org/viewforum.php?f=13&sid=79390003ffdb371ab2a6a57484dba0e7|OpenMP 4.0 API forum]])
 * [[https://www.openmp.org/wp-content/uploads/openmp-4.5.pdf|OpenMP 4.5 specification]] (November 2015)
 * [[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5.0.pdf|OpenMP 5 specification]] ([[https://www.openmp.org/spec-html/5.0/openmp.html|as HTML]], November 2018)
 * [[https://www.openmp.org/wp-content/uploads/openmp-TR8.pdf|OpenMP 5.1 draft (= Technical Report 8)]] (November 2019)
 * [[https://www.openmp.org/wp-content/uploads/openmp-TR9.pdf|OpenMP 5.1 draft (= Technical Report 9)]] (August 2020)
 * [[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf|OpenMP 5.1]] (November 2020)
 * [[https://www.openmp.org/wp-content/uploads/openmp-TR10.pdf|OpenMP 5.2 draft (= Technical Report 10)]] (July 2021)
Line 18: Line 50:
= Test Suites and Benchmarks =

 * [[http://www.hlrs.de/organization/people/niethammer/projects/openmp-validation-suite/|OpenMP Validation Suite]] by HLRS, Univ. Stuttgart and Univ. of Houston (2007 version at UH: [[http://www2.cs.uh.edu/~openuh/OpenMPValidation_README|README]], [[http://www2.cs.uh.edu/~openuh/download/register.shtml|Download]])
 * [[https://pm.bsc.es/projects/bots|OpenMP task test suite]] by BSC
 * [[http://www.spec.org/omp/|SPEC OMP]]
 * [[http://www.epcc.ed.ac.uk/software-products/epcc-openmp-benchmarks|EPCC Microbenchmarks]]
 * [[http://www.nas.nasa.gov/Resources/Software/npb.html|NAS Benchmarks]] ([[http://www.hpcs.cs.tsukuba.ac.jp/omni-openmp/download/download-benchmarks.html|unofficial C version]])
 * [[https://computation.llnl.gov/casc/RTS_Report/openmp_perf.html|LLNL benchmark]]
 * [[https://www.cs.virginia.edu/~skadron/wiki/rodinia/index.php/Main_Page|Rodinia Benchmark suite]] [[http://lava.cs.virginia.edu/Rodinia/|(2)]]: OpenMP, OpenCL, CUDA benchmark
Line 19: Line 61:

(Outdated!)
Line 22: Line 66:
 * Fix [[http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35423|PR 35423]].
Line 24: Line 67:
 * Implement `untied` tasks (no compliance issue; needs to be well tuned to be actually faster; cf. page 53 of [[https://iwomp.zih.tu-dresden.de/downloads/omp30-tasks.pdf|pdf]])
 * OpenMP v3.1, when released ("The OpenMP ARB has [[ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1817.txt|started]] developing OpenMP 3.1, which was scheduled to be released for public review at [[http://www.ccs.tsukuba.ac.jp/workshop/IWOMP2010/|IWOMP, the International Workshop for OpenMP]], in June 2010. This update will include clarifications, and several extensions.")<br>The release of a public draft has been delayed and is now planed to be now available before [[http://sc10.supercomputing.org/|Supercomputing 2010]] (= before mid of November).<br>For the new features, see also the [[http://www.springerlink.com/content/978-3-642-13216-2|OWOMP 2010 proceedings]] and a [[http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2010/06/21/the-view-from-iwomp-2010-trip-report|blog entry]], and the [[http://www.ccs.tsukuba.ac.jp/workshop/IWOMP2010/slides/de_Supinski-IWOMP10_State_of_LC.pdf|Status of OpenMP 3.1 and 4.0]] slides (OWOMP 2010 [[http://www.ccs.tsukuba.ac.jp/workshop/IWOMP2010/program.html|slides]] and [[http://www.ccs.tsukuba.ac.jp/workshop/IWOMP2010/tutorial.html|tutorials]]). Especially, user-defined reductions (a major item), affinity, atomics extensions (support capture/write), and task scheduling items (`taskyield` construct, `final` clause) are to be expected.
 * Implement `untied` tasks (no compliance issue; needs to be well tuned to be actually faster; cf. page 53 of [[https://iwomp.zih.tu-dresden.de/downloads/omp30-tasks.pdf|pdf]]) - see also next item
 * Tasks need some tuning in taskwait. Cf. [[http://gcc.gnu.org/ml/gcc/2011-04/msg00040.html|GCC email]], [[https://iwomp.zih.tu-dresden.de/downloads/runtime-olivier.pdf|comparison]]. Algorithms: [[http://www.sarc-ip.org/files/null/Workshop/1234128788173__TSchedStrat-iwomp08.pdf|PDF 1]], [[http://www.sarc-ip.org/files/xavier/Conference/1234121213301__cascon08-ibm-tasks.pdf|PDF 2]], [[http://capinfo.e.ac.upc.edu/PDFs/dir27/file003681.pdf|PDF 3]]
  A [[http://iwomp-2012.caspur.it/sites/iwomp-2012.caspur.it/files/Broquedis_libKOMP-iwomp2012.pdf|comparison for tasks between libgomp, another library (gcc+libKOMP) and Intel]] (cf. benchmark on p. 10); see also [[http://iwomp-2012.caspur.it/sites/iwomp-2012.caspur.it/files/Terboven-Assessing_OpenMP_Tasking_Implementations_on_NUMA_Architectures.pdf|another IOMP 2012 comparison]]
 * [[http://gcc.gnu.org/ml/gcc-patches/2011-08/msg00080.html|taskyield is a stub and mergeable task clonning could be optimized]]
 * OpenMP 4.0 (specifications released on July 2013). Cf. slides at the [[http://www.ccs.tsukuba.ac.jp/workshop/IWOMP2010/|IWOMP, the International Workshop for OpenMP]] ([[http://www.ccs.tsukuba.ac.jp/workshop/IWOMP2010/program.html|slides]] and [[http://www.ccs.tsukuba.ac.jp/workshop/IWOMP2010/tutorial.html|tutorials]]) in June 2010 and the [[http://www.springerlink.com/content/978-3-642-13216-2|OWOMP 2010 proceedings]]. There is also a [[http://www-949.ibm.com/software/rational/cafe/blogs/ccpp-parallel-multicore/2010/06/21/the-view-from-iwomp-2010-trip-report|blog entry]]. See also IWOMP 2012's [[http://www.ncsa.illinois.edu/Conferences/IWOMP11/program/program.html|talks]] and the [[http://www.ncsa.illinois.edu/Conferences/IWOMP11/program/presentations/supinski.pdf|committee report]]. SC2011 (November 2011): [[http://openmp.org/wp/presos/SC11_OpenMP_BoF.pdf|OpenMP Lang Committee Report]], [[http://openmp.org/wp/presos/SCBOF11.pdf|CEO report]]
  . And the 2012 slides: [[http://iwomp-2012.caspur.it/program/workshop-program|IWOMP program]], [[http://iwomp-2012.caspur.it/sites/iwomp-2012.caspur.it/files/IWOMP12_State_of_LC.pdf|Language Committee report]]
  . And the OpenMP 4.0 release candidate documents: [[http://www.openmp.org/mp-documents/OpenMP_4.0_RC2.pdf|OpenMP v4.0rc2 specification]] (March 2013) ([[http://openmp.org/forum/viewforum.php?f=12|OpenMP 4.0 API forum]], [[http://openmp.org/wp/2013/03/openmp-40-rc2/|rc2 changes]])
  . And a comment prior to the final release: [[https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/openmp_4_0_about_to_be_released_and_iwomp_2013?lang=en|OpenMP 4.0 about to be released and IWOMP 2013, by Michael Wong]] (May 2013)

OpenMP

This page contains information on GCC's implementation of the OpenMP specification and related functionality like the auto parallelizer (-ftree-parallelize-loops).

As of GCC 4.2, the compiler implements version 2.5 of the OpenMP specification, as of 4.4 it implements version 3.0 and since GCC 4.7 it supports the OpenMP 3.1 specification. GCC 4.9 supports OpenMP 4.0 for C/C++, GCC 4.9.1 also for Fortran. GCC 5 adds support for Offloading. OpenMP 4.5 is supported for C/C++ since GCC 6 and since GCC 7 for Fortran (with omissions, largest missing item is structure element mapping). Since GCC 9, there is initial OpenMP 5 support (essentially C/C++, only). GCC 10 added some more features, mainly for C/C++ but also for Fortran.

GCC 11 extended the Fortran compiler to fully support OpenMP 4.5 and support more OpenMP 5.0; additionally, nonrectangular loops are now supported.

GCC 12 (ongoing development) has a growing support of OpenMP 5.0 features.

Release Notes

OpenMP Documentation

Automatic Parallelization

(-ftree-parallelize-loops)

  • Streamization

Test Suites and Benchmarks

TODO List

(Outdated!)

Feel free to add new items to this list as you run into issues or features that would be interesting to add. Send mail to the list and/or the GCC OpenMP maintainers if any item in this list sounds interesting but is hard to understand.

None: openmp (last edited 2021-11-10 07:04:00 by TobiasBurnus)