diff mbox series

[wwwdocs] Add OpenMP by-GCC-version implementation status

Message ID 798bc8e6-567b-5ed6-e298-655948e89f5e@mentor.com
State New
Headers show
Series [wwwdocs] Add OpenMP by-GCC-version implementation status | expand

Commit Message

Tobias Burnus May 14, 2022, 9:27 p.m. UTC
Jakub and I discussed the other day that it would be useful
to have a page similar to
   https://gcc.gnu.org/projects/cxx-status.html
to provide by-GCC-version information of the which OpenMP are supported.

The list is based on
* https://gcc.gnu.org/onlinedocs/libgomp/OpenMP-Implementation-Status.html
* Some revision archeology by Jakub
* Plus added 5.2 list.

Comments regarding the file, where it is placed and how it is linked to?
I found it simpler to have a single very long line rather than trying
to break it into 80-character lines, but I can also do this reformatting.

Tobias
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955

Comments

Tobias Burnus May 16, 2022, 9:42 a.m. UTC | #1
Hi all,

small update (interdiff): s/s/S/ for consistency, missed one GCC 13 commit, and
improved wording of the enter/exit change. (New wording better captures the
effect; I was thinking too much of the changed spec wording not of the effective
result.)
Plus added some cross-ref hyperlinks to make finding the documentation easier:

--- a/htdocs/projects/gomp/openmp-status.html
+++ b/htdocs/projects/gomp/openmp-status.html
@@ -25,0 +26 @@
+  <li><a href="index.html">GOMP project page</a></li>
@@ -61 +61 @@
-<tr><td><code>hint</code> clause on the <code>atomic</code> construct</td><td>GCC&nbsp;9</td><td>stub only</td></tr>
+<tr><td><code>hint</code> clause on the <code>atomic</code> construct</td><td>GCC&nbsp;9</td><td>Stub only</td></tr>
@@ -141,0 +142 @@
+<tr><td><code>omp_get_mapped_ptr</code> runtime routine</td><td>GCC&nbsp;13</td><td></td></tr>
@@ -159 +159,0 @@>
-<tr><td><code>omp_get_mapped_ptr</code> runtime routine</td><td>N</td><td></td></tr>
@@ -195 +195 @@
-<tr><td>Extended map-type handling of <code>target enter/exit data</code></td><td>N</td><td></td></tr>
+<tr><td>Default map type for <code>map</code> clause in <code>target enter/exit data</code></td><td>N</td><td></td></tr>

--- a/htdocs/projects/index.html
+++ b/htdocs/projects/index.html
@@ -32,0 +33 @@ help develop GCC:</p>
+<li><a href="gomp/openmp-status.html">Implementing missing OpenMP features.</a></li>


I will incorporate the 5.2 wording change in my libgomp.texi patch.
(I think the s/stub/Stub/ change is already there and I know the
N→Y change is in the .texi.)

Otherwise, the same boilerplate applies:

On 14.05.22 23:27, Tobias Burnus wrote:
> Jakub and I discussed the other day that it would be useful
> to have a page similar to
>   https://gcc.gnu.org/projects/cxx-status.html
> to provide by-GCC-version information of the which OpenMP are supported.
>
> The list is based on
> *
> https://gcc.gnu.org/onlinedocs/libgomp/OpenMP-Implementation-Status.html
> * Some revision archeology by Jakub
> * Plus added 5.2 list.
>
> Comments regarding the file, where it is placed and how it is linked to?
> I found it simpler to have a single very long line rather than trying
> to break it into 80-character lines, but I can also do this reformatting.

Tobias

PS: Full patch attached.

PPS: I think we should consider to further cleanup/consolidate both the
generic gomp landing page and the http://gcc.gnu.org/wiki/openmp wiki.
Current the information is too far spread and too difficult to find.
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
Gerald Pfeifer May 16, 2022, 10:06 a.m. UTC | #2
Hi Tobias,

On Sat, 14 May 2022, Tobias Burnus wrote:
> Jakub and I discussed the other day that it would be useful
> to have a page similar to
>   https://gcc.gnu.org/projects/cxx-status.html
> to provide by-GCC-version information of the which OpenMP are supported.

this looks like a great idea, thanks!

