Intel® Fortran Compiler for oneAPI Release Notes

Última actualización:01/12/2021

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® Fortran Compiler Classic (ifort driver) in the Intel® oneAPI HPC Toolkit includes a full implementation of the Fortran 2018 standard. 

The Intel® Fortran Compiler (Beta) (ifx driver) is also included in the Intel® oneAPI HPC Toolkit. The Intel® Fortran Compiler (Beta) (ifx) is a new compiler based on the Intel® Fortran Compiler Classic (ifort) frontend and runtime libraries, using LLVM backend technology.  At this time ifx supports features of the Fortran 95 language and most of the OpenMP 4.5 directives and offloading features.  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). Both compilers use the ifort runtime libraries. ifx is released as a Beta version for users interested in trying GPU offloading, which ifort does not support.  Other Fortran users should continue to use ifort.


Intel® Fortran Compiler (Beta) (the “Materials”) are licensed to you under the Free User Type as defined in the enclosed Intel End User License Agreement for Developer Tools (Version October 2020) (“EULA”). The Materials are “Pre-Release Materials” as set forth in Section 4.2 of the EULA. 

The following restrictions for these Pre-Release Materials in Section 4.2 of the EULA are hereby waived:  (i) to not modify or incorporate the Pre-Release Materials into Your Product, (ii) to not continue to use the Pre-Release Materials once a commercial version is released, and (iii) to not disclose to any third party any benchmarks, performance results, or other information relating to the Pre-Release Materials. 

If You decide to use these Pre-Release Materials, You acknowledge and agree that (a) the Pre-Release Materials have only been validated to beta quality level, may not be error free, and may require more frequent updates; (b) the current performance may not be representative of the performance of the final production version; and (c) You are fully responsible for any issues that result from the use of these Pre-Release Materials.


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 product updates.

New in Intel® Fortran Compiler Classic and Intel® Fortran Compiler (Beta) 2021.1.2 Patch Release 12/22/20 

  • What is a Patch Release?  This is a term from semantic versioning and is a new way we will occasionally update our compilers in oneAPI.  As you may know, in the past with PSXE we did "Update" releases.  These PSXE Updates were full PSXE packages including Compilers, Libraries and usually tools like Vtune, Intel MPI , etc.   With oneAPI we will also release full Toolkit updates roughly every 3 months which will include updates to the compilers and all other components.  But to be more agile with getting fixes to our customers we have the option to release a compiler-ONLY update which is called a "Patch Release".  So these packages have a complete compiler and compiler runtimes BUT nothing else.  No MKL or IPP or other components.  Just a new compiler.  THIS MEANS YOU MUST HAVE AN EXISTING 2021.1.1 GOLD oneAPI Base (MKL, Debugger) and HPC (Fortran) installation BEFORE you install this PATCH 2021.1.2
  • This patch release fixes an issue causing ifx OpenMP offload to hang with the latest Level 0 driver. This patch is designed and tested to work with driver(s):
    • Windows GO HERE. Select either the WIn 10 DCH driver 27.20.100.9030 or the Xe MAX driver 27.20.100.9039 Please update to this driver if you plan to use the ifx OpenMP offload compiler in this patch.
    • Linux GO HERE This patch compiler is designed and tested to work with driver release 20201209.  Please update to this driver if you plan to use ifx OpenMP offload feature
  • Linux/macOS: This patch release fixes an issue for the version string returned by the --version option. In the initial release --version returned a version with the "Beta" designation which was incorrect. The "Beta" designation is removed from the output of --version in this patched compiler package. There are no other fixes in this compiler compared to the initial release compiler.
  • Windows: This patch release fixes an issue for the compiler names in the Visual Studio Integrations to proper annotate the ifx compiler as "(Beta)" and the ifort compiler as not "(Beta)".

 

  • When installing a patch release, users are to
    • Install the latest patches for all the compilers that they use: Intel Fortran Compiler Classic, Intel Fortran Compiler (Beta), Intel DPC++/C++ Compiler, and/or Intel C++ Compiler Classic.
    • Re-install Intel® CPU Runtime for OpenCL™ Applications 
      • You can download the Intel® CPU Runtime for OpenCL™ Applications for Windows from here.
      • For Linux, the package is distributed through APT and YUM, please follow the instructions on Installing Intel® oneAPI Toolkits via Linux* Package Managers to setup the repository and install the package "intel-oneapi-runtime-opencl".

New in Intel® Fortran Compiler Classic and Intel® Fortran Compiler (Beta) 2021.1.1

