Fortran Language and OpenMP* Features Implemented in Intel® Fortran Compiler

ID 标签 763692
已更新 11/16/2023
版本 2024.0.0
公共

author-image

作者

 This article describes the Fortran language and OpenMP* features that are implemented in the Intel® Fortran Compiler (ifx) by release.

These features are implemented in the Intel Fortran Compiler (ifx) 2024.0.0 which is part of Intel® HPC Toolkit 2024.

  • Fortran Language Standards
    • Completely implemented FORTRAN 77, Fortran90/95, Fortran 2003, Fortran 2008 and Fortran 2018 language standards beginning with Intel Fortran Compiler (ifx) 2023.0.0.
    • Implementation of some features of Fortran 2023. 
  • Version 2024.0.0 adds these OpenMP* 5.0/5.1/5.2/6.0 Features:
    • The MATCH clause is now permitted in the DECLARE VARIANT directive. (OpenMP 5.0)
    • The DESTROY clause of the DEPOBJ construct now requires a destroy-var modifier (OpenMP 5.1)
    • The STRICT modifier can now be specified for the GRAINSIZE and NUM_TASK clauses of the TASKLOOP directive. (OpenMP 5.1)
    • The optional ORDER clause modifiers REPRODUCIBLE and UNCONSTRAINED can be specified for the CONCURRENT argument to specify ordering of iterations of a loop. (OpenMP 5.2)
    • The ORDER clause may now be specified on the DISTRIBUTE construct. (OpenMP 5.1)
    • The GROUPPRIVATE directive specifies variables to be shared by the threads of a context group, but each context group has a private copy. (OpenMP 6.0)
    • You can now specify a DEVICE_TYPE clause on the DECLARE TARGET directive.  DEVICE_TYPE (HOST) compiles the body of the construct for host device only, DEVICE_TYPE(NOHOST) compiles the body for the target device, and DEVICE_TYPE(ANY) compiles the body for both host and target. (OpenMP 5.0).

Other useful information:

  • ifx and ifort are binary (.o/.obj) and module file (.mod) compatible. Binaries and libraries generated with ifort can be linked with binaries and libraries built with ifx. .mod files generated with one compiler can be used by the other. This is available for 64-bit targets only.
  • Both compilers use the the same runtime libraries.
  • ifx may or may not match performance of ifort compiled applications. Performance improvements in ifx come with each update.

Similar information for Intel® oneAPI DPC++/C++ Compiler (DPCPP and ICX) regarding the OpenMP implementation.

Features Available in oneAPI 2024 and oneAPI 2023

Fortran Standards

Beginning with ifx version 2023.0.0 these Fortran standards are completely implemented:

  • Fortran 95
  • Fortran 2003
  • Fortran 2008
  • Fortran 2018

These features from Fortran 2023 are implemented.

  • The REDUCE locality spec on DO CONCURRENT
  • BOZ constants on RHS of INTEGER and REAL assignment statements
  • BOZ constants as INTEGER and REAL values in PARAMETER statements
  • BOZ constants as INTEGER or REAL as array constructor values
  • BOZ constants as INTEGER values in ENUMERATION statements
  • Intrinsic trigonometric functions returning degrees ACOSD(X), ASIND(X), ATAND(X), ATAN2D(Y, X), COSD(X), SIND(X), and TAND(X)

OpenMP 4.5

All features are implemented beginning with with oneAPI 2023.0 (compiler version 2023.0.0), except

  • HINT clauses
  • Privatization of variable-length arrays at the TEAMS level on GPU offload

OpenMP 5.0/5.1

(bold indicates new features in this release)

