Adding OpenMP* Support to your Application

To add OpenMP* support to your application, do the following:

  1. Add the appropriate OpenMP* pragmas to your source code.

  2. Compile the application with the Qopenmp (Windows) or qopenmp (Linux* and macOS*) option.

  3. 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.

OpenMP Pragma Syntax

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

<prefix> <pragma> [<clause>, ...] <newline>

where:

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

#include <omp.h> 
void simple_omp(int *a){
  int i;
  #pragma omp parallel for
  for (i=0; i<1024; i++)
    a[i] = i*2; 
}

Compile the Application

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

parallel.cpp(20) : (col. 3) remark: OpenMP DEFINED LOOP WAS PARALLELIZED.

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.

See Also