インテル® Fortran コンパイラーの Fortran 言語と OpenMP* 機能

インテル® Fortran コンパイラー

この記事は、インテル® デベロッパー・ゾーンに公開されている「Fortran Language and OpenMP* Features Implemented in Intel® Fortran Compiler」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


この記事では、インテル® Fortran コンパイラー (ifx) の各リリースで実装されている Fortran 言語と OpenMP* 機能について説明します。

インテル® Fortran コンパイラー (ifx) 2025 の機能

インテル® Fortran コンパイラー (ifx) 2025.2 で実装された機能

このリリースの新しい Fortran 2023 の機能

  • 型に Co-Array の潜在的なサブオブジェクト・コンポーネントを持つデータ・コンポーネントは、配列になります。
  • 組込み関数 SELECTED_LOGICAL_KIND を実装しました。

このリリースの新機能

  • IEEE_SCALB (X, I) で、I 引数を X 引数と同じ種別型パラメーターの実数型にできるようになりました (Fortran 2018 解釈)。
  • オプション assume inline_cloc を指定すると、コンパイラーは組込みモジュール・プロシージャー ISO_C_BINDING から C_LOC 関数のインラインコードを生成します。デフォルトは assume noinline_cloc で、C_LOC を外部関数の呼び出しとして扱います。

このリリースの新しい OpenMP の機能

OpenMP 6.0

  • STRIPE ループ変換構造を実装しました。
  • NOWAIT 節にオプションの do-not-synchronize 論理引数を追加しました。

このリリースの変更点

インテル® Fortran コンパイラー (ifx) 2025.1 で実装された機能

ifx 2025.1.1 パッチリリースの新機能

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) 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 でパディングされていました。このリリースでは、切り捨ては行われなくなりました。

インテル® Fortran コンパイラー 2025 で利用可能な機能

Fortran 標準

ifx 2023.0.0 以降では、以下の Fortran 標準を完全に実装済みです。

  • Fortran 95
  • Fortran 2003
  • Fortran 2008
  • Fortran 2018

Fortran 2023

機能 2025.2 2025.1 2025.0
言語要素
ステートメント行の長さおよびステートメント全体の長さ制限の緩和
文字変数の長さの自動割り当て × × ×
typeof および classof 指定子 × × ×
条件式と引数 × × ×
2 進数、8 進数、16 進数定数のより広範な利用
組込みプロシージャ―と組込みモジュール
split および tokenize
角度に対応した三角関数
半周に対応した三角関数 × × ×
selected_logical_kind × ×
system_clock の変更 ×
新しい IEEE 規格への準拠のための変更
種別を指定するための追加の名前付き定数
C との相互運用性
組込みプロシージャ― c_f_pointer でポインター結果が指定された下限を持つことができる拡張
f_c_string および c_f_strpointer プロシージャ―
入出力
at 編集記述子
実数値の出力における先頭のゼロの制御 × × ×
private use 変数の public namelist グループでの使用
Co-Array
Co-Array 最終要素を持つ型のオブジェクトを配列または割付け配列として使用可能 一部サポート 一部サポート
通知付き put × × ×
集合操作におけるエラー条件
プロシージャ―
単純なプロシージャ― × × ×
配列機能
整数配列による添字およびセクション添字の指定 × × ×
整数配列による配列のランクと境界の指定 × × ×
rank × × ×
do concurrent のリダクション指定子
列挙子
列挙型 × × ×
enum 型 × × ×

OpenMP* 4.5

すべての機能がインテル® Fortran コンパイラー 2023.0 で実装されました。

OpenMP* 5.0/5.1

(太字 は本リリースの新機能を示します。)