Feature Status in Compiler Version 2024.0.0 Status in Compiler Version 2023.2.0  Status in Compiler Version 2023.1.0  Status in Compiler Version 2023.0.0 
if (parallel: scalar-logical-expression) Yes Yes Yes Yes
REDUCTION clause on TEAMS Yes Yes Yes Yes
ALLOCATE clause Yes Yes Yes Yes
!$omp loop Yes Yes Yes Yes
!$omp teams loop (combined directive) Yes Yes Yes Yes
!$omp parallel loop (combined directive) Yes Yes Yes Yes
!$omp target teams loop (combined directive) Yes Yes Yes Yes
!$omp parallel target teams loop (combined directive) Yes Yes Yes Yes
NONTEMPORAL clause on !$omp simd Yes Yes Yes Yes
IN_REDUCTION clause Yes Yes Yes Yes
USE_DEVICE_ADDR clause Yes Yes Yes Yes
TASK_REDUCTION clause on !$omp taskgroup Yes Yes Yes Yes
!$omp allocate  Yes Yes Yes Yes
!$omp declare variant Yes Yes Yes Yes
MATCH clause on declare variant Yes No No No
if (simd: scalar-logical-expression) Yes Yes Yes Yes
!$omp scan Yes Yes Yes YES
!$omp requires Yes Yes Yes Yes
!$omp tile Yes Yes No No
Metadirectives No No No No
“task” reduction-modifier  Yes Yes Yes Yes
"scan" and "default" reduction-modifier Yes Yes Yes Yes
“conditional” lastprivate-modifier No No No No
ORDER clause (enabled on OMP LOOP) Yes Yes Yes YES
ORDER clause (enabled on OMP DISTRIBUTE) Yes No No No
UNCONSTRAINED and REPRODUCIBLE order-modifiers in the ORDER clause Yes No No No
"mutexinoutset" and "depobj” dependence-type

Yes

Yes Yes YES
“in“, “out“ and “inout“ dependence-type Yes Yes Yes Yes
AFFINITY clause No No No No
DETACH clause No No No No
USES_ALLOCATORS clause No No No No
DECLARE MAPPER and mapper-identifier No change No change No change for scalar variables, fixed length arrays
DEVICE_TYPE clause No No No No
DEVICE_TYPE clause on DECLARE TARGET Yes No No No
!$omp parallel master (combined directive) Yes Yes Yes Yes
!$omp master taskloop (combined directive) Yes Yes Yes Yes
!$omp master taskloop simd (combined directive) Yes Yes Yes Yes
!$omp parallel master taskloop (combined directive) Yes Yes Yes Yes
!$omp parallel master taskloop simd (combined directive) Yes Yes Yes Yes
!$omp parallel masked (combined directive) Yes Yes Yes Yes
!$omp masked taskloop (combined directive) Yes Yes Yes Yes
!$omp masked taskloop simd (combined directive) Yes Yes Yes Yes
!$omp parallel masked taskloop (combined directive) Yes Yes Yes Yes
!$omp parallel masked taskloop simd (combined directive) Yes Yes Yes Yes
DEPEND clause on !$omp taskwait No change No change No change DEPEND types mutexinoutset, inoutset, and depopbj
“acq_rel“, “release“, “acquire“ and “relaxed” memory-order clauses on !$omp atomic Yes Yes Yes Yes
"seq_cst" memory-order clause on !$omp atomic Yes Yes Yes Yes
HINT clause on !$omp atomic No No No No
“acq_rel“, “release“ and “acquire” memory-order clauses on !$omp flush No No No No
!$omp depobj No Yes Yes YES
Required destory-var modifer for DESTORY clause on depobj Yes No No No
if (cancel: scalar-logical-expression) No No No No
FILTER clause on the MASKED construct Yes Yes Yes Yes
UNROLL construct Yes Yes Yes Yes
SCOPE construct Yes Yes Yes YES
ASSUMES directive Yes Yes YES No
ERROR directive Yes Yes YES No
NOTHING directive Yes Yes YES No
LINK and INDIRECT for directive DECLARE TARGET Yes Yes YES No
Iterators in the DEPEND clause Yes Yes YES No
Optional END construct directives with strictly structured block construct bodies Yes Yes YES No
STRICT modifier for GRAINSIZE and NUM_TASK clauses on TASKLOOP Yes No No No

OpenMP 5.2

(bold indicates new features in this release)

Feature  Status in Compiler Version 2024.0.0 Status in Compiler Version 2023.2.0 Status in Compiler Version 2023.1.0  Status in Compiler Version 2023.1.0
Any clause allowed on an OpenMP END directive can be specified on the corresponding construct directive No No No No
LINEAR clause changes, including the STEP modifier No No No No
ENTER clause as a synonym for the TO clause on DECLARE TARGET Yes Yes YES No
Metadirectives, ASSUME, NOTHING, ERROR, and loop transformation constructs are allowed in PURE procedures No No No No
ALLOCATORS construct Yes YES No No
Optional END DISPATCH directive No No No No
Support ALLOCATE and FIRSTPRIVATE on the SCOPE directive No No No No
The DOACROSS clause is a synonym for the DEPEND clause No No No No
Allow dummy arguments as linear-step in a LINEAR clause of a DECLARE SIMD No No No No
Optional maptype on TARGET ENTER|EXIT DATA directives No No No No
UNCONSTRAINED and REPRODUCIBLE order-modifers in the ORDER clause Yes No No No

