Intel C++ Compiler

From Wikipedia, the free encyclopedia

Intel C++ Compiler (also known as icc or icl) describes a group of C/C++ compilers from Intel. Compilers are available for Linux, Microsoft Windows and Mac OS X. Manufacturer suggested retail prices start at US$ 399.

Intel supports compilation for its IA-32, Intel 64, Itanium 2, and XScale processors. The Intel C++ Compiler for x86 and Intel 64 features an automatic vectorizer that can generate SSE, SSE2, and SSE3 SIMD instructions, the embedded variant for Intel Wireless MMX and MMX 2.[1] Since its introduction, the Intel C++ Compiler for IA-32 has greatly increased adoption of SSE2 in Windows application development.

Intel C++ Compiler further supports both OpenMP and automatic parallelization for symmetric multiprocessing. With the add-on product Cluster OpenMP, the compiler can also automatically generate Message Passing Interface calls for distributed memory multiprocessing from OpenMP directives (similar to RWCP Omni, [1]).

Intel C++ Compiler belongs to the family of compilers with the Edison Design Group frontend (like the SGI MIPSpro, Comeau C++, Portland Group, and others). The compiler is also notable for being widely used for SPEC CPU Benchmarks of IA-32, x86-64, and Itanium 2 architectures.

Contents

[edit] Optimizations

Intel tunes its compilers to optimize for its hardware platforms to minimize stalls and to produce code that executes in the smallest number of cycles. The Intel C++ Compiler supports three separate high-level techniques for optimizing the compiled program Interprocedural Optimization (IPO), Profile-Guided Optimization (PGO) [2], and High Level Optimizations (HLO).

Profile-Guided Optimization refers to a mode of optimization where the compiler is able to access data from a sample run of the program across a representative input set. The data would indicate which areas of the program are executed more frequently, and which areas are executed less frequently. All optimizations benefit from profile-guided feedback because they are less reliant on heuristics when making compilation decisions.

High Level Optimizations are optimizations performed on a version of the program that more closely represents the source code. High level optimizations include loop interchange, loop fusion, loop unrolling, loop distribution, data prefetch, and more [3]. High level optimizations are usually very aggressive and may take considerable compilation time.

Interprocedural Optimization applies typical compiler optimizations (such as constant propagation) but using a broader scope that may include multiple procedures, multiple files, or the entire program. [4]

[edit] Languages

Intel's suite of compilers has front ends for C, C++, and for Fortran.

Early versions of Intel C++ Compiler for Linux that predates GCC 3.x uses the Dinkumware name mangling scheme in order to provide a more standard conform C++ support than GCC 2.x, however also making it ABI incompatible with both GCC versions.

[edit] Architectures

[edit] Structure

Like many modern optimizing compilers, the Intel compiler has a front end, an optimizing middle, and code-generating back ends [5].

[edit] Flags and Manuals

Windows Linux Comment
/Od -O0 No optimization. Useful if you want a quick compile.
/O1 -O1 Optimize for size
/O2 -O2 Optimize for speed and enable some optimization
/O3 -O3 Enable all optimizations as O2, and intensive loop optimizations
/fast -fast Shorthand. On windows equates to "/O3 /Qipo" on linux "-O3 -ipo -static". Useful if you want to compile your program for release.
/Qprof_gen -prof_gen Compile the program and instrument it for a profile generating run.
/Qprof_use -prof_use May only be used after running a program that was previously compiled using prof_gen. Uses profile information during each step of the compilation process.

[edit] Debugging

The Intel compiler provides debugging information that is standard for the common debuggers (DWARF 2 on Linux, similar to gdb, and COFF for Windows). The flags to compile with debugging information are /Zi on Windows and -g on Linux.

Intel also provides its own debugger called idb, which can be run in both dbx and gdb compatible command mode.

While the Intel compiler can generate a gprof compatible profiling output, Intel also provides a kernel level, system-wide statistical profiler as a separate product called VTune. VTune features an easy-to-use GUI (integrated into Visual Studio for Windows, Eclipse for Linux) as well as a command line interface.

[edit] References

  1. ^ A. J. C. Bik, The Software Vectorization Handbook (Intel Press, Hillsboro, OR, 2004), ISBN 0974364924.

[edit] See also

[edit] External links

In other languages