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

ID 767251
Date 3/31/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

Compiler Directives

The following tables list available compiler directives.

Each OpenMP* Fortran directive name is preceded by the prefix c$OMP, where c is one of the following: !, C (or c), or *; for example, !$OMP ATOMIC.

Compiler directives are specially formatted comments in the source file that provide information to the compiler. Some directives, such as line length or conditional compilation directives, provide the compiler information that is used in interpreting the source file. Other directives, such as optimization directives, provide hints or suggestions to the compiler, which, in some cases, may be ignored or overridden by the compiler, based on the heuristics of the optimizer and/or code generator. If the directive is ignored by the compiler, no diagnostic message is issued.

You do not need to specify a compiler option to enable general directives.

Some directives may perform differently on Intel® microprocessors than on non-Intel microprocessors.

General Directives

Name

Description

ALIAS

Specifies an alternate external name to be used when referring to an external subprogram.

ASSUME

Provides heuristic information to the compiler optimizer.

ASSUME_ALIGNED

Specifies that an entity in memory is aligned.

ATTRIBUTES

Applies attributes to variables and procedures.

BLOCK_LOOP

Enables loop blocking for the immediately following nested DO loops.

DECLARE

Generates warning messages for undeclared variables.

DEFINE

Creates a variable whose existence can be tested during conditional compilation.

DISTRIBUTE POINT

Suggests a location at which a DO loop may be split.

ELSE

Marks the beginning of an alternative conditional-compilation block to an IF directive construct.

ELSEIF

Marks the beginning of an alternative conditional-compilation block to an IF directive construct.

ENDIF

Marks the end of a conditional-compilation block.

FIXEDFORMLINESIZE

Sets fixed-form line length. This directive has no effect on freeform code.

FMA

Tells the compiler to allow generation of fused multiply-add (FMA) instructions, also known as floating-point contractions.

FORCEINLINE

Specifies that a routine should be inlined whenever the compiler can do so.

FREEFORM

Uses freeform format for source code.

IDENT

Specifies an identifier for an object module.

IF

Marks the beginning of a conditional-compilation block.

IF DEFINED

Marks the beginning of a conditional-compilation block.

INLINE

Specifies that the routines can be inlined.

INTEGER

Selects default integer size.

IVDEP

Assists the compiler's dependence analysis of iterative DO loops.

LOOP COUNT

Specifies the typical trip loop count for a DO loop; which assists the optimizer.

MESSAGE

Sends a character string to the standard output device.

NOBLOCK_LOOP

Disables loop blocking for the immediately following nested DO loops.

NODECLARE

(Default) Turns off warning messages for undeclared variables.

NOFMA

Disables the generation of FMA instructions.

NOFREEFORM

(Default) Uses standard FORTRAN 77 code formatting column rules.

NOFUSION

Prevents a loop from fusing with adjacent loops.

NOINLINE

Specifies that a routine should not be inlined.

NOPARALLEL

Disables auto-parallelization for an immediately following DO loop. This feature is only available for ifort.

NOOPTIMIZE

Disables optimizations for the program unit.

NOPREFETCH

Disables a data prefetch from memory.

NOSTRICT

(Default) Disables a previous STRICT directive.

NOUNROLL

Disables the unrolling of a DO loop.

NOUNROLL_AND_JAM

Disables loop unrolling and jamming.

NOVECTOR

Disables vectorization of a DO loop.

OBJCOMMENT

Specifies a library search path in an object file.

OPTIMIZE

Enables optimizations for the program unit.

OPTIONS

Controls whether fields in records and data items in common blocks are naturally aligned or packed on arbitrary byte boundaries.

PACK

Specifies the memory alignment of derived-type items.

PARALLEL

Helps auto-parallelization by assisting the compiler's dependence analysis of an immediately following DO loop. This feature is only available for ifort.

PREFETCH

Hints to the compiler to prefetch data from memory.

PSECT

Modifies certain characteristics of a common block.

REAL

Selects default real size.

SIMD

Requires and controls SIMD vectorization of loops. This feature is only available for ifort.

STRICT

Disables Intel® Fortran features not in the language standard specified on the command line.

UNDEFINE

Removes a symbolic variable name created with the DEFINE directive.

UNROLL

Tells the compiler's optimizer how many times to unroll a DO loop.

UNROLL_AND_JAM

Enables loop unrolling and jamming.

VECTOR

Overrides default heuristics for vectorization of DO loops.

OpenMP* Fortran Directives

OpenMP* directives are specially formatted Fortran comment lines embedded in the source file that 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.

To use the following directives, you must specify compiler option [q or Q]openmp. For more information, refer to the option description in the Compiler Options reference.

