Processor-specific Runtime Checks, IA-32 Systems

The Intel® C++  Compiler optimizations take effect at run time. For IA-32 systems, the compiler enhances processor-specific optimizations by inserting a code segment in the program that performs the run-time checks described here.

Check for Supported Processor with -xN, -xB, or -xP

To prevent execution errors, the compiler inserts code in the program to check for proper processor usage.  Programs compiled with options -xN, -xB, or -xP will check at run time whether they are being executed on the Intel® Pentium® 4 processor, Intel Pentium M processor, or the Intel Pentium 4 processor with Streaming SIMD Extensions 3 (SSE3), respectively, or a compatible Intel processor. If the program is not executed on one of these processors, the program terminates with an error.

Example

To optimize the program prog.cpp for the Intel Pentium 4 processor with Streaming SIMD Extensions 3 (SSE3), issue the following command:

prompt>icpc -xP prog.cpp

The resulting executable aborts if it is executed on a processor that does not support the Intel Pentium 4 processor with Streaming SIMD Extensions 3 (SSE3), such as the Intel Pentium III or Intel Pentium 4 processor.

If you intend to run your programs on multiple IA-32 processors, do not use the -x{} options that optimize for processor-specific features; consider using -ax{} to attain processor specific performance and portability among different processors.

Setting FTZ and DAZ Flags

Previously, the values of the flags flush-to-zero (FTZ) and denormals-as-zero (DAZ) for IA-32 processors were off by default.  However, even at the cost of losing IEEE compliance, turning these flags on significantly increases the performance of programs with denormal floating-point values in the gradual underflow mode run on the most recent IA-32 processors.  Hence, for the Intel Pentium III, Pentium 4, Pentium M, Intel Pentium 4 processor with Streaming SIMD Extensions 3 (SSE3), and compatible IA-32 processors, the compiler's default behavior is to turn these flags on. The compiler inserts code in the program to perform a run-time check for the processor on which the program runs to verify it is one of the afore-listed Intel processors.

Examples

These flags are only turned on by Intel processors that have been validated to support them.

For non-Intel processors, you can set the flags manually with the following macros:

Enable FTZ: _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON)

Enable DAZ: _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON)

The prototypes for these macros are in xmmintrin.h (FTZ) and pmmintrin.h (DAZ).