To add OpenMP* support to your application, do the following:
Add the appropriate OpenMP* pragmas to your source code.
Compile the application with the Qopenmp (Windows) or qopenmp (Linux* and macOS*) option.
For applications with large local or temporary arrays, you may need to increase the stack space available at run-time. In addition, you may need to increase the stack allocated to individual threads by using the OMP_STACKSIZE environment variable or by setting the corresponding library routines.
You can set other environment variables to control multi-threaded code execution.
To add OpenMP* support to your application, first declare the OpenMP* header and then add appropriate OpenMP* pragmas to your source code.
To declare the OpenMP* header, add the following in your code:
#include <omp.h>
OpenMP* pragmas use a specific format and syntax. Intel Extension Routines to OpenMP* describes the OpenMP* extensions to the specification that have been added to the Intel® C++ Compiler.
The following syntax illustrates using the pragmas in your source.
Example |
---|
|
where:
<prefix> - Required for all OpenMP* pragmas. The prefix must be #pragma omp.
<pragma> - A valid OpenMP* pragma. Must immediately follow the prefix.
[<clause>] - Optional. Clauses can be in any order and repeated as necessary, unless otherwise restricted.
[<newline>] - A required component of pragma syntax. It precedes the structured block which is enclosed by this pragma.
The pragmas are interpreted as comments if you omit the Qopenmp (Windows) or qopenmp (Linux* and macOS*) option.
The following example demonstrates one way of using an OpenMP* pragma to parallelize a loop.
Example |
---|
|
The Qopenmp (Windows) or qopenmp (Linux* and macOS*) option enables the parallelizer to generate multi-threaded code based on the OpenMP* pragmas in the source. The code can be executed in parallel on single processor, multi-processor, or multi-core processor systems.
The Qopenmp (Windows) or qopenmp (Linux* and macOS*) option works with both -O0 (Linux* and macOS*) and /Od (Windows*) and with any optimization level of O1, O2 and O3.
Specifying -O0 (Linux* and macOS*) or /Od (Windows*) with the Qopenmp (Windows) or qopenmp (Linux* and macOS*) option helps to debug OpenMP* applications.
Compile your application using commands similar to those shown below:
Operating System |
Syntax Example |
---|---|
Linux* |
icc -qopenmp source_file |
macOS* |
icc -qopenmp source_file |
Windows* |
icl /Qopenmp source_file |
Assume that you compile the sample above, using commands similar to the following, where the c option instructs the compiler to compile the code without generating an executable:
Operating System |
Extended Syntax Example |
---|---|
Linux* |
icc -qopenmp -c parallel.cpp |
macOS* |
icc -qopenmp -c parallel.cpp |
Windows* |
icl /Qopenmp /c parallel.cpp |
The compiler might return a message similar to the following:
Example |
---|
|
Configure the OpenMP* Environment
Before you run the multi-threaded code, you can set the number of desired threads using the OpenMP* environment variable, OMP_NUM_THREADS.