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

ID 763692
Updated 7/30/2024
Version 2024.2.0
Public

author-image

By

 New in the Intel Fortran Compiler (ifx) 2024

 

Features in the Intel Fortran Compiler 2024 and 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 in ifx 2024.0.0:

  • 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)

These features from Fortran 2023 are implemented in ifx 2024.1.0:

  • Source input lines in free format can have up to 10,000 characters. 
  • A Fortran statement can contain up to 1,000,000 characters. 
  • New named constants LOGICAL8, LOGICAL16, LOGICAL32, LOGICAL64, and REAL16 in the intrinsic module ISO_FORTRAN_ENV. 
  • New procedures C_F_STRPOINTER and F_C_STRING for C interoperability have been added to the intrinsic module ISO_C_BINDING. 
  • Optional argument LOWER to subroutine C_F_POINTER in the intrinsic module ISO_C_BINDING, which allows specifying lower 
  • bounds for the fptr array pointer argument. 
  • Two argument form of the intrinsic trigonometric function ATAND (Y, X) whose arguments are in degrees. 

OpenMP 4.5

All features are implemented beginning with Intel Fortran Compiler 2023.0  

OpenMP 5.0/5.1

(bold indicates new features in this release)

Feature Status in Compiler Version
2024.2.0

Status in Compiler Version 2024.1.0

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 

omp_all_memory reserved locator

Yes

Yes

Yes

Yes

Yes

Yes

adjust_args, append_args for declare variant

Yes

Yes

Yes

Yes

Yes

Yes

dispatch construct

Yes

Yes

Yes

Yes

Yes

Yes

thread_limit clause for target

Yes

Yes

Yes

Yes

Yes

Yes

has_device_addr for target

Yes

Yes

Yes

Yes

Yes

Yes

nowait clause for taskwait depend

Yes

Yes

Yes

Yes

Yes

Yes

default(private) and default(firstprivate)

Yes

Yes

Yes

Yes

Yes

Yes

defaultmap(present)

Yes

Yes

Yes

Yes

Yes

Yes

align clause for allocate directive

align modifier for allocate clause

Yes

Yes

Yes

Yes

Yes

Yes

OMP_DISPLAY_ENV

Yes

Yes

Yes

Yes

Yes

Yes

OMP_SET_NUM_TEAMS

OMP_GET_MAX_TEAMS

OMP_SET_TEAMS_THREAD_LIMIT

Yes

Yes

Yes

Yes

Yes

Yes

OMP_TARGET_MEMCPY_ASYNC

OMP_TARGET_MEMCPY_RECT_ASYNC

Yes

Yes

Yes

Yes

Yes

Yes

OMP_GET_MAPPED_PTR OMP_TARGET_ASSOCIATE_PTR

OMP_TARGET_DISASSOCIATE_PTR

Yes

Yes

Yes

Yes

Yes

Yes

OMP_NUM_TEAMS

OMP_TEAMS_THREAD_LIMIT

Yes

Yes

Yes

Yes

Yes

Yes

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

Yes

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

OpenMP 5.2

(bold indicates new features in this release)

Feature  Status in Compiler Version 2024.2.0 Status in Compiler Version 2024.1.0 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
Any clause allowed on an OpenMP END directive can be specified on the corresponding construct directive Yes No No No No No
LINEAR clause changes, including the STEP modifier Yes Yes No No No No
ENTER clause as a synonym for the TO clause on DECLARE TARGET Yes Yes Yes Yes Yes No
Metadirectives, ASSUME, NOTHING, ERROR, and loop transformation constructs are allowed in PURE procedures Yes Yes Yes No No No
ALLOCATORS construct Yes Yes Yes Yes No No
Optional END DISPATCH directive Yes Yes Yes Yes No No
Support ALLOCATE and FIRSTPRIVATE on the SCOPE directive Yes Yes, allocate No No No No
The DOACROSS clause is a synonym for the DEPEND clause Yes Yes Yes No No No
Allow dummy arguments as linear-step in a LINEAR clause of a DECLARE SIMD No No No No No No
Optional maptype on TARGET ENTER|EXIT DATA directives Yes Yes Yes No No No
PRESENT map-type-modifer on MAP clause of DECLARE MAPPER directive. Yes Yes No No No No
UNCONSTRAINED and REPRODUCIBLE order-modifers in the ORDER clause Yes Yes 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

Other useful information:

  • ifx and ifort are binary (.o/.obj) and module file (.mod) compatible unless built with compiler option -ipo. 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 same runtime libraries.
  • ifx may or may not match the 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 in the Intel Fortran Compiler 2022 and 2021

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

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