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

同カテゴリーの次の記事

インテル® Fortran コンパイラー・クラシック - Fortran 言語標準のサポート

この記事は、インテル® デベロッパー・ゾーンに公開されている「Fortran Language and OpenMP* Features Implemented in Intel® Fortran Compiler (Beta)」の日本語参考訳です。


ベータ版インテル® Fortran コンパイラーは、インテル® Fortran のフロントエンドと LLVM フレームワークを使用します。この新しいコンパイラーは「ifx」ドライバーを使用します。

現時点で、ifx は Fortran 95 言語の機能と、ほとんどの OpenMP* 4.5 のディレクティブおよびオフロード機能をサポートしています。この記事では、各リリースで実装されている Fortran 言語と OpenMP* 機能について説明します。

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

Fortran 95

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

Fortran 2003

機能 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

機能 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.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

ユーザー定義のリダクションを除くすべての機能を 2021.1 で実装。

OpenMP* 5.0/5.1

機能 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 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 性能は、使用状況、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex/ (英語) を参照してください。

関連記事