インテル® Fortran コンパイラー 2025.1 リリースノート

バージョン: 2025.1
最終更新日: 2024年11月1日

本資料は、インテルのウェブサイトで公開されている「Intel® Fortran Compiler Release Notes」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


このドキュメントでは、インテル® Fortran コンパイラーの新機能および更新された機能について説明します。また、製品ドキュメントに記述されていない機能と問題についても説明します。

インテル® Fortran コンパイラー (ifx) は、インテル® Fortran コンパイラー・クラシック (ifort) のフロントエンドとランタイム・ライブラリーをベースに、最新の LLVM ベースのバックエンド・コンパイラー・テクノロジーを採用しており、従来の DEC 拡張機能、優れた Fortran 標準規格のサポート、強力なコンパイラー・ディレクティブなど、馴染みのあるインテル® Fortran コンパイラー・クラシックと同じ Fortran 機能を提供します。したがって、インテルの Fortran に期待されるものがすべてが揃っています。さらに、ifx は、インテルの最新の CPU および GPU 製品向けに、OpenMP TARGET やインテル® GPU への自動 DO CONCURRENT オフロードなどの新機能を追加し、さらなる高速化を実現します。

ifx は、Fortran 2018 までの Fortran 標準規格を完全にサポートしており、一部の Fortran 2023 機能もサポートします。ifx の詳細は、『インテル® Fortran コンパイラー・デベロッパー・ガイドおよびリファレンス』 (英語) および『ifort ユーザー向け ifx 移行ガイド』を参照してください。

変更履歴

このセクションでは、以前の製品バージョンからの主な変更点とマイナーリリースの変更点について説明します。

ifx 2025.1 の新機能

新しい Fortran 2023 の機能

  • SYSTEM_CLOCK 組み込み関数の変更が実装されました。すべての整数引数は同じ種別でなければならず、少なくともデフォルトの整数種別である必要があります。これらの制限に違反すると、コマンドラインでオプション stand f2023 (Windows: /stand:f23) またはオプション standard-semantics を指定したときに、標準メッセージとして診断されます。
  • PUBLIC NAMELIST グループに PRIVATE 変数が含まれるようになりました。

ifx 2025.1 の新しい OpenMP の機能

  • OpenMP 6.0
    • WORKDISTRIBUTE 構造は、関連付けられた文のブロックを、囲んでいる TEAMS 構造のスレッドでそれぞれ 1 回実行する作業単位に分割します。関連付けられたブロック内のプロシージャー参照は、固定サイズの配列引数での MATMUL への参照を除き、現時点ではこの構造のワークシェアリング・プロパティーを抑制します。
    • INTERCHANGE 構造は、入れ子のループ内のループの順序を変更します。

詳細は、『インテル® Fortran コンパイラー・デベロッパー・ガイドおよびリファレンス』 (英語) を参照してください。

参考情報

インテル® Fortran コンパイラー (ifx) の Fortran および OpenMP 標準の実装の詳細は、こちらの記事を参照してください。

インテル® Fortran コンパイラー 2025.0 リリースの新機能

ifx 2025.0 の新機能

  • [no]ieee_mode_restore キーワードが assume オプションに追加されました。これにより、Fortran 標準で要求されているように、呼び出しサイトで IEEE モードのフラグを保存および復元できるようになります。デフォルトは assume noieee_mode_restore です。これは、モードのフラグを呼び出し前に保存せず、呼び出し後に復元しません。
  • standard-semantics オプションは、stand オプションで設定された標準準拠レベルの影響を受けます。stand オプションが指定されていない場合、standard-semantics は Fortran 2018 標準の動作に準拠するオプションを設定します。
  • fopenmp-offload-mandatory (Linux) および /Qopenmp-offload-mandatory (Windows) コンパイラー・オプションは、コンパイルされたコードのデバイスバージョンのみ生成し、ホストバージョンを生成しないようにコンパイラーに指示します。
  • -inline-forceinline (Linux) および /Qinline-forceinline (Windows) オプションは、インラインルーチンを forceinline として扱うようにコンパイラーに指示します。
  • -fvec-allow-scalar-stores (Linux) および /Qvec-allow-scalar-stores (Windows) オプションは、明示的な simd ループのベクトル化を保証します。
  • 新しい組込みサブルーチン SPLIT および TOKENIZE を指定できます。

