From mboxrd@z Thu Jan 1 00:00:00 1970
Return-Path:
omp_all_memory
reserved locator and the
+ omp_target_is_accessible
and omp_get_mapped_ptr
+ API routines.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 (accelerators
such
+as GPUs), including the associated run-time library and API routines. Both
+OpenMP and OpenACC are supported with GCC's C, C++ and Fortran compilers.
-fopenmp
; -fopenmp-simd
can be used
+ to enable only the SIMD vectorization and loop-transformation constructs
+ without creating multiple threads, offloading code or adding library
+ dependency.-fopenacc
.-foffload=
to disable or specify the offload-devices to be
+ used. Use -foffload-options=
to pass device-specific compiler and
+ linker flags.Diagnostics
+-fopt-info
flag provides details about compile-time performed
+ optimizations.Documentation
+The GOMP project has developed an implementation of OpenMP @@ -39,10 +110,9 @@ efficient parallel code.
OpenMP additionally permits to offload computations on accelerators such as GPUs, making use of their highly parallel computation support; if -no accelarator is available, as fallback, the computation is +no accelerator is available, as fallback, the computation is then done on the host.
-To remain relevant, free software development tools must support emerging technologies. By implementing OpenMP, GOMP provides a simplified syntax tools for creating software targeted @@ -54,20 +124,761 @@ projects.
extensions to target language parsers. A long-term goal is the generation of efficient and small code for OpenMP applications. -When support for OpenACC was added, the project name GOMP
+was reinterpreted as GNU Offloading and Multi-Processing
instead
+of denoting GNU OpenMP
.
+
+
We encourage everyone to contribute changes and help test GOMP. GOMP has been merged into mainline GCC.
-Please add "openmp" to the keywords field when filing a bug report.
- -libgomp, the GOMP support library, has -online documentation -available.
- -Please add openmp
or openacc
to the keywords field when
+filing a bug report.
Implementation status in libgomp manual: +Mainline (GCC 13), +GCC 12.
+ +Disclaimer: A feature might be only fully supported in a later GCC version +than listed, depending on resolved corner cases and optimizations.
+ + + +Feature | +GCC Version | +Comments | +
---|---|---|
in_reduction clause on task constructs |
+ GCC 9 | ++ |
Supporting C++'s range-based for loop | +GCC 9 | ++ |
Iterators | +GCC 9 | ++ |
!= as relational-op in canonical loop form for C/C++ | +GCC 9 | ++ |
C/C++'s lvalue expressions in depend clauses |
+ GCC 9 | ++ |
mutexinoutset dependence-type for depend clause |
+ GCC 9 | ++ |
depobj construct and depend objects |
+ GCC 9 | ++ |
depend clause on taskwait |
+ GCC 9 | ++ |
teams construct outside an enclosing target region |
+ GCC 9 | ++ |
Clauses if , nontemporal and order(concurrent) in simd construct |
+ GCC 9/GCC 10 | ++ |
defaultmap extensions |
+ GCC 9 | ++ |
hint clause on the atomic construct |
+ GCC 9 | +Stub only | +
Weak memory ordering clauses on atomic and flush construct |
+ GCC 9 | ++ |
Combined master constructs | +GCC 9 | ++ |
Runtime routines and environment variables to display runtimethread affinity information | +GCC 9 | ++ |
omp_pause_resource and omp_pause_resource_all runtime routines |
+ GCC 9 | ++ |
nonmonotonic as default loop schedule modifier for worksharing-loop constructs |
+ GCC 9 | ++ |
atomic constructs in simd |
+ GCC 9 | ++ |
task_reduction clause with taskgroup |
+ GCC 9 | ++ |
task modifier to reduction clause |
+ GCC 9 | ++ |
reduction and in_reduction clauses on taskloop and taskloop simd constructs |
+ GCC 9 | ++ |
taskloop construct cancelable by cancel construct |
+ GCC 9 | ++ |
Lock hints were renamed to synchronization hints | +GCC 9 | ++ |
requires directive |
+ GCC 9 GCC 12 – |
+ (atomic_default_mem_order )( dynamic_allocators )rest parsing only |
+
conditional modifier to lastprivate clause |
+ GCC 10 | ++ |
scan directive and in_scan modifier for the reduction clause |
+ GCC 10 | ++ |
order(concurrent) clause |
+ GCC 10 | ++ |
loop construct |
+ GCC 10 | ++ |
declare variant directive |
+ GCC 10/GCC 11 | +simd traits not handled correctly | +
use_device_addr clause on target data |
+ GCC 10 | ++ |
Nested declare target directive |
+ GCC 10 | ++ |
allocate clause |
+ GCC 11 | +Initial support | +
target-offload-var ICV and OMP_TARGET_OFFLOAD env variable |
+ GCC 11 | ++ |
Predefined memory spaces, memory allocators, allocator traits | +GCC 11 | +Some are only stubs | +
Non-rectangular loop nests | +GCC 11 GCC 13 |
+ C/C++ Fortran |
+
Nested-parallel changes to max-active-levels-var ICV | +GCC 11 | ++ |
detach clause to task construct |
+ GCC 11 | ++ |
omp_fulfill_event runtime routine |
+ GCC 11 | ++ |
Memory management routines | +GCC 11 | ++ |
Implicit declare target directive |
+ GCC 11 | ++ |
omp_get_supported_active_levels routine |
+ GCC 11 | ++ |
in_reduction clause on target constructs |
+ GCC 12 | +nowait only stub |
+
affinity clause to task construct |
+ GCC 12 | +Stub only | +
close map-type-modifier |
+ GCC 12 | ++ |
omp_get_device_num runtime routine |
+ GCC 12 | ++ |
ancestor modifier on device clause |
+ GCC 12 | +Reverse offload unsupported | +
Mapping C/C++ pointer variables and to assign the address of device memory mapped by an array section | +GCC 12 | ++ |
Mapping of Fortran pointer and allocatable variables, including pointer and allocatable components of variables | +GCC 12 | +Mapping of vars with allocatable components unsupported | +
Map-order clarifications | +? | +To be verified | +
Array shaping | +No | ++ |
Array sections with non-unit strides in C and C++ | +No | ++ |
metadirective directive |
+ No | ++ |
Collapse of associated loops that are imperfectly nested loops | +No | ++ |
allocate directive |
+ No | ++ |
Discontiguous array section with target update construct |
+ No | ++ |
C/C++'s lvalue expressions in to , from and map clauses |
+ No | ++ |
declare mapper directive |
+ No | ++ |
OMPT interface | +No | ++ |
OMPD interface | +No | ++ |
Feature | +GCC Version | +Comments | +
---|---|---|
OpenMP directive as C++ attribute specifiers | +GCC 12 | ++ |
nothing directive |
+ GCC 12 | ++ |
error directive |
+ GCC 12 | ++ |
masked construct |
+ GCC 12 | ++ |
scope directive |
+ GCC 12 | ++ |
strict modifier in the grainsize and num_tasks clauses of the taskloop construct |
+ GCC 12 | ++ |
align clause/modifier in allocate directive/clause and allocator directive |
+ GCC 12 | +C/C++ on clause only | +
thread_limit clause to target construct |
+ GCC 12 | ++ |
has_device_addr clause to target construct |
+ GCC 12 | ++ |
Extensions to the atomic directive |
+ GCC 12 | ++ |
seq_cst clause on a flush construct |
+ GCC 12 | ++ |
private and firstprivate argument to default clause in C and C++ |
+ GCC 12 | ++ |
omp_set_num_teams , omp_set_teams_thread_limit , omp_get_max_teams , omp_get_teams_thread_limit runtime routines |
+ GCC 12 | ++ |
omp_calloc , omp_realloc , omp_aligned_alloc , and omp_aligned_callocruntime routines |
+ GCC 12 | ++ |
omp_alloctrait_key_t enum: omp_atv_serialized added, omp_atv_default changed |
+ GCC 12 | ++ |
omp_display_env runtime routine |
+ GCC 12 | +Not inside target regions | +
OMP_PLACES syntax extensions |
+ GCC 12 | ++ |
OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT env variables |
+ GCC 12 | ++ |
Support of strictly structured blocks in Fortran | +GCC 12 | ++ |
Support of structured block sequences in C/C++ | +GCC 12 | ++ |
unconstrained and reproducible modifiers on order clause |
+ GCC 12 | ++ |
omp_target_is_accessible runtime routine |
+ GCC 13 | ++ |
omp_get_mapped_ptr runtime routine |
+ GCC 13 | ++ |
omp_all_memory reserved locator |
+ GCC 13 | ++ |
target_device trait in OpenMP Context | +No | ++ |
target_device selector set in context selectors |
+ No | ++ |
C/C++'s declare variant directive: elision support of preprocessed code |
+ No | ++ |
declare variant : new clauses adjust_args and append_args |
+ No | ++ |
dispatch construct |
+ No | ++ |
device-specific ICV settings the environment variables | +No | ++ |
assume directive | +No | ++ |
Loop transformation constructs | +No | ++ |
iterators in target update motion clauses and map clauses |
+ No | ++ |
indirect calls to the device version of a procedure or function in target regions | +No | ++ |
interop directive |
+ No | ++ |
omp_interop_t object support in runtime routines |
+ No | ++ |
nowait clause in taskwait directive |
+ No | ++ |
inoutset argument to the depend clause |
+ No | ++ |
present argument to defaultmap clause |
+ No | ++ |
omp_target_memcpy_async and omp_target_memcpy_rect_async runtime routines |
+ No | ++ |
ompt_scope_endpoint_t enum: ompt_scope_beginend |
+ No | ++ |
ompt_sync_region_t enum additions |
+ No | ++ |
ompt_state_t enum: ompt_state_wait_barrier_implementation and ompt_state_wait_barrier_teams |
+ No | ++ |
ompt_callback_target_data_op_emi_t , ompt_callback_target_emi_t , ompt_callback_target_map_emi_t and ompt_callback_target_submit_emi_t |
+ No | ++ |
ompt_callback_error_t type |
+ No | ++ |
Feature | +GCC Version | +Comments | +
---|---|---|
omp_in_explicit_task routine and implicit-task-var ICV |
+ No | ++ |
omp /ompx /omx sentinels and omp_ /ompx_ namespaces |
+ N/A | ++ |
Clauses on end directive can be on directive |
+ No | ++ |
Deprecation of no-argument destroy clause on depobj |
+ No | ++ |
linear clause syntax changes and step modifier |
+ No | ++ |
Deprecation of minus operator for reductions | +No | ++ |
Deprecation of separating map modifiers without comma |
+ No | ++ |
declare mapper with iterator and present modifiers |
+ No | ++ |
If a matching mapped list item is not found in the data environment, the pointer retains its original value | +No | ++ |
New enter clause as alias for to on declare target directive |
+ No | ++ |
Deprecation of to clause on declare target directive |
+ No | ++ |
Extended list of directives permitted in Fortran pure procedures | +No | ++ |
New allocators directive for Fortran |
+ No | ++ |
Deprecation of allocator directive for Fortran allocatables/pointers |
+ No | ++ |
Optional paired end directive with dispatch |
+ No | ++ |
New memspace and traits modifiers for uses_allocators |
+ No | ++ |
Deprecation of traits array following the allocator_handle expression in uses_allocators |
+ No | ++ |
New otherwise clause as alias for default on metadirectives |
+ No | ++ |
Deprecation of default clause on metadirectives |
+ No | ++ |
Deprecation of delimited form of declare target |
+ No | ++ |
Reproducible semantics changed for order(concurrent) |
+ No | ++ |
allocate and firstprivate clauses on scope |
+ No | ++ |
ompt_callback_work |
+ No | ++ |
Default map type for map clause in target enter/exit data |
+ No | ++ |
New doacross clause as alias for depend with source /sink modifier |
+ No | ++ |
Deprecation of depend with source /sink modifier |
+ No | ++ |
omp_cur_iteration keyword |
+ No | ++ |