Using OpenMP*

To run the Intel® compiler in OpenMP mode, invoke the compiler with the -openmp (Linux* and Mac OS*) or /Qopenmp (Windows*) option using a command structured similar to the following:

Platform

Description

Linux and Mac OS

ifort -openmp input_file

Windows

ifort /Qopenmp input_file

Before you run the multi-threaded code, you can set the number of desired threads in the OpenMP environment variable, OMP_NUM_THREADS. For more information, see the OpenMP Environment Variables section. The Intel Extension Routines topic describes the OpenMP extensions to the specification that have been added by Intel to the Intel® compiler.

OpenMP Option

The -openmp (Linux and Mac OS) or /Qopenmp (Windows) option enables the parallelizer to generate multithreaded code based on the OpenMP directives. The code can be executed in parallel on uniprocessor, multiprocessor, and dual-core processor systems.

The openmp option works with both -O0 (Linux and Mac OS) and /Od (Windows) and with any optimization level of -O1, -O2 and -O3. (Linux and Mac OS) or /O1, /O2 and /O3 (Windows).

Specifying -O0 (Linux and Mac OS) or /Od (Windows) with the OpenMP option helps to debug OpenMP applications.

Note

Intel® Itanium®-based systems: Specifying this option implies -opt-mem-bandwith1 (Linux and Mac OS) or /Qopt-mem-bandwidth1 (Windows).

OpenMP Directive Format and Syntax

OpenMP directives use a specific format and syntax. The following syntax and example help illustrate how to use the directives with your source.

Syntax

<prefix> <directive> [<clause>[[,]<clause>...]]

where:

Since OpenMP directives begin with an exclamation point, the directives are interpreted as comments if you omit the openmp option.

The following example demonstrates one way of using an OpenMP* directive to parallelize loops within parallel regions.

Example

subroutine simple_omp(a, N)

  integer :: N, a(N)

!$OMP PARALLEL DO

  do i = 1, N

    a(i) = i*2

  end do

end subroutine simple_omp

Assume that you compile the sample above, using the commands similar to the following, where -c (Linux and Mac OS) or /c (Windows) instructs the compiler to compile the code without generating an executable:

Platform

Description

Linux and Mac OS

ifort -openmp -c parallel.f90

Windows

ifort /Qopenmp /c parallel.f90

The compiler might return a message similar to the following:

parallel.f90(20) : (col. 6) remark: OpenMP DEFINED LOOP WAS PARALLELIZED.

Syntax for Parallel Regions in the Source Code

The OpenMP constructs defining a parallel region have one of the following syntax forms:

Example

!$OMP <directive>

<structured block of code>

!$OMP END <directive>

or

!$OMP <directive>

<structured block of code>

or

!$OMP <directive>

where <directive> is the name of a particular OpenMP directive.