OpenMP* Support Overview

The Intel® compiler introduces support for most features in the OpenMP* Version 4.0 API specification. For the complete C++ language specification for OpenMP, see the OpenMP* Application Program Interface Version 4.0 specification, which is available from the OpenMP* web site (http://www.openmp.org/, click the Specifications link). The descriptions of OpenMP* language characteristics in this documentation will often use terms defined in the specifications.

The OpenMP* API provides symmetric multiprocessing (SMP) with the following major features:

  • Relieves the user from implementing the low-level details of iteration space partitioning, data sharing, thread creation, scheduling, or synchronization.

  • Provides benefit of performance available from shared memory multiprocessor and multi-core processor systems on all supported Intel architectures, including those processors with Intel® Hyper-Threading Technology (Intel® HT Technology).

  • Provides support for the Intel® Xeon Phi™ coprocessor.

The compiler performs transformations to generate multithreaded code based on a developer's placement of OpenMP* pragmas in the source program making it easy to add threading to existing software. The Intel® C++ Compiler compiles parallel programs and supports most of the industry-standard OpenMP* pragmas.

The compiler provides Intel-specific extensions to this OpenMP* specification including run-time library routines and environment variables. However, these extensions are only supported by the Intel® C++ Compiler. A summary of the compiler options appear in the OpenMP* Options Quick Reference.

Parallel Processing with OpenMP*

To compile with the OpenMP* API, add the pragmas to your code. The Intel® C++ Compiler processes the code and internally produces a multithreaded version which is then compiled into an executable with the parallelism implemented by threads that execute parallel regions or constructs.

Using Other Compilers

The OpenMP* specification does not define interoperability of multiple implementations; therefore, the OpenMP* implementation supported by other compilers and OpenMP* support in the Intel® C++ Compiler might not be interoperable. Even if you compile and build the entire application with one compiler, be aware that different compilers might not provide OpenMP* source compatibility that would allow you to compile and link the same set of application sources with a different compiler and get the expected parallel execution results.

The Intel® C++ Compiler includes two sets of OpenMP* libraries, as described in OpenMP* Source Compatibility and Interoperability with Other Compilers.

For more complete information about compiler optimizations, see our Optimization Notice.