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

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

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


この記事では、ifx の各リリースで実装されている Fortran 言語と OpenMP* 機能について説明します。

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


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

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

  • Fortran 言語標準
    • インテル® Fortran コンパイラー (ifx) 2023.0.0 以降では、FORTRAN 77、Fortran90/95、Fortran 2003、Fortran 2008 および Fortran 2018 言語標準を完全に実装しています。
    • Fortran 2023 の一部機能を実装。詳細
  • 新しい OpenMP* 機能
    • OpenMP* 5.1
      • THREAD_LIMIT 節を TEAMS 構造と TARGET 構造で指定できるようになりました。
    • OpenMP* 5.2.
      • PRESENT マップタイプ修飾子付きの MAP 節を DECLARE MAPPER ディレクティブで指定できるようになりました。
      • COPYPRIVATE と NOWAIT を構造の END ディレクティブだけでなく、構造を開始するディレクティブでも指定できるようになりました。
      • linear-step と linear-modifier 付きの LINEAR 節をサポートしました。
    • Ifx は次の OpenMP* ランタイム・ライブラリー拡張をサポートしました: ompx_target_register_host_pointer、omp_target_unregister_host_pointer、ompx_target_aligned_alloc、ompx-target_aligned_alloc_device、ompx_target_alloc_host、ompx_target_aligned_alloc_shared、ompx_target_aligned_alloc_shared_with_hint、ompx_target_realloc、ompx_target_realloc_device、ompx_target_realloc_host、ompx_target_realloc_shared、ompx_get_device_from_ptr、ompx_get_num_subdevices。

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

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

  • Fortran 言語標準
    • インテル® Fortran コンパイラー (ifx) 2023.0.0 以降では、FORTRAN 77、Fortran90/95、Fortran 2003、Fortran 2008 および Fortran 2018 言語標準を完全に実装しています。
    • Fortran 2023 の一部機能を実装。詳細
  • 新しい OpenMP* 機能
    • OpenMP* 5.2 では、ALLOCATE 節を SCOPE ディレクティブで指定できるようになりました。
    • OpenMP* 5.0 では、HINT 節を ATOMIC ディレクティブと CRITICAL ディレクティブで指定できるようになりました。
    • OpenMP* 5.1 の METADIRECTIVE ディレクティブ (サブセット)
    • OpenMP* ディレクティブの複数のバリアントを指定して、METADIRECTIVE を囲む OpenMP* コンテキストに基づいて、条件付きで 1 つを選択して置き換えます。
    • OpenMP* 5.2.PRESENT マップタイプ修飾子付きの MAP 節を DECLARE MAPPER ディレクティブで指定できるようになりました。

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

  • Fortran 言語標準
    • インテル® Fortran コンパイラー (ifx) 2023.0.0 以降では、FORTRAN 77、Fortran90/95、Fortran 2003、Fortran 2008 および Fortran 2018 言語標準を完全に実装しています。
    • Fortran 2023 の一部機能を実装。
  • 新しい OpenMP* 5.0/5.1/5.2/6.0 機能
    • MATCH 節が DECLARE VARIANT ディレクティブで許可されるようになりました(OpenMP* 5.0)。
    • DEPOBJ 構造の DESTROY 節に destroy-var 修飾子が必要になりました (OpenMP 5.1)。
    • TASKLOOP ディレクティブの GRAINSIZE 節および NUM_TASK 節に STRICT 修飾子を指定できるようになりました(OpenMP* 5.1)。
    • オプションの ORDER 節の REPRODUCIBLE および UNCONSTRAINED 修飾子を CONCURRENT 引数に指定してループの反復の順序を指定できます(OpenMP* 5.2)。
    • ORDER 節を DISTRIBUTE 構造で指定できるようになりました(OpenMP* 5.1)。
    • GROUPPRIVATE ディレクティブはコンテキスト・グループのスレッドで共有される変数を指定しますが、各コンテキスト・グループはプライベート・コピーを保持します(OpenMP* 6.0)。
    • DEVICE_TYPE 節を DECLARE TARGET ディレクティブで指定できるようになりました。DEVICE_TYPE(HOST) は構造の本体をホストデバイスのみに、DEVICE_TYPE(NOHOST) はターゲットデバイスに、DEVICE_TYPE(ANY) はホストとターゲットの両方にコンパイルします

