インテル® Fortran コンパイラー – Fortran 言語標準のサポート
この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® Fortran Compiler – Support for Fortran language standards」の日本語参考訳です。
インテル® [Visual] Fortran コンパイラー 16.0 は、ISO/IEC 1539-1:2004 Fortran 言語標準 (Fortran 2003 言語) に完全に準拠しています。また、インテル® [Visual] Fortran は、これまでの標準規格 Fortran 95、Fortran 90、FORTRAN 77 および FORTRAN IV (FORTRAN 66) も完全にサポートします。以前の Fortran 規格の異なった振る舞いのサポート有効にするには、コンパイラー・オプションの指定が必要になることがあります。
インテル® [Visual] Fortran 16.0 は、最新の Fortran 規格の多くをサポートしています: Fortran 2008 (ISO/IEC 1539-1:2010) 現在サポートしていない Fortran 2008 機能についても、今後サポートしていく予定です。また、バージョン 16.0 では、ISO/IEC TS 29113:2012 を完全にサポートします。さらに、現在の Fortran 2015 ドラフトの一部である、C との相互運用性をサポートします。
サポートされる Fortran 2008 の機能:
- 配列の最大次元数が 31 次元に (Fortran 2008 では 15 次元)
- Co-Array (Linux* と Windows* のみ)
- CODIMENSION 属性
- SYNC ALL 文
- SYNC IMAGES 文
- SYNC MEMORY 文
- CRITICAL および END CRITICAL 文
- LOCK および UNLOCK 文
- ERROR STOP 文
- ALLOCATE および DEALLOCATE で Co-Array を指定
- 組込みプロシージャー: ATOMIC_DEFINE、ATOMIC_REF、IMAGE_INDEX、LCOBOUND、NUM_IMAGES、THIS_IMAGE、UCOBOUND
- CONTIGUOUS 属性
- ALLOCATE の MOLD キーワード
- BLOCK 構文 (BLOCK 構文外で宣言される変数への ASYNCHRONOUS や VOLATILE 属性の追加はサポートされていません)
- EXIT 文で BLOCK 構文を終了できます (16.0 – ほかの名前付き構文中の EXIT はまだサポートされていません)
- DO CONCURRENT
- OPEN の NEWUNIT キーワード
- G0 および G0.d フォーマット編集記述子
- サブモジュール (16.0)
- ELEMENTAL プロシージャーの IMPURE プリフィックス (16.0)
- 実引数として内部プロシージャーを渡します
- プロシージャー・ポインターは、内部プロシージャーを指すことができます
- ALLOCATE で、ソース・オブジェクトが指定された形状を持っていない場合、形状は “SOURCE=引数” から引き継がれます
- CONTAINS セクションは空にすることも可能
- 組込みプロシージャー: BESSEL_J0、BESSEL_J1、BESSEL_JN、BESSEL_YN、BGE、BGT、BLE, BLT、DSHIFTL、DSHIFTR、ERF、ERFC、ERFC_SCALED、EXECUTE_COMMAND、GAMMA、HYPOT、IALL、IANY、IPARITY、IS_CONTIGUOUS、LEADZ、LOG_GAMMA、MASKL、MASKR、MERGE_BITS、NORM2、PARITY、POPCNT、POPPAR、SHIFTA、SHIFTL、SHIFTR、STORAGE_SIZE、TRAILZ
- 組込みモジュール ISO_FORTRAN_ENV の追加:ATOMIC_INT_KIND、ATOMIC_LOGICAL_KIND、CHARACTER_KINDS、INTEGER_KINDS、INT8、INT16、INT32、INT64、LOCK_TYPE、LOGICAL_KINDS、REAL_KINDS、REAL32、REAL64、REAL128、STAT_LOCKED、STAT_LOCKED_OTHER_IMAGE、STAT_UNLOCKED
- ALLOCATABLE または POINTER 属性を持たない OPTIONAL 仮引数は、対応する実引数に ALLOCATABLE 属性があるのに割り当てられない場合、POINTER 属性があるのに関連付けが解除されている場合、または NULL 組込み関数への参照の場合、無視されます。
- 仮引数がプロシージャー・ポインターの場合、そのポインターの有効な参照先か、または組込み関数 NULL への参照である実引数に関連付けられます。実引数がポインターではない場合、仮引数に INTENT (IN) 属性が含まれていなければなりません。
サポートされる Fortran 2015 ドラフトの機能:
- ISO/IEC TS29113:2012 で定義されるすべての機能と C との相互運用性 (16.0)
- 想定型 (TYPE(*))
- 想定ランク (DIMENSION(..))
- ISO_Fortran_binding.h
- C ディスクリプターとそれを操作するプロシージャー
- RANK 組込み関数
- 相互運用可能な仮引数における制限の緩和
- 組み込みモジュール ISO_C_BINDING におけるプロシージャー上の制限の緩和
インテル® Fortran コンパイラーは、デフォルトのコンパイラーの振る舞いを変更するコマンドライン・オプションだけではなく、いくつかの Fortran 規格の拡張も含んでいます。
いくつかのケースでは、インテル® Fortran コンパイラーのデフォルト動作では、Fortran 2003 のセマンティクスに準拠していません。次の表は、デフォルトで有効になっていない完全な Fortran 2003 セマンティクスを有効にするコンパイラー・オプションの一覧です。これらのオプションを指定することで、実行時のパフォーマンスが低下することがあることに留意してください。
単一のオプション /標準セマンティクス (Windows*) または -標準セマンティクス (Linux* と OS X*) は、完全な Fortran 2003 セマンティクスを有効にするために指定します。IEEE_ARITHMETIC、IEEE_EXCEPTIONS または IEEE_FEATURES 組込みモジュールを使用する場合、/fp:strict (Windows*) や -fp-model strict (Linux* と OS X*) を指定する必要があります。
Windows* | Linux* および OS X* |
---|---|
/assume:byterecl | -assume byterecl |
/assume:fpe_summary | -assume fpe_summary |
/assume:ieee_fp_flags (/fp:strict または precise と一緒に指定する場合) | -assume ieee_fp_flags (-fp-model strict または precise と一緒に指定する場合) |
/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:realloc_lhs | -assume realloc_lhs |
/assume:std_mod_proc_name | -assume std_mod_proc_name |
/fpscomp:logicals | -fpscomp logicals |
詳細については、インテル® Fortran コンパイラーのドキュメントの「コンパイラー・オプション」を参照してください。
以前のバージョンの言語規格については、「Fortran 2003 仕様のサポート」、「Fortran 2008 仕様のサポート」をご覧ください。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。