OpenMP 6.0

(bold indicates new features in this release)

Feature Status in Compiler Version 2024.0.0 Status in Compiler Version 2023.2.0 Status in Compiler Version 2023.1.0 Status in Compiler Version 2023.0.0
GROUPPRIVATE directive Yes No No No
INTEROP on DISPATCH Yes Yes Yes YES
PREFER_TYPE in the APPEND_ARGS clause of DECLARE VARIANT Yes Yes Yes YES

 

Features in oneAPI 2022

Fortran 95

Fortran 95 is fully implemented, as are previous Fortran standards.

Fortran 2003

Implementation complete including parameterized derived types (PDTs) as of compiler version 2022.1.0.

Fortran 2008

Implementation is complete including coarrays as of compiler version 2022.2.0.

Fortran 2018

Feature Status in Compiler Version 2022.2.0 Status in Compiler Version 2022.1.0 Status in Compiler Version 2022.0.0
Coarray Features      
Coarray teams FORM TEAM, CHANGE TEAM construct, SYNC TEAM YES No No
Coarray intrinsics TEAM_NUMBER, GET_TEAM, STOPPED_IMAGES, FAIL_IMAGES, COSHAPE,and IMAGE_STATUS YES No No
TEAM and/or TEAM_NUMBER argument in NUM_IMAGES, IMAGE_INDEX, THIS_IMAGE intrinsic functions YES No No
TEAM or TEAM_NUMBER specifiers in image selectors YES No No
STAT and ERRMSG arguments to MOVE_ALLOC and specifiers in image selectors and in CRITICAL constructs YES No No
FAILed IMAGEs YES No No
Atomic subroutine YES No No
Collective subroutines YES No No
EVENTs YES No No
EXIT from a CRITICAL construct YES No No
Intrinsic Function Enhancements      
The DIM argument to the intrinsic functions ALL, ANY, IALL, IANY, IPARITY, MAXLOC, MAXVAL, MINLOC, MINVAL, NORM2, PARITY, PRODUCT, SUM, and THIS_IMAGE may now be a present OPTIONAL dummy argument. Yes YES No
VALUE dummy arguments to PURE procedures may appear in variable definition contexts. Yes YES No
ERRMSG argument to the intrinsic procedures GET_COMMAND_ARGUMENT, GET_ENVIRONMENT_VARIABLE, and GET_COMMAND Yes YES No
OUT_OF_RANGE intrinsic function Yes YES No
RANDOM_INIT intrinsic subroutine Yes YES No
REDUCE intrinsic function No No No
New form of CMPLX function without KIND= Yes YES No
SIGN function arguments can be of different KINDs Yes YES No
INTEGER and LOGICAL arguments to intrinsics need not be default kind Yes YES No
I/O Enhancements      
E and D, EN, ES, and G allow a field width of zero Yes YES No
The exponent width e in a data edit descriptor can now be zero. Yes YES No
The RN edit descriptor now rounds to nearest as specified by Fortran 2018 and ISO/IEC/IEEE 60559:2011. Yes YES No
The EX edit descriptor allows for hexadecimal data Yes YES No
SIZE= can be specified for non-advancing I/O Yes YES No
Execution/Control Enhancements      
QUIET specifier in STOP or ERROR STOP Yes YES No
Variable STOP and ERROR STOP codes Yes YES No
ERROR STOP in PURE procedures Yes YES No
VALUE Dummy argument of PURE procedure may be defined Yes YES No
Declaration/Specification Changes      
Constant properties of an object can be used in the objects initialization Yes YES No
Specification expressions can contain references to transformational intrinsics from IS0_C_BINDING, IEEE_ARITHMETIC, and IEEE_EXCEPTIONS intrinsic modules Yes YES No
Transformational intrinsic functions from the intrinsic modules ISO_C_BINDING, IEEE_ARITHMETIC, and IEEE_EXCEPTIONS are now allowed in specification expressions Yes YES No
Defined assignment and operator procedure dummy arguments with VALUE attribute need not be INTENT(IN) Yes YES No
Implied-do loop of array constructors and data statements can specify loop variable kind and type. Yes YES No
IMPLICIT NONE (EXTERNAL) Yes YES No
GENERIC statement can be used to declare generic interfaces Yes YES No
Locality of variables on a DO CONCURRENT statement YES No No
Non-standard intrinsics and module are diagnosed as non-standard Yes YES No
IMPORT ALL, IMPORT NONE, and IMPORT ONLY in internal procedures and BLOCK constructs Yes YES No
Module names in PUBLIC and PRIVATE statements Yes YES No
NON_RECURSIVE keyword Yes YES No
Default recursion (when assume recursion option specified) Yes YES No
ISO/IEC/IEEE 754 2011 Floating Point Bindings      
assume ieee_compare option for floating point compares with signaling NaNs Yes Yes Yes
New procedures: IEEE_SET_ROUNDING_MODE, IEEE_FMA, IEEE_SIGNBIT, IEEE_NEXT_UP, IEEE_NEXT_DOWN,  IEEE_GET_MODES and IEEE_SETMODES, IEEE_MAX_NUM, IEEE_MAX_NUM_MAG, IEEE_MIN_NUM, IEEE_MIN_NUM_MAG, IEEE_QUIET_EQ, ITTE_QUIET_GE, IEEE_QUIET_GT, IEEE_QUIET_LE, IEEE_QUIET_LT, IEEE_QUIET_NE, IEEE_SIGNALING_EQ, IEEE_SIGNALING_GE, IEEE_SIGNALING_GT, IEEE_SIGNALING_LE, IEEE_SIGNALING_LT, IEEE_QUIET_NE, IEEE_SIGNALING_NE, IEEE_INT and IEEE_REAL, and IEEE_SUPPORT_NORMAL YES No No
Named constants IEEE_ROUND_TYPE and IEEE_AWAY added to IEEE_ARITHMETIC intrinsic module YES No No
Optional ROUND argument to the IEEE_RINT function YES No No
Derive type IEEE_EXCEPTIONS defined in module IEEE_EXCEPTIONS YES No No
SUBNORMAL is synonymous with DENORMAL YES No No
Optional RADIX argument to IEEE_GET_ROUNDING_MODE and IEEE_SET_ROUNDING_MODE YES No No
Enhanced C Interoperability      
C_PTRDIFF_T kind type in ISO_C_BINDING Yes YES No
All intrinsic procedures in ISO_C_BINDING except C_F_PROCPOINTER are PURE Yes Yes Yes
Assumed rank arrays and types Yes Yes Yes
SELECT RANK construct Yes Yes Yes
Language Evolution      
Non-block DO and arithmetic IF are deleted features (retained as Intel extensions) Yes Yes Yes
COMMON, EQUIVALENCE, and BLOCKDATA are obsolescent Yes Yes Yes
Labeled form a DO loop is obsolescent Yes Yes Yes
Specific names of procedures are obsolescent Yes Yes Yes

 

