本資料は、インテルのウェブサイトで公開されている「Intel® Fortran Compiler Release Notes」および「Intel® Fortran Compiler System Requirements」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
このドキュメントでは、インテル® 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 移行ガイド』を参照してください。
このセクションでは、以前の製品バージョンからの主な変更点とマイナーリリースの変更点について説明します。
[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 ループのベクトル化を保証します。詳細は、『インテル® Fortran コンパイラー・デベロッパー・ガイドおよびリファレンス』 (英語) を参照してください。
参考情報
インテル® Fortran コンパイラー (ifx) の Fortran および OpenMP* 標準の実装の詳細は、こちらの記事を参照してください。
-check all
は -check all -check nouninit
として動作します。-check uninit
を設定してこのオプションでビルドされていない MKL や MPI などのライブラリーとリンクするとランタイムエラーが発生するため、-check uninit
は -check all
で設定されなくなりました。INT
組込み関数への参照でラップします。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
COMMON ブロック
Visual Studio* との統合
「インテル® コンパイラーと Microsoft* Visual Studio* の互換性」 (英語) を参照してください。Visual Studio* を更新するときは、この点に注意してください。
環境起動スクリプト
環境起動スクリプトは POSIX* 準拠のスクリプトに移行しました。csh などの非 POSIX* シェルでは、次のコマンドラインを使用した回避方法があります。
コンポーネント・ディレクトリー・レイアウトの場合:
% bash -c 'source /opt/intel/oneapi/setvars.sh ; exec csh'
統合ディレクトリー・レイアウトの場合:
% bash -c 'source <install-dir>/<toolkit-version>/oneapi-vars.sh ; exec csh'
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 の「インストール・ガイド」 (英語) を参照してください。
CMake* の情報
設定スクリプトのレポート: 「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 プロジェクト・ページ (英語) から入手できます。
注: インテル® HPC ツールキット (macOS* x86 版) およびインテル® Fortran コンパイラー (macOS* x86 版) は 2024.0 リリースから含まれなくなりました。
こちらのサイト (英語) から手順に従って ifx を含むインテル® HPC ツールキットをダウンロードし、インストール手順に従ってインストールします。スタンドアロン・コンポーネント・ページ (英語) からインテル® Fortran コンパイラーをダウンロードすることもできます。
インテル® oneAPI ツールキットのインストール・ガイドは、オンラインでも利用できます。詳細は、「インテル® oneAPI ツールキットのインストール・ガイド」 (英語) を参照してください。
インテル® Fortran コンパイラーの使用方法の詳細は、以下を参照してください。
このドキュメントでは、インテル® Fortran コンパイラー (ifx) のハードウェア、オペレーティング・システム、ソフトウェア要件を説明します。利用可能な開発環境のオプションに関する情報も含まれています。
次のインテル® 64 アーキテクチャー・ベースのシステムは、ホスト・プラットフォームとターゲット・プラットフォームの両方としてサポートされています。
注: インストール中、ダウンロードとインストールの中間ファイルを管理するため、インストーラーは追加で最大 6GB の一時ディスクストレージを必要とする場合があります。
インテル® Fortran コンパイラーはインテル® HPC ツールキットに含まれています。
インテル® oneAPI 2025.0 でサポートされている Linux* のディストリビューション
インテル® oneAPI 2024.2 でサポートされている Linux* のディストリビューション
ディレクトリー・レイアウトの変更
インストールとセットアップを合理化するため、すべての製品のディレクトリー・レイアウトを変更しました。統合ディレクトリー・レイアウトは 2024.0 で実装されました。ツールキットの複数のバージョンをインストールしている場合、統合レイアウトにより、インストールしているツールキットのバージョンに対応する正しいコンポーネントのバージョンが開発環境に含まれるようになります。2024.0 以前に使用されていたコンポーネント・ディレクトリー・レイアウトは、新規および既存のインストールで引き続きサポートします。環境の初期化方法や統合レイアウトの利点など、統合レイアウトの詳細は、「Linux* での setvars および oneapi-vars スクリプトの使用」 (英語) および「Windows* での setvars および oneapi-vars スクリプトの使用」 (英語) を参照してください。
インテル® oneAPI 2025.0 でサポートされている Windows* のバージョン
CPU
GPU
注: Windows* でインテル® Fortran コンパイラーを使用するには、Microsoft* Visual Studio* または Visual Studio* Build Tools をインストールする必要があります。詳細はこちら (英語)。
oneAPI 2024.2 でサポートされている Windows* のバージョン
インテル® oneAPI ツールキット向け VS Code 拡張 (英語) は、oneAPI アプリケーションを作成、デバッグ、およびプロファイルする開発者を支援します。詳細は、「Visual Studio* Code とインテル® oneAPI ツールキットの使用ユーザーガイド」 (英語) を参照してください。
VS Code Marketplace (英語) から以下の VS Code 拡張を利用できます。
製品のドキュメントはオンラインで提供されています。
2024.0 で実装されたディレクトリー・レイアウトの変更
インストールとセットアップを合理化するため、すべての製品のディレクトリー・レイアウトを変更しました。統合ディレクトリー・レイアウトは 2024.0 で実装されました。ツールキットの複数のバージョンをインストールしている場合、統合レイアウトにより、インストールしているツールキットのバージョンに対応する正しいコンポーネントのバージョンが開発環境に含まれるようになります。2024.0 以前に使用されていたコンポーネント・ディレクトリー・レイアウトは、新規および既存のインストールで引き続きサポートします。環境の初期化方法やその利点など、統合レイアウトの詳細は、「Linux* での setvars および oneapi-vars スクリプトの使用」 (英語) および「Windows* での setvars および oneapi-vars スクリプトの使用」 (英語) を参照してください。
優先サポートを利用可能な場合は、サポートチケットを作成してください。利用できない場合は、インテル® Fortran コンパイラー・フォーラムでサポートを受けることができます。
インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。
インテルの最適化機能は、インテルのコンパイラーまたはその他のインテル製品を対象としたものであり、他社製品に同等の最適化を行えないことがあります。
絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
実際の費用と結果は異なる場合があります。
© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。