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
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 9</td><td></td></tr> +<tr><td>Supporting C++'s range-based for loop</td><td>GCC 9</td><td></td></tr> +<tr><td>Iterators</td><td>GCC 9</td><td></td></tr> +<tr><td>!= as relational-op in canonical loop form for C/C++</td><td>GCC 9</td><td></td></tr> +<tr><td>C/C++'s lvalue expressions in <code>depend</code> clauses</td><td>GCC 9</td><td></td></tr> +<tr><td><code>mutexinoutset</code> <em>dependence-type</em> for <code>depend</code> clause</td><td>GCC 9</td><td></td></tr> +<tr><td><code>depobj</code> construct and depend objects </td><td>GCC 9</td><td></td></tr> +<tr><td><code>depend</code> clause on <code>taskwait</code></td><td>GCC 9</td><td></td></tr> +<tr><td><code>teams</code> construct outside an enclosing target region</td><td>GCC 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 9/GCC 10</td><td></td></tr> +<tr><td><code>defaultmap</code> extensions</td><td>GCC 9</td><td></td></tr> +<tr><td><code>hint</code> clause on the <code>atomic</code> construct</td><td>GCC 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 9</td><td></td></tr> +<tr><td>Combined master constructs</td><td>GCC 9</td><td></td></tr> +<tr><td>Runtime routines and environment variables to display runtimethread affinity information</td><td>GCC 9</td><td></td></tr> +<tr><td><code>omp_pause_resource</code> and <code>omp_pause_resource_all</code> runtime routines</td><td>GCC 9</td><td></td></tr> +<tr><td><code>nonmonotonic</code> as default loop schedule modifier for worksharing-loop constructs</td><td>GCC 9</td><td></td></tr> +<tr><td><code>atomic</code> constructs in <code>simd</code></td><td>GCC 9</td><td></td></tr> +<tr><td><code>task_reduction</code> clause with <code>taskgroup</code></td><td>GCC 9</td><td></td></tr> +<tr><td><code>task</code> modifier to <code>reduction</code> clause</td><td>GCC 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 9</td><td></td></tr> +<tr><td><code>taskloop</code> construct cancelable by <code>cancel</code> construct</td><td>GCC 9</td><td></td></tr> +<tr><td>Lock hints were renamed to synchronization hints</td><td>GCC 9</td><td></td></tr> +<tr><td><code>requires</code> directive</td><td>GCC 9<br>GCC 12<br>–</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 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 10</td><td></td></tr> +<tr><td><code>order(concurrent)</code> clause</td><td>GCC 10</td><td></td></tr> +<tr><td><code>loop</code> construct</td><td>GCC 10</td><td></td></tr> +<tr><td><code>declare variant</code> directive</td><td>GCC 10/GCC 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 10</td><td></td></tr> +<tr><td>Nested <code>declare target</code> directive</td><td>GCC 10</td><td></td></tr> +<tr><td><code>allocate</code> clause</td><td>GCC 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 11</td><td></td></tr> +<tr><td>Predefined memory spaces, memory allocators, allocator traits</td><td>GCC 11</td><td>Some are only stubs</td></tr> +<tr><td>Non-rectangular loop nests</td><td>GCC 11</td><td>Only C/C++</td></tr> +<tr><td>Nested-parallel changes to <em>max-active-levels-var</em> ICV</td><td>GCC 11</td><td></td></tr> +<tr><td><code>detach</code> clause to <code>task</code> construct</td><td>GCC 11</td><td></td></tr> +<tr><td><code>omp_fulfill_event</code> runtime routine</td><td>GCC 11</td><td></td></tr> +<tr><td>Memory management routines</td><td>GCC 11</td><td></td></tr> +<tr><td>Implicit <code>declare target</code> directive</td><td>GCC 11</td><td></td></tr> +<tr><td><code>omp_get_supported_active_levels</code> routine</td><td>GCC 11</td><td></td></tr> +<tr><td><code>in_reduction</code> clause on <code>target</code> constructs</td><td>GCC 12</td><td><code>nowait</code> only stub</td></tr> +<tr><td><code>affinity</code> clause to <code>task</code> construct</td><td>GCC 12</td><td>Stub only</td></tr> +<tr><td><code>close</code> <em>map-type-modifier</em></td><td>GCC 12</td><td></td></tr> +<tr><td><code>omp_get_device_num</code> runtime routine</td><td>GCC 12</td><td></td></tr> +<tr><td><code>ancestor</code> modifier on <code>device</code> clause</td><td>GCC 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 12</td><td></td></tr> +<tr><td>Mapping of Fortran pointer and allocatable variables, including pointer and allocatable components of variables</td><td>GCC 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 12</td><td></td></tr> +<tr><td><code>nothing</code> directive</td><td>GCC 12</td><td></td></tr> +<tr><td><code>error</code> directive</td><td>GCC 12</td><td></td></tr> +<tr><td><code>masked</code> construct</td><td>GCC 12</td><td></td></tr> +<tr><td><code>scope</code> directive</td><td>GCC 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 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 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 12</td><td></td></tr> +<tr><td><code>has_device_addr</code> clause to <code>target construct</code></td><td>GCC 12</td><td></td></tr> +<tr><td>Extensions to the <code>atomic</code> directive</td><td>GCC 12</td><td></td></tr> +<tr><td><code>seq_cst</code> clause on a <code>flush construct</code></td><td>GCC 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 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 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 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 12</td><td></td></tr> +<tr><td><code>omp_display_env</code> runtime routine</td><td>GCC 12</td><td>Not inside target regions</td></tr> +<tr><td><code>OMP_PLACES</code> syntax extensions</td><td>GCC 12</td><td></td></tr> +<tr><td><code>OMP_NUM_TEAMS</code> and <code>OMP_TEAMS_THREAD_LIMIT</code> env variables</td><td>GCC 12</td><td></td></tr> +<tr><td>Support of strictly structured blocks in Fortran</td><td>GCC 12</td><td></td></tr> +<tr><td>Support of structured block sequences in C/C++</td><td>GCC 12</td><td></td></tr> +<tr><td><code>unconstrained</code> and <code>reproducible</code> modifiers on <code>order</code> clause</td><td>GCC 12</td><td></td></tr> +<tr><td><code>omp_target_is_accessible</code> runtime routine</td><td>GCC 13</td><td></td></tr> +<tr><td><code>omp_all_memory</code> reserved locator</td><td>GCC 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>