New in the Intel Fortran Compiler (ifx) 2025
New Fortran 2023 features in this release:
- A data component whose type has a coarray potential subobject component may be an array.
- Intrinsic function SELECTED_LOGICAL_KIND has been implemented.
New Features in this release:
- The IEEE_SCALB (X, I) now permits the I argument to be of type real with the same kind type parameter as the X argument (Fortran 2018 interpretation)
- Option assume inline_cloc causes the compiler to generate inline code for the C_LOC function from the intrinsic module procedure ISO_C_BINDING. The default is assume noinline_cloc, which treats C_LOC as a call to an external function.
New OpenMP features in this release:
OpenMP 6.0
- The STRIPE loop transformation construct has been implemented.
- The NOWAIT clause now has an optional do-not-synchronize logical argument.
Changes in this release:
- Option fprofile-mf-use has been deprecated.
-
See Intel® Compiler Extension Routines to OpenMP* in the Fortran Developer Guide and Reference for more information.
New in ifx 2025.1.1 Patch release
- This Patch release contains the latest security and stability enhancements.
-
Compiler option-qopenmp-threadprivate(Windows:/Qopenmp-threadprivate)has been removed from the Intel® Fortran Compiler Developer Guide and Reference. This feature is not currently available.
New Features in ifx 2025.1
New Fortran 2023 features
- Changes to the SYSTEM_CLOCK intrinsic have been implemented. All integer arguments must have the same kind type, and be of at least default integer kind. Violation of these restrictions is diagnosed as standard messages when option -stand f2023 (Windows: /stand:f23)or option standard-semantics appears on the command line.
- PUBLIC NAMELIST groups may now contain PRIVATE variables.
New OpenMP features in ifx 2025.1
- OpenMP 6.0
- The WORKDISTRIBUTE construct divides the associated block of statements into units of work that are each executed once by a thread of the enclosing TEAMS construct. A procedure reference in the associated block, with the exception of a reference to MATMUL with fixed-size array arguments, will inhibit the work-sharing properties of this construct at this time.
- INTERCHANGE construct reorders loops in a loop nest.
-
See Intel® Compiler Extension Routines to OpenMP* in the Fortran Developer Guide and Reference for more information.
New Features in ifx 2025.0
- The [no]ieee_mode_restore keyword has been added to the assume option. This enables saving and restoring the IEEE mode flags at call sights as required by the Fortran standard. The default is assume noieee_mode_restore, which does not save the mode flags prior to a call and does not restore them after the call.
- The standard-semantics option is now sensitive to a standards conformance level set by the stand option. If no stand option is specified, standard semantics sets options to conform to Fortran 2018 standard behavior.
- The fopenmp-offload-mandatory and /Qopenmp-offload-mandatory compiler option tells the compiler to generate only a device version of the compiled code and not a host version.
- Option -inline-forceinline (Linux) and /Qinline-forceinline (Windows), which tells the compiler to treat inline routines as forceinline.
- Option -fvec-allow-scalar-stores (Linux) and /Qvec-allow-scalar-stores (Windows), which ensures vectorization of an explicit simd loop.
- You can specify new pure intrinsic subroutines SPLIT and TOKENIZE.
New OpenMP features in ifx 2025.0
- OpenMP 6.0
- An IF clause allowed on TEAMS construct
- OpenMP 6.0
- A DEVICE_TYPE clause may now appear on a TARGET construct.
- OpenMP 5.1
- The DEVICE_TYPE clause may appear on a DECLARE TARGET directive.
- OpenMP 5.1
- AFFINITY clause is now permitted on a TASK directive.
Changes
- -check all now behaves as -check all -check nouninit. Setting -check uninit and linking with libraries not built with this option such as MKL or MPI causes runtime failures, so -check uninit is no longer set by -check all.
- The results of IEEE_MAX_NUM, IEEE_MIN_NUM, IEEE_MAX__NUM_MAG, and IEEE_MIN_NUM_MAG have changed to conform to the Fortran 2023 specification. If one of the arguments is a NaN, the other argument is returned, while in Fortran 2018 a NaN was returned. The old behavior is available in the new Fortran 2023 functions IEEE_MAX, IEEE_MIN, IEEE_MAX_MAG, and IEEE_MIN_MAG. These functions are all defined in the intrinsic module IEEE_ARITHMETIC.
- Previously, a BOZ constant was permitted in an array constructor as an extension, and the BOZ would always be interpreted as an integer value of default kind regardless of the type of the array constructor. To comply with Fortran 2023, in this release, BOZ constants in array constructors with an explicit REAL type-spec are now interpreted as the bits of a REAL value with the same kind as the type-spec. To obtain the old behavior, wrap the BOZ constant in reference to the INT intrinsic function.
- A C string (Intel Fortran extension) containing a NULL character when assigned to an integer variable used to truncate the string at the null character and pad with NULLs. As of this release, the truncation no longer occurs.
Features in the Intel Fortran Compiler 2025
Fortran Standards
Beginning with ifx version 2023.0.0 these Fortran standards are completely implemented:
- Fortran 95
- Fortran 2003
- Fortran 2008
- Fortran 2018
Fortran 2023
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 2025.2 | Status in Compiler Version 2025.1 | Status in Compiler Version 2025.0 | Status in Compiler Version 2024.2.0 |
---|---|---|---|---|
omp_all_memory reserved locator |
Yes | Yes | Yes | Yes |
adjust_args, append_args for declare variant |
Yes | Yes | Yes | Yes |
dispatch construct |
Yes | Yes | Yes | Yes |
thread_limit clause for target |
Yes | Yes | Yes | Yes |
has_device_addr for target |
Yes | Yes | Yes | Yes |
nowait clause for taskwait depend |
Yes | Yes | Yes | Yes |
default(private) and default(firstprivate) |
Yes | Yes | Yes | Yes |
defaultmap(present) |
Yes | Yes | Yes | Yes |
align clause for allocate directive align modifier for allocate clause |
Yes | Yes | Yes | Yes |
OMP_DISPLAY_ENV |
Yes | Yes | Yes | Yes |
OMP_SET_NUM_TEAMS OMP_GET_MAX_TEAMS OMP_SET_TEAMS_THREAD_LIMIT |
Yes | Yes | Yes | Yes |
OMP_TARGET_MEMCPY_ASYNC OMP_TARGET_MEMCPY_RECT_ASYNC |
Yes | Yes | Yes | Yes |
OMP_GET_MAPPED_PTR OMP_TARGET_ASSOCIATE_PTR OMP_TARGET_DISASSOCIATE_PTR |
Yes | Yes | Yes | Yes |
OMP_NUM_TEAMS OMP_TEAMS_THREAD_LIMIT |
Yes | Yes | Yes | Yes |
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 | Yes | Yes | Yes |
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 | Yes | Yes |
Metadirectives | Yes | Yes | Yes | Yes, a subset |
“task” reduction-modifier | Yes | Yes | Yes | Yes |
"scan" and "default" reduction-modifier | Yes | Yes | Yes | Yes |
“conditional” lastprivate-modifier | Yes | Yes | no | no |
ORDER clause (enabled on OMP LOOP) | Yes | Yes | Yes | Yes |
ORDER clause (enabled on OMP DISTRIBUTE) | Yes | Yes | Yes | Yes |
UNCONSTRAINED and REPRODUCIBLE order-modifiers in the ORDER clause | Yes | Yes | Yes | Yes |
"mutexinoutset" and "depobj” dependence-type | Yes | Yes | Yes | Yes |
“in“, “out“ and “inout“ dependence-type | Yes | Yes | Yes | Yes |
AFFINITY clause | Yes | Yes | Yes | 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 on DECLARE TARGET directive | Yes | Yes | Yes | 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 | Yes | Yes | Yes | Yes |
“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 | Yes | Yes | Yes | Yes |
“acq_rel“, “release“ and “acquire” memory-order clauses on !$omp flush | Yes | Yes | Yes | Yes |
!$omp depobj | Yes | Yes | Yes | Yes |
Required destory-var modifer for DESTORY clause on depobj | Yes | Yes | Yes | Yes |
if (cancel: scalar-logical-expression) | ||||
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 | Yes |
ERROR directive | Yes | Yes | Yes | Yes |
NOTHING directive | Yes | Yes | Yes | Yes |
LINK and INDIRECT for directive DECLARE TARGET | Yes | Yes | Yes | Yes |
Iterators in the DEPEND clause | Yes | Yes | Yes | Yes |
Optional END construct directives with strictly structured block construct bodies | Yes | Yes | Yes | Yes |
STRICT modifier for GRAINSIZE and NUM_TASK clauses on TASKLOOP | Yes | Yes | Yes | Yes |
OpenMP 5.2
(bold indicates new features in this release)
Feature | Satus in Compiler Version 2025.2 | Status in Compiler Version 2025.1 | Status in Compiler Version 2025.0 | Status in Compiler Version 2024.2.0 |
---|---|---|---|---|
Any clause allowed on an OpenMP END directive can be specified on the corresponding construct directive | Yes | Yes | Yes | Yes |
LINEAR clause changes, including the STEP modifier | Yes | Yes | Yes | Yes |
ENTER clause as a synonym for the TO clause on DECLARE TARGET | Yes | Yes | Yes | Yes |
Metadirectives, ASSUME, NOTHING, ERROR, and loop transformation constructs are allowed in PURE procedures | Yes | Yes | Yes | Yes |
ALLOCATORS construct | Yes | Yes | Yes | Yes |
Optional END DISPATCH directive | Yes | Yes | Yes | Yes |
Support ALLOCATE and FIRSTPRIVATE on the SCOPE directive | Yes | Yes | Yes | Yes |
The DOACROSS clause is a synonym for the DEPEND clause | Yes | Yes | Yes | Yes |
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 | Yes | Yes | Yes | Yes |
PRESENT map-type-modifer on MAP clause of DECLARE MAPPER directive. | Yes | Yes | Yes | Yes |
UNCONSTRAINED and REPRODUCIBLE order-modifers in the ORDER clause | Yes | Yes | Yes | Yes |
OpenMP 6.0
(bold indicates new features in this release)
Feature | Status in Compiler Version 2025.2 | Status in Compiler Version 2025.1 | Status in Compiler Version 2025.0 | Status in Compiler Version 2024.0.0 |
---|---|---|---|---|
GROUPPRIVATE directive | Yes | Yes | Yes | Yes |
INTEROP on DISPATCH | Yes | Yes | Yes | Yes |
PREFER_TYPE in the APPEND_ARGS clause of DECLARE VARIANT | Yes | Yes | Yes | Yes |
An IF clause allowed on TEAMS construct |
Yes | Yes | Yes | No |
A DEVICE_TYPE clause on a TARGET construct | Yes | Yes | Yes | No |
INTERCHANGE construct reorders loops in a loop nest | Yes | Yes | No | No |
The WORKDISTRIBUTE construct | Yes | Yes | No | No |
STRIPE loop transformation construct | Yes | No | No | No |
The NOWAIT clause now has an optional do-not-synchronize logical argument | Yes | No | No | No |
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.
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