Changes since Intel® Fortran Compiler 19.1

Back to top

System Requirements

Please see Intel® Fortran Compiler System Requirements.

Back to top

How To Install the Intel® Fortran Compiler

Installation instructions are shipped with all Intel® Software Development Products as part of the documentation. Installation guide for the latest Intel® oneAPI HPC toolkit version is also available online. Please check Intel® oneAPI page for installation guides.

How To Use the Intel® Fortran Compiler

Please refer to

for details on how to use the Intel® Fortran Compiler.

Back to top

Documentation

Product documentation is available online

Back to top

Technical Support

Access the Intel® Fortran Compiler forum when you need assistance.  If you have Commercial Support, create a support ticket.

Back to top

New and Changed Compiler Features

ifort

Known Issue

This issue is fixed in the Fortran component patch release 2021.1.2.  Compiler option --version on Linux* and macOS* returns an incorrect version string ifort (IFORT) 2021.1 Beta 20201112.  The word "Beta" is incorrect; this is a production compiler. Use the compiler option -V for the correct version string, Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.1 Build 20201112_000000. The string returned by compiler option --version will be corrected in a future update. This ifort compiler option is not available on Windows*. 

New features from Fortran 2018

These features are not available when using the ifx compiler driver.

  • Coarray teams have been implemented.
    • The derived type TEAM_TYPE has been added to the ISO_FORTRAN_ENV intrinsic module.
    • The CHANGE TEAM and END TEAM statements have been implemented.
    • The FORM TEAM statement has been implemented.
    • The SYNC TEAM statement has been implemented.
    • The TEAM_NUMBER intrinsic function has been implemented.
    • The GET_TEAM intrinsic function has been implemented.
    • The optional TEAM argument has been added to the intrinsic functions STOPPED_IMAGES, NUM_IMAGES, and IMAGE_STATUS.
    • New forms of the IMAGE_INDEX and NUM_IMAGES allow optional TEAM and TEAM_NUMBER arguments have been implemented.
    • A new form of THIS_IMAGE with a TEAM argument has been implemented.
    • An optional TEAM or TEAM_NUMBER specifier is now permitted in image selectors.
  • Implicit allocation of an unallocated coarray in a variable definition context is now prohibited.
  • Nonpolymorphic pointer arguments to the EXTENDS_TYPE_OF and SAME_TYPE_AS intrinsics no longer need to have defined allocation status.
  • Deallocation during finalization has been clarified and now occurs using the semantics defined in Fortran 2018.
  • Output from the STOP and ERROR_STOP statement may now be conditionally suppressed.
  • STOP and ERROR STOP codes can now be non-constant expressions.
  • Named constants of type LOCK_TYPE are no longer allowed.
  • 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.
  • VALUE dummy arguments to PURE procedures may appear in variable definition contexts.
  • The optional ERRMSG argument has been added to the intrinsic procedures GET_COMMAND_ARGUMENT, GET_ENVIRONMENT_VARIABLE, and GET_COMMAND.
  • The OUT_OF_RANGE intrinsic function has been implemented.
  • The RANDOM_INIT intrinsic subroutine has been implemented.
  • Dummy arguments to defined assignment and operator procedures need not have the INTENT(IN) attribute if they have the VALUE attribute.
  • A dummy argument of PURE procedure may appear in a variable definition context if it has the VALUE attribute.
  • Constant properties of an object can be used in the objects initialization.
  • Polymorphic structure constructor components no longer need to have the same dynamic type as their corresponding structure component.
  • The RANDOM_INIT intrinsic subroutine has been implemented.
  • Several new Fortran 2018 terms have been added to the Glossary in the Developer Guide; for example: current team, ancestor team, parent team, and established coarrays.
  • Non-pointer variables with the PROTECTED attribute may no longer appear as a data-target or as a initial-data-target.
  • VOLATILE variables are now prohibited in PURE procedures and statement functions.
  • The type and kind of an implied DO loop variable TYPE can now be specified in an implied-do loop of array constructors and data statements.
  • Floating point comparisons perform IEEE comareSignaling<relation> operations when -assume ieee_compares or -standard-semantics compiler options are specified.
  • Procedures are not compiled for recursion by default; users wanting this behavior should use the -standard-semantics compiler option or the -assume recursion option.
  • The REDUCE function is implemented.

ifx

Known Issue

