Intel® Fortran Compiler 16.0 User and Reference Guide

DECLARE TARGET

OpenMP* Fortran Compiler Directive: Specifies that named variables, common blocks, functions, and subroutines are mapped to a device. This directive only applies to Intel® MIC Architecture.

!$OMP DECLARE TARGET [(list)]

list

Is a list of one or more variables, functions, subroutines, or common blocks. If you specify more than one list item, they must be separated by commas. A common block name must appear between slashes (/ /); you cannot specify a blank common block. The specified list items can be used inside a target region that executes on the device.

If the list item is a function or subroutine, it must not be a generic name, procedure pointer, or entry name. A device-specific version of the routine is created that can be called from a target region.

If the list item is a variable:

  • It is mapped to a corresponding variable in the device data environment. If the variable is initialized, the corresponding variable in the device data environment is initialized with the same value.

  • It can only appear in the scope in which it is declared.

  • It must be declared in the Fortran scope of a module, or it must have the SAVE attribute (explicitly or implicitly).

You cannot specify the following variables in the DECLARE TARGET directive:

  • A THREADPRIVATE variable

  • A variable that is part of another variable (for example, an element in an array or a field of a structure)

  • A variable that is an element of a common block

  • A variable that appears in an EQUIVALENCE statement

If the list item is a common block:

  • It must be declared to be a common block in the same scoping unit in which the DECLARE TARGET directive appears.

  • If the DECLARE TARGET directive specifying the common block name appears in one program unit, a DECLARE TARGET directive must also appear in every other program unit that contains a COMMON statement specifying the same common block name. The directive must appear after the last relevant COMMON statement in the program unit.

If you specify list, this directive can only appear in a specification part of a subroutine, function, program, or module.

If you do not specify list, the directive must appear in the specification part of the relevant subroutine, function, or interface block.

If a DECLARE TARGET directive is specified in an interface block for a procedure, it must match a DECLARE TARGET directive in the definition of the procedure.

If a procedure is declared in a procedure declaration statement, any DECLARE TARGET directive containing the procedure name must appear in the same specification part.

The following additional rules apply to variables and common blocks:

See Also