Intel® Fortran Compiler Classic and Intel® Fortran Compiler Developer Guide and Reference

ID 767251
Date 3/22/2024
Public
Document Table of Contents

OpenMP* Fortran Compiler Directives

Intel® Fortran supports OpenMP* Fortran compiler directives that comply with OpenMP Fortran Application Program Interface (API) specification 5.0, most of the OpenMP Version 5.1 and OpenMP Version 5.2 specifications, and some of the OpenMP 6.0 Version TR12 specification.

To use these directives, you must specify compiler option -qopenmp (Linux*) or /Qopenmp (Windows*). Offloading directives are enabled with option -fopenmp-targets (Linux) or /Qopenmp-targets (Windows).

OpenMP directives are specially formatted Fortran comment lines embedded in the source file which provide the compiler with hints and suggestions for parallelization, optimization, vectorization, and offloading code to accelerator hardware. The compiler uses the information specified in the directives with compiler heuristic algorithms to generate more efficient code. At times, these heuristics may choose to ignore or override the information provided by a directive. If the directive is ignored by the compiler, no diagnostic message is issued.

Options that use OpenMP are available for both Intel® microprocessors and non-Intel microprocessors, but these options may perform additional optimizations on Intel® microprocessors than they perform on non-Intel microprocessors. The list of major, user-visible OpenMP constructs and features that may perform differently on Intel® microprocessors vs. non-Intel microprocessors includes: locks (internal and user visible), the SINGLE construct, barriers (explicit and implicit), parallel loop scheduling, reductions, memory allocation, thread affinity, and binding.

Unless denoted as a pure directive, OpenMP directives are not allowed in Fortran procedures declared to be PURE.

