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
- ^ A. J. C. Bik, The Software Vectorization Handbook (Intel Press, Hillsboro, OR, 2004), ISBN 0974364924.