Developer Guide and Reference

Contents

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*) option.
  3. For applications with large local or temporary arrays, you may need to increase the stack space available at runtime. 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® oneAPI
DPC++/C++
Compiler
.
The following syntax illustrates using the
pragmas
in your source.
Example
<prefix> <pragma> [<clause>, ...] <newline>
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 that is enclosed by this
    pragma
    .
The
pragmas
are interpreted as comments if you omit the
/Qopenmp
(Windows) or
-qopenmp
(Linux) 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) 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) option works with both
-O0
(Linux) and
/Od
(Windows*) and with any optimization level of
O1
,
O2
and
O3
.
Specifying
-O0
(Linux) or
/Od
(Windows) with the
/Qopenmp
(Windows) or
-qopenmp
(Linux) option helps to debug OpenMP applications.
Compile your application using commands similar to those shown below:
Operating System
Syntax Example
Linux
icpx
-qopenmp
source_file
Windows
icx
/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
icpx
-qopenmp -c parallel.cpp
Windows
icx
/Qopenmp /c parallel.cpp
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
.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.