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

同カテゴリーの次の記事

インテル® oneAPI ポーティング・ガイド (ifx) 日本語版公開

この記事は、インテル® デベロッパー・ゾーンに公開されている「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_MINCO_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 と同義語になりました。
  • 次の組込みモジュール・プロシージャーが実装されました。
  • 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*) を指定する必要があります。

Fortran セマンティクス向けの非デフォルト・コンパイラー・オプション
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/ (英語) を参照してください。

関連記事