Name

Description

ALLOCATE

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

ASSUMES

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

ATOMIC

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

BARRIER

Synchronizes all the threads in a team.

CANCEL

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

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

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

DECLARE MAPPER

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

DECLARE REDUCTION

Declares a user defined reduction for one or more types.

DECLARE SIMD

Generates a SIMD procedure.

DECLARE TARGET

Specifies that named variables, common blocks, functions, and subroutines are mapped to a device. This feature is only available for ifx.

DECLARE VARIANT

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

DEPOBJ

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

DISPATCH

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

DISTRIBUTE

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

DISTRIBUTE PARALLEL DO

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

DISTRIBUTE PARALLEL DO SIMD

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

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

DO

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

DO SIMD

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

ERROR

Causes the compiler or runtime system to process an error condition. This feature is only available for ifx.

FLUSH

Specifies synchronization points where the implementation must have a consistent view of memory.

INTEROP

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

LOOP

Specifies that all iterations of the associated DO loop(s) can execute in any order or concurrently. This feature is only available for ifx.

MASKED

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

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

MASKED TASKLOOP SIMD

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

MASTER

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

MASTER TASKLOOP

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

MASTER TASKLOOP SIMD

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

NOTHING

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

ORDERED

Specifies a block of code to be executed sequentially.

PARALLEL

Defines a parallel region.

PARALLEL DO

Defines a parallel region that contains a single DO directive.

PARALLEL DO SIMD

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

Provides an abbreviated way to specify a PARALLEL region containing a single LOOP construct and no other statements. This feature is only available for ifx.

PARALLEL MASKED

Provides an abbreviated way to specify a MASKED construct inside a PARALLEL construct, with no other statements inside the PARALLEL construct. This feature is only available for ifx.

PARALLEL MASKED TASKLOOP

Provides an abbreviated way to specify a MASKED TASKLOOP construct inside a PARALLEL construct, with no other statements inside the PARALLEL construct. This feature is only available for ifx.

PARALLEL MASKED TASKLOOP SIMD

Provides an abbreviated way to specify a MASKED TASKLOOP SIMD construct inside a PARALLEL construct, with no other statements inside the PARALLEL construct. This feature is only available for ifx.

PARALLEL MASTER

Deprecated; provides an abbreviated way to specify a MASTER construct inside a PARALLEL construct, with no other statements inside the PARALLEL construct. This feature is only available for ifx.

PARALLEL MASTER TASKLOOP

Deprecated; provides an abbreviated way to specify a MASTER TASKLOOP construct inside a PARALLEL construct, with no other statements inside the PARALLEL construct. This feature is only available for ifx.

PARALLEL MASTER TASKLOOP SIMD

Deprecated; provides an abbreviated way to specify a MASTER TASKLOOP SIMD construct inside a PARALLEL construct, with no other statements inside the PARALLEL construct. This feature is only available for ifx.

PARALLEL SECTIONS

Defines a parallel region that contains SECTIONS directives.

PARALLEL WORKSHARE

Defines a parallel region that contains a single WORKSHARE directive.

PREFETCH

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

REQUIRES

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

SCAN

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

SCOPE

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

SECTION

Appears within a SECTIONS construct to indicate a block (section) of code. This directive is optional for the first block of code within the SECTIONS construct.

SECTIONS

Specifies a block of code to be divided among threads in a team (a worksharing area).

SIMD

Requires and controls SIMD vectorization of loops.

SINGLE

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

TARGET

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

TARGET DATA

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

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

TARGET PARALLEL DO

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

TARGET PARALLEL DO SIMD

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

TARGET PARALLEL LOOP

Provides an abbreviated way to specify a TARGET region containing a single PARALLEL LOOP construct and no other statements. This feature is only available for ifx.

TARGET SIMD

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

TARGET TEAMS

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

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

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

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

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. It will be executed concurrently using SIMD instructions.

TARGET TEAMS LOOP

Provides an abbreviated way to specify a TARGET region containing a single TEAMS LOOP construct and no other statements. This feature is only available for ifx.

TARGET UPDATE

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

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

Defines a task region.

TASKGROUP

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

TASKLOOP

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

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

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

TASKYIELD

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

TEAMS

Creates a league of thread teams inside a target region to execute a structured block in the primary thread of each team. This feature is only available for ifx.

TEAMS DISTRIBUTE

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

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

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

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

Provides an abbreviated way to specify a TEAMS region containing a single LOOP construct and no other statements. This feature is only available for ifx.

THREADPRIVATE

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

UNROLL

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

WORKSHARE

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

Product and Performance Information

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

Notice revision #20201201