> Comments regarding the file, where it is placed and how it is linked to?
> I found it simpler to have a single very long line rather than trying
> to break it into 80-character lines, but I can also do this reformatting.

Yes, in cases like this with a small and fixed set of contributors (to 
that table) ... whatever serves you best.

Regarding the name projects/gomp/openmp-status.html feels a bit long?
How about 

   projects/gomp/status.html

?  Or maybe even make this part of the main index.html page, so 

   projects/gomp/ 

in the browser? The former is more of a stronger recommendation, the
latter just a thought.


Minor tweak: it's "to file a bug report", so "filing a bug" not "filling a 
bug", though indeed when filing a bug report one needs to fill a form. :-)

Gerald
Gerald Pfeifer May 17, 2022, 7:54 a.m. UTC | #3
On Mon, 16 May 2022, Tobias Burnus wrote:
> PPS: I think we should consider to further cleanup/consolidate both the
> generic gomp landing page and the http://gcc.gnu.org/wiki/openmp wiki.
> Current the information is too far spread and too difficult to find.

Yes, that sounds like a great idea, too. :)

A minor detail:

> +<p>Please add <q>openmp</q> to the keywords field when filling a
> +<a href="https://gcc.gnu.org/bugzilla/">bug report</a>.</p>

Might it be better to instead link to <a href="../../bugs/"> ?

Gerald

PS: For the benefit of the doubt: Ok.
Jakub Jelinek May 17, 2022, 8:21 a.m. UTC | #4
On Mon, May 16, 2022 at 11:42:03AM +0200, Tobias Burnus wrote:
> small update (interdiff): s/s/S/ for consistency, missed one GCC 13 commit, and
> improved wording of the enter/exit change. (New wording better captures the
> effect; I was thinking too much of the changed spec wording not of the effective
> result.)
> Plus added some cross-ref hyperlinks to make finding the documentation easier:
> 
> --- a/htdocs/projects/gomp/openmp-status.html
> +++ b/htdocs/projects/gomp/openmp-status.html
> @@ -25,0 +26 @@
> +  <li><a href="index.html">GOMP project page</a></li>
> @@ -61 +61 @@
> -<tr><td><code>hint</code> clause on the <code>atomic</code> construct</td><td>GCC&nbsp;9</td><td>stub only</td></tr>
> +<tr><td><code>hint</code> clause on the <code>atomic</code> construct</td><td>GCC&nbsp;9</td><td>Stub only</td></tr>
> @@ -141,0 +142 @@
> +<tr><td><code>omp_get_mapped_ptr</code> runtime routine</td><td>GCC&nbsp;13</td><td></td></tr>
> @@ -159 +159,0 @@>
> -<tr><td><code>omp_get_mapped_ptr</code> runtime routine</td><td>N</td><td></td></tr>
> @@ -195 +195 @@
> -<tr><td>Extended map-type handling of <code>target enter/exit data</code></td><td>N</td><td></td></tr>
> +<tr><td>Default map type for <code>map</code> clause in <code>target enter/exit data</code></td><td>N</td><td></td></tr>
> 
> --- a/htdocs/projects/index.html
> +++ b/htdocs/projects/index.html
> @@ -32,0 +33 @@ help develop GCC:</p>
> +<li><a href="gomp/openmp-status.html">Implementing missing OpenMP features.</a></li>
> 
> 
> I will incorporate the 5.2 wording change in my libgomp.texi patch.
> (I think the s/stub/Stub/ change is already there and I know the
> N→Y change is in the .texi.)

Thanks for working on this.
Please incorporate Gerald's comments and my comments about the
libgomp.texi 5.2 support patch.

> +<p>Features added by OpenMP version</p>
> +<ul>
> +  <li><a href="#omp4.5">OpenMP 4.5</a></li>
> +  <li><a href="#omp5.0">OpenMP 5.0</a></li>
> +  <li><a href="#omp5.1">OpenMP 5.1</a></li>
> +  <li><a href="#omp5.2">OpenMP 5.2</a></li>
> +</ul>

