GCC supports OpenMP extensions to the C, C++, and Fortran languages with the -fopenmp option. Similarly, OpenACC extensions are supported in all three languages with -fopenacc. See OpenMP and OpenACC for an overview of these extensions.
-foffload=disable ¶-foffload=default-foffload=target-listSpecify for which OpenMP and OpenACC offload targets code should be generated. The default behavior, equivalent to -foffload=default, is to generate code for all supported offload targets. The -foffload=disable form generates code only for the host fallback, while -foffload=target-list generates code only for the specified comma-separated list of offload targets.
Offload targets are specified in GCC’s internal target-triplet format. You can
run the compiler with -v to show the list of configured offload targets
under OFFLOAD_TARGET_NAMES.
-foffload-options=options ¶-foffload-options=target-triplet-list=optionsWith -foffload-options=options, GCC passes the specified options to the compilers for all enabled offloading targets. You can specify options that apply only to a specific target or targets by using the -foffload-options=target-list=options form. The target-list is a comma-separated list in the same format as for the -foffload= option.
Typical command lines are
-foffload-options='-fno-math-errno -ffinite-math-only' \
-foffload-options=nvptx-none=-latomic
-foffload-options=amdgcn-amdhsa=-march=gfx906
-fopenacc ¶Enable handling of OpenACC directives ‘#pragma acc’ in C/C++ and ‘!$acc’ in free-form Fortran and ‘!$acc’, ‘c$acc’ and ‘*$acc’ in fixed-form Fortran. This option implies -pthread, and thus is only supported on targets that have support for -pthread.
-fopenacc-dim=geom ¶Specify default compute dimensions for parallel offload regions that do not explicitly specify them. The geom value is a triple of ‘:’-separated sizes, in order gang, worker, and vector. A size can be omitted, to use a target-specific default value.
-fopenmp ¶Enable handling of OpenMP directives ‘#pragma omp’, ‘[[omp::decl(...)]]’, ‘[[omp::directive(...)]]’, and ‘[[omp::sequence(...)]]’ in C/C++. In Fortran, it enables ‘!$omp’ and the conditional compilation sentinel ‘!$’. In fixed source form Fortran, the sentinels can also start with ‘c’ or ‘*’.
This option implies -pthread, and thus is only supported on targets that have support for -pthread. -fopenmp implies -fopenmp-simd.
-fopenmp-simd ¶Enable handling of OpenMP’s simd, declare simd,
declare reduction, assume, ordered, scan
and loop directive, and of combined or composite directives with
simd as constituent with #pragma omp,
[[omp::directive(...)]], [[omp::sequence(...)]] and
[[omp::decl(...)]] in C/C++ and !$omp in Fortran. It
additionally enables the conditional compilation sentinel ‘!$’ in
Fortran. In fixed source form Fortran, the sentinels can also start with
‘c’ or ‘*’. Other OpenMP directives are ignored. Unless
-fopenmp is additionally specified, the loop region binds
to the current task region, independent of the specified bind clause.
-fopenmp-ompt ¶For some OpenMP constructs, generate calls into the OpenMP runtime before and
after the region instead of only on region entry. For those constructs, the
additional calls are only needed to provide better tracing results in tools
using the OMPT interface and have a small overhead. The extra calls are
generated for the masked, master, scope, and single
constructs and with static scheduling for the distribute and worksharing
loop constructs. Requires -fopenmp.
-fopenmp-ompt-detailed ¶Add additional calls into the OpenMP runtime for more detailed tracing via OMPT,
which might have a measurable effect on the performance. The option enables
additional constructs to issue events for the dispatch callback, which
is invoked when beginning to execute a section or a collapsed iteration in a
taskloop or worksharing construct. The additional calls are generated
with static scheduling for the distribute and worksharing loop
constructs. Implies -fopenmp-ompt and requires -fopenmp.
-fopenmp-target-simd-clone ¶-fopenmp-target-simd-clone=device-typeIn addition to generating SIMD clones for functions marked with the
declare simd directive, GCC also generates clones
for functions marked with the OpenMP declare target directive
that are suitable for vectorization when this option is in effect. The
device-type may be one of none, host, nohost,
and any, which correspond to keywords for the device_type
clause of the declare target directive; clones are generated for
the intersection of devices specified.
-fopenmp-target-simd-clone is equivalent to
-fopenmp-target-simd-clone=any and
-fno-openmp-target-simd-clone is equivalent to
-fopenmp-target-simd-clone=none.
At -O2 and higher (but not -Os or -Og) this optimization defaults to -fopenmp-target-simd-clone=nohost; otherwise it is disabled by default.