OpenMP 4.5

All features are implemented beginning with the oneAPI 2021.4 release (compiler version 2021.3.0), except nowait, depend, hint clauses and depend clause modifiers. complex type for reduction is implemented in the compiler version 2022.2.0.

OpenMP 5.0/5.1

Feature Status in Compiler Version 2022.2.0 Status in Compiler Version 2022.1.0 Status in Compiler Version 2022.0.0
if (parallel: scalar-logical-expression) Yes Yes Yes
REDUCTION clause on TEAMS Yes Yes Yes
ALLOCATE clause Yes Yes Yes
!$omp loop Yes Yes Yes
!$omp teams loop (combined directive) Yes Yes Yes
!$omp parallel loop (combined directive) Yes Yes Yes
!$omp target teams loop (combined directive) Yes Yes Yes
!$omp parallel target teams loop (combined directive) Yes Yes Yes
NONTEMPORAL clause on !$omp simd Yes Yes Yes
IN_REDUCTION clause Yes Yes Yes
USE_DEVICE_ADDR clause Yes Yes Yes
TASK_REDUCTION clause on !$omp taskgroup Yes Yes Yes
!$omp allocate  Yes Yes Yes
!$omp declare variant Yes Yes Yes
if (simd: scalar-logical-expression) YES No No
!$omp scan No No No
!$omp requires Yes Yes Yes
Metadirectives No No No
“task” reduction-modifier  Yes Yes Yes
"scan" and "default" reduction-modifier Yes Yes Yes
“conditional” lastprivate-modifier No No No
ORDER clause (enabled on OMP LOOP) No No No
"mutexinoutset" and "depobj” dependence-type No No No
“in“, “out“ and “inout“ dependence-type Yes Yes Yes
AFFINITY clause No No No
DETACH clause No No No
USES_ALLOCATORS clause No No No
DECLARE MAPPER and mapper-identifier for scalar variables for scalar variables No
DEVICE_TYPE clause No No No
!$omp parallel master (combined directive) Yes Yes Yes
!$omp master taskloop (combined directive) Yes Yes Yes
!$omp master taskloop simd (combined directive) Yes Yes Yes
!$omp parallel master taskloop (combined directive) Yes Yes Yes
!$omp parallel master taskloop simd (combined directive) Yes Yes Yes
!$omp parallel masked (combined directive) Yes Yes Yes
!$omp masked taskloop (combined directive) Yes Yes Yes
!$omp masked taskloop simd (combined directive) Yes Yes Yes
!$omp parallel masked taskloop (combined directive) Yes Yes Yes
!$omp parallel masked taskloop simd (combined directive) Yes Yes Yes
DEPEND clause on !$omp taskwait No No No
“acq_rel“, “release“, “acquire“ and “relaxed” memory-order clauses on !$omp atomic Yes Yes Yes
"seq_cst" memory-order clause on !$omp atomic Yes Yes Yes
HINT clause on !$omp atomic No No No
“acq_rel“, “release“ and “acquire” memory-order clauses on !$omp flush No No No
!$omp depobj No No No
if (cancel: scalar-logical-expression) No No No
FILTER clause on the MASKED construct YES No No
UNROLL construct YES No No