インテル® Fortran コンパイラー 2024 と 2023 の機能

Fortran 標準

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

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

Fortran 2023 の以下の機能は ifx 2024.0.0 で実装されています。

  • DO CONCURRENT の REDUCE 局所性指定子
  • INTEGER および REAL 代入文の RHS の BOZ 定数
  • PARAMETER 文の INTEGER および REAL 値としての BOZ 定数
  • 配列コンストラクター値としての INTEGER または REAL としての BOZ 定数
  • ENUMERATION 文の INTEGER 値としての BOZ 定数
  • 度数を返す組込み三角関数 ACOSD(X)、ASIND(X)、ATAND(X)、ATAN2D(Y, X)、COSD(X)、SIND(X)、および TAND(X)

Fortran 2023 の以下の機能は ifx 2024.1.0 で実装されています。

  • 自由形式のソース入力行には、最大 10,000 文字を含めることができます。
  • Fortran の文には、最大 1,000,000 文字を含めることができます。
  • 新しい名前付き定数 LOGICAL8、LOGICAL16、LOGICAL32、LOGICAL64、REAL16 が組込みモジュール ISO_FORTRAN_ENV に追加されました。
  • C との互換性のため、新しいプロシージャ― C_F_STRPOINTER と F_C_STRING が組込みモジュール ISO_C_BINDING に追加されました。
  • 組込みモジュール ISO_C_BINDING のサブルーチン C_F_POINTER に、配列ポインター引数 fptr の下限を指定するオプション引数 LOWER が追加されました。
  • 引数が度単位の組込み三角関数 ATAND (Y, X) に 2 引数形式が追加されました。

OpenMP* 4.5

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

OpenMP* 5.0/5.1

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

機能 2024.2.0 2024.1.0 2024.0.0 2023.2.0 2023.1.0 2023.0.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 変更なし 変更なし 変更なし 変更なし 割付け配列と可変長配列 スカラー変数と固定長配列
DEVICE_TYPE 節 GROUPPRIVATE × × × × ×
!$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 節 イテレーター追加 変更なし 変更なし DEPEND タイプ mutexinoutset、inoutset、depobj、in、out、および inout
!$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

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

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

OpenMP* 6.0

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

機能 2024.0.0 2023.2.0 2023.1.0 2023.0.0
GROUPPRIVATE ディレクティブ × × ×
DISPATCH の INTEROP 節
DECLARE VARIANT の APPEND_ARGS 節の PREFER_TYPE

その他の参考情報:

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

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

インテル® Fortran コンパイラー 2022 と 2021 の機能

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

Fortran 95

Fortran 95 以前の Fortran 標準は完全に実装されています。

Fortran 2003

パラメーター化された派生型 (PDT) を含め、コンパイラー・バージョン 2022.1.0 で完全に実装されました。

Fortran 2008

Co-Array を含め、コンパイラー・バージョン 2022.2.0 で完全に実装されました。

Fortran 2018