ifx 2025.0 の新しい OpenMP の機能

  • OpenMP 6.0
    • IF 節を TEAMS 構造で指定できるようになりました。
  • OpenMP 6.0
    • DEVICE_TYPE 節を TARGET 構造で指定できるようになりました。
  • OpenMP 5.1
    • DEVICE_TYPE 節を DECLARE TARGET ディレクティブで指定できるようになりました。
  • OpenMP 5.1
    • AFFINITY 節が TASK ディレクティブで許可されるようになりました。

変更点

  • -check all-check all -check nouninit として動作します。-check uninit を設定してこのオプションでビルドされていない MKL や MPI などのライブラリーとリンクするとランタイムエラーが発生するため、-check uninit-check all で設定されなくなりました。
  • IEEE_MAX_NUM、IEEE_MIN_NUM、IEEE_MAX__NUM_MAG、IEEE_MIN_NUM_MAG の結果を Fortran 2023 仕様に準拠するように変更しました。引数の 1 つが NaN の場合、ほかの引数が返されますが、Fortran 2018 では NaN が返されていました。古い動作にするには、新しい Fortran 2023 の関数、IEEE_MAX、IEEE_MIN、IEEE_MAX_MAG、IEEE_MIN_MAG を使用します。これらの関数はすべて、組込みモジュール IEEE_ARITHMETIC で定義されています。
  • 以前は、BOZ 定数は拡張機能として配列コンストラクターで許可されていて、配列コンストラクターの型に関係なく、BOZ は常にデフォルトの KIND の整数値として解釈されていました。Fortran 2023 に準拠するため、このリリースでは、明示的な REAL 型仕様の配列コンストラクターの BOZ 定数は、型仕様と同じ KIND の REAL 値のビットとして解釈されるようになりました。以前の動作にするには、BOZ 定数を INT 組込み関数への参照でラップします。
  • NULL 文字を含む C 文字列 (インテル® Fortran 拡張機能) を整数変数に割り当てると、以前は文字列が NULL 文字で切り捨てられ、NULL でパディングされていました。このリリースでは、切り捨ては行われなくなりました。次に例を示します。
integer :: i
character(4) :: c
i = "\0ab"C
c = "\0ab"C
print "(z8.8)", i
print "(z8.8)", c
end

以前のリリースでは、次のように出力されていました。

00000000
00626100

文字列の最初のバイトが NULL で、値が切り捨てられたため、整数値はすべて 0 です。文字値は (リトルエンディアン順、つまり右から左)、0x00 (明示的な NULL)、0x61 (a)、0x62 (b)、0x00 (最後に自動的に追加される NULL) です。

文字列リテラル定数の後の文字 C は、文字列の最後に NULL 文字を自動的に追加します。

このリリースでは、上記のプログラムの出力は次のようになります。

00626100
00626100

既知の問題

BLOCK DATA

  • Windows システムでは、別々にコンパイルされ、ライブラリーにリンクされた BLOCK DATA サブプログラムで初期化された COMMON ブロック変数を参照するライブラリーに組み込まれたサブプログラムは初期化されず、ゼロ値になります。この問題を回避するには、サブプログラムと BLOCK DATA サブプログラムを一緒にコンパイルするか、リンク行で BLOCK DATA を含むオブジェクト・ファイルを別々に渡します。

COMMON ブロック

  • インテル® Fortran コンパイラー (ifx) 2023.2.0 以降
    • OpenMP データ共有節で個々の COMMON ブロック変数ではなく COMMON ブロックを宣言するプログラムは、ランタイムエラー (セグメンテーション・フォールトや不正な結果) を引き起こします。この問題を回避するには、個々の COMMON ブロック変数を宣言します。