Features in oneAPI 2021

Fortran 95

Fortran 95 is fully implemented, as are previous Fortran standards.

Fortran 2003

SUMMARY: Implementation complete with the exception of parameterized derived types and user defined I/O (also known as derive type I/O or recursive I/O).

Feature Status in 2021.4.x Status in 2021.3.x Status in 2021.2.x Status in 2021.1.x
Data Enhancements and Object Orientation        
Parameterized derived types No No No No
Procedure pointers No No No No
Finalization Yes Yes Yes Yes*
Procedures bound by name to a type Yes Yes Yes Yes
The PASS attribute Yes Yes Yes Yes
Procedures bound to a type as operators Yes Yes Yes Yes*
Type extension Yes Yes Yes Yes
Overriding a type-bound procedure Yes Yes Yes Yes
Enumerations Yes Yes Yes Yes
ASSOCIATE construct Yes Yes Yes Yes*
Typed polymorphic entities Yes Yes Yes Yes*
Unlimited polymorphic entities Yes Yes Yes No
SELECT TYPE construct Yes Yes Yes Yes
Deferred bindings and abstract types Yes Yes Yes Yes
Allocatable scalars Yes Yes Yes Yes
Deferred-length allocatable scalars Yes Yes Yes Yes
Miscellaneous Enhancements        
Structure constructors Yes Yes Yes No
Generic procedure interfaces named as type Yes Yes Yes Yes
The ALLOCATE statement Yes Yes Yes Yes
Assignment to an allocatable array Yes Yes Yes Yes
Transferring an allocation Yes Yes Yes Yes
Assignment to an allocatable array Yes Yes Yes Yes
Transferring an allocation Yes Yes Yes Yes
More control of access from a module Yes Yes Yes Yes
Renaming operators on the USE statement Yes Yes Yes Yes
Pointer assignment Yes Yes Yes Yes
Pointer INTENT Yes Yes Yes No
The VOLATILE attribute Yes Yes No No
The IMPORT statement Yes Yes Yes Yes
Intrinsic modules Yes Yes Yes Yes
Access to the computing environment Yes Yes Yes Yes
Support for international character sets No No No No
Lengths of names and statements Yes Yes Yes Yes
Binary, octal and hex constants Yes Yes Yes Yes
Array constructor syntax Yes Yes Yes Yes
Specification and initialization expressions Yes Yes Yes Yes
Complex constants Yes Yes Yes Yes
Changes to intrinsic functions Yes Yes Yes No
Controlling IEEE underflow Yes Yes Yes No
Another IEEE class value No No No No
Input/Output Enhancements        
Derived type input/output No No No No
Asynchronous input/output Yes Yes No No
FLUSH statement Yes Yes Yes Yes
IOMSG= specifier Yes Yes Yes Yes
Stream access input/output Yes Yes Yes Yes
ROUND= specifier Yes Yes Yes Yes
DECIMAL= specifier Yes Yes Yes Yes
SIGN= specifier Yes Yes Yes Yes
Kind type parameters of integer specifiers Yes Yes Yes Yes
Recursive input/output Yes Yes Yes Yes
Intrinsic function for newline character Yes Yes Yes Yes
Input and output of IEEE exceptional values Yes Yes Yes Yes
Comma after a P edit descriptor Yes Yes Yes Yes
Interoperability with C        
Interoperability of intrinsic types Yes Yes Yes Yes
Interoperability with C pointers Yes Yes Yes Yes
Interoperability of derived types Yes Yes Yes Yes**
Interoperability of variables Yes Yes Yes Yes
Interoperability of procedures Yes Yes Yes Yes
Interoperability of global data Yes Yes Yes Yes