機能 2022.2.0 2022.1.0 2022.0.0
Co-Array 機能
Co-Array のチーム: FORM TEAM 文、CHANGE TEAM 構造、SYNC TEAM 文 × ×
Co-Array の組込み関数: TEAM_NUMBER、GET_TEAM、STOPPED_IMAGES、FAIL_IMAGES、COSHAPE、および IMAGE_STATUS × ×
NUM_IMAGES、IMAGE_INDEX、THIS_IMAGE 組込み関数の TEAM/TEAM_NUMBER 引数 × ×
イメージセレクターの TEAM または TEAM_NUMBER 指定子 × ×
イメージセレクターと CRITICAL 構造の MOVE_ALLOC と指定子の STAT および ERRMSG 引数 × ×
失敗したイメージ × ×
アトミック・サブルーチン × ×
集合サブルーチン × ×
EVENT × ×
CRITICAL 構造からの EXIT × ×
組込み関数の拡張
ALL、ANY、IALL、IANY、IPARITY、MAXLOC、MAXVAL、MINLOC、MINVAL、NORM2、PARITY、PRODUCT、SUM、および THIS_IMAGE 組込み関数の DIM 引数が現在の OPTIONAL 仮引数 ×
変数定義コンテキストでの PURE プロシージャーの VALUE 仮引数 ×
GET_COMMAND_ARGUMENT、GET_ENVIRONMENT_VARIABLE、および GET_COMMAND 組み込みプロシージャーの ERRMSG 引数 ×
OUT_OF_RANGE 組込み関数 ×
RANDOM_INIT 組込み関数 ×
REDUCE 組込み関数 × × ×
KIND= なしの CMPLX 関数の新しい形式 ×
異なる KIND の SIGN 関数引数 ×
組込み関数の INTEGER および LOGICAL 引数はデフォルト種別でなくてもよい ×
入出力の拡張
E および D、EN、ES、G でフィールド幅 0 を許可 ×
指数幅 e が 0 のデータ編集記述子 ×
Fortran 2018 および ISO/IEC/IEEE 60559:2011 の規定に従って RN 編集記述子を直近に丸める ×
EX 編集記述子で 16 進数のデータを許可 ×
非前進入出力での SIZE= の指定 ×
実行/制御の拡張
STOP または ERROR STOP の QUIET 指定子 ×
可変 STOP および ERROR STOP コード ×
PURE プロシージャーの ERROR STOP ×
PURE プロシージャーの VALUE 仮引数の定義 ×
宣言/指定の変更
オブジェクトの初期化でのオブジェクトの定数プロパティーの使用 ×
指定式に IS0_C_BINDING、IEEE_ARITHMETIC、および IEEE_EXCEPTIONS 組込みモジュールからの変換組込み関数への参照を含めることができる ×
ISO_C_BINDING、IEEE_ARITHMETIC、および IEEE_EXCEPTIONS 組込みモジュールからの変換組込み関数を指定式で許可 ×
定義された代入および操作プロシージャーの仮引数が VALUE 属性を含む場合、INTENT(IN) 属性は不要 ×
配列コンストラクターとデータ文の暗黙の DO ループでループ変数の型と種別を指定 ×
IMPLICIT NONE (EXTERNAL) ×
GENERIC 文を使用したジェネリック・インターフェイス宣言 ×
DO CONCURRENT 文の変数の局所性 × ×
非標準の組込み関数とモジュールを非標準と診断 ×
内部プロシージャーと BLOCK 構造の IMPORT ALL、IMPORT NONE、および IMPORT ONLY ×
PUBLIC および PRIVATE 文のモジュール名 ×
NON_RECURSIVE キーワード ×
デフォルトの再帰 (assume recursion オプションを指定した場合) ×
ISO/IEC/IEEE 754 2011 浮動小数点バインド
シグナル型 NaN を含む浮動小数点比較を行う assume ieee_compare オプション
新しいプロシージャー: IEEE_SET_ROUNDING_MODE、IEEE_FMA、IEEE_SIGNBIT、IEEE_NEXT_UP、IEEE_NEXT_DOWN、IEEE_GET_MODES および IEEE_SETMODES、IEEE_MAX_NUM、IEEE_MAX_NUM_MAG、IEEE_MIN_NUM、IEEE_MIN_NUM_MAG、IEEE_QUIET_EQ、ITTE_QUIET_GE、IEEE_QUIET_GT、IEEE_QUIET_LE、IEEE_QUIET_LT、IEEE_QUIET_NE、IEEE_SIGNALING_EQ、IEEE_SIGNALING_GE、IEEE_SIGNALING_GT、IEEE_SIGNALING_LE、IEEE_SIGNALING_LT、IEEE_QUIET_NE、IEEE_SIGNALING_NE、IEEE_INT および IEEE_REAL、IEEE_SUPPORT_NORMAL × ×
IEEE_ARITHMETIC 組込みモジュールへの名前付き定数 IEEE_ROUND_TYPE および IEEE_AWAY の追加 × ×
IEEE_RINT 関数のオプションの ROUND 引数 × ×
IEEE_EXCEPTIONS モジュールで定義されている派生型 IEEE_EXCEPTIONS × ×
SUBNORMAL は DENORMAL と同義 × ×
IEEE_GET_ROUNDING_MODE および IEEE_SET_ROUNDING_MODE のオプションの RADIX 引数 × ×
C との互換性の拡張
ISO_C_BINDING の C_PTRDIFF_T 種別 ×
C_F_PROCPOINTER を除く ISO_C_BINDING のすべての組込みプロシージャーは PURE
ランク引き継ぎ配列と型引継ぎ
SELECT RANK 構造
言語の進化
ノンブロック DO と算術 IF の削除 (インテル拡張として引き続き利用可能)
COMMON、EQUIVALENCE、BLOCKDATA の廃止
ラベル形式の DO ループの廃止
特定のプロシージャー名の廃止