Visual Studio との統合

  • oneAPI 2025.0 リリースの Microsoft Visual Studio の検証済みバージョンはインテル® oneAPI 2024.1 と同じです。
    • Visual Studio 2022 バージョン 17.9.2 まで
    • Visual Studio 2019 バージョン 16.11.34 まで

詳細は、「インテル® コンパイラーと Microsoft Visual Studio の互換性」 (英語) を参照してください。Visual Studio を更新するときは、この点に注意してください。

  • ifort の以前のバージョンがないシステムにインテル® Fortran コンパイラー 2025 (ifx) をインストールした場合、Visual Studio で Fortran プロジェクトをビルドしたときに「The Fortran compiler (ifort.exe) cannot be found (Fortran コンパイラー (ifort.exe) が見つかりません)」というエラーが発生することがあります。
    • この問題を解決するには、[ソリューション エクスプローラー] でプロジェクトを右クリックして、[Intel Compiler] > [IFX Intel Fortran Compiler] を選択します。

map-type/map-type-modifier

program main                        
   type mytype                      
      integer, pointer :: p(:)      
      integer :: y                  
   end type                         
                                    
   type(mytype) :: x                
   x%p => null()                    
   x%y = 111                        
#if BUG                             
   !$omp target map(to: x)          
#else               
   !Workaround                
   !$omp target map(to: x, x%p)     
#endif                              
   print *, associated(x%p) ! not ok
   print *, rank(x%p) ! not ok      
   print *, x%y ! ok                
   !$omp end target                 
end        

適用される map-type/map-type-modifier は、派生型のポインター・コンポーネントには伝播されません。つまり、「x」が map(to) でマップされている場合、ポインター・コンポーネントは「map(to)」ではなく「map(alloc)」でのみマップされます。その結果、ポインター x%p のデバイスコピーで行われる関連付けステータス、ランクなどに関するクエリーは、ランダムな結果を返します。
この問題を回避するには、上記のように、同じ構造でポインター x%p をマップするときに、ポインターを明示的にマップします。

FAIL IMAGE を実行した後に Fortran Co-Array アプリケーションがハングする

FAIL IMAGE ステートメントを使用してイメージを失敗させる場合、ステートメントまたは操作で許可されている場合に失敗したイメージに遭遇する可能性のあるすべての Co-Array 操作で STAT= 指定子または STAT 引数を使用するか、assume failed_images または standard-semantics コンパイラー・オプションを指定する必要があります。STAT= 指定子、STAT 引数を使用しない場合、またはこれらのコンパイラー・オプションを指定しない場合、これらの操作は失敗したイメージをチェックしないで、失敗したイメージからの応答を待ちますが、応答が行われないため、アプリケーションがハングします。

次の例は、STAT= 指定子を使用してアプリケーションのハングを防ぐ方法を示します。

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)      ! STAT= がないとハング
END SUBROUTINE FAIL_AND_SYNC

opt-reports

「schedule(dynamic)」を含む OpenMP ループ構造を含むプログラムで opt-report を使用すると、コンパイラーがエラーを出力する既知の問題があります。この場合、-qopt-report を削除してコンパイルすることを推奨します。

特定の OpenMP オフロード・ディレクティブを使用すると正しい結果が得られない可能性

TEAM 構造内部の入れ子の並列ループが REDUCTION 節で変数を使用していて、TEAM 構造に同じ REDUCTION 節がない場合、OpenMP プラグマを使用してインテル® GPU にオフロードすると、正しい結果が得られない可能性があります。正しくない結果を回避するには、-mllvm -vpo-paropt-atomic-free-reduction-slm=true を指定してコンパイルし、グローバル・メモリー・バッファーを無効にします。

-ipo オプションと ifx/ifort オブジェクト・ファイルの使用

