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

インテル® Fortran コンパイラー

この記事は、インテル® デベロッパー・ゾーンに公開されている「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*) を指定する必要があります。

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/ を参照してください。

タイトルとURLをコピーしました