The following OpenMP Fortran directives are available:

  • ALLOCATE directive

    Specifies memory allocators to use for object allocation and deallocation. This feature is only available for ifx.

  • ALLOCATORS directive

    Specifies memory allocators to use for object allocation in Fortran ALLOCATE statements and for their deallocation. This feature is only available for ifx.

  • ASSUMES directive

    Provides hints to the optimizer about the current compilation unit and all the code it can reach through procedure calls. It is a pure directive. This feature is only available for ifx.

  • ATOMIC construct

    Specifies that a specific memory location is to be updated atomically.

  • BARRIER directive

    Synchronizes all the threads in a team.

  • CANCEL directive

    Requests cancellation of the innermost enclosing region of the type specified, and causes the encountering implicit or explicit task to proceed to the end of the canceled construct.

  • CANCELLATION POINT directive

    Defines a point at which implicit or explicit tasks check to see if cancellation has been requested for the innermost enclosing region of the type specified.

  • CRITICAL construct

    Restricts access for a block of code to only one thread at a time.

  • DECLARE MAPPER directive

    Declares a user-defined data mapper for derived types and local variables that can subsequently be used in MAP clauses. It is a pure directive. This feature is only available for ifx.

  • DECLARE REDUCTION directive

    Declares a user-defined reduction for one or more types. It is a pure directive.

  • DECLARE SIMD directive

    Generates a SIMD procedure. It is a pure directive.

  • DECLARE TARGET directive

    Causes the creation of a device-specific version of a named routine that can be called from a target region. It is a pure directive. This feature is only available for ifx.

  • DEPOBJ directive

    Initializes, updates, or uninitializes an OpenMP depend object. This feature is only available for ifx.

  • DECLARE VARIANT directive

    Identifies a variant of a base procedure and specifies the context in which this variant is used. It is a pure directive. This feature is only available for ifx.

  • DISPATCH directive

    Determines if a variant of a base procedure is to be called for a given subroutine or function call. This feature is only available for ifx.

  • DISTRIBUTE construct

    Specifies that loop iterations will be executed by thread teams in the context of their implicit tasks.

  • DISTRIBUTE PARALLEL DO construct

    Specifies a loop that can be executed in parallel by multiple threads that are members of multiple teams.

  • DISTRIBUTE PARALLEL DO SIMD construct

    Specifies a loop that will be executed in parallel by multiple threads that are members of multiple teams. It will be executed concurrently using SIMD instructions.

  • DISTRIBUTE SIMD construct

    Specifies a loop that will be distributed across the primary threads of the teams region. It will be executed concurrently using SIMD instructions.

  • DO construct

    Specifies that the iterations of the immediately following DO loop must be executed in parallel.

  • DO SIMD construct

    Specifies a loop that can be executed concurrently using SIMD instructions.

  • ERROR directive

    Causes the compiler or runtime system to process an error condition. It is a pure directive if COMPILATION is specified for the AT clause, or the AT clause does not appear. This feature is only available for ifx.

  • FLUSH directive

    Specifies synchronization points where the threads in a team must have a consistent view of memory.

  • GROUPPRIVATE directive

    Specifies that a variable is replicated once per group of threads participating in a parallel region. This feature is only available for ifx.

  • INTEROP directive

    Identifies a foreign runtime context and identifies runtime characteristics of that context, enabling interoperability with it. This feature is only available for ifx.

  • LOOP construct

    Specifies that the iterations of the associated loops can execute concurrently. This feature is only available for ifx.

  • MASKED construct

    Specifies a block of code to be executed by a subset of threads of the current team. This feature is only available for ifx.

  • MASKED TASKLOOP construct

    Provides an abbreviated way to specify a TASKLOOP construct inside a MASKED construct. This feature is only available for ifx.

  • MASKED TASKLOOP SIMD construct

    Provides an abbreviated way to specify a TASKLOOP SIMD construct inside a MASKED construct. This feature is only available for ifx.

  • MASTER construct

    Deprecated; see MASKED. Specifies a block of code to be executed by the master thread of the team.

  • MASTER TASKLOOP construct

    Deprecated; provides an abbreviated way to specify a TASKLOOP construct inside a MASTER construct. This feature is only available for ifx.

  • MASTER TASKLOOP SIMD construct

    Deprecated; provides an abbreviated way to specify a TASKLOOP SIMD construct inside a MASTER construct. This feature is only available for ifx.

  • METADIRECTIVE construct

    Specifies variant OpenMP directives, one of which may conditionally replace the metadirective based on the OpenMP context enclosing the metadirective. This feature is only available for ifx.

  • NOTHING directive

    Provides documentary clarity in conditionally compiled code or conditional OpenMP* code. It has no effect on the semantics or execution of the program. It is a pure directive. This feature is only available for ifx.

  • ORDERED directive and construct

    Specifies a block of code that the threads in a team must execute in the natural order of the loop iterations.

  • PARALLEL construct

    Defines a parallel region.

  • PARALLEL DO construct

    Defines a parallel region that contains a single DO directive.

  • PARALLEL DO SIMD construct

    Specifies a loop that can be executed concurrently using SIMD instructions. It provides a shortcut for specifying a PARALLEL construct containing one SIMD loop construct and no other statement.

  • PARALLEL LOOP construct

    Specifies a shortcut for indicating that a loop or loop nest can execute concurrently across multiple threads. This feature is only available for ifx.

  • PARALLEL MASKED construct

    Provides an abbreviated way to specify a MASKED construct inside a PARALLEL construct.This feature is only available for ifx.

  • PARALLEL MASKED TASKLOOP construct

    Provides an abbreviated way to specify a MASKED TASKLOOP construct inside a PARALLEL construct.This feature is only available for ifx.

  • PARALLEL MASKED TASKLOOP SIMD construct

    Provides an abbreviated way to specify a MASKED TASKLOOP SIMD construct inside a PARALLEL construct.This feature is only available for ifx.

  • PARALLEL MASTER construct

    Deprecated; provides an abbreviated way to specify a MASTER construct inside a PARALLEL construct. This feature is only available for ifx.

  • PARALLEL MASTER TASKLOOP construct

    Deprecated; provides an abbreviated way to specify a MASTER TASKLOOP construct inside a PARALLEL construct. This feature is only available for ifx.

  • PARALLEL MASTER TASKLOOP SIMD construct

    Deprecated; provides an abbreviated way to specify a MASTER TASKLOOP SIMD construct inside a PARALLEL construct. This feature is only available for ifx.

  • PARALLEL SECTIONS construct

    Defines a parallel region that contains a single SECTIONS directive.

  • PARALLEL WORKSHARE construct

    Defines a parallel region that contains a single WORKSHARE directive.

  • PREFETCH DATA directive

    Suggests to the compiler to preload data into cache. Preloading data in cache minimizes the effects of memory latency. It is a pure directive. This feature is only available for ifx.

  • REQUIRES directive

    Lists the features that an implementation must support so that the program compiles and runs correctly. This feature is only available for ifx.

  • SCAN directive

    Specifies a scan computation that updates each list item in each iteration of the loop the directive appears in.

  • SCOPE directive

    Specifies a block of code to be executed by all threads in a team. This feature is only available for ifx.

  • SECTIONS construct

    Specifies that the enclosed SECTION directives define blocks of code to be divided among threads in a team.

  • SIMD construct

    Requires and controls SIMD vectorization of loops. It is a pure directive.

  • SINGLE construct

    Specifies a block of code to be executed by only one thread in a team at a time.

  • TARGET construct

    Creates a device data environment and executes the construct on the same device. This feature is only available for ifx.

  • TARGET DATA construct

    Creates a device data environment for the extent of the region. This feature is only available for ifx.

  • TARGET ENTER DATA

    Specifies that variables are mapped to a device data environment. This feature is only available for ifx.

  • TARGET EXIT DATA

    Specifies that variables are unmapped from a device data environment. This feature is only available for ifx.

  • TARGET PARALLEL construct

    Creates a device data environment in a parallel region and executes the construct on that device.

  • TARGET PARALLEL DO construct

    Provides an abbreviated way to specify a TARGET directive containing a PARALLEL DO directive and no other statements.

  • TARGET PARALLEL DO SIMD construct

    Specifies a TARGET construct that contains a PARALLEL DO SIMD construct and no other statement.

  • TARGET PARALLEL LOOP construct

    Specifies a shortcut for specifying a parallel loop inside a TARGET construct that contains no other statements than the parallel loop. This feature is only available for ifx.

  • TARGET SIMD construct

    Specifies a TARGET construct that contains a SIMD construct and no other statement.

  • TARGET TEAMS construct

    Creates a device data environment and executes the construct on the same device. It also creates a league of thread teams with the primary thread in each team executing the structured block.

  • TARGET TEAMS DISTRIBUTE construct

    Creates a device data environment and executes the construct on the same device. It also specifies that loop iterations will be shared among the primary threads of all thread teams in a league created by a TEAMS construct.

  • TARGET TEAMS DISTRIBUTE PARALLEL DO construct

    Creates a device data environment and then executes the construct on that device. It also specifies a loop that can be executed in parallel by multiple threads that are members of multiple teams created by a TEAMS construct.

  • TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD construct

    Creates a device data environment and then executes the construct on that device. It also specifies a loop that can be executed in parallel by multiple threads that are members of multiple teams created by a TEAMS construct. The loop will be distributed across the teams, which will be executed concurrently using SIMD instructions.

  • TARGET TEAMS DISTRIBUTE SIMD construct

    Creates a device data environment and executes the construct on the same device. It also specifies that loop iterations will be shared among the master threads of all thread teams in a league created by a teams construct. It will be executed concurrently using SIMD instructions.

  • TARGET TEAMS LOOP construct

    Specifies a shortcut for specifying a TEAMS LOOP construct inside a TEAMS construct that contains no other statements. This feature is only available for ifx.

  • TARGET UPDATE directive

    Makes the list items in the device data environment consistent with their corresponding original list items. This feature is only available for ifx.

  • TARGET VARIANT DISPATCH directive

    Conditionally calls a procedure offload variant if the device is free; otherwise, executes the procedure on the host. This feature is only available for ifx.

  • TASK construct

    Defines a task region.

  • TASKGROUP construct

    Specifies a wait for the completion of all child tasks of the current task and all of their descendant tasks.

  • TASKLOOP construct

    Specifies that the iterations of one or more associated DO loops should be executed in parallel using OpenMP* tasks. The iterations are distributed across tasks that are created by the construct and scheduled to be executed.

  • TASKLOOP SIMD construct

    Specifies a loop that can be executed concurrently using SIMD instructions and that those iterations will also be executed in parallel using OpenMP* tasks.

  • TASKWAIT directive

    Specifies a wait on the completion of child tasks generated since the beginning of the current task.

  • TASKYIELD directive

    Specifies that the current task can be suspended at this point in favor of execution of a different task.

  • TEAMS construct

    Creates a group of thread teams to be used in a parallel region. This feature is only available for ifx.

  • TEAMS DISTRIBUTE construct

    Creates a league of thread teams to execute a structured block in the primary thread of each team. It also specifies that loop iterations will be shared among the primary threads of all thread teams in a league created by a TEAMS construct.

  • TEAMS DISTRIBUTE PARALLEL DO construct

    Creates a league of thread teams to execute a structured block in the primary thread of each team. It also specifies a loop that can be executed in parallel by multiple threads that are members of multiple teams.

  • TEAMS DISTRIBUTE PARALLEL DO SIMD construct

    Creates a league of thread teams to execute a structured block in the primary thread of each team. It also specifies a loop that can be executed in parallel by multiple threads that are members of multiple teams. The loop will be distributed across the primary threads of the teams region, which will be executed concurrently using SIMD instructions.

  • TEAMS DISTRIBUTE SIMD construct

    Creates a league of thread teams to execute the structured block in the primary thread of each team. It also specifies a loop that will be distributed across the primary threads of the teams region. The loop will be executed concurrently using SIMD instructions.

  • TEAMS LOOP construct

    Specifies a shortcut for specifying a LOOP construct inside a TEAMS construct. This feature is only available for ifx.

  • THREADPRIVATE directive

    Makes named common blocks private to each thread, but global within the thread.

  • TILE

    Tiles (or blocks) one or more loops in a loop nest. It is a pure directive. This feature is only available for ifx.

  • UNROLL

    Partially or fully unrolls a DO loop. It is a pure directive. This feature is only available for ifx.

  • WORKSHARE construct

    Divides the work of executing a block of statements or constructs into separate units.

The OpenMP parallel directives can be grouped into the categories. For more information about the categories for these directives, see OpenMP* Directives Summary.

Product and Performance Information

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

Notice revision #20201201