ifx はバイナリー (.o/.obj) およびモジュール (.mod) ファイルと互換性があります。ifort で生成されたバイナリーとライブラリーは、ifx でビルドされたバイナリーやライブラリーとリンクでき、一方のコンパイラーで生成された .mod ファイルは、もう一方のコンパイラーで使用できます (64 ビット・ターゲットのみ)。-ipo オプションを指定してコンパイルすると、ifort と ifx 間の互換性はなくなります。

GPU ドライバーのハング問題

ネイティブ環境で実行時間の長い CPU 計算ワークロードを持つアプリケーションがある場合、ワークロードが終了されないようにハングチェック・タイムアウト期間を無効にする必要があります。詳細は、各 OS の「インストール・ガイド」 (英語) を参照してください。

インテル® Xe-LPG インテグレーテッド・グラフィックス GPU への OpenMP オフロード

インテル® Xe-LPG インテグレーテッド・グラフィックス GPU への OpenMP オフロードを行う Fortran アプリケーションで、ランタイムエラーや予期しない結果が発生する可能性があります。このエラーは、インテル® Core™ Ultra プロセッサー (シリーズ 1) (開発コード名 Meteor Lake) およびインテル® Core™ Ultra プロセッサー (シリーズ 2) (開発コード名 Lunar Lake) で発生することを確認しています。影響を受けるアプリケーションは、OpenMP ターゲット領域内で OpenMP DISTRIBUTE PARALLEL DO 構文と collapse 節を使用しています。この問題は、インテル® Core™ Ultra プロセッサー (シリーズ 1) (開発コード名 Meteor Lake) およびインテル® Core™ Ultra プロセッサー (シリーズ 2) (開発コード名 Lunar Lake) 向けの最新の GPU ドライバーで発生します。この問題を解決するドライバーを、後日リリースする予定です。

CMake の情報

  • CMake 3.25 以降では、CMake がリンカーフラグを追跡する方法の制限により、CMake プロジェクトに LLVM ベースのコンパイラー (icx または ifx) とクラシックバージョンのコンパイラー (icc または ifort) の C/C++ コードと Fortran コードが混在していると、無効なリンクフラグが生成されます。例えば、CMake は、C/C++ コンパイラーとして「icx」を使用し、Fortran コンパイラーとして「ifort」を使用したプロジェクトをビルドできません。
    • この問題を回避するには、混在言語アプリケーションを作成するときに LLVM ベースのコンパイラーのみを使用します。
  • CMake 3.27 以降、インテル® oneAPI DPC++/C++ コンパイラーとインテル® Fortran コンパイラーのサポートが更新され、リンカーの代わりにコンパイラー・ドライバーをリンクに使用するようになりました。この変更により、SYCL アプリケーションとライブラリーの作成のユースケースが有効になり、Windows 上でプロシージャー間の最適化 (IPO) が有効になります。

設定スクリプトのレポート: 「linking to Fortran libraries from C fails (C から Fortran ライブラリーのリンクに失敗)」

症状

ifx でコンパイルしたとき、GNU Autconf により生成された ./configure スクリプトで次のようなエラーメッセージがレポートされる。

    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

config.log ファイルを調べると、次のエラーが原因で ./configure が終了したことが分かります。

    ld: cannot find -loopopt=0

問題

Fortran コードを C または C++ コードとリンクするために必要なライブラリーを決定する際に、GNU Autoconf 2.69 以前は、詳細なコンパイラー出力の -mllvm -loopopt=0-loopopt=0 を誤ってリンカーフラグとして解釈します。GNU Autoconf は -loopopt=0 を FLIBS 変数に追加して、リンカーに渡します。リンカーは、存在しないライブラリーを探して、リンクに失敗します。

ソースコードをダウンロードしているユーザー向けのソリューション

このエラーの影響を受けるパッケージのメンテナーに、このリリースノートを参照するように伝えてください。configure スクリプトの処理方法はプロジェクトによって異なりますが、いくつかの一般的な規則が適用されます。パッケージメンテナーからの応答の前に問題を解決する必要があるユーザーは、configure スクリプトを自分で更新してください。更新の難易度は、パッケージの配布方法によって異なります。

