Visible to Intel only — GUID: GUID-2D881A91-C5D7-4DDD-84B1-FB9D0D597F4D
Visible to Intel only — GUID: GUID-2D881A91-C5D7-4DDD-84B1-FB9D0D597F4D
ax, Qax
Tells the compiler to generate multiple, feature-specific auto-dispatch code paths for Intel® processors if there is a performance benefit.
Syntax
Linux: |
-axcode |
Windows: |
/Qaxcode |
Arguments
code |
Indicates to the compiler a feature set that it may target, including which instruction sets it may generate. The following descriptions refer to Intel® Streaming SIMD Extensions (Intel® SSE) and Supplemental Streaming SIMD Extensions (SSSE). Possible values are:
|
You can specify more than one code value. When specifying more than one code value, each value must be separated with a comma. See the Examples section below.
Default
OFF |
No auto-dispatch code is generated. Feature-specific code is generated and is controlled by the setting of the following compiler options:
|
Description
This option tells the compiler to generate multiple, feature-specific auto-dispatch code paths for Intel® processors if there is a performance benefit. It also generates a baseline code path. The Intel feature-specific auto-dispatch path is usually more optimized than the baseline path. Other options, such as O3, control how much optimization is performed on the baseline path.
The baseline code path is determined by the architecture specified by options -march or -x (Linux*) or options /arch or /Qx (Windows*). While there are defaults for the [Q]x option that depend on the operating system being used, you can specify an architecture and optimization level for the baseline code that is higher or lower than the default. The specified architecture becomes the effective minimum architecture for the baseline code path.
If you specify both the [Q]ax and [Q]x options, the baseline code will only execute on Intel® processors compatible with the setting specified for the [Q]x.
If you specify both the -ax and -march options (Linux) or the /Qax and /arch options (Windows), the baseline code will execute on non-Intel® processors compatible with the setting specified for the -march or /arch option.
A Non-Intel® baseline and an Intel® baseline have the same set of optimizations enabled, and the default for both is SSE4.2 for x86-based architectures.
The [Q]ax option tells the compiler to find opportunities to generate separate versions of functions that take advantage of features of the specified instruction features.
If the compiler finds such an opportunity, it first checks whether generating a feature-specific version of a function is likely to result in a performance gain. If this is the case, the compiler generates both a feature-specific version of a function and a baseline version of the function. At runtime, one of the versions is chosen to execute, depending on the Intel® processor in use. In this way, the program can benefit from performance gains on more advanced Intel processors, while still working properly on older processors and non-Intel processors. A non-Intel processor always executes the baseline code path.
You can use more than one of the feature values by combining them. For example, you can specify -axSSE4.1,SSSE3 (Linux) or /QaxSSE4.1,SSSE3 (Windows).
This option only applies to host compilation. When offloading is enabled, it does not impact device-specific compilation. Offloading can only be enabled when using ifx.
When using the ifx compiler, if you experience any program failure when using option -ax during this release, please remove the option to see if that solves the problem. If that action solved the problem, please report a bug.
ifx does not support compilation for 32-bit architectures; only code values for 64-bit instruction sets may be specified for ifx.
IDE Equivalent
Visual Studio: Code Generation > Add Processor-Optimized Code Path
Alternate Options
None
Examples
The following shows an example of how to specify this option. Note that in the examples below, you can replace ifx with ifort:
ifx -axSKYLAKE file.cpp ! Linux* systems ifx /QaxSKYLAKE file.cpp ! Windows* systems
The following shows an example of how to specify more than one code value. Note that in the examples below, you can replace ifx with ifort:
ifx -axSKYLAKE,BROADWELL file.cpp ! Linux* systems ifx /QaxBROADWELL,SKYLAKE file.cpp ! Windows* systems
Note that the comma-separated list must have no spaces between the names.