トップ サイトマップ

NAG Fortranコンパイラ 5.2 リリースノート

目次

1 はじめに

NAG Fortranコンパイラのリリース5.2にはコンパイラに対する数多くの改良とFortran 2003言語への機能追加が含まれています。

このリリースはリリース5.1と同一のライセンススキームを使用しています。従ってリリース5.1用のライセンスキーはリリース5.2に対しても使用できます。

Kusariライセンス管理に関するさらなる情報については KLICENCE をご参照ください。

1.1 リリース5.1との互換性

NAG Fortranコンパイラのリリース5.2は次の点を除きNAGWare f95リリース5.1と完全互換です:
  • CLASSキーワードを使用した、あるいは拡張される型を含むプログラムやライブラリはリコンパイルが必要です。
  • 次の64ビットプラットフォームは-abi=64 オプション(デフォルト)を使用する場合にバイナリ非互換となるため、すべてのプログラムとライブラリをリコンパイルする必要があります:NPL6A51NA, NPMI651NA.   

1.2 それ以前のリリースとの互換性

下記項目以外については、NAG Fortranコンパイラリリース5.2はNAGWare f90リリース2.1と2.2、及びNAGWare f95のリリース1.0から5.0までの全リリースと互換性があります。

次の非互換性はリリース5.1で導入されたものです:

  • ALLOCATEまたはDEALLOCATE文においてSTAT=によって返される値は5.1以前の値と異なる場合があります。詳細についてはF90_STATモジュール資料をご参照ください。
  • 5.0における型拡張(EXTENDS属性)を使用したプログラムはリコンパイルが必要です。
  • IEEEの無限大とNaNに対する書式付き出力は以前とは異なり、現在Fortran 2003準拠となっています。
  • 浮動小数ゼロの並び出力はE形式ではなく、Fortran 2003で要求されるF形式を使用するようになりました。
  • NAMELIST入力の過程で遭遇した入出力、または書式エラーは誤りのあるレコードをスキップするようになりました。この挙動は並びを含む他の書式付き入力動作と共通になります。

1.3 新機能

リリース5.2にはFortran 2003標準からの新機能の他、すべてのプラットフォーム上での4倍精度浮動小数演算サポート、実行時エラーメッセージ出力の改善、乱数発生機構の改善が含まれます。

この他に性能強化やその他のマイナエンハンスも含まれています。

2 主要なFortran 2003機能

  • 無限多相‘CLASS(*)’仮引数、ポインタ、割付け変数
  • 手続きポインタ
  • オブジェクト結合手続き(手続きポインタ要素としても知られています)
  • スカラ割付け変数
  • 無指定文字長(‘LEN=:’)。スカラ割付け変数と共に、これは真の可変長文字機能を提供します。
  • 初期化式中にこれまで以上の組込み関数を使用できます。これにはABS (実数/複素数), ACOS, AIMAG, AINT, ANINT, ASIN, ATAN, ATAN2, CEILING, CMPLX, COS, COSH, COUNT, DBLE, DIM (実数), EXP, EXPONENT, FLOOR, FRACTION, INDEXBACK=引数付き), LGE, LGT, LLE, LLT, LOG, LOG10, LOGICAL, MAX (非整数), MAXLOC, MAXVAL, MERGE, MIN (非整数), MINLOC, MINVAL, MOD (実数), MODULO, NEAREST, NINT, REAL, RRSPACING, SCALE, SCANBACK=引数付き), SIGN (非整数), SIN, SINH, SET_EXPONENT, SPACING, SQRT, TAN, TANH, VERIFYBACK=引数付き)を含みます。また2番目の引数が実数、または複素数のべき乗(**)も初期化式中で使用できるようになりました。
  • まだ割付けられていない割付け変数への代入、あるいは誤った形状の割付け配列全体への代入操作に対し、正しい形状の変数を割り付けるようになりました(これまでは単なるエラーでした)。
  • 再帰入出力。Fortran 2003標準ではただ一つの入出力文が外部装置を指定している場合に再帰入出力を許していますが、NAG Fortranコンパイラにおいては複数の外部装置に対する再帰入出力が許容されます。唯一の制限は同一の外部装置が含まれていてはならないという点です。
  • ASSOCIATE構造構文