This issue is fixed in the Fortran component patch release 2021.1.2. In Microsoft* Visual Studio the name for Intel® Fortran Compiler (Beta) is listed incorrectly as Intel(R) Fortran Compiler. This is a Beta LLVM-based Fortran compiler; it should not be used in production.  See additional information at the beginning of this Release Note regarding Intel® Fortran Compiler (Beta) and its use. 

Language and OpenMP

Fortran 77
  • Implementation complete.
Fortran 90/95
  • Implementation complete. To determine if the code is using Fortran Standards that are not included in Fortran 90/95, add the compiler option -stand f95 (Linux), /stand:f95 (Windows) to the compile line. That option issues warning messages for language elements that are not standard in Fortran 90 or Fortran 95. 
Fortran 2003
  • Most of the iso_c_binding features introduced in F2003 (but not those introduced in F2018) are supported.
OpenMP
  • OpenMP 4.5 is supported with the exception of user-defined functions.
Additional Information

Read this supplemental article for more information about the implementaion of Fortran 2003, Fortran 2008, OpenMP 4.5 and OpenMP 5.0 features.

 

Back to top

New and Changed Compiler Options

ifort

These features are available with the ifort compiler driver only.

Please refer to the compiler documentation for details. The following new compiler options are added:

Linux / macOS

  • -assume [no]failed-images
  • -assume [no]ieee_compares
  • -check [no]teams

Windows

  • /assume:[no]failed-images
  • /assume:[no]ieee_compares
  • /check:[no]teams

assume [no]failed-images

Tells the runtime system to check for failed images on a team of images when executing an image control statement without a STAT= specifier or a call to MOVE_ALLOC or an atomic or collective subroutine without a STAT argument. Default nofailed_images.

assume [no]ieee_compares

Tells the compiler to generate IEEE compareSignaling<relation> operations for floating point comparisons, as required by the Fortran 2018 standard. Default assume ieee_compares.

check [no]teams

Tells the runtime system to detect non-standard usage of coarray team features. Examples are the use of a TEAM variable in the NUM_IMAGES intrinsic that does not describe the current team or an ancestor of the current team, or the use of TEAM_NUMBER=-1 in an image selector to indicate the initial team. Default noteams.

For a complete list of deprecated compiler options, see the Compiler Options section of the documentation. Newly deprecated compiler options are listed below.

ifx

Please refer to the compiler documentation for details. The following new compiler options are added:

assume [no]ieee_compares

  • Linux
    • -assume [no]ieee_compares
  • Windows
    • /assume:[no]ieee_compares

Tells the compiler to generate IEEE compareSignaling<relation> operations for floating point comparisons, as required by the Fortran 2018 standard. By default ifx assume NaNs are not going to be operands in floating point comparisons and does not generate that check for NaNs.  To get ifort behavior in floating point comparisons, ifx users should specify assume nan_compares.

fp-model, fp -- Compile Option Difference

  • Linux
    • ​-fp-model fast=1 or ​-fp-model fast=2

  • Windows
    • ​/fp:fast=1 or ​/fp:fast=2 

The behavior with the fp-model|fp fast=1 or 2 option is different between ifort and ifx with respect to floating point compares.  To get ifort behavior when using the fp-model|fp fast option with ifx, assume nan_compares should be specified on the ifx command line.

 

Back to top

Support Deprecated

  • 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. Remember to add compiler option -qopenmp-simd or -qopenmp. When compiling with -O2, -qopenmp-simd is implied.
  • The compiler option -stand f15 (Linux), /stand:f15 (Windows) is deprecated and may be removed in a future release. Use -stand f18 (Linux), /stand:f18 (Windows)
  • IPO support for macOS* 11 “Big Sur”* is deprecated and non-functional and will be removed in a future release.
  • Support for 32-bit targets is deprecated in ifort and will be removed in a future release.
  • The compiler option on Linux -mkl is deprecated and may be removed in a future release. This applies to both ifort and ifx. In a future release the replacement will be -qmkl. This compiler option tells the compiler to link to necessary libraries in the Intel® oneAPI Math Kernel Library.

Support Removed

  • 32-bit coarray support has been removed.
  • Use of the -qnextgen (Linux), /qnextgen (Windows) compiler option is removed. Use "ifx", instead of "ifort -qnextgen" or "ifort /qnextgen".

Back to top

Known Issues

ifort

Compiler Option --version Incorrect Version String

This issue is fixed in the Fortran component patch release 2021.1.2. Compiler option --version on Linux* and macOS* returns an incorrect version string ifort (IFORT) 2021.1 Beta 20201112.  The word "Beta" is incorrect; this is a production compiler. Use the compiler option -V for the correct version string, Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.1 Build 20201112_000000. The string returned by compiler option --version will be corrected in a future update. This ifort compiler option is not available on Windows*. 

