この付録では、Fortran 95 コンパイラの今回のリリースおよびこれまでのリリースで、追加された機能、変更された機能について説明します。
Fortran 95 コンパイラ、version 8.3 は Sun Studio 12 でリリースされるコンポーネントの 1 つです。
Fortran コンパイラは、次の Linux (x86 および x64) ディストリビューションで利用できるようになりました。SUSE Linux Enterprise Server 9 (Service Pack 3 以降)、Red Hat Enterprise Linux 4、および 2.6 カーネルを基にしたその他の Linux ディストリビューション (ただし正式なサポートはなし)。
-m64 を使用して、64 ビットの実行可能ファイルおよび共有ライブラリを作成できます。
-xarch の新しいフラグにより、古いフラグが置き換えられました。
-xtarget および -xchip の新しい値により、UltraSPARC T2 および SPARC64vi プロセッサ用にコードが生成されるようになりました。
新しいフラグ -fma=fused を使用することにより、FMA (fused multiply-add) 命令をサポートするプロセッサで、この命令を生成できるようになりました。
新しいフラグ -xhwcprof を使用すると、データ空間のプロファイリングがコンパイラでサポートされます。
新しいフラグ -xinstrument を使用すると、スレッドアナライザによるパフォーマンス分析が有効になります。
x86 で、-xregs=frameptr が -fast に追加されました。
Solaris x86 プラットフォームで、-xarch=sse2 および -xia オプションを使用することにより、区間演算がサポートされます。
明示的な先取り指令が、SPARC プラットフォームだけでなく、x86 プラットフォームで使用できるようになりました。(—xprefetch=explicit)
デバッグ情報のデフォルトの形式が「stabs」標準形式から「dwarf」標準形式に変更されました。( -xdebugformat=dwarf)
新しい -xmodel オプション。新しい -xmodel オプションでは、64 ビット AMD アーキテクチャーでカーネル、スモール、ミディアムのメモリーモデルを指定できます。大域変数および静的変数のサイズが 2G バイトを超える場合は、-xmodel=medium を指定します。そうでない場合は、デフォルトの -xmodel=small 設定を使用します。「3.4.150 -xmodel=[ small | kernel | medium]」を参照してください。
x86 SSE2 プラットフォーム用に拡張された -xvector オプション。-xvector オプションでは、ベクトルライブラリ関数の呼び出しの自動生成や、SIMD (Single Instruction Multiple Data) 命令の生成が可能です。このオプションは、x86 SSE2 プラットフォームの拡張構文を提供します。「3.4.181 -xvector[= [[ no%]lib, [no%] simd, %none] ]」を参照してください。
STACKSIZE 環境変数の拡張。STACKSIZE 環境変数の構文が拡張され、単位キーワードを含めることができるようになりました。
x86 プラットフォームで利用できる -xpagesize オプション。SPARC のほかに x86 プラットフォームでも、オプション -xpagesize、-xpagesize_heap、-xpagesize_stack を使用できます。「3.4.157 -xpagesize= size」を参照してください。
新しい UltraSPARC T1 および UltraSPARC IV+ ターゲットへの対応。-xarch、-xchip、-xcache、-xtarget の値で、新しい UltraSPARC プロセッサがサポートされます。「3.4.177 -xtarget=t」を参照してください。
AMD-64 プロセッサ向けコンパイル
このリリースでは、64 ビット x86 プラットフォームで動作するようにアプリケーションをコンパイルするためのオプションとして、-xarch=amd64 および -xtarget=opteron が導入されています。
ビッグエンディアンとリトルエンディアン式プラットフォーム間のファイルの共有
新しいコンパイラフラグの -xfilebyteorder は、プラットフォームにまたがるバイナリ入出力ファイルのサポートを提供します。
Solaris x86 プラットフォームでの OpenMP のサポート
このリリースの Sun Studio では、Solaris SPARC プラットフォームばかりでなく、Solaris x86 プラットフォームでも、共有メモリー並列化のための OpenMP API を利用できます。両方のプラットフォームで、同じ内容の機能を利用できます。
OpenMP オプション -openmp=stubs のサポート廃止
ユーザーの便宜のため、OpenMP のスタブライブラリは提供されます。OpenMP ライブラリ関数を呼び出すだけで、OpenMP プログラムを無視する OpenMP プログラムをコンパイルする場合は、-openmp オプションを付けてプログラムをコンパイルし、オブジェクトファイルを libompstubs.a ライブラリとリンクします。次に例を示します。% f95 omp_ignore.c -lompstubs
libompstubs.a と OpenMP 実行時ライブラリの libmtsk.so 両方とのリンクはサポートされていません。両方とリンクすると、予期しない動作になることがあります。
x86 Solaris プラットフォーム向け Fortran 95 リリース
このリリースの Sun Studio では、x86 プラットフォーム版 Solaris で Fortran 95 コンパイラが使用できるようになっています。Solaris x86 プラットフォームで実行可能なファイルを生成するには、-xtarget 値として generic、native、386、486、pentium、pentium_pro、pentium3、pentium4 のいずれかをコンパイル時に指定します。x86 プラットフォームでのデフォルトは -xtarget=generic です。
x86 プラットフォームの場合、次の f95 機能はまだ実装されていません。使用できるのは、SPARC プラットフォーム上のみです。
区間演算 (コンパイラオプション -xia および -xinterval)
Quad (128 ビット) 演算 (REAL*16 など)
IEEE 組み込みモジュール の IEEE_EXCEPTIONS、IEEE_ARITHMETIC、および IEEE_FEATURES
sun_io_handler モジュール
-autopar、-parallel、-explitipar、-openmp などの並列化オプション
次の f95 コマンド行オプションは、 x86 プラットフォームでのみ使用できます。SPARC プラットフォーム では使用できません。-fprecision、-fstore、および -nofstore
次の f95 コマンド行オプションは、 SPARC プラットフォームでのみ使用できます。x86 プラットフォーム では使用できません。-xcode、-xmemalign、-xprefetch、-xcheck、-xia、-xinterval、-xipo、-xjobs、-xlang、-xlinkopt、-xloopinfo、-xpagesize、-xprofile_ircache、-xreduction、-xvector、-depend、-openmp、-parallel、-autopar、-explicitpar、-vpara、-XlistMP。また、x86 プラットフォームの場合、-fast は -nofstore を追加します。
実行時のパフォーマンスの向上
今回のリリースでは、多くのアプリケーションの実行時のパフォーマンスが向上するとみられます。最良の結果を得るには、最適化レベルを高くして (-xO4 または -xO5) コンパイルしてください。これらのレベルでは、コンパイラが内部手続きや、形状引き継ぎ、割り付け、あるいはポインタ引数を持つ手続きをインライン化することができます。
Fortran 2003 のコマンド行組み込み関数
Fortran 2003 規格草案では、コマンド行引数および環境変数を処理するための新しい組み込み関数が紹介されています。今回のリリースの f95 コンパイラには、これらの組み込み関数が実装されています。新しい組み込み関数は次のとおりです。
GET_COMMAND(command, length, status)
command で、プログラムを呼び出すコマンド行全体を返します。
GET_COMMAND_ARGUMENT(number, value, length, status)
value でコマンド行引数を返します。
GET_ENVIRONMENT_VARIABLE(name, value, length, status, trim_name)
環境変数の値を返します。
f95 コマンド行オプションの追加および変更
このリリースの f95 では、次のコマンド行オプションが新しく追加されています。詳細は第 3 章を参照してください。
-xipo_archive={ none | readonly | writeback }
クロスファイル最適化でアーカイブ (.a) ライブラリを取り込むことができます。(SPARC のみ)
-xprefetch_auto_type=[no%]indirect_array_access
間接アクセスされるデータ配列に対して間接先読み命令を生成します。(SPARC のみ)
-xprofile_pathmap=collect_prefix:use_prefix
プロファイルデータファイルのパスマッピングを設定します。以前に -xprofile=collect を使ってコンパイルしたときに使用したディレクトリとは異なるディレクトリにプロファイリングする場合は、-xprofile_pathmap オプションを -xprofile=use オプションと併用してください。
このリリースの f95 では、次のコマンド行オプションのデフォルト値が変更されています。
-xprefetch のデフォルト値は -xprefetch=no%auto,explicit です。
-xmemalign のデフォルト値は -xmemalign=8i です。 ただし、-xarch=v9 オプションのいずれかを付けたコンパイルでは、デフォルト値は -xmemalign=8f になります。
-xarch=v9 オプションのいずれかを付けたコンパイルでの -xcode のデフォルト値は abs44 になります。
以前のリリースのコンパイラで使用されていたデフォルト値でコンパイルにするには、次のオプションを明示的に指定します。
32 ビットコンパイルの場合: -xarch=v8 -xmemalign=4s -xprefetch=no 64 ビットコンパイルの場合: -xcode=abs64 -xprefetch=no
デフォルトの SPARC アーキテクチャーを V8PLUS に変更
デフォルトの SPARC アーキテクチャーは V7 でなくなりました。この Sun Studio 9 リリースでは、-xarch=v7 のサポートに制限があります。新しいデフォルトは V8PLUS (UltraSPARC) です。-xarch=v8 以上をサポートしているのは Solaris 8 OS だけであるため、-xarch=v7 によるコンパイルは、-xarch=v8 として扱われます。
SPARC V8 システム (SPARCStation 10 など) に配備するには、明示的に -xarch=v8 を使ってコンパイルします。提供のシステムライブラリは、SPARC V8 アーキテクチャーで動作します。
SPARC V7 システム (SPARCStation 1 など) に配備するには、明示的に -xarch=v7 を使ってコンパイルします。提供のシステムライブラリは、SPARC V8 命令セットを利用します。この Sun Studio リリースでは、SPARC V7 アーキテクチャーをサポートするのは、Solaris 8 だけです。SPARC V8 命令が検出されると、OS はソフトウェアでその命令を解釈します。このためプログラムは実行されますが、パフォーマンスは低下します。
OpenMP: 最大スレッド数を増加
OMP_NUM_THREADS およびマルチタスクライブラリの最大スレッド数が 128 から 256 に増加しました。
OpenMP: 変数の自動スコープ
このリリースの Fortran 95 コンパイラに実装されている、共有メモリー並列プログラミング用の OpenMP API には、並列領域における変数の自動スコープ機能があります。詳細は、『OpenMP API ユーザーズガイド』を参照してください。このリリースでは、OpenMP は SPARC プラットフォームにのみ実装されます。
-openmp オプションの拡張
-openmp オプションフラグは、OpenMP プログラムのデバッグが容易にできるように強化されました。OpenMP アプリケーションのデバッグに dbx を使用するには、次の指定をしてコンパイルします。
-openmp=noopt -g
そのあと dbx を使用することによって、並列化領域内のブレークポイントで停止し、変数の中身を表示できます。
マルチプロセスのコンパイル
-xipo とともに -xjobs=n を指定すると、内部手続き間最適化が最大 n 個のコード生成インスタンスを起動して、コマンド行に列挙されたファイルをコンパイルします。このオプションによって、マルチ CPU を持つマシン上の大きなアプリケーションを構築するための時間が大幅に削減されます。「3.4.139 -xjobs= n」を参照してください。
PRAGMA ASSUME を使った表明
ASSUME プラグマはこのコンパイラに今回新しく追加された機能です。このプラグマは、手続き内のある個所において真であることをプログラマが知っている条件について、コンパイラにヒントを与えます。このことによって、コンパイラのコードの最適化機能がさらに向上します。また、プログラマはこの表明を使って、実行時にプログラムの妥当性をチェックできます。「2.3.1.9 ASSUME 指令」および 「3.4.114 -xassume_control[ =keywords]」を参照してください。
Fortran 2003 機能の追加
Fortran 2003 の規格に記述されている次の機能が、Fortran 95 コンパイラの今回のリリースに導入されました。これらは第 4 章で説明されています。
例外処理と IEEE 演算
新しい組み込みモジュールの IEEE_ARITHMETIC と IEEE_FEATURES によって、Fortran 言語での例外処理と IEEE 演算 がサポートされます。「4.6.2 IEEE 浮動小数点の例外処理」を参照してください。
C との相互運用性
Fortran のための新しい規格草稿では、C 言語手続きを参照する方法、および反対に C 関数から Fortran 副プログラムを参照できるように指定する方法を定めています。また、外部 C 変数とリンクする大域変数を宣言する方法も定めています。「4.6.1 C 関数との相互運用性」を参照してください。
PROTECTED 属性
Fortran 95 コンパイラでは、新たに Fortran 2003 の PROTECTED 属性が使えるようになりました。PROTECTED はモジュール要素の使用に制限を設けます。PROTECTED 属性を持つオブジェクトは、それ自身が宣言されるモジュール内でのみ定義可能です。「4.6.4 PROTECTED 属性」を参照してください。
ASYNCHRONOUS 入出力指定子
コンパイラは入出力文中の ASYNCHRONOUS 指定子を認識します。
ASYNCHRONOUS=[’YES’ | ’NO’]
この構文は Fortran 2000 規格草稿で提案されているものです。「4.6.5 Fortran 2003 非同期入出力」を参照してください。
従来の f77 との互換性の強化
多数の機能の追加によって、Fortran 95 コンパイラでは従来の FORTRAN 77 コンパイラである f77 との互換性が向上しました。その機能とは、可変フォーマット式 (VFE)、long 識別子、コンパイルオプションの -arg=local と -vax などです。第 3 章および第 4 章を参照してください。
入出力エラーハンドラ
2 つの新機能によって、ユーザーは独自に論理ユニットの書式付き入力のエラー処理ルーチンを指定できます。このルーチンについては、「4.7.1 入出力エラー処理ルーチン」、マニュアルページ、および『 Fortran ライブラリリファレンス』を参照してください。
符号なし整数
今回のリリースによって Fortran 95 コンパイラでは言語が拡張され、新しいデータ型である UNSIGNED が使用可能になりました。「4.5 符号なし整数」を参照してください。
優先スタックサイズ、ヒープページサイズの設定
新しいコマンド行オプション、-xpagesize を使用すれば、実行プログラムがプログラム開始時に優先スタックサイズおよびヒープページサイズを設定できるようになります。「3.4.157 -xpagesize= size」を参照してください。
プロファイル処理の高速化と機能強化
今回のリリースで、新しいコマンド行オプション -xprofile_ircache= path が導入され、プロファイルフィードバック中のコンパイルフェーズ「use」がスピードアップされました。「3.4.167 -xprofile_ircache[ =path]」を参照してください。「3.4.168 -xprofile_pathmap= collect_prefix:use_prefix」を参照してください。
既知のライブラリの拡張
-xknown_lib オプションが強化され、Basic Linear Algebra ライブラリ、BLAS より多くのルーチンが取り入れられました。「3.4.140 -xknown_lib=library_list」を参照してください。
リンク時の最適化
新たに追加された -xlinkopt フラグを使ってコンパイル、リンクすると、ポストオプティマイザが起動され、生成されたバイナリコードに対し、リンク時にパフォーマンス面で各種の高度な最適化が施されます。「3.4.146 -xlinkopt[ ={1|2|0}]」を参照してください。
局所変数の初期化
-xcheck オプションフラグが強化され、局所変数の特別な初期化が可能になりました。-xcheck=init_local を指定してコンパイルすると、局所変数を、プログラムによる割り当て前に使用された場合に算術例外を引き起こす可能性のある値に初期化します。「3.4.120 -xcheck=keyword」を参照してください。
Fortran 95 コンパイラに組み込まれた FORTRAN 77 の機能
このリリースでは、f77 コンパイラは f95 コンパイラの追加機能に置き換わりました。f77 のコマンドは、f95 を呼び出すスクリプトです。
コマンド: f77 オプション ファイル ライブラリ は、次の f95 コンパイラの呼び出しになります: f95 -f77=%all -ftrap=%none オプション ファイル -lf77compat ライブラリ |
FORTRAN 77 の互換性および非互換性についての詳細は、「4.12 言語の混在」を参照してください。
Fortran 77 互換性モード
一般的には、Fortran 95 とは互換性のない FORTRAN 77 構造構文および規則を、コンパイラが受け付けるようにするためのさまざまな互換性機能を、新しい -f77 フラグを使用することによって選択できます。詳細は、「3.4.27 -f77[=list]」および 「4.12 言語の混在」を参照してください。
非標準別名付けを採用している「Dusty Deck (互換性または保守のために残さざるを得ない) 」プログラムのコンパイル
f95 コンパイラは、コンパイルするプログラムが、副プログラムの呼び出し、大域変数、ポインタ、オーバーインデックスを使用した変数の別名付けに関して、Fortran 95 標準規則に従っていると仮定する必要があります。従来の多くのプログラムは、Fortran 言語の旧バージョンの欠点を避けるために、意図的に別名付け手法を使用しています。-xalias フラグを使用すると、コンパイラにプログラムの標準からのずれと、予想される別名付けの問題を知らせることができます。場合によっては、適切な -xalias サブオプションを指定したときにのみ、正しいコードが生成されることもあります。厳格に標準に準拠しているプログラムの場合は、コンパイラに別名付けを考慮しないように助言すると、パフォーマンスが向上する場合もあります。「3.4.112 -xalias[= keywords]」および『Fortran プログラミングガイド』の移植に関する章を参照してください。
MODULE 機能の向上
新しいフラグ -use=list を使用すると、1 つ以上の暗黙的な USE 文が各副プログラムに挿入されます。「3.4.104 -use= list」を参照してください。
新しいフラグ -moddir=path によって、コンパイルした MODULE 副プログラム (.mod ファイル) をどこに書き込むかを制御できます。「3.4.58 -moddir= path」を参照してください。新しい環境変数 MODDIR によっても、どこに .mod ファイルを記述するかを制御できます。
-Mpath フラグは、ディレクトリパス、アーカイブ (.a) ファイル、または (.mod) ファイルを、MODULE 副プログラムを検索するために受け取ることができます。コンパイラは、ファイルの内容を検査してファイルの型を決めます。実際のファイルの拡張子は無視されます。「3.4.56 -Mpath」を参照してください。
モジュールを検索する際に、コンパイラは、モジュールファイルが書き込まれるディレクトリを最初に探します。
詳細は、「4.9 モジュールファイル」を参照してください。
-Xlist を使用した大域的なプログラム検査の向上
f95 コンパイラのこのリリースでは、大域的なプログラム検査のために、 -Xlist フラグによる多くの新しい検査機能が加わりました。新しい -XlistMP サブオプションは、静的プログラム解析の新しいドメイン (OpenMP 並列化指令の検証) を開きます。詳細は、「3.4.110 -Xlist[ x]」、Forte Developer『OpenMP API ユーザーズガイド』、『Fortran プログラミングガイド』の「プログラムの解析とデバッグ」の章を参照してください。
-xknown_lib=library による既知のライブラリの識別
新しいオプション -xknown_lib=library は、既知のライブラリへの参照を組み込み関数として扱い、ユーザー定義のバージョンを無視するように、コンパイラに指示します。これによって、コンパイラは、ライブラリに関する情報に基づき、ライブラリの呼び出しを最適化できます。このリリースでは、Fortaran 95 標準組み込み関数に対する明示的な EXTERNAL 宣言とこれらのルーチンのユーザー定義バージョンを無視するため、既知のライブラリ名は、Sun のパフォーマンスライブラリにある BLAS ルーチンのサブセット blas および intrinsics に限定されます。「3.4.140 -xknown_lib=library_list」を参照してください。
インタフェース仮引数型の無視
新しい指令 !$PRAGMA IGNORE_TKR {list_of_variables} は、特定の呼び出しを解釈するときに、一般的な手続きのインタフェースで使用される仮引数名の型、種類、ランクを、指定されたものに関して無視するように、コンパイラに指示します。この指令を使用することによって、引数の型、種類、ランクに基づいてライブラリルーチンを呼び出すラッパーの一般的なインタフェースの記述を単純化できます。詳細は、「2.3.1.2 IGNORE_TKR 指令」を参照してください。
-C 配列検査の向上
この f95 コンパイラのリリースでは、-C による実行時の配列添字範囲の検査が向上し、配列の準拠検査もできるようになりました。配列のセクションが準拠していない配列構文が実行されるとエラーになります。「3.4.7 -C」を参照してください。
Fortran 2003 の機能の導入
この f95 リリースでは、次の Fortran 標準に提案されている新しい書式付き入出力機能が実装されています。これらは、DECIMAL=、ROUND=、および IOMSG= 指定子で、OPEN、READ、WRITE、PRINT、および INQUIRE 文で使用されます。また、DP、DC、RP、および RC 編集編記述子も実装されています。詳細は、「4.6.9 Fortran 2003 の書式付き入出力機能」を参照してください。
書式付き入出力の丸め
新しいオプションフラグ -iorounding は、書式付き入出力のデフォルトの丸めモードを設定します。モード (プロセッサ定義または互換性がある) は、Fortran 2003 の機能として実装された ROUND= 指定子に対応して決まります。「3.4.49 -iorounding[ ={compatible|processor-defined}]」を参照してください。
旧オプションの削除
次のフラグは f95 コマンド行から削除されました。
-db -dbl
次の f77 コンパイラフラグは、f95 コンパイラに実装されず、旧オプションとして扱われます。
-arg=local -i2 -i4 -misalign -oldldo -r8 -vax-xl -xvpara -xtypemap=integer:mixed
スタックオーバーフローの検査
新しい -xcheck=stkovf フラグを指定してコンパイルすると、エントリのスタックオーバーフロー状態に対する実行時の検査が副プログラムに加わります。スタックオーバーフローが検出されると、SIGSEGV セグメント例外が発生します。スタックオーバーフローは、スタックに大きな配列が割り当てられるマルチスレッドアプリケーションで、近傍のスレッドスタックのデータを警告なしに破壊する可能性があります。スタックオーバーフローの可能性がある場合は、-xcheck=stkovf を使用してすべてのルーチンをコンパイルします。「3.4.120 -xcheck=keyword」を参照してください。
新しいデフォルトのスレッドスタックのサイズ
このリリースでは、デフォルトのスレーブスレッドのスタックサイズが、SPARC V8 プラットフォームでは 4M バイトに、SPARC V9 プラットフォームでは 8M バイトに増加されました。詳細は、『Fortran プログラミングガイド』の並列化の章で、スタックおよびスタックサイズに関する内容を参照してください。
内部手続きの最適化の向上
-xipo=1 を使用すると、コンパイラはすべてのソースファイルに対してインライン化を実行します。このリリースでは、キャッシュのパフォーマンス向上を目的として、手続き間の別名付けの解析を向上し、記憶域割り当てとレイアウトを最適化するために、-xipo=2 が追加されました。「3.4.137 -xipo[={ 0|1|2}]」を参照してください。
-xprefetch_level=n による先読み命令のコントロール
新しいフラグ -xprefetch_level=n を使用すると、-xprefetch=auto による先読み命令の自動挿入をコントロールできます。使用の際は、-xO3 以上の最適化レベルを指定し、先読み命令をサポートするターゲットプラットフォーム (-xarch プラットフォーム v8plus、v8plusa、v8plusb、v9、v9a、v9b、generic64、または native64) が必要です。「3.4.165 -xprefetch_level={ 1|2|3}」を参照してください。
Forte Developer 7 以前の機能の履歴は、Web サイト http://docs.sun.com にある以前のリリースのマニュアルを参照してください。