Yes* implies that there are known bugs.

Yes** with the exception of passing derived types by value to C structs

Fortran 2008

SUMMARY: Implementation is complete with the exception of coarrays and POINTER result functions used as variables.

Feature Status in 2021.4.x Status in  2021.3.x Status in 2021.2.x Status in 2021.1.x
Coarrays No No No No
Allocatable or pointer components of derived type coarrays No No No No
Performance Enhancements        
do concurrent Yes, serial only Yes, serial only Yes, serial only Yes, serial only
Contiguous attribute Yes Yes Yes Yes
Simply contiguous arrays Yes Yes Yes Yes
Data Declaration        
Maximum rank + corank <= 15 Yes Yes Yes Yes
Long integers (18 digits or 64 bits) Yes Yes Yes Yes
Allocatable components of recursive type Yes Yes Yes No
Implied-shape array Yes Yes Yes Yes
Pointer initialization Yes Yes No No
Data statement restrictions lifted Yes Yes Yes Yes
Kind of a forall index Yes Yes Yes Yes
Type statement for intrinsic types TYPE (intrinsic type) specifier Yes Yes Yes Yes
Declaring type-bound procedures No No No No
Value attribute is permitted for any nonallocatable nonpointer noncoarray Yes Yes Yes Yes
In pure procedure intent of an argument with VALUE attribute not needed Yes Yes Yes Yes
Allocating a polymorphic variable No No No No
Accessing Data Objects         
Accessing real and imaginary parts Yes Yes Yes Yes
Pointer function reference is a variable   No No No
Elemental dummy arguments restrictions lifted Yes Yes Yes Yes
Input/Output        
Finding a unit when opening a file Yes Yes Yes Yes
g0 edit descriptor No No No No
Unlimited format item Yes Yes Yes No
Recursive input/output No No No No
Execution Control        
The block construct Yes No No No
Exit statement Yes Yes Yes No
Stop code Yes Yes Yes Yes
ERROR STOP Yes Yes Yes Yes
Intrinsic Procedures for Bit Processsing        
Bit sequence comparison Yes Yes Yes Yes
Combined shifting No No No No
Counting bits Yes Yes Yes Yes
Masking bits Yes Yes Yes Yes
Shifting bit Yes Yes Yes No
Merging bits Yes Yes Yes No
Bit transformational functions Yes Yes Yes No
Intrinsic Procedures and Modules        
Storage size Yes Yes Yes Yes
Optional argument radix added to selected real kind Yes Yes Yes Yes
Extensions to trigonometric and hyperbolic intrinsic functions No No No No
Selecting a real kind Yes Yes Yes Yes
Hyperbolic intrinsic functions Yes Yes Yes Yes
Bessel functions Yes Yes No No
Error and gamma functions Yes Yes Yes Yes
Euclidean vector norm No No No No
Parity Yes Yes Yes Yes
Execute command line Yes No No No
BACK argument to MINLOC and MAXLOC Yes No No No
Find location in an array Yes No No No
String comparison Yes Yes Yes No
Constants Yes Yes Yes Yes
COMPILER_VERSION Yes Yes Yes Yes
COMPILER_OPTIONS Yes Yes Yes Yes
Function for C sizeof Yes Yes Yes Yes
Added optional argument for ieee_selected_real_kind Yes Yes Yes Yes
Programs and Procedures        
SAVE attribute for module and submodule data Yes Yes Yes No
Empty contains section Yes Yes Yes Yes
Form of the end statement for an internal or module procedure Yes Yes Yes Yes
Internal procedure as an actual argument Yes Yes Yes Yes
Generic resolution by pointer or allocatable attribute Yes Yes Yes No
Null pointer or unallocated allocatable as a missing dummy argument Yes Yes Yes No
Elemental procedures that are not pure Yes Yes Yes Yes
Entry statement becomes obsolescent Yes Yes Yes Yes
Source Form        
Semicolon at line start Yes Yes Yes Yes

 

Fortran 2018