更新するには、「パッケージメンテナー向けのソリューション」で説明されているように、GNU Autoconf-2.70 以降をインストールします。

更新された autoconf をユーザーのパスにインストールした後、configure スクリプトと configure.ac ファイルを配布するパッケージを更新します。

    autoreconf -if

これで、configure スクリプトが FLIBS エラーなしで完了するようになります。

プロジェクト・メンテナーが、tar や zip アーカイブでのソース・ディストリビューションから configure.ac ファイルを削除することは珍しくありません。その場合、ユーザーは、コード・リポジトリーからプロジェクトをダウンロードして、プロジェクトの指示に従ってビルドする必要があります。configure スクリプトのバージョンがバージョン・コントロールにコミットされ、自動的に再生成されないことがあります。その場合、上記のように autoreconf -if を実行するか、configure スクリプトを削除すると、スクリプトが再生成されます。プロジェクトのドキュメントに configure スクリプトを再生成する方法が記載されている場合は、その指示に従ってください。

パッケージメンテナー向けのソリューション

ユーザーにエラーが表示されないようにするには、GNU Autoconf をバージョン 2.70 以降に更新して、プロジェクトの configure スクリプトを再生成します。GNU Autoconf 2.70 は 2020年12月8日にリリース (英語) されました。ソースコードは git clone http://git.sv.gnu.org/r/autoconf.git で入手できます。GNU Autoconf のドキュメントは、GNU Autoconf プロジェクト・ページ (英語) から入手できます。

終了予定のサポート

  • なし

削除されたサポート

  • インテル® Fortran コンパイラー・クラシック (ifort) は oneAPI 2025 リリースで削除されました。

使用方法

インテル® Fortran コンパイラーのダウンロード方法

こちらのサイト (英語) から手順に従って ifx を含むインテル® HPC ツールキットをダウンロードし、インストール手順に従ってインストールします。スタンドアロン・コンポーネント・ページ (英語) からインテル® Fortran コンパイラーをダウンロードすることもできます。

インテル® Fortran コンパイラーのインストール方法

インテル® oneAPI ツールキットのインストール・ガイドは、オンラインでも利用できます。詳細は、「インテル® oneAPI ツールキットのインストール・ガイド」 (英語) を参照してください。

動作環境

インテル® Fortran コンパイラーの動作環境」を参照してください。

インテル® Fortran コンパイラーの使用方法

インテル® Fortran コンパイラーの使用方法の詳細は、以下を参照してください。

ドキュメント

製品のドキュメントはオンラインで提供されています。

2024.0 で実装されたディレクトリー・レイアウトの変更

インストールとセットアップを合理化するため、すべての製品のディレクトリー・レイアウトを変更しました。統合ディレクトリー・レイアウトは 2024.0 で実装されました。ツールキットの複数のバージョンをインストールしている場合、統合レイアウトにより、インストールしているツールキットのバージョンに対応する正しいコンポーネントのバージョンが開発環境に含まれるようになります。2024.0 以前に使用されていたコンポーネント・ディレクトリー・レイアウトは、新規および既存のインストールで引き続きサポートします。環境の初期化方法やその利点など、統合レイアウトの詳細は、「Linux での setvars および oneapi-vars スクリプトの使用」 (英語) および「Windows での setvars および oneapi-vars スクリプトの使用」 (英語) を参照してください。

テクニカルサポート

優先サポートを利用可能な場合は、サポートチケットを作成してください。利用できない場合は、インテル® Fortran コンパイラー・フォーラム (英語) でサポートを受けることができます。

以前のインテル® oneAPI リリース

インテル® Fortran コンパイラー・リリースノート (以前のメジャーリリース)

法務上の注意書き

インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。

インテルの最適化機能は、インテルのコンパイラーまたはその他のインテル製品を対象としたものであり、他社製品に同等の最適化を行えないことがあります。

絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。

実際の費用と結果は異なる場合があります。

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。

本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。

インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。


製品および性能に関する情報

性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。