インテル® Fortran コンパイラーの Fortran 言語と OpenMP* 機能
この記事は、インテル® デベロッパー・ゾーンに公開されている「Fortran Language and OpenMP* Features Implemented in Intel® Fortran Compiler」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
インテル® oneAPI HPC ツールキット 2023.0 に含まれるインテル® Fortran コンパイラー (ifx) では、インテル® Fortran コンパイラー・クラシック (ifort) と同等の機能が含まれました。ifx は、インテル® Fortran コンパイラー・クラシック (ifort) のフロントエンドとランタイム・ライブラリーをベースに、LLVM ベースのバックエンド・コンパイラー・テクノロジーを使用しています。
この記事では、ifx の各リリースで実装されている Fortran 言語と OpenMP* 機能について説明します。
このリリースの ifx のバージョン番号は 2023.0.0 です。
- FORTRAN 77、Fortran90/95、Fortran 2003、Fortran 2008 および Fortran 2018 言語標準を完全に実装しています。
- ほとんどの OpenMP* 4.5、OpenMP* 5.0/5.1 ディレクティブおよびオフロード機能をサポートし、OpenMP* 6.0 の一部の機能も追加しています。
その他の参考情報:
- ifx および ifort はバイナリー (.o/.obj) とモジュール (.mod) ファイルの互換性があります。ifort で生成されたバイナリーやライブラリーは、ifx でビルドされたバイナリーやライブラリーとリンクできます。また、一方のコンパイラーで生成された .mod ファイルは、他方のコンパイラーで使用できます (64 ビット・ターゲットのみ)。
- どちらのコンパイラーも同じランタイム・ライブラリーを使用します。
- ifx でコンパイルしたアプリケーションのパフォーマンスは、ifort でコンパイルしたアプリケーションのパフォーマンスに匹敵する場合も匹敵しない場合もあります。ifx のパフォーマンスの改善は、2023年の各リリースで引き続き行われる予定です。
インテル® oneAPI DPC++/C++ コンパイラー (dpcpp と icx) の OpenMP* 実装に関する同様の情報は、こちらを参照してください。
インテル® oneAPI 2023 で利用可能な機能
ifx バージョン 2023.3.0 では、以下の Fortran 標準を完全に実装しました。
- Fortran 95
- Fortran 2003
- Fortran 2008
- Fortran 2018
OpenMP* 4.5
oneAPI 2023.0 (コンパイラー・バージョン 2023.0.0) では、hint 節を除いてすべての機能を実装しました。
OpenMP* 5.0/5.1
機能 | 2023.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 | 〇 |
!$omp tile | × |
メタディレクティブ | × |
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 節 | DEPEND タイプ mutexinoutset、inoutset、および depopbj |
!$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 構文 | 〇 |
SCOPE 構文 | ○ |
OpenMP* 6.0
機能 | 2023.0.0 (太字は新機能) |
---|---|
DISPATCH の INTEROP 節 | ○ |
DECLARE VARIANT の APPEND_ARGS 節の PREFER_TYPE | ○ |
インテル® oneAPI 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 構文 | ○ | × | × |
インテル® oneAPI 2021 で利用可能な機能
ベータ版インテル® Fortran コンパイラーは、インテル® Fortran コンパイラー・クラシック (ifort) のフロントエンドとランタイム・ライブラリーをベースに、インテル® Fortran のフロントエンドと LLVM フレームワークを使用した新しいコンパイラーです。この新しいコンパイラーは「ifx」ドライバーを使用します。
現時点で、ifx は Fortran 95、Fortran 2003、および Fortran 2008 言語の機能と、ほとんどの OpenMP* 4.5 および OpenMP* 5.0/5.1 のディレクティブおよびオフロード機能をサポートしています。この記事では、各リリースで実装されている Fortran 言語と OpenMP* 機能について説明します。
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/ (英語) を参照してください。