OpenMP* 4.5

nowait、depend、hint 節、および depend 節修飾子を除いて、すべての機能を oneAPI 2021.4 (コンパイラー・バージョン 2021.3.0) で実装しました。複素数型の reduction は、コンパイラー・バージョン 2022.2.0 で実装されました。

OpenMP* 5.0/5.1

機能 2022.2.0 2022.1.0 2022.0.0
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
if (simd: スカラー論理式) × ×
!$omp scan × × ×
!$omp requires
メタディレクティブ × × ×
task reduction 修飾子
scan および default reduction 修飾子
conditional lastprivate 修飾子 × × ×
ORDER 節 (OMP LOOP で有効) × × ×
mutexinoutset および depobj dependence × × ×
in、out、および inout dependence
AFFINITY 節 × × ×
DETACH 節 × × ×
USES_ALLOCATORS 節 × × ×
DECLARE MAPPER および mapper-identifier スカラー変数 スカラー変数 ×
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 × × ×
if (cancel: スカラー論理式) × × ×
MASKED 構造の FILTER 節 × ×
UNROLL 構造 × ×

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

Fortran 95

Fortran 95 以前の Fortran 標準は完全に実装されています。

Fortran 2003

要約: パラメーター化された派生型とユーザー定義 I/O (派生型 I/O または再帰的 I/O とも呼ばれる) を除いて実装が完了しました。