Ubuntu 18.04.3 May Break Compiler 

 ifort: error #10105: ld: core dumped

Ubuntu's latest build of 18.04 LTS is 18.04.4. Their previous build, 18.04.3, had 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 the latest, 18.04.4, will install a fixed glibc along with other important updates to Ubuntu.

sudo apt-get update
sudo apt update

Redistribution Libraries

fredist.txt file for the Fortran compiler (ifort) is available online only for 2021.1.1 (Gold) release and will be part of compiler packages in future releases.

IPO on the upcoming macOS* 11

Use of IPO ( -ipo ) for Intel® oneAPI Fortran Compilers Classic available in the Intel® oneAPI HPC Toolkit on macOS 11 causes a link-time error.  Please remove -ipo from your compiler options for macOS* 11.

This link error does not affect Linux*  or Windows*  compilers.   It does not affect current macOS* 10.x users, only the new macOS 11 “Big Sur”* operating system.

IPO support for macOS* 11 “Big Sur”* is deprecated and non-functional in beta10 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 will not complete successfully and give little information about the failure.

ifx

These are applicable when using the ifx compiler driver.

OpenMP Offload Hang

This issue is fixed in the Fortran component patch release 2021.1.2. For more information, go here.

OpenMP offload may not work for icx and ifx with this initial release, oneAPI 2021.1.1.  Behavior you may see when reaching a TARGET directive is that the application may hang.  Use Ctrl+C to abort.  

Workaround 

Use the OpenCL driver for offload by setting the environment variable LIBOMPTARGET_PLUGIN.

  • On Linux:   export LIBOMPTARGET_PLUGIN=OPENCL
  • On Windows:  set LIBOMPTARGET_PLUGIN=OPENCL

This will allow the TARGET region to offload successfully.

Microsoft* Visual Studio and ifx

This issue is fixed in the Fortran component patch release 2021.1.2. In Microsoft* Visual Studio the name for Intel® Fortran Compiler (Beta) is listed incorrectly as Intel(R) Fortran Compiler. This is a Beta LLVM-based Fortran compiler; it should not be used in production.  See additional information at the beginning of this Release Note regarding Intel® Fortran Compiler (Beta) and its use.

Redistribution Libraries

fredist.txt file for the Fortran compiler (ifx) is available online only for 2021.1.1 (Gold) release and will be part of compiler packages in future releases.

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

OpenMP
  • OMP TARGET, including in combination with PARALLEL DO, or TEAMS, is supported. There are known limitations when passing derived type variables to a TARGET region when the type contains allocatable components.
Other known issues
  • !DIR$ directives are recognized by the front end, but ifx does not implement them.
  • Support for debugging deferred-shape arrays (i.e. pointer, allocatables and assumed-shape arrays) has been added, but overall debug support continues to be limited. By default, no debug information is generated during the offload compilation. However, if a user wants to try debugging their offloaded program, compile using -g -debug. The user is likely to have issues trying this.

Issue with Static Libraries and Target Offload

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.

Failure Using Link Time Optimization (LTO) on LInux

The failure using Link Time Optimization (LTO) is a linker failure. To successfully link, be sure to use at least these versions of binutils for your OS, except for RHEL 7.  With RHEL 7, LTO is not supported.

OS Status
OpenSUSE 15.2 Fixed in binutils 2.35
SLES 15 SP2  Reported, https://bugzilla.suse.com/show_bug.cgi?id=1177442
RHEL 7 Closed/Won't Fix
RHEL 8 Fixed in binutils-2.30-82.el8
Fedora 32 Fixed in binutils-2.34-6.fc32
Ubuntu 20.04 LTS Reported, https://bugs.launchpad.net/ubuntu/+source/binutils/+bug/1902760

 

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.

Back to top

Fortran 2008 and Fortran 2018 Feature Summary

The Intel® Fortran Compiler Classic (ifort) supports the full Fortran 2008 standard and the full Fortran 2018 standard. New Fortran 2018 features supported by the current version are listed in the 'New features from Fortran 2018' section.

Please refer to the Fortran 2008 Standard (PDF) and the Fortran 2018 Standard (PDF) as needed.

Back to top

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.

 

Información sobre productos y desempeño

1

El desempeño varía según el uso, la configuración y otros factores. Más información en www.Intel.com/PerformanceIndex.