Other Considerations

There are some notable differences between the Intel® C++ Compiler and gcc. Consider the following as you begin compiling your source code with the Intel C++ Compiler.

Setting the Environment

The Intel compilers rely on environment variables for the location of compiler binaries, libraries, man pages, and license files. In some cases these are different from the environment variables that gcc uses. Another difference is that these variables are not set by default after installing the Intel compiler. The following environment variables need to be set prior to running the Intel compiler:

You can 'source' the iccvars.sh shell script (included with the compiler) to set these environment variables for you. See Invoking the Compiler from the Command Line for details on using iccvars.sh.

Note iconNote

Setting these environment variables with iccvars.sh does not impose a conflict with gcc. You should be able to use both compilers in the same shell.

Using Optimization

The Intel C++ Compiler is an optimizing compiler that begins with the assumption that you want improved performance from your application when it is executed on Intel architecture. Consequently, certain optimizations, such as -O2, are part of the default invocation of the Intel compiler. By default, gcc turns off optimization - the equivalent of compiling with -O or -O0. Other forms of the -O<n> option compare as follows:

Option

Intel

gcc

-O0

Turns off optimization.

Default. Turns off optimization. Same as -O.

-O1

Decreases code size with some increase in speed.

Decreases code size with some increase in speed.

-O2

Default. Favors speed optimization with some increase in code size. Same as -O. Intrinsics, loop unrolling, and inlining are performed.

Optimizes for speed as long as there is not an increase in code size. Loop unrolling and function inlining, for example, are not performed.

-O3

Enables -O2 optimizations plus more aggressive optimizations, such as prefetching, scalar replacement, and loop and memory access transformations.

Optimizes for speed while generating larger code size. Includes -O2 optimizations plus loop unrolling and inlining. Similar to -O2 -ip on Intel compiler.

Targeting Intel Processors

While many of the same options that target specific processors are supported with both compilers, Intel includes options that utilize processor-specific instruction scheduling to target the latest Intel processors. If you compile your gcc application with the -march or -mtune option, consider using Intel's -x or -ax options for applications that run on IA-32 or Intel® 64 architecture.

Modifying Your Configuration

The Intel compiler lets you maintain configuration and response files that are part of compilation. Options stored in the configuration file apply to every compilation, while options stored in response files apply only where they are added on the command line. If you have several options in your makefile that apply to every build, you may find it easier to move these options to the configuration file (../bin/icc.cfg and ../bin/icpc.cfg).

In a multi-user, networked environment, options listed in the icc.cfg and icpc.cfg files are generally intended for everyone who uses the compiler. If you need a separate configuration, you can use the ICCCFG or ICPCCFG environment variable to specify the name and location of your own .cfg file, such as /my_code/my_config.cfg. Anytime you instruct the compiler to use a different configuration file, the system configuration files (icc.cfg and icpc.cfg) are ignored.

Using the Intel Libraries

The Intel C++ Compiler supplies additional libraries that contain optimized implementations of many commonly used functions. Some of these functions are implemented using CPU dispatch. This means that different code may be executed when run on different processors.

Supplied libraries include the Intel® Math Library (libimf), the Short Vector Math Library (libsvml), libirc, as well as others. These libraries are linked in by default when the compiler sees that references to them have been generated. Some library functions, such as sin or memset, may not require a call to the library, since the compiler may inline the code for the function.

Intel® Math Library (libimf)

With the Intel C++ Compiler, the Intel® Math Library, libimf, is linked by default when calling math functions that require the library. Some functions, such as sin, may not require a call to the library, since the compiler already knows how to compute the sin function. The Intel Math Library also includes some functions not found in the standard math library.

Note iconNote

You cannot make calls the Intel Math Library with gcc.

Many routines in this library are more highly optimized for Intel microprocessors than for non-Intel microprocessors.

Short Vector Math Library (libsvml)

When vectorization is being done, the compiler may translate some calls to the libm math library functions into calls to libsvml functions. These functions implement the same basic operations as the Intel Math Library, but operate on short vectors of operands. This results in greater efficiency. In some cases, the libsvml functions are slightly less precise than the equivalent libimf functions.

Many routines in this library are more highly optimized for Intel microprocessors than for non-Intel microprocessors.

libirc

libirc contains optimized implementations of some commonly used string and memory functions. For example, it contains functions that are optimized versions of memcpy and memset. The compiler will automatically generate calls to these functions when it sees calls to memcpy and memset. The compiler may also transform loops that are equivalent to memcpy or memset into calls to these functions.

Many routines in this library are more highly optimized for Intel microprocessors than for non-Intel microprocessors.

Optimization Notice

Intel® Compiler includes compiler options that optimize for instruction sets that are available in both Intel® and non-Intel microprocessors (for example SIMD instruction sets), but do not optimize equally for non-Intel microprocessors. In addition, certain compiler options for Intel® Compiler are reserved for Intel microprocessors. For a detailed description of these compiler options, including the instruction sets they implicate, please refer to "Intel® Compiler User and Reference Guides > Compiler Options". Many library routines that are part of Intel® Compiler are more highly optimized for Intel microprocessors than for other microprocessors. While the compilers and libraries in Intel® Compiler offer optimizations for both Intel and Intel-compatible microprocessors, depending on the options you select, your code and other factors, you likely will get extra performance on Intel microprocessors.

While the paragraph above describes the basic optimization approach for Intel® Compiler, with respect to Intel's compilers and associated libraries as a whole, Intel® Compiler may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include Intel® Streaming SIMD Extensions 2 (Intel® SSE2), Intel® Streaming SIMD Extensions 3 (Intel® SSE3), and Supplemental Streaming SIMD Extensions 3 (Intel® SSSE3) instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors.

Intel recommends that you evaluate other compilers to determine which best meet your requirements.

See Also


Submit feedback on this help topic

Copyright © 1996-2010, Intel Corporation. All rights reserved.