3 その他のFortran 2003機能

  • 組込みサブルーチンMOVE_ALLOC
  • 組込み関数COUNT, IACHAR, ICHAR, INDEX, LBOUND, LEN, LEN_TRIM, MAXLOC, MINLOC, SCAN, SHAPE, SIZE, UBOUND, VERIFYKIND=引数が追加されました。
  • 組込み関数MAX, MAXLOC, MAXVAL, MIN, MINLOC, MINVALCHARACTER型の引数を受け付けられるようになりました。
  • 最大継続行数のデフォルト値が255になりました。
  • 配列構成子を型指定子(コロンを2重に続ける)で開始できるようになりました。この場合、実際の値は必要ありませんが(値が存在しない場合、そのサイズは0で指定された型/種別/長さを持ちます)、与えられた値は指定された型/種別/長さに変換されます。
  • FLUSH
  • ASYNCHRONOUS属性とWAIT文を含む非同期入出力。この機能は非同期入出力に関するすべての構文とセマンティックスを提供しますが、実際の入出力は依然同期型で実行されます。
  • 複素数定数表現は実数部、虚数部として名前付き実定数、または整定数を持つことができます(厳密に言うとこれは定数表現ではありません)。
  • 配列ポインタの下限をポインタ代入文で指定できます。
  • ユーザ定義の演算子(例えば‘.FRED.’)をUSE文上でリネームできます。
  • 関数C_F_PROCPOINTERが組込みモジュールISO_C_BINDINGに追加されました。
  • 関数IEEE_GET_UNDERFLOW_MODE, IEEE_SET_UNDERFLOW_MODE, IEEE_SUPPORT_IO, IEEE_SUPPORT_UNDERFLOW_CONTROLが組込みモジュールIEEE_ARITHMETICに追加されました。アンダフロー制御自体はサポートされていない点に注意してください。
  • 名前付き定数IEEE_OTHER_VALUEが組込みモジュールIEEE_ARITHMETICに追加されました。
  • 自由ソース形式の場合にはELSEWHEREキーワードを‘ELSE WHERE’のように2語で記述できます。
  • 組込みサブルーチンSYSTEM_CLOCKは任意の種類の整数引数を、COUNT_RATE=引数については実引数を受け付けられるようになりました。ただし小さな整数種別を指定した場合には、高速クロックを持ったシステム上での単精度がそうであるように、誤った答を生む可能性がある点に注意してください。
  • 非10進定数を組込み関数CMPLX, DBLE, INT, REALに対する引数として使えるようになりました。
  • 組込みサブルーチンDATE_AND_TIMEは短いCHARACTER引数を受け入れます(情報が失われるので推奨できません)。

4 性能改善

  • 構造体構成子の構造型変数への代入に際しては可能であれば一時記憶の使用を回避します。
  • 組込み関数ASSOCIATEDの2引数形式は状況によってはより高速になります。
  • 組込み関数ISHFTCは大きなSHIFT=値に対して一段と高速になりました。
  • 組込み関数SHAPEは状況により性能が早くなります。
  • DIM=引数を指定した組込み関数SIZEは状況により性能が早くなります。
  • スカラポインタの割付け、解放がより高速になりました。
  • -Oinline_dealloc オプション(-O3 , -O4に対するデフォルト)が使用された場合の割付け配列の解放処理が早くなることがあります。
  • メモリアロケータの性能が改善され、フラグメンテーションがわずかに軽減されます。
  • マルチスレッドのプログラムにおいてそれぞれのスレッドが別個の装置に対して入出力を行うようになるため、ロック競合が低下します。
  • 内部入出力に対する-thread_safe オプションに関し性能が改善されました。
  • 特に非常に多くのネストされた有効域を含むモジュールに対してコンパイル速度が改善されました。

5 その他の主要な改善機能

  • 4倍精度REALがすべてのプラットフォーム上でサポートされました。Solaris上でSun Cコンパイラ(製品NPSOL52NA)を使用する場合を除き、これは“double double”精度となります。これによって(64ビット)倍精度に比べ約2倍の精度が得られるようになりますが、指数の範囲はより小さなものとなります。これはIEEEの4倍精度とは互換ではなく、精度も多少劣りますが、演算ははるかに高速です。
  • 実行時エラーメッセージのほとんどにおいてエラーの位置がメッセージ中に示されるようになりました。場合によってはこの追加情報は、-g または適切なチェック(-C=)オプションを指定してコンパイルしたときにのみ提供されます。
  • 非標準の組込みモジュールがすべて改訂されました。これによってほとんどのモジュール手続きが総称型となり、-double-f77 オプションのもとで使え、エラーメッセージが改良される等の改善が施されています。
  • 組込みサブルーチンRANDOM_NUMBER, RANDOM_SEEDにおいて“Mersenne Twister(メルセンヌツイスター)”乱数発生アルゴリズムが実装されました。従来のものと性能はほとんど変わりませんが、(シーケンス長を含む)“randomness”は格段に改善されています。