Feature Status in 2021.4.x Status in 2021.3.x Status in 2021.2.x Status in  2021.1.x
Coarray Features        
Coarray teams FORM TEAM, CHANGE TEAM construct, SYNC TEAM No No No No
Coarray intrinsics TEAM_NUMBER, GET_TEAM, STOPPED_IMAGES, FAIL_IMAGES, COSHAPE,and IMAGE_STATUS No No No No
TEAM and/or TEAM_NUMBER argument in NUM_IMAGES, IMAGE_INDEX, THIS_IMAGE intrinsic functions No No No No
TEAM or TEAM_NUMBER specifiers in image selectors No No No No
STAT and ERRMSG arguments to MOVE_ALLOC and specifiers in image selectors and in CRITICAL constructs No No No No
FAILed IMAGEs No No No No
Atomic subroutine No No No No
Collective subroutines No No No No
EVENTs No No No No
EXIT from a CRITICAL construct No No No No
Intrinsic Function Enhancements        
The DIM argument to the intrinsic functions ALL, ANY, IALL, IANY, IPARITY, MAXLOC, MAXVAL, MINLOC, MINVAL, NORM2, PARITY, PRODUCT, SUM, and THIS_IMAGE may now be a present OPTIONAL dummy argument. No No No No
VALUE dummy arguments to PURE procedures may appear in variable definition contexts. No No No No
ERRMSG argument to the intrinsic procedures GET_COMMAND_ARGUMENT, GET_ENVIRONMENT_VARIABLE, and GET_COMMAND No No No No
OUT_OF_RANGE intrinsic function No No No No
RANDOM_INIT intrinsic subroutine No No No No
REDUCE intrinsic function No No No No
New form of CMPLX function without KIND= No No No No
SIGN function arguments can be of different KINDs No No No No
INTEGER and LOGICAL arguments to intrinsics need not be default kind No No No No
I/O Enhancements        
E and D, EN, ES, and G allow a field width of zero No No No No
The exponent width e in a data edit descriptor can now be zero. No No No No
The RN edit descriptor now rounds to nearest as specified by Fortran 2018 and ISO/IEC/IEEE 60559:2011. No No No No
The EX edit descriptor allows for hexadecimal data No No No No
SIZE= can be specified for non-advancing I/O No No No No
Execution/Control Enhancements        
QUIET specifier in STOP or ERROR STOP No No No No
Variable STOP and ERROR STOP codes No No No No
ERROR STOP in PURE procedures No No No No
VALUE Dummy argument of PURE procedure may be defined No No No No
Declaration/Specification Changes        
Constant properties of an object can be used in the objects initialization No No No No
Specification expressions can contain references to transformational intrinsics from IS0_C_BINDING, IEEE_ARITHMETIC, and IEEE_EXCEPTIONS intrinsic modules No No No No
Transformational intrinsic functions from the intrinsic modules ISO_C_BINDING, IEEE_ARITHMETIC, and IEEE_EXCEPTIONS are now allowed in specification expressions No No No No
Defined assignment and operator procedure dummy arguments with VALUE attribute need not be INTENT(IN) No No No No
Implied-do loop of array constructors and data statements can specify loop variable kind and type. No No No No
IMPLICIT NONE (EXTERNAL) No No No No
GENERIC statement can be used to declare generic interfaces No No No No
Locality of variables on a DO concurrent statement No No No No
Non-standard intrinsics and module are diagnosed as non-standard No No No No
IMPORT ALL, IMPORT NONE, and IMPORT ONLY in internal procedures and BLOCK constructs No No No No
Module names in PUBLIC and PRIVATE statements No No No No
NON_RECURSIVE keyword No No No No
Default recursion (when assume recursion option specified) No No    
ISO/IEC/IEEE 754 2011 Floating Point Bindings        
assume ieee_compare option for floating point compares with signaling NaNs Yes No No No
New procedures: IEEE_SET_ROUNDING_MODE, IEEE_FMA, IEEE_SIGNBIT, IEEE_NEXT_UP, IEEE_NEXT_DOWN,  IEEE_GET_MODES and IEEE_SETMODES, IEEE_MAX_NUM, IEEE_MAX_NUM_MAG, IEEE_MIN_NUM, IEEE_MIN_NUM_MAG, IEEE_QUIET_EQ, ITTE_QUIET_GE, IEEE_QUIET_GT, IEEE_QUIET_LE, IEEE_QUIET_LT, IEEE_QUIET_NE, IEEE_SIGNALING_EQ, IEEE_SIGNALING_GE, IEEE_SIGNALING_GT, IEEE_SIGNALING_LE, IEEE_SIGNALING_LT, IEEE_QUIET_NE, IEEE_SIGNALING_NE, IEEE_INT and IEEE_REAL, and IEEE_SUPPORT_NORMAL No No No No
Named constants IEEE_ROUND_TYPE and IEEE_AWAY added to IEEE_ARITHMETIC intrinsic module No No No No
Optional ROUND argument to the IEEE_RINT function No No No No
Derive type IEEE_EXCEPTIONS defined in module IEEE_EXCEPTIONS No No No No
SUBNORMAL is synonymous with DENORMAL No No No No
Optional RADIX argument to IEEE_GET_ROUNDING_MODE and IEEE_SET_ROUNDING_MODE No No No No
Enhanced C Interoperability        
C_PTRDIFF_T kind type in ISO_C_BINDING '[No No No No
All intrinsic procedures in ISO_C_BINDING except C_F_PROCPOINTER are PURE No No No No
Assumed rank arrays and types No No No No
SELECT RANK construct No No No No
Language Evolution        
Non-block DO and arithmetic IF are deleted features (retained as Intel extensions) No No No No
COMMON, EQUIVALENCE, and BLOCKDATA are obsolescent No No No No
Labeled form a DO loop is obsolescent No No No No
Specific names of procedures are obsolescent No No No No

 

