ベータ版インテル® Fortran コンパイラーの Fortran 言語と OpenMP* 機能
この記事は、インテル® デベロッパー・ゾーンに公開されている「Fortran Language and OpenMP* Features Implemented in Intel® Fortran Compiler (Beta)」の日本語参考訳です。
この記事の PDF 版はこちらからご利用になれます。
ベータ版インテル® Fortran コンパイラーは、インテル® Fortran コンパイラー・クラシック (ifort) のフロントエンドとランタイム・ライブラリーをベースとする新しいコンパイラーです。この新しいコンパイラーは、インテル® Fortran のフロントエンドと LLVM フレームワークを使用します。この新しいコンパイラーは ifx ドライバーを使用します。現時点で、ifx は Fortran 95 言語の機能と、ほとんどの OpenMP* 4.5 ディレクティブおよびオフロード機能をサポートしています。
この記事では、2021.1 リリースで実装されている Fortran 言語と OpenMP* 機能について説明します。
Fortran 2003
機能 | 2021.1 でのサポート |
---|---|
データ拡張とオブジェクト指向 | |
パラメーター化された派生型 | × |
プロシージャー・ポインター | × |
終了処理 | ○* |
名前で型にバインドされたプロシージャー | ○ |
PASS 属性 | ○ |
演算子として型にバインドされたプロシージャー | ○* |
型拡張子 | ○ |
型バインド・プロシージャーのオーバーライド | ○ |
列挙子 | ○ |
ASSOCIATE 構造 | ○* |
型付き多相エンティティー | ○* |
無制限の多相エンティティー | × |
SELECT TYPE 構造 | ○ |
無指定バインドと抽象型 | ○ |
割付けスカラー | ○ |
無指定長割付けスカラー | ○ |
その他の拡張 | |
構造コンストラクター | × |
型として指定された汎用プロシージャー・インターフェイス | ○ |
ALLOCATE 文 | ○ |
割付け配列の代入 | ○ |
割り当ての転送 | ○ |
割付け配列の代入 | ○ |
割り当ての転送 | ○ |
モジュールからのアクセスの制御 | ○ |
USE 文の演算子名の変更 | ○ |
ポインター代入 | ○ |
ポインター INTENT | × |
VOLATILE 属性 | × |
IMPORT 文 | ○ |
組込みモジュール | ○ |
コンピューティング環境へのアクセス | ○ |
国際文字セットのサポート | × |
名前と文の長さ | ○ |
2 進、8 進および 16 進定数 | ○ |
配列コンストラクター構文 | ○ |
宣言式と初期化式 | ○ |
複素数定数 | ○ |
組込み関数の変更 | × |
IEEE アンダーフローの制御 | × |
別の IEEE クラス値 | × |
入力 / 出力の拡張 | |
派生型入力 / 出力 | × |
非同期入力 / 出力 | × |
FLUSH 文 | ○ |
IOMSG= 指定子 | ○ |
ストリームアクセス入力 / 出力 | ○ |
ROUND= 指定子 | ○ |
DECIMAL= 指定子 | ○ |
SIGN= 指定子 | ○ |
整数指定子の種別型引数 | ○ |
再帰入力 / 出力 | ○ |
改行文字の組込み関数 | ○ |
IEEE 例外値の入力と出力 | ○ |
P 編集記述子の後のカンマ | ○ |
C との相互運用性 | |
組込み型の相互運用性 | ○ |
C ポインターとの相互運用性 | ○ |
派生型の相互運用性 | ○** |
変数の相互運用性 | ○ |
プロシージャーの相互運用性 | ○ |
グローバルデータの相互運用性 | ○ |
○* は既知の問題があることを示す。
○** は派生型を値で C 構造体に渡すことを除く。
Fortran 2008
機能 | 2021.1 でのサポート |
---|---|
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 へのオプション引数の追加 | ○ |
プログラムとプロシージャー | |
モジュールとサブモジュール・データの属性の保存 | × |
空の CONTAINS セクション | ○ |
内部およびモジュール・プロシージャーの END 文の形式 | ○ |
実引数としての内部プロシージャー | ○ |
POINTER または ALLOCATABLE 属性による汎用的な解決 | × |
仮引数なしの null ポインターまたは割付けられていない割付け | × |
PURE でない ELEMENTAL プロシージャー | ○ |
ENTRY 文が非推奨に | ○ |
ソース形式 | |
行頭のセミコロン | ○ |
OpenMP* 4.5
ユーザー定義のリダクションを除くすべての機能を 2021.1 で実装。
OpenMP* 5.0
機能 | 2021.1 でのサポート |
---|---|
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 (英語) から入手できます。
OpenMP* 5.0 API シンタックス・クイック・リファレンス・カードの日本語参考訳は、こちらから入手できます。
インテルのドキュメント
インテル® Fortran コンパイラー・クラシック 2021.1 およびベータ版インテル® Fortran コンパイラー 2021.1 デベロッパー・ガイドおよびリファレンス (英語)
製品とパフォーマンス情報
1実際の性能は利用法、構成、その他の要因によって異なります。
詳細は、www.Intel.com/PerformanceIndex (英語) を参照してください。