I think we should have also 2.5, 3.0, 3.1 and 4.0 entries in the above list,
with similar style as the OpenMP 4.5 entry.
Details can be copied from the gomp/index.html page, so
2.5 supported since GCC 4.2,
3.0 supported since GCC 4.4,
3.1 supported since GCC 4.7,
4.0 supported for C/C++ since GCC 4.9 and for Fortran since GCC 4.9.1

Though, maybe a table form for the 2.5-4.5 versions would be more consistent
with the rest, and just use OpenMP x.y C/C++/Fortran support
or OpenMP x.y C/C++ support or OpenMP x.y Fortran support as name,
for the partial/full with 2 rows like requires directive with GCC 7 row
and partial in comment and GCC 11 witout a comment or with fully supported
comment?  Perhaps for those tables just leave the first column header blank
instead of "Feature".

> +<tr><td>Map-order clarifications</td><td>GCC?</td><td></td></tr>

This entry I gave up on, it isn't exactly clear to me what that
bullet is about and once we figure that out, we need to do some archeology
on whether we support it at all and if yes, since which commit and thus
since which GCC version.

Otherwise LGTM.

	Jakub
Tobias Burnus May 17, 2022, 8:49 a.m. UTC | #5
Hi Jakub & Gerald,

first, thanks for all the suggestions!

I have now followed Gerald's suggestion to place the table into the main
GOMP page.

I then also decided to make it more GCC-user orientated than
GCC-developer orientated by re-writing the intro (but keeping the old
one as background), also referencing  OpenACC, mentioning the
command-line arguments to use + adding a bunch of GCC links to have
everything together.

Thoughts on this part?

I also added the first OpenMP entry to gcc-13/changes.html, which also
links to the GOMP page. (I expect more mainline commits in the near
feature, but I want to have a stub there. I think the next update could
be done in a month or two – once more items have accumulated.)

And I tried to incorporate all suggested changes. Regarding:

On 17.05.22 10:21, Jakub Jelinek wrote:
>> +<p>Features added by OpenMP version</p>
>> +<ul>
>> +  <li><a href="#omp4.5">OpenMP 4.5</a></li>
>> ...
> I think we should have also 2.5, 3.0, 3.1 and 4.0 entries in the above list,
> with similar style as the OpenMP 4.5 entry.
> ...
> Though, maybe a table form for the 2.5-4.5 versions would be more consistent
> with the rest,

Partially because I am lazy and partially because I think a table with
those entries looks odd, I went for the bullet style.

>> +<tr><td>Map-order clarifications</td><td>GCC?</td><td></td></tr>
> This entry I gave up on, it isn't exactly clear to me what that
> bullet is about and once we figure that out, we need to do some archeology
> on whether we support it at all and if yes, since which commit and thus
> since which GCC version.
I concur – but the question is how to handle it now? Leave it and
correct it later? Comment/remove it?

Can you check whether you now like the bullet points? If so, I will
update the .texi to match.

Tobias
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
Jakub Jelinek May 17, 2022, 9 a.m. UTC | #6
On Tue, May 17, 2022 at 10:49:42AM +0200, Tobias Burnus wrote:
> Thoughts on this part?

Either place is fine.

> > > +<tr><td>Map-order clarifications</td><td>GCC?</td><td></td></tr>
> > This entry I gave up on, it isn't exactly clear to me what that
> > bullet is about and once we figure that out, we need to do some archeology
> > on whether we support it at all and if yes, since which commit and thus
> > since which GCC version.
> I concur – but the question is how to handle it now? Leave it and
> correct it later? Comment/remove it?

Write ? in the Version column alone instead of GCC? and in comment
say To be verified or something similar.