OpenMP 4.5

All features were implemented in the 2021.4.0 release, except nowait, depend, hint clauses, complex type for reduction and depend clause modifiers.

OpenMP 5.0/5.1

Feature Status in 2021.4.x Status in 2021.3.x Status in 2021.2.x Status in 2021.1.x
if (parallel: scalar-logical-expression) Yes Yes Yes Yes
REDUCTION clause on TEAMS Yes Yes Yes Yes
ALLOCATE clause Yes Yes Yes Yes
!$omp loop Yes Yes Yes Yes
!$omp teams loop (combined directive) Yes Yes Yes Yes
!$omp parallel loop (combined directive) Yes Yes Yes Yes
!$omp target teams loop (combined directive) Yes Yes Yes Yes
!$omp parallel target teams loop (combined directive) Yes Yes Yes Yes
NONTEMPORAL clause on !$omp simd Yes Yes Yes Yes
IN_REDUCTION clause Yes No No No
USE_DEVICE_ADDR clause Yes Yes Yes Yes
TASK_REDUCTION clause on !$omp taskgroup Yes Yes Yes Yes
!$omp allocate  Yes Yes Yes No
!$omp declare variant Yes Yes Yes* No
if (simd: scalar-logical-expression) No No No No
!$omp scan No No No No
!$omp requires No No No No
Metadirectives No No No No
“task” reduction-modifier  No No No No
"scan" and "default" reduction-modifier Yes Yes Yes Yes
“conditional” lastprivate-modifier No No No No
ORDER clause (enabled on OMP LOOP) No No No No
"mutexinoutset" and "depobj” dependence-type No No No No
“in“, “out“ and “inout“ dependence-type Yes Yes Yes Yes
AFFINITY clause No No No No
DETACH clause No No No No
USES_ALLOCATORS clause No No No No
DECLARE MAPPER and mapper-identifier No No No No
DEVICE_TYPE clause No No No No
!$omp parallel master (combined directive) Yes No No No
!$omp master taskloop (combined directive) Yes No No No
!$omp master taskloop simd (combined directive) Yes No No No
!$omp parallel master taskloop (combined directive) Yes No No No
!$omp parallel master taskloop simd (combined directive) Yes No No No
!$omp parallel masked (combined directive) Yes No No No
!$omp masked taskloop (combined directive) Yes No No No
!$omp masked taskloop simd (combined directive) Yes No No No
!$omp parallel masked taskloop (combined directive) Yes No No No
!$omp parallel masked taskloop simd (combined directive) Yes No No No
DEPEND clause on !$omp taskwait No No No No
“acq_rel“, “release“, “acquire“ and “relaxed” memory-order clauses on !$omp atomic No No No No
"seq_cst" memory-order clause on !$omp atomic Yes Yes Yes Yes
HINT clause on !$omp atomic No No No No
“acq_rel“, “release“ and “acquire” memory-order clauses on !$omp flush No No No No
!$omp depobj No No No No
if (cancel: scalar-logical-expression) No No No No

Yes* Only a limited form is implemented.

References

Fortran Standards

For more information about the Fortran Standards visit wg5-fortran.org.

OpenMP* Specification

The OpenMP* specifications are available at openmp.org.

Intel Documentation

Intel Fortran Compiler for oneAPI Developer Guide and Reference