機能 2021.4.x 2021.3.x 2021.2.x 2021.1.x
データ拡張とオブジェクト指向
パラメーター化された派生型 × × × ×
プロシージャー・ポインター × × × ×
終了処理 〇*
名前で型にバインドされたプロシージャー
PASS 属性
演算子として型にバインドされたプロシージャー 〇*
型拡張子
型バインド・プロシージャーのオーバーライド
列挙子
ASSOCIATE 構造 〇*
型付きポリモーフィック・エンティティー 〇*
無制限のポリモーフィック・エンティティー ×
SELECT TYPE 構造
無指定バインドと抽象型
割付けスカラー
無指定長割付けスカラー
その他の拡張
構造コンストラクター ×
型として指定された汎用プロシージャー・インターフェイス
ALLOCATE 文
割付け配列の代入
割付けの転送
割付け配列の代入
割付けの転送
モジュールからのアクセスの制御
USE 文の演算子名の変更
ポインター代入
ポインター INTENT ×
VOLATILE 属性 × ×
IMPORT 文
組込みモジュール
コンピューティング環境へのアクセス
国際文字セットのサポート × × × ×
名前と文の長さ
2 進、8 進および 16 進定数
配列コンストラクター構造
宣言式と初期化式
複素数定数
組込み関数の変 ×
IEEE アンダーフローの制御 ×
別の IEEE クラス値 × × × ×
入出力の拡張
派生型入出力 × × × ×
非同期入出力 × ×
FLUSH 文
IOMSG= 指定子
ストリームアクセス入出力
ROUND= 指定子
DECIMAL= 指定子
SIGN= 指定子
整数指定子の種別型引数
再帰入出力
改行文字の組込み関数
IEEE 例外値の入力と出力
P 編集記述子の後のカンマ
C との相互運用性
組込み型の相互運用性
C ポインターとの相互運用性
C ポインターとの相互運用性 〇**
変数の相互運用性
プロシージャーの相互運用性
グローバルデータの相互運用性

〇* は既知の問題があることを示す。

〇** は派生型を値で C 構造体に渡す。

Fortran 2008

要約: Co-Aarray と変数として使用する POINTER 結果関数を除いて実行を完了しました。

機能 2021.4.x 2021.3.x 2021.2.x 2021.1.x
Co-Array × × × ×
派生型 Co-Array の ALLOCATABLE または POINTER コンポーネント × × × ×
パフォーマンスの拡張
DO CONCURRENT 〇 シリアルのみ 〇 シリアルのみ 〇 シリアルのみ 〇 シリアルのみ
CONTIGUOUS 属性
連続配列
データ宣言
最大ランク + corank <= 15
長整数 (18 桁または 64 ビット)
再帰型の割付けコンポーネント ×
暗黙形状配列
ポインター初期化 × ×
DATA 文の制限解除
FORALL インデックスの種別
組込み型 TYPE (組込み型) 指定子の TYPE 文
型バインド・プロシージャーの宣言 × × × ×
割付けでない非ポインター非 Co-Array での VALUE 属性の許可
PURE プロシージャーでは VALUE 属性の引数不要
ポリモーフィック変数の割付け × × × ×
データ・オブジェクトのアクセス
実部と虚部のアクセス
ポインター関数参照は可変 × × ×
ELEMENTAL 仮引数の制限解除
入出力
ファイルを開くときのユニットの検索
G0 編集記述子 × × × ×
無制限のフォーマット項目 ×
再帰入出力 × × × ×
実行制御
BLOCK 構造 × × ×
EXIT 文 ×
STOP コード
ERROR STOP
ビット処理の組込みプロシージャー
ビット・シーケンスの比較
結合シフト × × × ×
ビットのカウント
ビットのマスク
ビットのシフト ×
ビットのマージ ×
ビット変換関数 ×
組込みプロシージャーとモジュール
ストレージサイズ
選択した REAL KIND へのオプション引数 RADIX の追加
三角関数および双曲線組込み関数の拡張 × × × ×
REAL KIND の選択
双曲線組込み関数
ベッセル関数 × ×
誤差およびガンマ関数
ユークリッド・ベクトル・ノルム × × × ×
パリティー
コマンドラインの実行 × × ×
MINLOC および MAXLOC の BACK 引数 × × ×
配列の場所の検索 × × ×
文字列比較 ×
定数
COMPILER_VERSION
COMPILER_OPTIONS
C スタイルの sizeof 関数
ieee_selected_real_kind へのオプション引数の追加
プログラムとプロシージャー
モジュールとサブモジュール・データの SAVE 属性 ×
空の CONTAINS セクション
内部およびモジュール・プロシージャーの END 文の形式
実引数としての内部プロシージャー
POINTER または ALLOCATABLE 属性による汎用的な解決 ×
仮引数なしの null ポインターまたは割付けられていない割付け ×
PURE でない ELEMENTAL プロシージャー
ENTRY 文の非推奨
ソース形式
行頭のセミコロン