BTW, it would be really nice to use colors like
https://gcc.gnu.org/projects/cxx-status.html uses, use just GCC versions
instead of GCC version and No instead of N and use hyperlinks to
changes.html OpenMP ids (or just changes.html if we don't have an id).
And, for No we could in the future hyperlink to bugzilla if we file
PRs for those missing or WIP features which people can assign etc.

But that can be changed incrementally.

> Can you check whether you now like the bullet points? If so, I will
> update the .texi to match.

LGTM.

	Jakub
Tobias Burnus May 17, 2022, 9:50 a.m. UTC | #7
On 17.05.22 11:00, Jakub Jelinek wrote:
> BTW, it would be really nice to use colors like
> https://gcc.gnu.org/projects/cxx-status.html uses, use just GCC versions
> instead of GCC version and No instead of N and use hyperlinks to
> changes.html OpenMP ids (or just changes.html if we don't have an id).
Done so: https://gcc.gnu.org/projects/gomp/

I also had to add a table.omptable to gcc.css as we need column 2 not 3
or 4 to be centered.

Thanks again for all the comments!

Tobias

-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
Jakub Jelinek May 17, 2022, 10:02 a.m. UTC | #8
On Tue, May 17, 2022 at 11:50:15AM +0200, Tobias Burnus wrote:
> On 17.05.22 11:00, Jakub Jelinek wrote:
> > BTW, it would be really nice to use colors like
> > https://gcc.gnu.org/projects/cxx-status.html uses, use just GCC versions
> > instead of GCC version and No instead of N and use hyperlinks to
> > changes.html OpenMP ids (or just changes.html if we don't have an id).
> Done so: https://gcc.gnu.org/projects/gomp/
> 
> I also had to add a table.omptable to gcc.css as we need column 2 not 3
> or 4 to be centered.

Thanks.
Noticed small typo, committed now as obvious.

diff --git a/htdocs/projects/gomp/index.html b/htdocs/projects/gomp/index.html
index 52991c02..799a1e3b 100644
--- a/htdocs/projects/gomp/index.html
+++ b/htdocs/projects/gomp/index.html
@@ -24,7 +24,7 @@ OpenMP and OpenACC are supported with GCC's C, C++ and Fortran compilers.</p>
   <li><a href="#contributing">Contributing</a></li>
   <li><a href="#bugs">Reporting Bugs</a></li>
   <li><a href="#implementation-status">OpenMP Implementation Status</a>:
-  <a href="#omp2.5">2.5</a> · <a href="#omp3.0">5.0</a> ·
+  <a href="#omp2.5">2.5</a> · <a href="#omp3.0">3.0</a> ·
   <a href="#omp3.1">3.1</a> · <a href="#omp4.0">4.0</a> ·
   <a href="#omp4.5">4.5</a> · <a href="#omp5.0">5.0</a> ·
   <a href="#omp5.1">5.1</a> · <a href="#omp5.2">5.2</a></li>


	Jakub
Gerald Pfeifer Jan. 21, 2023, 8:57 p.m. UTC | #9
On Tue, 17 May 2022, Tobias Burnus wrote:
> Done so: https://gcc.gnu.org/projects/gomp/

Nice!

> Thanks again for all the comments!

Always welcome! One detailed I noticed only now:

   The GOMP project consists of implementation of OpenMP and OpenACC to 
   permit annotating the source code to permit running it concurrently
   ^^^^^^                               ^^^^^^
   with thread parallelization and on offloading devices

Do you have a good idea how to reword that to avoid two instances of 
"permit" in the same sentence, so close to each other?

Gerald
diff mbox series

Patch

Add OpenMP by-GCC-version implementation status

* htdocs/projects/gomp/openmp-status.html: New.
* htdocs/projects/gomp/index.html: Link it.

 htdocs/projects/gomp/index.html         |  15 ++-
 htdocs/projects/gomp/openmp-status.html | 202 ++++++++++++++++++++++++++++++++
 2 files changed, 211 insertions(+), 6 deletions(-)

diff --git a/htdocs/projects/gomp/index.html b/htdocs/projects/gomp/index.html
index 59697c10..81096578 100644
--- a/htdocs/projects/gomp/index.html
+++ b/htdocs/projects/gomp/index.html
@@ -54,18 +54,21 @@  projects.</p>
 extensions to target language parsers.  A long-term goal is
 the generation of efficient and small code for OpenMP applications.</p>
 
+<h2>Documentation</h2>
+<ul>
+  <li><a href="openmp-status.html">OpenMP Implementation status</a></li>
+  <li><a href="https://gcc.gnu.org/onlinedocs/libgomp/">Online
+      documentation</a> of libgomp, the GOMP support library</li>
+</ul>
+
 <h2>Contributing</h2>
 <p>We encourage everyone to
 <a href="../../contribute.html">contribute changes</a>
 and help test GOMP.  GOMP has been merged into mainline GCC.</p>
 
 <h2>Reporting Bugs</h2>
-<p>Please add "openmp" to the keywords field when filing a bug report.</p>
-
-<h2>Documentation</h2>
-<p>libgomp, the GOMP support library, has
-<a href="https://gcc.gnu.org/onlinedocs/libgomp/">online documentation</a>
-available.</p>
+<p>Please add <q>openmp</q> to the keywords field when filling a
+<a href="https://gcc.gnu.org/bugzilla/">bug report</a>.</p>
 
 <h2>Status</h2>
 <dl>
diff --git a/htdocs/projects/gomp/openmp-status.html b/htdocs/projects/gomp/openmp-status.html
new file mode 100644
index 00000000..37dcefa5
--- /dev/null
+++ b/htdocs/projects/gomp/openmp-status.html
@@ -0,0 +1,202 @@ 
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>OpenMP Implementation Status in GCC</title>
+<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
+</head>
+
+<body>
+<h1>OpenMP Implementation Status in GCC</h1>
+
+<p>Disclaimer: A feature might be only fully supported in a later GCC version
+than listed, depending on resolved corner cases and optimizations.</p>
+
+<p>Features added by OpenMP version</p>
+<ul>
+  <li><a href="#omp4.5">OpenMP 4.5</a></li>
+  <li><a href="#omp5.0">OpenMP 5.0</a></li>
+  <li><a href="#omp5.1">OpenMP 5.1</a></li>
+  <li><a href="#omp5.2">OpenMP 5.2</a></li>
+</ul>
+
+<p>OpenMP implementation status in the online documentation:</p>
+<ul>
+  <li><a
+    href="https://gcc.gnu.org/onlinedocs/libgomp/OpenMP-Implementation-Status.html"
+    >Mainline (GCC 13)</a></li>
+  <li><a
+    href="https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html"
+    >GCC 12</a></li>
+</ul>
+
+
+<h2 id="omp4.5">OpenMP 4.5</h2>
+
+<ul>
+  <li><strong>C/C++:</strong> Supported since GCC 6</li>
+  <li><strong>Fortran:</strong> Partial support since GCC 7, full support since GCC 11</li>
+</ul>
+
+
+<h2 id="omp5.0">OpenMP 5.0</h2>
+
+<table>
+<thead>
+<tr><th>Feature</th><th>GCC Version</th><th>Comments</th></tr>
+</thead>
+<tbody>
+<tr><td><code>in_reduction</code> clause on task constructs</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>Supporting C++'s range-based for loop</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>Iterators</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>!= as relational-op in canonical loop form for C/C++</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>C/C++'s lvalue expressions in <code>depend</code> clauses</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>mutexinoutset</code> <em>dependence-type</em> for <code>depend</code> clause</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>depobj</code> construct and depend objects </td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>depend</code> clause on <code>taskwait</code></td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>teams</code> construct outside an enclosing target region</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>Clauses <code>if</code>, <code>nontemporal</code> and <code>order(concurrent)</code> in <code>simd</code> construct</td><td>GCC&nbsp;9/GCC&nbsp;10</td><td></td></tr>
+<tr><td><code>defaultmap</code> extensions</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>hint</code> clause on the <code>atomic</code> construct</td><td>GCC&nbsp;9</td><td>stub only</td></tr>
+<tr><td>Weak memory ordering clauses on <code>atomic</code> and <code>flush</code> construct</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>Combined master constructs</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>Runtime routines and environment variables to display runtimethread affinity information</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>omp_pause_resource</code> and <code>omp_pause_resource_all</code> runtime routines</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>nonmonotonic</code> as default loop schedule modifier for worksharing-loop constructs</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>atomic</code> constructs in <code>simd</code></td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>task_reduction</code> clause with <code>taskgroup</code></td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>task</code> modifier to <code>reduction</code> clause</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>reduction</code> and <code>in_reduction</code> clauses on <code>taskloop</code> and <code>taskloop simd</code> constructs</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>taskloop</code> construct cancelable by <code>cancel</code> construct</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td>Lock hints were renamed to synchronization hints</td><td>GCC&nbsp;9</td><td></td></tr>
+<tr><td><code>requires</code> directive</td><td>GCC&nbsp;9<br>GCC&nbsp;12<br>&ndash;</td><td>(<code>atomic_default_mem_order</code>)<br>(<code>dynamic_allocators</code>)<br>rest parsing only</td></tr>
+<tr><td><code>conditional</code> modifier to <code>lastprivate</code> clause</td><td>GCC&nbsp;10</td><td></td></tr>
+<tr><td><code>scan</code> directive and <code>in_scan</code> modifier for the <code>reduction clause</code></td><td>GCC&nbsp;10</td><td></td></tr>
+<tr><td><code>order(concurrent)</code> clause</td><td>GCC&nbsp;10</td><td></td></tr>
+<tr><td><code>loop</code> construct</td><td>GCC&nbsp;10</td><td></td></tr>
+<tr><td><code>declare variant</code> directive</td><td>GCC&nbsp;10/GCC&nbsp;11</td><td><em>simd</em> traits not handled correctly</td></tr>
+<tr><td><code>use_device_addr</code> clause on <code>target data</code></td><td>GCC&nbsp;10</td><td></td></tr>
+<tr><td>Nested <code>declare target</code> directive</td><td>GCC&nbsp;10</td><td></td></tr>
+<tr><td><code>allocate</code> clause</td><td>GCC&nbsp;11</td><td>Initial support</td></tr>
+<tr><td><em>target-offload-var</em> ICV and <code>OMP_TARGET_OFFLOAD</code> env variable</td><td>GCC&nbsp;11</td><td></td></tr>
+<tr><td>Predefined memory spaces, memory allocators, allocator traits</td><td>GCC&nbsp;11</td><td>Some are only stubs</td></tr>
+<tr><td>Non-rectangular loop nests</td><td>GCC&nbsp;11</td><td>Only C/C++</td></tr>
+<tr><td>Nested-parallel changes to <em>max-active-levels-var</em> ICV</td><td>GCC&nbsp;11</td><td></td></tr>
+<tr><td><code>detach</code> clause to <code>task</code> construct</td><td>GCC&nbsp;11</td><td></td></tr>
+<tr><td><code>omp_fulfill_event</code> runtime routine</td><td>GCC&nbsp;11</td><td></td></tr>
+<tr><td>Memory management routines</td><td>GCC&nbsp;11</td><td></td></tr>
+<tr><td>Implicit <code>declare target</code> directive</td><td>GCC&nbsp;11</td><td></td></tr>
+<tr><td><code>omp_get_supported_active_levels</code> routine</td><td>GCC&nbsp;11</td><td></td></tr>
+<tr><td><code>in_reduction</code> clause on <code>target</code> constructs</td><td>GCC&nbsp;12</td><td><code>nowait</code> only stub</td></tr>
+<tr><td><code>affinity</code> clause to <code>task</code> construct</td><td>GCC&nbsp;12</td><td>Stub only</td></tr>
+<tr><td><code>close</code> <em>map-type-modifier</em></td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>omp_get_device_num</code> runtime routine</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>ancestor</code> modifier on <code>device</code> clause</td><td>GCC&nbsp;12</td><td>Reverse offload unsupported</td></tr>
+<tr><td>Mapping C/C++ pointer variables and to assign the address of device memory mapped by an array section</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td>Mapping of Fortran pointer and allocatable variables, including pointer and allocatable components of variables</td><td>GCC&nbsp;12</td><td>Mapping of vars with allocatable components unsupported</td></tr>
+<tr><td>Map-order clarifications</td><td>GCC?</td><td></td></tr>
+<tr><td>Array shaping</td><td>N</td><td></td></tr>
+<tr><td>Array sections with non-unit strides in C and C++</td><td>N</td><td></td></tr>
+<tr><td><code>metadirective</code> directive</td><td>N</td><td></td></tr>
+<tr><td>Collapse of associated loops that are imperfectly nested loops</td><td>N</td><td></td></tr>
+<tr><td><code>allocate</code> directive</td><td>N</td><td></td></tr>
+<tr><td>Discontiguous array section with <code>target update</code> construct</td><td>N</td><td></td></tr>
+<tr><td>C/C++'s lvalue expressions in <code>to</code>, <code>from</code> and <code>map</code> clauses</td><td>N</td><td></td></tr>
+<tr><td><code>declare mapper</code> directive</td><td>N</td><td></td></tr>
+<tr><td>OMPT interface</td><td>N</td><td></td></tr>
+<tr><td>OMPD interface</td><td>N</td><td></td></tr>
+</tbody>
+</table>
+
+
+<h2 id="omp5.1">OpenMP 5.1</h2>
+
+<table>
+<thead>
+<tr><th>Feature</th><th>GCC Version</th><th>Comments</th></tr>
+</thead>
+<tbody>
+<tr><td>OpenMP directive as C++ attribute specifiers</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>nothing</code> directive</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>error</code> directive</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>masked</code> construct</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>scope</code> directive</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>strict</code> modifier in the <code>grainsize</code> and <code>num_tasks</code> clauses of the <code>taskloop</code> construct</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>align</code> clause/modifier in <code>allocate</code> directive/clause and <code>allocator</code> directive</td><td>GCC&nbsp;12</td><td>C/C++ on clause only</td></tr>
+<tr><td><code>thread_limit</code> clause to <code>target</code> construct</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>has_device_addr</code> clause to <code>target construct</code></td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td>Extensions to the <code>atomic</code> directive</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>seq_cst</code> clause on a <code>flush construct</code></td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>private</code> and <code>firstprivate</code> argument to <code>default</code> clause in C and C++</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>omp_set_num_teams</code>, <code>omp_set_teams_thread_limit</code>, <code>omp_get_max_teams</code>, <code>omp_get_teams_thread_limit</code> runtime routines</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>omp_calloc</code>, <code>omp_realloc</code>, <code>omp_aligned_alloc</code>, and <code>omp_aligned_callocruntime</code> routines</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>omp_alloctrait_key_t</code> enum: <code>omp_atv_serialized</code> added, <code>omp_atv_default</code> changed</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>omp_display_env</code> runtime routine</td><td>GCC&nbsp;12</td><td>Not inside target regions</td></tr>
+<tr><td><code>OMP_PLACES</code> syntax extensions</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>OMP_NUM_TEAMS</code> and <code>OMP_TEAMS_THREAD_LIMIT</code> env variables</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td>Support of strictly structured blocks in Fortran</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td>Support of structured block sequences in C/C++</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>unconstrained</code> and <code>reproducible</code> modifiers on <code>order</code> clause</td><td>GCC&nbsp;12</td><td></td></tr>
+<tr><td><code>omp_target_is_accessible</code> runtime routine</td><td>GCC&nbsp;13</td><td></td></tr>
+<tr><td><code>omp_all_memory</code> reserved locator</td><td>GCC&nbsp;13</td><td></td></tr>
+<tr><td><em>target_device trait</em> in OpenMP Context</td><td>N</td><td></td></tr>
+<tr><td><code>target_device</code> selector set in context selectors</td><td>N</td><td></td></tr>
+<tr><td>C/C++'s <code>declare variant</code> directive: elision support of preprocessed code</td><td>N</td><td></td></tr>
+<tr><td><code>declare variant</code>: new clauses <code>adjust_args</code> and <code>append_args</code></td><td>N</td><td></td></tr>
+<tr><td><code>dispatch</code> construct</td><td>N</td><td></td></tr>
+<tr><td>device-specific ICV settings the environment variables</td><td>N</td><td></td></tr>
+<tr><td><code>assume</code> directive</td><td>N</td><td></td></tr>
+<tr><td>Loop transformation constructs</td><td>N</td><td></td></tr>
+<tr><td>iterators in <code>target update</code> motion clauses and map clauses</td><td>N</td><td></td></tr>
+<tr><td>indirect calls to the device version of a procedure or function in target regions</td><td>N</td><td></td></tr>
+<tr><td><code>interop</code> directive</td><td>N</td><td></td></tr>
+<tr><td><code>omp_interop_t</code> object support in runtime routines</td><td>N</td><td></td></tr>
+<tr><td><code>nowait</code> clause in <code>taskwait</code> directive</td><td>N</td><td></td></tr>
+<tr><td><code>inoutset</code> argument to the <code>depend</code> clause</td><td>N</td><td></td></tr>
+<tr><td><code>present</code> argument to <code>defaultmap</code> clause</td><td>N</td><td></td></tr>
+<tr><td><code>omp_target_memcpy_async</code> and <code>omp_target_memcpy_rect_async</code> runtime routines</td><td>N</td><td></td></tr>
+<tr><td><code>omp_get_mapped_ptr</code> runtime routine</td><td>N</td><td></td></tr>
+<tr><td><code>ompt_scope_endpoint_t</code> enum: <code>ompt_scope_beginend</code></td><td>N</td><td></td></tr>
+<tr><td><code>ompt_sync_region_t</code> enum additions</td><td>N</td><td></td></tr>
+<tr><td><code>ompt_state_t</code> enum: <code>ompt_state_wait_barrier_implementation</code> and <code>ompt_state_wait_barrier_teams</code></td><td>N</td><td></td></tr>
+<tr><td><code>ompt_callback_target_data_op_emi_t</code>, <code>ompt_callback_target_emi_t</code>, <code>ompt_callback_target_map_emi_t</code> and <code>ompt_callback_target_submit_emi_t</code></td><td>N</td><td></td></tr>
+<tr><td><code>ompt_callback_error_t</code> type</td><td>N</td><td></td></tr>
+</tbody>
+</table>
+
+
+<h2 id="omp5.2">OpenMP 5.2</h2>
+
+<table>
+<thead>
+<tr><th>Feature</th><th>GCC Version</th><th>Comments</th></tr>
+</thead>
+<tbody>
+<tr><td><code>omp_in_explicit_task</code> routine and <em>implicit-task-var</em> ICV</td><td>N</td><td></td></tr>
+<tr><td><code>omp</code>/<code>ompx</code>/<code>ompx</code> sentinels and <code>omp_</code>/<code>ompx_</code> namespaces</td><td>N</td><td></td></tr>
+<tr><td>Clauses on <code>end</code> directive can be on directive</td><td>N</td><td></td></tr>
+<tr><td>Deprecation of no-argument <code>destroy</code> clause on <code>depobj</code></td><td>N</td><td></td></tr>
+<tr><td><code>linear</code> clause syntax changes and <code>step</code> modifier</td><td>N</td><td></td></tr>
+<tr><td>Deprecation of minus operator for reductions</td><td>N</td><td></td></tr>
+<tr><td>Deprecation of separating <code>map</code> modifiers without comma</td><td>N</td><td></td></tr>
+<tr><td><code>declare mapper</code> with iterator and <code>present</code> modifiers</td><td>N</td><td></td></tr>
+<tr><td>If a matching mapped list item is not found in the data environment, the pointer retains its original value</td><td>N</td><td></td></tr>
+<tr><td>New <code>enter</code> clause replacing <code>to</code> on declare target directive</td><td>N</td><td></td></tr>
+<tr><td>Extended list of directives permitted in Fortran pure procedures</td><td>N</td><td></td></tr>
+<tr><td>New <code>allocators</code> directive for Fortran</td><td>N</td><td></td></tr>
+<tr><td>Optional paired <code>end</code> directive with <code>dispatch</code></td><td>N</td><td></td></tr>
+<tr><td>New <code>memspace</code> and <code>traits</code> modifiers for <code>uses_allocators</code></td><td>N</td><td></td></tr>
+<tr><td>New <code>otherwise</code> clause replacing <code>default</code> on metadirectives</td><td>N</td><td></td></tr>
+<tr><td>Deprecation of delimited form of <code>declare target</code></td><td>N</td><td></td></tr>
+<tr><td>Reproducible semantics changed for <code>order(concurrent)</code></td><td>N</td><td></td></tr>
+<tr><td><code>allocate</code> and <code>firstprivate</code> clauses on <code>scope</code></td><td>N</td><td></td></tr>
+<tr><td><code>ompt_callback_work</code></td><td>N</td><td></td></tr>
+<tr><td>Extended map-type handling of <code>target enter/exit data</code></td><td>N</td><td></td></tr>
+<tr><td>New <code>doacross</code> clause replacing <code>depend</code> with <code>sourch</code>/<code>sink</code> modifier</td><td>N</td><td></td></tr>
+<tr><td><code>omp_cur_iteration</code> keyword</td><td>N</td><td></td></tr>
+</tbody>
+</table>
+
+</body>
+</html>