6 その他の改善機能

  • 自由ソース形式の場合に132文字よりも長い行を使えるようになります。行長には制限がなくなりますが、個々のトークンは依然約255*132文字長に制限されます。
  • 浮動小数定数式を整数変数に代入する際、整数オーバフローが起る場合には警告メッセージが発行されます。
  • CASEの値が選択肢の型に対して許されない場合には警告メッセージが発行されます。
  • CASE DEFAULT文が存在する状態でCASEの値が可能な値すべてをカバーした場合には警告メッセージが発行されます。
  • より多くの場合に入出力指定子に対する不正な値をコンパイル時に検出できるようになりました。
  • モジュールを使用するコードとモジュール間での-f77 オプション不整合を検出します(このオプションはABIの変更を伴います)。
  • 部分配列添字中における(変数の)刻み幅値が0であることを実行時に検出します。
  • -g オプションが使用された場合、べき乗中の整数オーバフローが実行時に検出されます(32ビット、64ビット整数のみ)。
  • 組込み関数MODに対し整数の引数を指定した場合、P=引数が0のときに演算例外を起すのではなく、情報提供のためのエラーメッセージが出力されます。
  • 多くのコンパイラエラーメッセージに対して情報が補足されます。例えば手続き参照に際して引数のデータ型が誤っていた場合、どの型が期待され、どの型が供給されたかが示されるようになります。
  • 多くのコンパイラエラーメッセージにおいて(これまで整合性に欠けていた)表現が改められました。
  • コンパイラエラーメッセージの区分である‘Warning’を深刻な警告(ラベルは依然‘Warning’)と‘Questionable’に分割しました。後者はコードが技術的には正当であってもしばしば偶発的なミスである可能性が高いことを示します。
  • ‘Questionable’な警告メッセージを次の場合に出力します:
    • 組込み関数CMPLXを倍(または4倍)精度引数で使用しているが、KIND=引数を伴っていない場合
    • ポインタ変数に対するポインタ関数引用結果の通常代入
    • 小さな整数種別(1または2)を指定した組込み関数引用に際してKIND=引数を使用した場合(結果を保持するには小さすぎると判断される場合)
    • 再帰(RECURSIVE)手続きにおいて明らかにスレッドセーフではないコードの場合(-thread_safe オプション使用時のみ)
    • 自身からの実引数として再帰的でない手続き名を引き渡した場合(かつてはエラーであったがFortran 2003では正当とみなされる)
  • 環境変数NAGFORTRAN_RUNTIME_ERROR_FILEをセットすることによって、実行時エラーメッセージを‘stderr’ではなく指定したファイルに出力できます。
  • いくつかの実行時エラーメッセージに対して追加情報が加わります。例えばどのポインタが未定義かが示されます(従来は単純な名前に対してのみこれが行われていました)。
  • 新たなF90_STAT値、STAT_MEMORY_LIMIT_EXCEEDEDSTAT_PART_OF_LARGER_OBJECT
  • Windows上でSYSTEM_CLOCK用に高精度カウンタを使用します。
  • 最大割付けメモリサイズを64GBから1TBに拡大します(64ビットシステムのみ)。
  • -thread_safe オプションは再帰的(RECURSIVE)手続きに留まらずすべてのユーザ手続きをスレッドセーフにします。また非再帰的な手続きが保存された(SAVEd)変数をアップデートしようとした場合、あるいは本質的にスレッドセーフでない操作を実行しようとした場合に、エラーメッセージを発行するようになりました。
  • ‘.ff’, ‘.ff90’, ‘.ff95’拡張子はすべてのプラットフォーム上でfppプリプロセシングを要求するものとして認識されます(従来はWindowsとMac OS/Xに限られていました)。
  • ‘.f03’, ‘.F03’(Unixのみ), ‘.ff03’拡張子が認識されます(Fortran 90, 95, 2003の間にソース形式上の差はないため推奨されず、ドキュメントにも記載されていません)。
  • -indirect オプションが追加されました。これはファイルの内容をコンパイラに対する追加引数として解釈します。このオプションは‘@’と表記することもできます。
  • -C=scale オプションはFortran 2003と非互換であるため削除されました。
  • -C=recursion オプションは-thread_safe オプションが使用された場合には自動的に無効になります。

7 新Fortran標準

Fortran 2003標準準拠の機能改善項目(上記参照)を一覧の形で表示しておきます。Metcalf, Reid, Cohen著 “Fortran 95/2003 Explained”(Oxford University Press, 2008 printing (ISBN 978-0-19-852693-3))の該当セクション番号も示してあります。

  • 無限多相要素(16.3.1)
  • 手続きポインタ(15.6)
  • オブジェクト結合手続き(15.6.2)
  • 割付けスカラ(17.5.1)
  • 無指定文字長(15.2)
  • 初期化式中での組込み関数(17.10)
  • 再割付け代入(17.5.2)
  • 再帰的入出力(19.7)
  • 結合構造構文(16.4)
  • 組込みサブルーチンMOVE_ALLOC(17.5.3)
  • 組込み関数に対するKIND=引数(18.10)
  • 組込み関数に対するCHARACTER引数(18.10)
  • 配列構成子に対する型指定子(17.9)
  • 非同期入出力(19.3)
  • 複素数定数エンハンス(18.12)
  • ポインタ下限設定(17.6)
  • USE文での演算子名称変更(17.8)
  • C_F_PROCPOINTERサブルーチン(14.3)
  • SYSTEM_CLOCKへの変更(18.10)
  • CMPLX, DBLE, INT, REALにおける非10進定数の許容(18.9)
Results matter. Trust NAG.

Privacy Policy | Trademarks