Introduction
This document provides a summary of new and changed product features and includes notes about features and problems not described in the product documentation.
The Intel® oneAPI product packages provide two Fortran compilers. Intel® Fortran Compiler Classic (ifort) provides best-in-class Fortran language features and performance for CPU. The Intel® Fortran Compiler (ifx) has the added functionality of OpenMP* directives to offload to Intel GPUs. The OpenMP 5.0, 5.1 GPU offload features in ifx are not available in ifort. For calendar year 2022 ifort continues to be our best-in-class Fortran compiler for customers not needing GPU offload support. The default compiler for the Microsoft Visual Studio* environment is ifort.
Our latest compiler, the Intel® Fortran Compiler (ifx), is production-ready for CPUs and GPUs. ifx is based on the Intel® Fortran Compiler Classic (ifort) frontend and runtime libraries, but uses LLVM backend compiler technology. In this release (oneAPI 2022.3) ifx completely implements FORTRAN 77, Fortran90/95, Fortran 2003 (parameterized derived types are now implemented in the 2022.1.0 compiler) and Fortran 2008 (coarrays are now implemented in the 2022.2.0 version of the compiler) language standards and adds more functionality to the OpenMP 4.5 and OpenMP 5.0/5.1 directives and offloading features. 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, and .mod files generated with one compiler can be used by the other (64-bit targets only). Both compilers use the the same runtime libraries. ifx may or may not match performance of ifort compiled applications. Performance and Fortran Standard language improvements will be coming in ifx with each update release throughout 2022.
Where to Find the Release
Please follow the steps to download the Intel® oneAPI HPC Toolkit and follow the installation instructions. It is recommended to install the Intel® oneAPI Base Toolkit first for full functionality.
Change History
This section highlights important changes from the previous product version and changes in minor releases.
New in Intel® Fortran Compiler Classic and Intel® Fortran Compiler oneAPI 2022.3.1 Release
ifort version 2021.7.1
- Intel® Fortran Compiler Classic 2021.7.1 has been updated to include functional and security updates. Users should update to the latest version as it becomes available.
ifort version 2022.2.1
- Intel® Fortran Compiler 2022.2.1 has been updated to include functional and security updates. Users should update to the latest version as it becomes available
New in Intel® Fortran Compiler Classic and Intel® Fortran Compiler oneAPI 2022.3 Release
ifort version 2021.7.0
- Fortran language fixes and security updates
ifx version 2022.2.0
The following ifort and Fortran 2018 features are now available for ifx. Not all Fortran features or Fortran Runtime functions are available in offloaded code using DO CONCURRENT or OpenMP.
- DLLIMPORT/DLLEXPORT support
- Allows creating and using dynamic libraries in the Windows environment (ifort compatibility)
- Fortran 2018 coarray features and coarrays with allocatable fields
- Coarrays, including Fortran 2018 teams and events, are now fully supported. (F2008 and F2018 support)
- Fortran 2018 C interoperability support
- All C interoperability features, including assumed rank arrays and C array descriptors, are now supported. (F2018 support)
- More new features listed below.
- Corrections to reported problems
- Read this supplemental article for more information about the implementation of Fortran 2003, Fortran 2008, Fortran 2018, OpenMP 4.5 and OpenMP 5.0/5.1 features.
New in Intel® Fortran Compiler Classic and Intel® Fortran Compiler oneAPI 2022.2 Release
ifort version 2021.6.0
- Fortran language fixes and security updates
ifx version 2022.1.0
- All of the Fortran 2003 Standard is implemented including parameterized derived types
- All of the Fortran 2008 Standard is implemented with the exception of coarrays
- Corrections to reported problems
- Read this supplemental article for more information about the implementation of Fortran 2003, Fortran 2008, Fortran 2018, OpenMP 4.5 and OpenMP 5.0/5.1 features.
New in Intel® Fortran Compiler Classic and Intel® Fortran Compiler oneAPI 2022.1 Release
ifort version 2021.5.0
- Fortran language fixes and security updates
ifx version 2022.0.0
- All of the Fortran 2003 Standard is implemented with the exception of parameterized derived types
- All of the Fortran 2008 Standard is implemented with the exception of coarrays
- Corrections to reported problems
- Read this supplemental article for more information about the implementation of Fortran 2003, Fortran 2008, Fortran 2018, OpenMP 4.5 and OpenMP 5.0/5.1 features.
System Requirements
Please see Intel® Fortran Compiler System Requirements.
How To Install the Intel® Fortran Compiler
The installation guides for the Intel® oneAPI Toolkits are available online. Please check the Intel® oneAPI Toolkits Installation Guide for more information.
How To Use the Intel® Fortran Compiler
Refer to
- Get Started with the Intel® oneAPI Toolkits for Linux*
- Get Started with the Intel® oneAPI Toolkits for Windows*
for details on how to use the Intel® Fortran Compiler for oneAPI.
Documentation
Product documentation is available online
- Intel® Fortran Compiler Classic and Intel® Fortran Compiler Developer Guide and Reference
- Read this supplemental article for more information about ifx and its implementation of Fortran 2003, Fortran 2008, OpenMP 4.5 and OpenMP 5.0/5.1 features.
- OneAPI Versioning Schema based on Semantic Versioning
Technical Support
Access the Intel® Fortran Compiler forum when you need assistance. If you have Commercial Support, create a support ticket.
New and Changed Compiler Features
ifort
In previous versions of the compiler, no error was given if a dummy argument was specified with both the INTENT(IN) and VOLATILE attributes. Since this case is clearly a violation of the Fortran standard, we now correctly diagnose this case as an error. Fixed in ifort version 2021.6.0.
ifx
Language and OpenMP
Fortran 2003
- Implementation complete including parameterized derived types.
Fortran 2008
- Implementation complete including coarrays.
Fortran 2018
- Coarrays, including Fortran 2018 teams and events
- All C interoperability features, including assumed rank arrays and C array descriptors, are now supported.
- The DIM argument of many array intrinsics may now be a present optional argument.
OpenMP
- UNROLL construct
- Partially or fully unrolls a DO loop.
- PRESENT as a map-type modifier in a MAP clause
- You can now specify PRESENT as a map-type modifier in a MAP clause.
- TASK modifier and the REDUCTION clause
- The TASK modifier is now supported on the REDUCTION clause.
- FILTER clause on the MASKED construct
- The FILTER clause is now supported on the MASKED construct.
- OpenMP SIMD IF clause is now supported.
- DECLARE MAPPER directive implemented for scalar variables.
- Updates to the TARGET directive
- Added FIRSTPRIVATE and PRIVATE clauses
- Added implicit-behaviors ALLOC, TO, TOFROM, FROM, FIRSTPRIVATE, NONE and default to the DEFAULTMAP clause
- The OpenMP default loop schedule modifier for work sharing loop constructs was changed to nonmonotonic when the schedule kind is dynamic or guided to conform to the OpenMP 5.0 standard. User code that assumes monotonic behavior may not work correctly with this change. Users can add the monotonic schedule modifier in the schedule clause to keep the previous code behavior.
- Many features of OpenMP 5.0/5.1 are implemented. Details are in Intel® Fortran Compiler Classic and Intel® Fortran Compiler Developer Guide and Reference and in this supplemental article.
Other New Features
- DLLIMPORT/DLLEXPORT support
Allows creating and using dynamic libraries in the Windows environment (ifort compatibility) - !DIR$ ASSUME support
- The !DIR$ ASSUME directive is now supported by ifx for the -check and -assume options. (ifort compatibility)
- !DIR$ vector [no]vecremainder
- Vectorization is now enabled/disabled by using !DIR$ vector [no]vecremainder. For additional performance add !$omp simd. (ifort compatibility)
- Floating point comparisons perform IEEE compareSignaling<relation> operations when compiling with -assume ieee_compares or -standard semantics.
- VAX* UNION and STRUCTURE declarations, Intel language extensions.
- The argument to the C_LOC function in the intrinsic module ISO_C_BINDING now conforms to the Fortran standard definition.
- In previous versions of the compiler, no error was given if a dummy argument was specified with both the INTENT(IN) and VOLATILE attributes. Since this case is clearly a violation of the Fortran standard, we now correctly diagnose this case as an error.
New Compiler Options for ifx
- -check bounds support
- ifx now supports array bounds checking. (ifort compatibility)
- -init command line switch
- Allows classes of variables to be initialized to zero or IEEE exceptional values. (ifort compatibility)
- Dynamic COMMON support
- The -dyncom (Linux) or /Qdyncom (Windows) command line switch allows COMMON blocks to be allocated dynamically instead of statically. (ifort compatibility)
- DO CONCURRENT offload support (ifx only)
- -f[no]openmp-target-do-concurrent (Linux) or /Qopenmp-target-do-concurrent[-] (Windows) causes the compiler to generate offload code for DO CONCURRENT constructs. The default varies: if option -fopenmp-targets (/Qopenmp-targets) is specified the default is ON, otherwise it is OFF.
Additional Information
Read this supplemental article for more information about the implementation of Fortran 2003, Fortran 2008, Fortran 2018, OpenMP 4.5 and OpenMP 5.0/5.1 features.
Support Deprecated
Intel® C++ Compiler Classic (icc/icpc)
Intel® C++ Compiler Classic (icc/icpc) is deprecated and will be removed in a oneAPI release in the second half of 2023. Intel recommends that customers transition now to using the LLVM-based Intel® oneAPI DPC++/C++ Compiler (icx/icpx) for continued Windows* and Linux* support, new language support, new language features, and optimizations. For more information on icx/icpx, see the Intel® oneAPI DPC++/C++ Compiler Developer Guide and Reference and the Porting Guide for icc Users to dpcpp or icx.
Note that starting with release 2021.7, macOS* support is limited to Mac* computers with Intel® Processors.
Microsoft Visual Studio* 2017
Intel Compiler Integrations for Microsoft Visual Studio* 2017 are deprecated and will be removed in a future release. Support for Integrations for Visual Studio is limited to two supported major versions of Visual Studio: the current publicly available and supported major version and the previous major version from Microsoft.
ifort
- Directive SIMD (!dir$ SIMD) is deprecated and may be removed in a future release. In the source code users should replace the directive with the OpenMP SIMD directive !$omp simd and associated clauses. When using the OpenMP SIMD directive remember to add compiler option -qopenmp-simd or -qopenmp. When compiling with -O2, -qopenmp-simd is implied.
- The compiler option on Linux -mkl is deprecated and may be removed in a future release. Beginning in the 2021.4.0 release the replacement is -qmkl. This compiler option tells the compiler to link to necessary libraries in the Intel® oneAPI Math Kernel Library.
ifx
- -fopenmp is deprecated and may be removed in a future release. Use -qopenmp or -fiopenmp instead.
- The compiler option on Linux -mkl is deprecated and may be removed in a future release. Beginning in the 2021.4.0 release the replacement is -qmkl. This compiler option tells the compiler to link to necessary libraries in the Intel® oneAPI Math Kernel Library.
Known Issues
Non-POSIX Shells
The environment start up scripts have been migrated to POSIX compliant scripts. For non-POSIX shells, such as csh, there is a workaround for command-line usage:
% bash -c 'source /opt/intel/oneapi/setvars.sh ; exec csh'
ifort
These are applicable when using the ifort compiler driver.
Fortran Runtime Libraries
On Windows the oneAPI Fortran runtime libraries are installed in a new folder. The new folder is %INTEL_DEV_REDIST%redist\intel64_win\compiler. When Parallel Studio Fortran redistributables are installed along side oneAPI Fortran runtime libraries, the PATH environment variable may not be set up correctly.
On Windows fatal error LNK1318: Unexpected PDB error; OK (0)
[Fixed in oneAPI HPC 2022.2 for both ifort and ifx.]
On Windows, you may see the following error at link time when you build your executable with /debug at a higher optimization level (say, /O2):
fatal error LNK1318: Unexpected PDB error; OK (0)
This is caused by a bug in the linker packaged with Microsoft Visual Studio 2019 Version 16.11.2. You may workaround the bug by disabling inline function expansions with the command line flag ‘/inline:none’. Note that this flag can potentially reduce the performance of your executable.
Ubuntu 18.04.3 May Break Compiler
ifort: error #10105: ld: core dumped
Ubuntu 18.04.3 has an issue that may affect (break) the Intel Fortran Compiler Classic. Earlier builds like 18.04.2 and 18.04.1 are compatible and work with the Intel compilers.
You can find your Ubuntu build number by:
cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
Notice DISTRIB_DESCRIPTION. On this system it is the latest 18.04.4 LTS.
If your DISTRIB_DESCRIPTION has "18.04.3" you may have issues running the Intel compilers due to an issue with glibc in this specific build.
The error will be
ifort hello.f90
ifort: error #10105: ld: core dumped
ifort: warning #10102: unknown signal(-320620368)
ifort: error #10106: Fatal error in ld, terminated by unknown
Upgrading your Ubuntu installation to 18.04.4 or newer will install a fixed glibc along with other important updates to Ubuntu.
sudo apt-get update
sudo apt update
IPO on macOS* 11
Use of IPO ( -ipo ) for Intel® oneAPI Fortran Compilers Classic (ifort) available in the Intel® oneAPI HPC Toolkit on macOS* 11 and newer macOS releases causes a link-time error. Please remove -ipo from your compiler options for macOS* 11 and newer releases.
This link error does not affect Linux* or Windows* compilers. It does not affect current macOS* 10.x users, only the newer macOS releases.
IPO support for macOS* 11 “Big Sur”* and new releases is deprecated and non-functional and will be removed in a future release.
Fortran Coarray Application Hang After Executing FAIL IMAGE
If you use a FAIL IMAGE statement to make an image fail, you should use a STAT= specifier or a STAT argument in all coarray operations that might encounter that failed image if the statement or operation permits, or you should specify either the assume failed_images or standard-semantics compiler option. If you do not use a STAT= specifier, a STAT argument, or specify one of the compiler options, those operations will not check for failed images. They may then try to coordinate with the failed image, waiting for a response from it. The response would never happen and so the application would hang.
The following example demonstrates using the STAT= specifier to prevent an application hang.
SUBROUTINE FAIL_AND_SYNC ( THIS_ONE )
INTEGER THIS_ONE
INTEGER MY_STAT
IF (THIS_IMAGE() .EQ. THIS_ONE) THEN
FAIL IMAGE
END IF
SYNC ALL (STAT=MY_STAT) ! Would hang without STAT=
END SUBROUTINE FAIL_AND_SYNC
Cross Compiling (compiling in 32-bit mode on a 64-bit machine running Microsoft Windows*)
If you are running
- Microsoft Windows* and
- cross compiling (compiling in 32-bit mode on a 64-bit machine) and
- using Microsoft Visual Studio* 2019 and
- handle exceptions, particularly floating point exceptions, in your code and
- you see a SEGV exception when your program gets a floating point exception,
your program did not handle the exception as intended.
The solution is to add legacy_x86_flt_exceptions.lib to your link command.
Using the Coarray Feature with Red Hat 8
Applications that use the coarray feature and are running on Red Hat 8.0 or later should have Intel MPI 2019 Update 7 or later installed. With earlier versions of MPI, applications may not complete successfully and give little information about the failure.
ifx
These are applicable when using the ifx compiler driver.
Using -ax
The usage of -ax (auto cpu dispatch) is not currently supported when building libraries with the -fpic option.
Using -ipo and mixing ifx with ifort object files.
ifx is binary (.o/.obj) and module (.mod) file compatible; binaries and libraries generated with ifort can be linked with binaries and libraries built with ifx, and .mod files generated with one compiler can be used by the other (64-bit targets only). If you compile with -ipo though, the compatibility between ifort and ifx is broken.
Fortran Runtime Libraries
On Windows the oneAPI Fortran runtime libraries are installed in new folder. The new folder is %INTEL_DEV_REDIST%redist\intel64_win\compiler. When Parallel Studio Fortran redistributables are installed along side oneAPI Fortran runtime libraries, the PATH environment variable may not be setup correctly.
On Windows fatal error LNK1318: Unexpected PDB error; OK (0)
[Fixed in oneAPI HPC 2022.2 for both ifort and ifx.]
On Windows, you may see the following error at link time when you build your executable with /debug at a higher optimization level (say, /O2):
fatal error LNK1318: Unexpected PDB error; OK (0)
This is caused by a bug in the linker packaged with Microsoft Visual Studio 2019 Version 16.11.2. You may workaround the bug by disabling inline function expansions with the command line flag ‘/inline:none’. Note that this flag can potentially reduce the performance of your executable.
GPU Driver Hanging Issue
If you have applications with long-running GPU compute workloads in native environments, you must disable the hangcheck timeout period to avoid terminating workloads. See the Installation Guide for your OS for more information.
Language and OpenMP
Other known issues
- With ifx the OpenMP clause COPYPRIVATE (allocatable or pointer-array) is not supported.
- !DIR$ directives are recognized by the front end, but not all are implemented. !DIR$ directives that ifx supports are: IVDEP, VECTOR [NO]DYNAMIC_ALIGN, VECTOR [NO]VECREMAINDER, DISTRIBUTE POINT, NOFUSION, [NO]UNROLL, [NO]UNROLL_AND_JAM, among others. Added in ifx version 2022.2.0: VECTOR ALWAYS ASSERT.
- [Added with ifx version 2022.2.0 in oneAPI 2022.3.] However, the vectorization enabled/disabled by using !DIR$ VECTOR[NO]VECREMAINDER is not yet implemented in the vectorization phase of the compiler. Replace !DIR$ with the !$OMP SIMD directive for additional performance.
- Overall debugging is much improved, except for deferred shape arrays. This is true for both host and target.
Issue with Static Libraries and Target Offload
[Fixed in oneAPI HPC 2022.2.] Due to a bug, the ifx compiler on Linux* does not support linking library archives using the -l option for libraries that contain target offload code, i.e., offload code for GPU or FPGA. This article describes the problem and the workaround. This workaround also applies to other Intel LLVM-based compilers, icx, icpx and dpcpp.
Using the Coarray Feature with Red Hat 8
Applications that use the coarray feature and are running on Red Hat 8.0 or later should have Intel MPI 2019 Update 7 or later installed. With earlier versions of MPI, applications may not complete successfully and give little information about the failure.
Fortran Coarray Application Hang After Executing FAIL IMAGE
Read the description in the ifort Known Issues section. ifx and ifort share the runtime libraries.
Configure Script Reports: "linking to Fortran libraries from C fails"
Symptom
When compiling with ifx, a ./configure script generated by GNU Autconf reports an error message similar to:
checking for Fortran 77 libraries of ifx... -loopopt=0 -L/lib/../lib64 -L/lib/../lib64/ -L/usr/lib/../lib64 -L/usr/lib/../lib64/ -L/lib64 -L/lib/ -L/usr/lib64 -L/usr/lib -lifport -lifcoremt -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -ldl
configure: WARNING: FLIBS does not work
checking for ifx flag to add single underscore to external names... none
checking for dummy main to link with Fortran 77 libraries... unknown
configure: error: in '/path/to/build/dir':
configure: error: linking to Fortran libraries from C fails
See `config.log' for more details
make: *** [build/config.status] Error 1
Examining the config.log file shows that the error causing ./configure to exit was:
ld: cannot find -loopopt=0
Problem
In trying to determine libraries needed to link Fortran code with C or C++ code, GNU Autoconf 2.69 and earlier mistakenly interprets -loopopt=0 in -mllvm -loopopt=0 in verbose compiler output as a linker flag. GNU Autoconf then adds -loopopt=0 to the FLIBS variable, which is passed to the linker. The linker then looks for a non-existent library causing the test to fail.
Solution for Users Downloading Source Code
Please inform the maintainers of packages impacted by this error about the problem and refer them to this release note. Projects vary in how they handle configure scripts, however, some general rules apply. Users who need a solution before the package maintainer can respond can update the configure script themselves. Difficulty of updating depends on how the package is distributed.
To update, first, install GNU Autoconf-2.70 or newer, as described in Solution for Package Maintainers, below.
After installing the updated autoconf in the user's path, packages that distribute the configure.ac file along with the configure script can be updated simply by running:
autoreconf -if
The resulting configure script should complete without the above error in FLIBS.
It is not uncommon for project maintainers to remove the configure.ac file from a source distribution in a tar or zip archive. In that case, the user usually needs to download the project from its code repository, and build according to the project's instructions. Sometimes a version of the configure script is committed to version control and not automatically regenerated. In that case, either running autoreconf -if as described above, or deleting the configure script often trigger it to be regenerated. Ideally, documentation for the project will describe how to rebuild the configure script.
Solution for Package Maintainers
To prevent users seeing errors, update to GNU Autoconf to version 2.70 or later and re-generate the project configure script. GNU Autoconf-2.70 was released December 8, 2020. Source code is available via git clone http://git.sv.gnu.org/r/autoconf.git. GNU Autoconf documentation is available through GNU Autoconf Project Page.
Intel Fortran Compiler Release Notes for Previous oneAPI Releases
Notices and Disclaimers
Intel technologies may require enabled hardware, software or service activation.
No product or component can be absolutely secure.
Your costs and results may vary.
© Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries. Other names and brands may be claimed as the property of others.
No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document.
The products described may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.
Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or usage in trade.