機能 2025.2 2025.1 2025.0 2024.2.0
omp_all_memory 予約ロケーター
declare variant の adjust_args および append_args
dispatch 構造
target の thread_limit 節
target の has_device_addr
taskwait depend の nowait 節
default(private) と default(firstprivate)
defaultmap(present)
allocate ディレクティブの align 節
allocate 節の align 修飾子
OMP_DISPLAY_ENV
OMP_SET_NUM_TEAMS
OMP_GET_MAX_TEAMS
OMP_SET_TEAMS_THREAD_LIMIT
OMP_TARGET_MEMCPY_ASYNC
OMP_TARGET_MEMCPY_RECT_ASYNC
OMP_GET_MAPPED_PTR OMP_TARGET_ASSOCIATE_PTR
OMP_TARGET_DISASSOCIATE_PTR
OMP_NUM_TEAMS
OMP_TEAMS_THREAD_LIMIT
if (parallel: スカラー論理式)
TEAMS の REDUCTION 節
ALLOCATE 節
!$omp loop
!$omp teams loop (結合ディレクティブ)
!$omp parallel loop (結合ディレクティブ)
!$omp target teams loop (結合ディレクティブ)
!$omp parallel target teams loop (結合ディレクティブ)
!$omp simd の NONTEMPORAL 節
IN_REDUCTION 節
USE_DEVICE_ADDR 節
!$omp taskgroup の TASK_REDUCTION 節
!$omp allocate
!$omp declare variant
declare variant の MATCH 節
if (simd: スカラー論理式)
!$omp scan
!$omp requires
!$omp tile
メタディレクティブ 〇 (一部)
task reduction 修飾子
scan および default reduction 修飾子
conditional lastprivate 修飾子 × ×
ORDER 節 (OMP LOOP で有効)
ORDER 節 (OMP DISTRIBUTE で有効)
ORDER 節の UNCONSTRAINED 順序修飾子と REPRODUCIBLE 順序修飾子
mutexinoutset および depobj dependence
in、out、および inout dependence
AFFINITY 節 ×
DETACH 節 × × × ×
USES_ALLOCATORS 節 × × × ×
DECLARE MAPPER および mapper-identifier × × × ×
DECLARE TARGET ディレクティブの DEVICE_TYPE 節 ×
!$omp parallel master (結合ディレクティブ)
!$omp master taskloop (結合ディレクティブ)
!$omp master taskloop simd (結合ディレクティブ)
!$omp parallel master taskloop (結合ディレクティブ)
!$omp parallel master taskloop simd (結合ディレクティブ)
!$omp parallel masked (結合ディレクティブ)
!$omp masked taskloop (結合ディレクティブ)
!$omp masked taskloop simd (結合ディレクティブ)
!$omp parallel masked taskloop (結合ディレクティブ)
!$omp parallel masked taskloop simd (結合ディレクティブ)
!$omp taskwait の DEPEND 節
!$omp atomic の acq_rel、release、acquire、および relaxed memory-order
!$omp atomic の seq_cst memory-order
!$omp atomic の HINT 節
!$omp flush の acq_rel、release、および acquire memory-order
!$omp depobj
depobj の DESTORY節には destory-var 修飾子が必要
if (cancel: スカラー論理式)
MASKED 構造の FILTER 節
UNROLL 構造
SCOPE 構造
ASSUMES ディレクティブ
ERROR ディレクティブ
NOTHING ディレクティブ
DECLARE TARGET ディレクティブの LINK と INDIRECT
DEPEND 節のイテレーター
厳密に構造化されたブロック構造本体を持つオプションの END 構造ディレクティブ
TASKLOOP の GRAINSIZE 節と NUM_TASK 節の STRICT 修飾子

OpenMP* 5.2

(太字 は本リリースの新機能を示します。)

機能 2025.2 2025.1 2025.0 2024.2.0
OpenMP* END ディレクティブで許可されるすべての節は対応する構造ディレクティブで指定可能
STEP 修飾子を含む LINEAR 節の変更
DECLARE TARGET の TO 節と同義としての ENTER 節
Metadirectives、ASSUME、NOTHING、ERROR、およびループ変換構造を PURE プロシージャーで許可
ALLOCATORS 構造
オプションの END DISPATCH ディレクティブ
SCOPE ディレクティブで ALLOCATE と FIRSTPRIVATE をサポート
DOACROSS 節は DEPEND 節と同義
DECLARE SIMD の LINEAR 節で linear-step を仮引数として許可 × × × ×
TARGET ENTER|EXIT DATA ディレクティブのオプションの maptype
DECLARE MAPPER ディレクティブの MAP 節の PRESENT マップタイプ修飾子
ORDER 構造の UNCONSTRAINED 順序修飾子とand REPRODUCIBLE 順序修飾子

OpenMP 6.0

(太字 は本リリースの新機能を示します。)

機能 2025.2 2025.1 2025.0 2024.0.0
GROUPPRIVATE ディレクティブ
DISPATCH の INTEROP 節
DECLARE VARIANT の APPEND_ARGS 節の PREFER_TYPE
IF 節を TEAMS 構造で指定できるようになりました。 ×
TARGET 構造の DEVICE_TYPE 節 ×
INTERCHANGE 構造による入れ子のループ内のループ順序の変更 × ×
WORKDISTRIBUTE 構造 × ×
STRIPE ループ変換構造 × × ×
NOWAIT 節のオプションの do-not-synchronize 論理引数 × × ×

その他の参考情報:

  • ifx および ifort は、-ipo コンパイラー・オプションを指定してビルドしない限り、バイナリー (.o/.obj) とモジュール (.mod) ファイルの互換性があります。ifort で生成されたバイナリーやライブラリーは、ifx でビルドされたバイナリーやライブラリーとリンクできます。また、一方のコンパイラーで生成された .mod ファイルは、他方のコンパイラーで使用できます (64 ビット・ターゲットのみ)。
  • どちらのコンパイラーも同じランタイム・ライブラリーを使用します。
  • ifx でコンパイルしたアプリケーションのパフォーマンスは、ifort でコンパイルしたアプリケーションのパフォーマンスに匹敵する場合も、しない場合もあります。ifx のパフォーマンスはリリースごとに改善します。

インテル® oneAPI DPC++/C++ コンパイラー (dpcpp と icx) の OpenMP* 実装に関する同様の情報は、こちらを参照してください。

関連情報

Fortran 標準

Fortran 標準規格の詳細は、wg5-fortran.org (英語) を参照してください。

OpenMP* 仕様

OpenMP* 仕様は openmp.org (英語) から入手できます。

インテルのドキュメント

インテル® Fortran コンパイラー・クラシックおよびインテル® Fortran コンパイラー・デベロッパー・ガイドおよびリファレンス


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

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

タイトルとURLをコピーしました