この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® Fortran Compiler – Support for Fortran language standards」(https://software.intel.com/en-us/articles/intel-fortran-compiler-support-for-fortran-language-standards/) の日本語参考訳です。
ベータ版インテル® Fortran コンパイラーで実装されている Fortran 言語および OpenMP* の機能に関する同様の情報はこちらを参照してください。
Fortra 2003 以前のサポート
インテル® Parallel Studio XE 2016 に含まれるコンパイラー 16.0 から、インテル® Fortran コンパイラー・クラシックは ISO/IEC 1539-1:2004 Fortran 言語標準 (Fortran 2003 言語) に完全に準拠しています。また、それ以前の標準規格である Fortran 95、Fortran 90、FORTRAN 77 および FORTRAN IV (FORTRAN 66) も完全にサポートします。以前の Fortran 規格の異なる振る舞いをサポートするには、コンパイラー・オプションの指定が必要になることがあります。
Fortra 2008 サポート
インテル® Fortran コンパイラー・クラシックは、Fortran 2008 標準のすべての機能をサポートします。
Fortra 2018 サポート
インテル® Fortran コンパイラー・クラシックは、Fortran 2018 標準のすべての機能をサポートします。
参考情報
追加の情報については、『インテル® Fortran コンパイラー・クラシックおよびベータ版インテル® Fortran コンパイラー・デベロッパー・ガイドおよびリファレンス』 (英語) を参照してください。
Fortran 2018 機能
次の Fortran 2018 機能が新たにサポートされています。
- Co-Array チームが実装されました。
- ISO_FORTRAN_ENV 組込みモジュールに派生型 TEAM_TYPE が追加されました。
- CHANGE TEAM および END TEAM 文が実装されました。
- FORM TEAM 文が実装されました。
- SYNC TEAM 文が実装されました。
- TEAM_NUMBER 組込み関数が実装されました。
- GET_TEAM 組込み関数が実装されました。
- 組込み関数 STOPPED_IMAGES、NUM_IMAGES、および IMAGE_STATUS にオプションの TEAM 引数が追加されました。
- 組込み関数 IMAGE_INDEX と NUM_IMAGES が新しい形式となり、オプションの TEAM および TEAM_NUMBER 引数が実装されました。
- TEAM 引数を持つ新しい形式の THIS_IMAGE が実装されました。
- イメージセレクターでオプションの TEAM または TEAM_NUMBER 指定子が許可されるようになりました。
- 変数定義のコンテキストで、未割り当ての Co-Array の暗黙的な割り当てが禁止されるようになりました。
- EXTENDS_TYPE_OF および SAME_TYPE_AS 組込み関数への非ポリモーフィック・ポインター引数は、割り当てステータスを定義する必要がなくなりました。
- ファイナライズ中の割り当て解除が明確になり、Fortran 2018 で定義されるセマンティクスに適合するようになりました。
- STOP および ERROR_STOP 文からの出力が条件付きで抑制されるようになりました。
- STOP および ERROR STOP コードを非定数式にできるようになりました。
- LOCK_TYPE タイプの名前付き定数は使用できなくなりました。
- 組込み関数 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 組込みサブルーチンが実装されました。
- 定義されている代入および演算子プロシージャーへのダミー引数が VALUE 属性を持つ場合、INTENT (IN) 属性を持つ必要はありません。
- PURE プロシージャーのダミー引数は、VALUE 属性がある場合、変数定義コンテキストで許可されます。
- オブジェクトの定数プロパティーは、オブジェクトの初期化に使用できます。
- ポリモーフィック構造コンストラクターのコンポーネントは、対応する構造コンポーネント式と同じ動的タイプを持つ必要がなくなりました。
- RANDOM_INIT 組込みサブルーチンが実装されました。
- 用語集に Fortran 2018 の用語が追加されました。例: 現在のチーム、先祖チーム、親チーム、および共配列 (Co-Array) の確立。
- PROTECTED 属性を持つ非ポインター変数は、データターゲットや初期データターゲットとして許可されなくなりました。
- VOLATILE 変数は、PURE プロシージャーやステートメント関数では禁止されるようになりました。
- 暗黙の DO ループ変数のタイプと種類を、配列コンストラクターとデータ文の暗黙の DO ループで指定できるようになりました。
- 浮動小数点比較は、assume ieee_compares または -standard-semantics コンパイラー・オプションが指定されている場合、IEEE compareSignaling<relation> 操作を実行します。
- ユーザー定義関数のリダクションを実行する REDUCE 組込み関数が実装されました。
次の Fortran 2018 機能もサポートされています。
- IMPLICIT NONE 文の拡張により、すべての外部プロシージャーを EXTERNAL として宣言する必要があることを指定できるようになりました。
- GENERIC 文が拡張され、汎用インターフェイスの宣言に使用できるようになりました。
- DO CONCURRENT 文で変数の局所性を指定できるようになりました。
- 編集記述子 E と D、EN、ES、G が拡張され、F 編集記述子と同様にフィールド幅をゼロにできるようになりました。
- フィールド幅がゼロの場合と同様に、データ編集記述子の指数幅 e をゼロにできるようになりました。
- RN 編集記述子は、Fortran 2018 および ISO/IEC/IEEE 60559:2011 で指定されているように最近値に丸められるようになりました。
- EX 編集記述子は、16 進形式の浮動小数点値の入力と出力を許可します。
- 非アドバンシング I/O では SIZE= を指定できます。
- 保留状態の非同期操作に対する INQUIRE 文の SIZE= と POS= の値が標準化されました。
- INQUIRE 文の RECL= 指定子に代入される値が、標準化された値になりました。
- 新しい形式の組込み関数 CMPLX は、第 1 引数が COMPLEX 型の場合 KIND= キーワードを必要としません。
- SIGN 関数の引数は異なる種別にすることができます。
- 名前付き定数 STAT_FAILED_IMAGE と STAT_UNLOCKED_FAILED_IMAGE が組込みモジュール ISO_FORTRAN_ENV で定義されました。
- 名前付き定数種別型 C_PTRDIFF_T が組込みモジュール ISO_C_BINDING に追加されました。
- 非ブロック DO 文と算術 IF 文は、Fortran 2018 で削除されました。インテル® Fortran コンパイラーは、Fortran 標準で削除された機能を完全にサポートしています。
- COMMON、EQUIVALENCE、および BLOCKDATA 文は廃止されました。
- ラベル付き DO ループは廃止されました。
- 組込みプロシージャーの固有名は廃止されました。
- 次のアトミック・サブルーチンが実装されました: ATOMIC_ADD、ATOMIC_AND、ATOMIC_CAS、ATOMIC_FETCH_ADD、ATOMIC_FETCH_AND、ATOMIC_FETCH_OR、ATOMIC_FETCH_XOR、ATOMIC_OR、および ATOMIC_XOR。
- 次の集合サブルーチンが実装されました: CO_BROADCAST、CO_MAX、CO_MIN, CO_REDUCE、および CO_SUM。
- SELECT RANK 構造が実装され、想定されるランクのダミー引数を操作できるようになりました。
- Fortran 2018 標準に従って、コンパイラーは非標準の組込みプロシージャーとモジュールの使用を診断するようになりました。
- 最新の Fortran 2018 標準に準拠するため、C_F_PROCPOINTER が IMPURE になりました。
- 組込みモジュール ISO_C_BINDING、IEEE_ARITHMETIC、IEEE_EXCEPTIONS の変換組込み関数が宣言式で許可されるようになりました。
- IEEE_GET_ROUNDING_MODE と IEEE_SET_ROUNDING_MODE 組込みモジュール・プロシージャーでオプション引数 RADIX を指定できるようになりました。
- IEEE_ROUND_TYPE と IEEE_AWAY が IEEE_ARITHMETIC 組込みモジュールに追加されました。
- 組込みモジュール IEEE_ARITHMETIC で定義されている IEEE_RINT 関数にオプションの ROUND 引数が追加されました。
- 組込みモジュール IEEE_ARITHMETIC に、関数 IEEE_FMA、IEEE_SIGNBIT、IEEE_NEXT_UP、IEEE_NEXT_DOWN が含まれるようになりました。
- 組込みモジュール IEEE_EXCEPTIONS に新しい派生型 IEEE_MODES_TYPE が追加されました。これを使用して、IEEE_GET_MODES および IEEE_SET_MODES 組込みモジュール・プロシージャーを使用して IEEE_MODES を保存および復元できます。
- SUBNORMAL は DENORMAL と同義語になりました。
- 次の組込みモジュール・プロシージャーが実装されました。
- IEEE_MAX_NUM、IEEE_MAX_NUM_MAG、IEEE_MIN_NUM および IEEE_MIN_NUM_MAG
- IEEE_QUIET_EQ、IEEE_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_SIGNALING_NE (英語)
- IEEE_SUPPORT_SUBNORMAL (英語)
- ATOMIC_REF と ATOMIC_DEFINE 組込みプロシージャーに、オプションの “STAT= 指定子” が追加されました。
- MOVE_ALLOC 組込みプロシージャー、イメージセレクター (英語)および CRITICAL 文と構造 (英語)に、”STAT= 指定子” と “EERRMSG = 指定子” が追加されました。
- 組込みプロシージャーへの INTEGER と LOGICAL 引数は、デフォルトの種別である必要がなくなりました。
- 組込みモジュール・プロシージャー IEEE_INT および IEEE_REAL が実装されました。
- FAIL IMAGE 文が実装されました。実際のイメージ障害を待たずに、失敗したイメージのリカバリーコードをデバッグできます。
- 組込み関数 FAILED_IMAGES (英語)、IMAGE_STATUS (英語)、および STOPPED_IMAGES が実装されましたが、このリリースでは完全な機能は備えていません。
引数 “team” は、これらの組込み関数では未実装です。将来のリリースで追加される予定です。 - COSHAPE 組込み関数 (英語)
coarray 引数の cobound (共通境界) を返します。 - PUBLIC 文 と PRIVATE 文 (英語)に、モジュール名、OpenMP* リダクション識別子、および定義された I/O 汎用仕様を追加できるようになりました。
- イメージ間の同期を提供する機能:
EVENT_QUERY 組込みサブルーチン (英語)
EVENT_POST と EVENT_WAIT 文 (英語)
ISO_FORTRAN_ENV 組込みモジュールの派生型 EVENT_TYPE (英語) - IMPORT 文 の拡張
内部サブルーチンと BLOCK 構造で親子結合の制御に IMPORT 文を使用できるようになりました。新しい形式は次の 3 つです。
IMPORT, ALL
IMPORT, NONE
IMPORT, ONLY:
import-name-list - モジュール・エンティティーのデフォルトのアクセス方法
結合によりアクセスされるモジュール名が PUBLIC または PRIVATE access-id-list に表示されます。
これを使用して、モジュールからアクセス可能なすべてのエンティティーのデフォルトのアクセス方法を設定できます。 - C 言語との互換性保持
ランク引継ぎ配列が C_SIZEOF 組込み関数の引数として許可されるようになりました。
C_F_POINTER を除く ISO_C_BINDING 組込みモジュールのすべての標準プロシージャーが純粋になりました。 - NON_RECURSIVE キーワードの拡張
このキーワードは、プロシージャーを非再帰として宣言します。以前の Fortran 標準のデフォルトでは、RECURSIVE として宣言されない限りプロシージャーは非再帰でした。Fortran 2018 ではこのデフォルトが変更されています。インテル® Fortran コンパイラーは、NON_RECURSIVE キーワードを実装済みですが、このリリースのデフォルトのコンパイルモードは非再帰のままです。これは、将来のリリースでは変更される予定です。 - I/O の拡張
G0.d 編集記述子で、I0、L1、A 編集記述子の規則を使用して、それぞれ整数、論理、文字データの出力を指定できます。 - 想定タイプ、想定ランク (英語)、C 記述子、および RANK 組込み関数 など、Fortran と C の相互運用性の向上
- ERROR STOP 文は、PURE プロシージャーで指定できます。
単一のオプション /standard-semantics (Windows*) または -standard-semantics (Linux* と macOS*) は、完全な Fortran 2018 セマンティクスを有効にするために指定します。IEEE_ARITHMETIC、IEEE_EXCEPTIONS または IEEE_FEATURES 組込みモジュールを使用する場合、/fp:strict (Windows*) や -fp-model strict (Linux* と macOS*) を指定する必要があります。
Windows* | Linux* および macOS* |
---|---|
/assume:byterecl | -assume byterecl |
/assume:fpe_summary | -assume fpe_summary |
/assume:failed_images | -assume failed_images |
/assume:std_value | -assume std_value |
/assume:ieee_compares | -assume ieee_compares |
/assume:std_intent_in | -assume std_intent_in |
/assume:noold_inquire_recl | -assume noold_inquire_recl |
/assume:minus0 | -assume minus0 |
/assume:noold_ldout_format | -assume noold_ldout_format |
/assume:noold_maxminloc | -assume noold_maxminloc |
/assume:noold_unit_star | -assume noold_unit_star |
/assume:noold_xor | -assume noold_xor |
/assume:protect_parens | -assume protect_parens |
/assume:std_mod_proc_name | -assume std_mod_proc_name |
/fpscomp:logicals | -fpscomp logicals |
詳細については、『インテル® Fortran コンパイラー・クラシックおよびベータ版インテル® Fortran コンパイラー・デベロッパー・ガイドおよびリファレンス』 (英語) の「コンパイラー・オプション」を参照してください。
製品および性能に関する情報
1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex/ を参照してください。