Fortran 2018

機能 2021.4.x 2021.3.x 2021.2.x 2021.1.x
Co-Array 機能
Co-Array のチーム: FORM TEAM 文、CHANGE TEAM 構造、SYNC TEAM 文 × × × ×
Co-Array の組込み関数: TEAM_NUMBER、GET_TEAM、STOPPED_IMAGES、FAIL_IMAGES、COSHAPE、および IMAGE_STATUS × × × ×
NUM_IMAGES、IMAGE_INDEX、THIS_IMAGE 組込み関数の TEAM/TEAM_NUMBER 引数 × × × ×
イメージセレクターの TEAM または TEAM_NUMBER 指定子 × × × ×
イメージセレクターと CRITICAL 構造の MOVE_ALLOC と指定子の STAT および ERRMSG 引数 × × × ×
失敗したイメージ × × × ×
アトミック・サブルーチン × × × ×
集合サブルーチン × × × ×
EVENT × × × ×
CRITICAL 構造からの EXIT × × × ×
組込み関数の拡張
ALL、 ANY、 IALL、 IANY、 IPARITY、 MAXLOC、 MAXVAL、 MINLOC、 MINVAL、 NORM2、 PARITY、 PRODUCT、 SUM、 および THIS_IMAGE 組込み関数の DIM 引数が現在の OPTIONAL 仮引数 × × × ×
変数定義コンテキストでの PURE プロシージャーの VALUE 仮引数 × × × ×
GET_COMMAND_ARGUMENT、 GET_ENVIRONMENT_VARIABLE、 および GET_COMMAND 組み込みプロシージャーの ERRMSG 引数 × × × ×
OUT_OF_RANGE 組込み関数 × × × ×
RANDOM_INIT 組込み関数 × × × ×
REDUCE 組込み関数 × × × ×
KIND= なしの CMPLX 関数の新しい形式 × × × ×
異なる KIND の SIGN 関数引数 × × × ×
組込み関数の INTEGER および LOGICAL 引数はデフォルト種別でなくてもよい × × × ×
入出力の拡張
E および D、EN、ES、G でフィールド幅 0 を許可 × × × ×
指数幅 e が 0 のデータ編集記述子 × × × ×
Fortran 2018 および ISO/IEC/IEEE 60559:2011 の規定に従って RN 編集記述子を直近に丸める × × × ×
EX 編集記述子で 16 進数のデータを許可 × × × ×
非前進入出力での SIZE= の指定 × × × ×
実行/制御の拡張
STOP または ERROR STOP の QUIET 指定子 × × × ×
可変 STOP および ERROR STOP コード × × × ×
PURE プロシージャーの ERROR STOP × × × ×
PURE プロシージャーの VALUE 仮引数の定義 × × × ×
宣言/指定の変更
オブジェクトの初期化でのオブジェクトの定数プロパティーの使用 × × × ×
指定式に IS0_C_BINDING、IEEE_ARITHMETIC、および IEEE_EXCEPTIONS 組込みモジュールからの変換組込み関数への参照を含めることができる × × × ×
ISO_C_BINDING、IEEE_ARITHMETIC、および IEEE_EXCEPTIONS 組込みモジュールからの変換組込み関数を指定式で許可 × × × ×
定義された代入および操作プロシージャーの仮引数が VALUE 属性を含む場合、INTENT(IN) 属性は不要 × × × ×
配列コンストラクターとデータ文の暗黙の DO ループでループ変数の型と種別を指定 × × × ×
IMPLICIT NONE (EXTERNAL) × × × ×
GENERIC 文を使用したジェネリック・インターフェイス宣言 × × × ×
DO CONCURRENT 文の変数の局所性 × × × ×
非標準の組込み関数とモジュールを非標準と診断 × × × ×
内部プロシージャーと BLOCK 構造の IMPORT ALL、IMPORT NONE、および IMPORT ONLY × × × ×
PUBLIC および PRIVATE 文のモジュール名 × × × ×
NON_RECURSIVE キーワード × × × ×
デフォルトの再帰 (assume recursion オプションを指定した場合) × ×
ISO/IEC/IEEE 754 2011 浮動小数点バインド
シグナル型 NaN を含む浮動小数点比較を行う assume ieee_compare オプション × × ×
新しいプロシージャー: IEEE_SET_ROUNDING_MODE、 IEEE_FMA、 IEEE_SIGNBIT、 IEEE_NEXT_UP、 IEEE_NEXT_DOWN、 IEEE_GET_MODES および IEEE_SETMODES、 IEEE_MAX_NUM、 IEEE_MAX_NUM_MAG、 IEEE_MIN_NUM、 IEEE_MIN_NUM_MAG、 IEEE_QUIET_EQ、 ITTE_QUIET_GE、 IEEE_QUIET_GT、 IEEE_QUIET_LE、 IEEE_QUIET_LT、 IEEE_QUIET_NE、 IEEE_SIGNALING_EQ、 IEEE_SIGNALING_GE、 IEEE_SIGNALING_GT、 IEEE_SIGNALING_LE、 IEEE_SIGNALING_LT、 IEEE_QUIET_NE、 IEEE_SIGNALING_NE、 IEEE_INT および IEEE_REAL、 IEEE_SUPPORT_NORMAL × × × ×
IEEE_ARITHMETIC 組込みモジュールへの名前付き定数 IEEE_ROUND_TYPE および IEEE_AWAY の追加 × × × ×
IEEE_RINT 関数のオプションの ROUND 引数 × × × ×
IEEE_EXCEPTIONS モジュールで定義されている派生型 IEEE_EXCEPTIONS × × × ×
SUBNORMAL は DENORMAL と同義 × × × ×
IEEE_GET_ROUNDING_MODE および IEEE_SET_ROUNDING_MODE のオプションの RADIX 引数 × × × ×
C との互換性の拡張
ISO_C_BINDING の C_PTRDIFF_T 種別 × × × ×
C_F_PROCPOINTER を除く ISO_C_BINDING のすべての組込みプロシージャーは PURE × × × ×
ランク引き継ぎ配列と型引継ぎ × × × ×
SELECT RANK 構造 × × × ×
言語の進化
ノンブロック DO と算術 IF の削除 (インテル拡張として引き続き利用可能) × × × ×
COMMON、EQUIVALENCE、BLOCKDATA の廃止 × × × ×
ラベル形式の DO ループの廃止 × × × ×
特定のプロシージャー名の廃止 × × × ×

OpenMP* 4.5

nowait、depend、hint 節、reduction の複素数型、および depend 節修飾子を除いて、すべての機能を 2021.4.0 で実装しました。

OpenMP* 5.0/5.1

機能 2021.4.x 2021.3.x 2021.2.x 2021.1.x
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 〇* ×
if (simd: スカラー論理式) × × × ×
!$omp scan × × × ×
!$omp requires × × × ×
メタディレクティブ × × × ×
task reduction 修飾子 × × × ×
scan および default reduction 修飾子
conditional lastprivate 修飾子 × × × ×
ORDER 節 (OMP LOOP で有効) × × × ×
mutexinoutset および depobj dependence × × × ×
in、out、および inout dependence
AFFINITY 節 × × × ×
DETACH 節 × × × ×
USES_ALLOCATORS 節 × × × ×
DECLARE MAPPER および mapper-identifier × × × ×
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 × × × ×
if (cancel: スカラー論理式) × × × ×

〇* 限定的に実装。

関連情報

Fortran 標準

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

OpenMP* 仕様

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

インテルのドキュメント

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


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

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

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