Fortran ユーザーズガイド | ![]() ![]() ![]() ![]() ![]() |
第 3 章
f77
/f95
コンパイラオプションこの章では Sun WorkShop
f77
および
f95
の各コンパイラのコマンド行オプションについて説明します。オプションによっては、両方のコンパイラ (
f77
またはf95
) で使用できないものもあります。リファレンスセクションで使用できるオプションを確認ください。コマンド構文
f77 [options] list_of_files additional_optionsf95 [options] list_of_files additional_options角括弧 (
[]
) の中の項目は省略可能なパラメータを示します。角括弧自体はコマンドの一部ではありません。[
options]
には、先頭にハイフン (-
) を付けたオプションキーワードを指定します。オプションによっては、リスト中の次の項目を引数として取るものがあります。list_of_files には、ソース、オブジェクトまたはライブラリのファイル名を空白で区切って複数指定することができます。また、オプションによっては、ソースファイルリストよりも後に続けて指定しなければならないものがあります (たとえば、-B
、-l
および-L
)。これらのオプションには、そのオプション用のファイルリストを指定してもかまいません。オプションの構文
表 3-1 オプションの構文 構文の形式 例 -flag
-g
-flagvalue
-Dnostep
-flag=value
-xunroll=4
-flag value
-o outfile
括弧、縦棒、省略符号は、オプションを記述するために使用している記号で、オプション自体の一部ではありません。
-l
x はlib
x.a
ライブラリにリンクするためのオプションです。-l
x は必ずファイル名リストの後に指定して、ライブラリの検索順序が保たれるようにしてください。- 通常、コンパイラオプションは左から右の順序で処理されます。このため、マクロのオプション (別のオプションを含むオプションも) を意図的に上書きすることができます。
ソースファイル、オブジェクトファイル、およびライブラリは、コマンド行に現れる順にコンパイルとリンクが実行されます。
オプションのまとめ
この節では、各コンパイラオプションを機能別に分類し、概略を説明しています。
詳細は、表 3-3 の詳細欄に示すページを参照してください。次の表に、
f77
およびf95
のコンパイラオプションを機能別にまとめます。この表には、廃止されたり使用されなくなったりしたオプションフラグは含まれていません。フラグによっては、複数の使用目的があるため、複数の箇所に記載されているものがあります。
頻繁に利用するオプション
Sun Fortran コンパイラには、オプションのコマンド行パラメータによって選択できる機能が数多くあります。以下の表に、頻繁に利用するオプションをまとめてあります。
下位互換オプションと旧オプション
コンパイラの旧リリース、および Fortran の従来の機能との下位互換のオプションを示します。
これらのオプションフラグは推奨していませんので使用しないでください。
現在使用されていないオプション
f77
およびf95
の各コンパイラでサポートされていないオプションを示します。コンパイラコマンドで使用してもエラーの原因はなりません。これらのオプションは無視されるので、何の効果もありません。
表 3-6 現在使用されていないオプション スレッドアナライザ用にコンパイルします。 -ztha
例外トラップを無効にします (f95)。 -fnonstop
オプションリファレンス
凡例 オプションの利用可能性 f77
該当するプラットフォームの f77
でのみ使用できます。f95
該当するプラットフォームの f90
でのみ使用できます。f77/f95
該当するプラットフォームの f77
とf90
の両方で使用できます。
あるオプションが、特定のプラットフォーム上のコンパイラでは使用できない場合でも、メッセージは表示されません。そのようなオプションは無視されるので、影響は何もありません。
このオプションリファレンスでは、それぞれのオプションフラグについて説明します。
-a
tcov を使用する、旧式の基本ブロックごとのプロファイリングを行います。
- SPARC: f77/f95
tcov
を使用する旧式の基本ブロックごとのプロファイルを行います。新しい形式のプロファイルについては、「-xprofile=p」の
tcov
の説明を参照してください。詳細は、tcov
(1) のマニュアルページおよび『プログラムのパフォーマンス解析』を参照してください。文の基本ブロックがそれぞれ実行される回数を数えるコードを挿入します。これによって、正常終了時に、各
.f
ファイルに対して 1 個の.d
ファイルを作成する、実行時記録機能が起動されます。.d
ファイルには、対応するソースファイルの実行データが蓄積されます。後に、ソースファイルに対してtcov
(1) ユーティリティを実行すると、プログラムの統計情報を生成することができます。tcov
によって出力される情報は、ソースファイルごとに .tcov ファイルに書き込まれます。-pg
とgprof
は-a
とtcov
を補います。
TCOVDIR
環境変数がコンパイル時に設定されている場合、この変数によって.d
ファイルと.tcov
ファイルを置くディレクトリが指定されます。この変数が設定されていない場合、.d
ファイルは.f
ファイルと同じディレクトリに置かれます。
-xprofile=tcov
と
-a
オプションは、1 つの実行可能ファイル内では互換性があります。つまり、-xprofile=tcov
を付けてコンパイルしたファイルと、-a
を付けてコンパイルしたファイルを 1 つのプログラムにリンクすることができます。ただし、同一のファイルに両方のオプションを付けてコンパイルすることはできません。コンパイルとリンクを分けて行う場合、
-a
を付けてコンパイルしたときは、リンクでも必ず-a
を付けてください。なお、以前のバージョンでは-a
を指定すると-O
n は無効になりましたが、このバージョンでは-a
と-O
n を同時に指定することができます。詳細は、『Fortran プログラミングガイド』の第 8 章「パフォーマンスプロファイリング」を参照してください。
-aligncommon [=n]
l SPARC: f77/f95
n は、1、2、4、8、または 16 を指定できます。これは、COMMON ブロック内のデータ要素について希望する境界整列サイズ (バイト単位) を指定します。
たとえば、
-aligncommon=4
と指定すると、4 バイト以上の共通ブロック内の全データ要素が、4 バイト境界に整列します。指定のサイズより小さいブロック内のデータは、このオプションの影響を受けず、本来の境界上に位置したままになります。
-aligncommon
を指定しないと、共通ブロック内のデータは、多くてもデフォルトの 4 バイト境界に整列されます。どのプラットフォームでも、値を指定せずに
-aligncommon
だけを指定すると、デフォルトの 1 が仮定され、共通ブロック内の全データは、1 バイト境界に整列されます (要素間のパディングは行われません)。-ansi
規格以外の拡張機能を使用すると、警告メッセージを出力します。
- SPARC: f77/f95
ソースコード中で、標準外の Fortran 77 または Fortran 95 の拡張機能を使用すると、警告メッセージが出力されます。
-arg=local
- SPARC:f77
このオプションを使用して代替入口のある副プログラムをコンパイルすると、
f77
では コピー、ストアを使用して、仮引数と実引数の関連性を保存します。たとえば、次のプログラムを正しく実行するには-arg=local
でコンパイルする必要があります。
ZORK = FXGAMMA(GCONST)A = SETUP(ALPHA,BETA,GAMMA)
...
FUNCTION SETUP(A1,A2,A3)
...
ENTRY FXGAMMA(F)
FXGAMMA = F*GAMMA
...
RETURN
END
このオプションを指定しないと、
FXGAMMA
を介してこのルーチンに入った時点で、SETUP
の実引数が正しく引用される保証はありません。-arg=local
に依存するコードは標準ではありません。-autopar
Fortran 並列化機能には、Sun WorkShop HPC のライセンスが必要です。
- SPARC: f77/f95
マルチプロセッサで並列処理の対象に適するループを探し、そのループを並列化します。内部反復データに依存するループを解析し、ループを再構築します。最適化レベルが
-O3
以上に設定されていない場合は、自動的に-O3
に設定されます。パフォーマンスを改善するには、
-autopar
などの並列化オプションを使用するときに -stackvar
オプションも指定してください。プログラム中に
libthread
スレッドライブラリへの明示的な呼び出しがある場合は、-autopar
は使用しないでください。
-autopar
オプションは、シングルプロセッサのシステムには適していません。シングルプロセッサのシステムでこのオプションを付けてコンパイルを行うと、通常は実行速度が低下します。マルチスレッド環境で並列化プログラムを実行するには、実行前に
PARALLEL
(または OMP_NUM_THREADS) 環境変数を設定する必要があります。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。一般的に、ターゲットプラットフォーム上のPARALLEL
変数またはOMP_NUM_THREADS
変数には、利用可能なプロセッサ数を設定します。
-autopar
を使用してコンパイルとリンクを一度に行う場合、マルチスレッド処理ライブラリとスレッド対応の Fortran 実行時ライブラリが自動的にリンクされます。-autopar
を使用してコンパイルとリンクを別々に行う場合は、適切なライブラリにリンクするために、-autopar
を使用してリンクを行う必要があります。
-reduction
オプションは、-autopar
オプションと組み合わせて使用することもできます。その他の並列化オプションとして、-parallel
と-explicitpar
があります。並列化についての詳細は、『Fortran プログラミングガイド』を参照してください。
Fortran 並列化機能には、Sun WorkShop HPC のライセンスが必要です。
-B{static|dynamic}
- SPARC: f77/f95
-B
とdynamic
またはstatic
の間に空白文字を入れないでください。-B
を省略すると、デフォルトとして-Bdynamic
が使用されます。
static
を指定した場合に動的ライブラリしか見つからないと、"library was not found"(ライブラリがありません) という警告メッセージが出力され、ライブラリのリンクは行われません。dynamic
を指定した場合に静的ライブラリしか見つからないと、その静的ライブラリとリンクされます。警告メッセージは表示されません。次のように
、-Bstatic
と-Bdynamic
をコマンド行で切り替えて、何回でもライブラリを静的および動的にリンクすることができます。
f77 prog.f -Bdynamic -lwells -Bstatic -lsurface
これらはローダーおよびリンカーのオプションです。コンパイルコマンド上に
-Bx
オプションを指定してコンパイルとリンクを分けて行う場合は、リンク時にも-Bx
オプションを指定する必要があります。
-Bdynamic
と-dn
の両方をコマンド行に指定することはできません。-dn
を指定すると動的ライブラリのリンクが行われなくなるからです。64 ビットの Solaris 環境では、ほとんどのシステムライブラリが共有動的ライブラリとして単独使用できます。これには、
libm.so
とlibc.so
(libm.a
とlibc.a
は提供されていない) も含まれます。つまり、64 ビットの Solaris 環境で-Bstatic
と-dn
を指定するとリンクエラーが発生する場合があります。このような場合、アプリケーションを動的ライブラリとリンクさせる必要があります。静的ライブラリと動的ライブラリについての詳細は、『Fortran プログラミングガイド』を参照してください。
-C
- SPARC:f77/f95
配列の添字が宣言されている範囲を超えると、セグメンテーションフォルトなどの予期しない結果になる場合があります。
-C
オプションはコンパイル時と実行時に、配列の添字に違反がないかどうかを検査します。
-C
を指定すると、実行可能ファイルのサイズが大きくなる場合があります。
-C
オプションを使用すると、配列の添字違反はエラーとして扱われます。ソースコードのコンパイル中に配列添字の範囲違反が検出されると、コンパイルエラーとして扱われます。配列添字の違反が実行時だけに検出される場合、コンパイラは実行可能プログラムの中に範囲を検査するコードを生成します。この結果、実行時間が長くなることがあります。したがって、プログラムの開発やデバッグを行なっている間にこのオプションを使用して配列添字の検査を有効にしておき、最後に添字検査なしで最終バージョンの実行可能ファイルを再コンパイルすると効果的です。
-c
コンパイルだけを行い、
.o
オブジェクトファイルを生成します。リンクは行いません。
- SPARC: f77/f95
リンクを行わずに、ソースファイルごとに
.o
ファイルを作成します。1 つのソースファイルだけをコンパイルする場合は、-o
オプションを使用して、出力先の.o
ファイルの名前を指定することができます。-cg89
一般的な SPARC アーキテクチャ用にコンパイルを行います。(廃止)
- SPARC: f77/f95
- このオプションは
-xtarget=ss2
と同義で、
-xarch=v7 -xchip=old -xcache=64/32/1
をマクロ化したものです。-cg92
SPARC V8 アーキテクチャ用にコンパイルを行います。(廃止)
- SPARC: f77/f95
- このオプションは
-xtarget=ss1000
と同義で、-xarch=v8 -xchip=super -xcache=16/32/4:1024/32/1
をマクロ化したものです。-copyargs
- SPARC:f77/f95
- 定数である仮引数を副プログラムが変更できるようにします。このオプションは、すでに作成済みのコードのコンパイル時と実行時にエラーが発生しないようにすることだけを目的としています。
-copyargs
を指定しない場合、定数の引数をサブルーチンに渡し、そのサブルーチン内でその定数を変更しようとすると、実行が異常終了します。-copyargs
を指定した場合、定数の引数をサブルーチンに渡し、そのサブルーチン内でその定数を変更しようとしても、実行が必ずしも異常終了するとは限りません。
-copyargs
を指定しないと異常終了してしまうコードは、Fortran 規格に準拠していません。また、このようなコードは予測できない動作をすることがあります。-Dname[=def]
- SPARC: f77/f95
- このオプションは
.F
と .f95
ソースファイルだけに適用します。-D
name=def : シンボル name を値 def を持つものと定義します。-D
name : シンボル name を 1 と定義します。と記述されている場合と同じように、このオプションは
name
を定義します。
=def
の指定がないと、シンボル 名name
は値 1 として定義されます。マクロシンボル name はプリプロセッサfpp
(またはcpp
。-xpp
オプションを参照) に渡されて展開されます。次は事前定義された値です (シンボルの前に二重の下線を付けます):
__sparc, __unix, __sun, __SVR4,
- 製品バージョンは、__
SUNPRO_F77
、__SUNPRO_F90
、__SUNPRO_F95
に 16 進数で事前定義されています。たとえば、Sun WorkShop 6 のリリースの場合、__SUNPRO_F77
は、0x600
となります。- 次の値は、該当するシステム上でそれぞれ事前定義されています。
__SunOS_5_6, __SunOS_5_7, __SunOS_5_8
#ifdef __sparc
- たとえば、SPARC システム上では、__
sparc
値が定義されています。これらの値は、次のようなプリプロセッサ条件で使用することができます。
コンパイラはデフォルトにより、
fpp
(1) プリプロセッサを使用します。
C プリプロセッサcpp
(1) と同様に、fpp
はソースコードマクロを展開して、コードを条件付きでコンパイルすることができます。またcpp
とは異なり、fpp
は Fortran の構文を認識して、Fortran のプリプロセッサとして優先して使用されます。-xpp=cpp
フラグを指定すると、fpp
ではなくcpp
を強制的に使用することができます。-dalign
COMMON ブロックデータの整列を行い、高速なマルチワードのロード/ストアを生成します。
- SPARC: f77/f95
このフラグを使用すると、COMMON ブロック (および EQUIVALENCE クラス) のデータレイアウトが変更されるため、コンパイラは、そのデータに対する高速なマルチワードのロード/ストアを生成できるようになります。
データレイアウトは、
-f
フラグを指定した時と同じようになります。COMMON ブロックと EQUIVALENCE クラスの倍精度および 4 倍精度のデータが、メモリー内で「自然に」境界整列されます。これは、8 バイトの境界整列になります。なお、64 ビット環境で-xarch=v9
または-xarch=v9a
を指定してコンパイルを行うと、4 倍精度のデータは 16 バイトに境界整列されます。COMMON ブロック内のデータのデフォルト整列は、4 バイトの境界整列です。コンパイラも自然整列を前提とするため、高速なマルチワードのロード/ストアを生成してデータを参照できるようになります。
注 --dalign
を使用すると、データの境界整列が標準に合わなくなることがあります。これが原因で、EQUIVALENCE
やCOMMON
の変数に問題が生じることがあります。さらに、-dalign
が必要な場合に移植性のないプログラムになります。
-dalign
は、-xmemalign=8s -aligncommon=8
と等価のマクロです。「-xmemalign[=<a><b>]」 を参照してください。
-dbl
と-dalign
の両方を使用すると、デフォルトの INTEGER 変数が 8 バイトに境界整列され 64 ビットになります。これは、次のオプションと同義になります。
-xtypemap=real:
x,double:
y,integer:64
ある 1 つの副プログラムに
-dalign
を付けてコンパイルした場合は、プログラムのすべての副プログラムに-dalign
を付けてコンパイルしてください。このオプションは-fast
オプションに含まれます。-db
l SPARC:f95
拡張子 .T を付けて、オプションのコンパイラ情報ファイル (CIF) を生成します。このファイルは、Sun WorkShop ソースブラウザ で必要になることがあります。CIF ファイルは、
-Xlist
オプションを使用すると、自動的に生成されます。-db
オプションは、-Xlist
を指定せずに CIF ファイルを生成し直す場合に使用できます。-dbl
REAL、INTEGER、DOUBLE、COMPLEX
のデフォルトサイズを倍長にします。
- SPARC:f77
注 - このオプションと-r8
は将来のリリースで削除される可能性があるので、一般的な-xtypemap
オプションを使用してください。
-dbl
を使用すると、明示的にバイトサイズを指定しないで宣言されている、REAL、INTEGER、DOUBLE、
およびCOMPLEX
の変数に対するデフォルトのバイトサイズが拡張されます。
表 3-7 デフォルトのデータサイズ (バイト)と -dbl オプション INTEGER
4 8 REAL
4 8 DOUBLE
8 16
このオプションは、変数、パラメータ、定数、および関数に適用されます。
また、
LOGICAL
はINTEGER、COMPLEX
は 2 つのREAL、DOUBLE COMPLEX
は 2 つのDOUBLE
として扱われます。
-dbl
と-r8
を比較すると、次のようになります。また、-dbl
および-r8 は、
より汎用的な-xtypemap=
オプションで表すことができます。
-dbl : -xtypemap=real:64,double:128,integer:64
と同義
-r8 : -xtypemap=real:64,double:128,integer:mixed
と同義これらのオプションによってデフォルトの
DOUBLE PRECISION
データがQUAD PRECISION
(128 ビット) になりますが、パフォーマンスは低下する可能性があります。この場合、-dbl
よりも-xtypemap=real:64, double:64, integer:64
を使用した方が適切です。浮動小数点のすべてのデータ型に対し、
-dbl
は-r8
と同様に作用します。-r8
と-dbl
を同時に指定すると、-dbl
だけを指定したときと同じ結果となります。
INTEGER
とLOGICAL
では、-dbl
と-r8
の機能は異なります。通常、1 つの副プログラムを
-dbl
付きでコンパイルする場合は、そのプログラムのすべての副プログラムも-dbl
付きでコンパイルしてください。これは特に、各ファイル間での入出力形式が統一されていないプログラムでは重要になります。またこのオプションを使用すると、関数名にデータのサイズを明示的に指定しない限り、ライブラリ関数の呼び出しも含め、関数のデフォルトのデータサイズが変更される点に注意する必要があります。-dbl_align_all={yes|no}
- SPARC:f77/f95
値には
yes
またはno
のいずれかを指定します。値がyes
の場合、変数はすべて 8 バイトの境界上で整列されます。デフォルトは、-dbl_align_all=no
です。64 ビット環境で -xarch=v9 または -xarch=v9a を使用してコンパイルした場合、4 倍精度のデータは 16 バイトに境界整列されます。
このフラグによって、COMMON ブロック内のデータレイアウトやユーザー定義の構造体が変更されることはありません。
SPARC で、
-dalign
と併用してマルチワードのロード / ストアで追加した効率を有効にします。使用した場合、すべてのルーチンをこのフラグでコンパイルする必要があります。
-depend
- SPARC: f77/f95
- 反復間のデータ依存についてループを解析し、ループを再構築します。このオプションを指定すると、最適化レベルが指定されていない場合または O3 以下の場合は、自動的に最適化レベルが O3 に設定されます。
-depend
は、-fasti
、-autopar
および-parallel
オプションでも行われます。 (詳細は、『Fortran プログラミングガイド』を参照してください)。-dryrun
コンパイラドライバによって実行されるコマンド群を表示しますが、実行はしません。
- SPARC: f77/f95
デバッグ時に便利です。このオプションにより、コンパイル時に実行されるコマンドが表示されます。
-d{y|n}
実行可能形式全体を生成する時のライブラリのリンク形式 (動的または静的) 。
- SPARC: f77/f95
このオプションを指定しない場合は、デフォルトとして
-dy
が使用されます。
-Bx
とは異なり、このオプションは実行可能ファイル全体に適用され、コマンド行で 1 度だけ使用します。
-dy|-dn
はローダーとリンカーのオプションです。これらのオプションを付けてコンパイルとリンクを別々に行う場合は、リンクでも同じオプションを指定する必要があります。64 ビットの Solaris 環境で共有動的ライブラリとしてだけ使用できるシステムライブラリはほとんどありません。これには、
libm.so
とlibc.so
(libm.a
とlibc.a
は提供されていない) も含まれます。つまり、64 ビットの Solaris 環境で-Bstatic
と-dn
を指定するとリンクエラーが発生する場合があります。このような場合、アプリケーションを動的ライブラリとリンクさせる必要があります。-e
- SPARC: f77/f95
132 文字までのソース行を受け付けます。コンパイラは 132 桁目まで各行の右側を空白で埋めます。
-e
オプションを指定してコンパイルする場合で継続行を使用する時は、文字定数が複数行にまたがらないようにしてください。複数行にまたがると、不必要な空白が定数中に挿入されてしまいます。-erroff=taglist
taglist 名で指定した警告メッセージの表示を抑制します。
- SPARC:f77/f95
各タグ名をコンマで区切った並び (
taglist
) で指定した警告メッセージの表示を抑制します。taglist
に
%none
と指定した場合は、警告メッセージは抑制されません。taglist
が
%all
と指定した場合は、すべての警告メッセージが抑制されます (-w
オプションと同義です)。f77 -erroff=WDECL_LOCAL_NOTUSED ink.f
-errtags
オプションを使用して、警告メッセージに関連付けられているタグ名を表示します。-errtags
- SPARC:f77/f95
このオプションを付けると、コンパイラの内部エラータグ名が警告メッセージとともに表示されます。デフォルトでは、タグは表示されません。
demo%f77 -errtags ink.f
ink.f:MAIN:"ink.f", 11 行目: 警告: 局所変数 "i" が使用されていません。 (WDECL_LOCAL_NOTUSED) <- 警告メッセージのタグ名-explicitpar
- SPARC: f77/f95
コンパイラは、並列で実行すると、正確な結果が生成されないようなデータの依存が
DO
ループ中にある場合でも、並列コードを生成します。明示的な並列化を行う場合は、ループを正しく分析してデータ依存の問題がないことを確認してから、並列化の指令を使用してください。このオプションを使用すると、Sun、Cray、OpenMP といった明示的並列化指令が有効になります。並列化指令の直前にある DO ループには、スレッド化されたコードが生成されます。並列化はマルチプロセッサシステムの場合のみ適しています。このオプションは、すでに
libthread
ライブラリへの呼び出しによって、独自にマルチスレッド処理を行なったプログラムをコンパイルする場合には使用できません。並列化されたプログラムをマルチスレッド環境で実行するには、実行前に
PARALLEL
(またはOMP_NUM_THREADS
) 環境変数を設定しておく必要があります。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。一般的に、ターゲットプラットフォーム上のPARALLEL
変数またはOMP_NUM_THREADS
変数には、利用可能なプロセッサ数を設定します。
-explicitpar
を使用してコンパイルとリンクを 1 度に行う場合、マルチスレッド処理ライブラリとスレッド対応の Fortran 実行時ライブラリが自動的にリンクされます。-explicitpar
を使用してコンパイルとリンクを分けて行う場合は、リンクにも-explicitpar
を指定する必要があります。
explicitpar
などの並列化オプションを使用する場合にパフォーマンスを改善するには、-stackvar
オプションも指定してください。有効な並列化指令の形式は
-mp
オプションを使用して選択します。選択できるものは、Sun、Cray または OpenMP です。最適化レベルが
-03
以上に設定されていない場合は、自動的に-03
に設定されます。詳細は、『Fortran プログラミングガイド』の第 10 章「並列化」を参照してください。
Fortran の並列化機能には、Sun WorkShop HPCのライセンスが必要です。
-ext_names=e
- SPARC:f77/f95
e には
plain
またはunderscore
のどちらかを指定します。デフォルトはunderscore
です。
-ext_names=underscore
: 下線を付けます。外部名とは、サブルーチン、関数、ブロックデータ副プログラム、名前付き共通ブロックの名前のことです。このオプションは、ルーチンの入口の名前と、その呼び出しに使用する名前の両方に影響を与えます。このオプションによって、Fortran 77 のルーチンから別の言語のルーチンを呼び出したり、呼び出しを受けたりすることができます。
-F
ソースファイルプリプロセッサを起動します。ただしコンパイルは行いません。
- SPARC: f77/f95
.F
ファイル (f9
5 の場合は.F95
ファイル) にfpp
プロセッサを適用し、同じファイル名で拡張子を.f
(または.f95
) に変えたファイルに結果を書き込みます。ただし、コンパイルは行いません。f77 -F source.F
を実行すると、ソースファイルが
source.f
に書き込まれます。
fpp
は Fortran のデフォルトのプリプロセッサです。C のプリプロセッサ (cpp)
はを指定すると、選択されます。
-xpp=cpp-f
- SPARC: f77/f95
COMMON ブロックの倍精度および 4 倍精度のデータを境界整列します。
このフラグを使用すると、COMMON ブロック (および EQUIVALENCE クラス) のデータレイアウトが変更されます。COMMON ブロックと EQUIVALENCE クラスの倍精度および 4 倍精度のデータが、メモリー内で「自然に」境界整列されます。これは、8 バイトの境界整列になります。なお、64 ビット環境で
-xarch=v9
または-xarch=v9a
を指定してコンパイルを行うと、4 倍精度のデータは 16 バイトに境界整列されます。COMMON ブロック内のデータのデフォルト整列は、4 バイトの境界整列です。
注 --f
フラグを使用すると、データの整列が標準外になることもあるため、EQUIVALENCE
やCOMMON
内の変数に問題が生じる可能性があります。また、-f
フラグを必要とするプログラムは、移植性が失われる可能性もあります。
-f
オプションと共に-dbl
オプションを指定すると、すべての 64 ビットの整数データが 8 バイトに境界整列されます。
-f
オプションを指定してプログラムのいずれかの部分をコンパイルする場合は、そのプログラムに含まれる副プログラムもすべて-f
オプションを指定してコンパイルする必要があります。このオプションを単独で使用すると、コンパイラで倍精度および 4 倍精度のデータに対して高速のマルチワードのフェッチ/ストア命令を生成することはできません。
-dalign
がこれを実行し、-f
も呼び出します。-f
よりも-dalign
を使用することをお勧めします。詳細は、「-dalign」
を参照してださい。これは、-dalign
が-f
も同様に-fast
オプションの一部であるからです。-fast
最適なオプションを選択して、実行可能ファイルの実行速度を上げます。
- SPARC: f77/f95
過度にコンパイルに時間をかけずに、実行速度が速くなるように最適化を行うオプションを選択します。これにより、多くのアプリケーションのパフォーマンスが最大に近くなります。
コンパイルとリンクを別々に行う場合は、
n-fast
でコンパイルをしたら、-fast
でリンクするようにしてください。-da
lign
n -depend
n -fns
n -fsimple=2
n -ftrap=%none (f77) または -ftrap=common (f95)
n -libmil
n -f (f95 のみ)
n -xtarget=native
n -O5
n -xlibmopt
n -pad=common
n -xvector=yes
注 - このオプションは、他のオプションをいくつか組み合わせたもので、その組み合わせは、各リリースやコンパイラの種類によって異なります。-fast
で選択されたオプションは、プラットフォームによっては動作しないことがあります。
-fast
が、選択するオプションの詳細は以下のとおりです。
-xtarget=native
オプション
- コンパイルを行うのとは異なるマシンでプログラムを実行する場合は、
-fast
の後にコード生成オプションを付けます。たとえば、次のとおりです。f77 -fast xtarget=ultra...
-O5
最適化レベルオプション (旧コンパイラリリースでは、-fast
に-O3
または-O4
を設定していました)。-depend
オプション (SPARC のみ)- システムが提供するインライン展開テンプレート用の
-libmil
オプション
- 例外処理を使用する C モジュールでは、
-fast
の後に-nolibmil
を付けます。-libmil
を使うとerrno
の設定や、matherr
(3m) の呼び出しによって、例外を検出することができなくなります。
- 積極的に浮動小数点を最適化しようとする
-fsimple=2
オプション
- 厳密に IEEE 754 標準に準拠する必要がある場合は
-fsimple
=2 は適していません。81ページを参照してください (旧リリースでは、-fast
は-fsimple=1
を設定していました)。
- 倍長ロードとストアを生成する
-dalign
オプション (SPARC のみ)
- このオプションを使用すると、標準外の形式で Fortran データの境界整列が行われる可能性があります。
-xlibmopt
オプション (SPARC のみ)
-pad=common
は、キャッシュの利用率を改善するために、適宜共通ブロック内の変数の間にパディングを挿入します (旧リリースの-fast
では-pad=common
を設定していませんでした)。-xvector=yes
は、DO ループ内のある特定の数学ライブラリ呼び出しを、同等のベクトル化されたライブラリルーチンの単一呼び出しに変換します (旧リリースの-fast
では、-xvector=yes
を設定していませんでした)。-fns -ftrap=%none
は、Fortran 77 の全トラッピングをオフにします。共通の浮動小数点例外のトラッピングは、Fortran 95 のデフォルトです。f95
では、-f
オプションが追加されました。次に示すように、
-fast
オプションの後に別のオプションを付けて、このリストに追加したり削除したりできます。f95 -fast -fsimple=1 -xnolibmopt ...
この例では、
-fast
で選択された-fsimple=2
の指定を変更し、-xlibmopt
を無効にしています。-fixed
固定書式の Fortran 95 ソース入力ファイルを指定します。
- SPARC:f95
- コマンド行に指定するソースファイルはすべて、ファイル名の拡張子に関係なく
f77
の固定書式として解釈されます。通常、f95
は.f
のファイルだけを固定書式として解釈し、.f95
ファイルを自由書式として解釈します。-flags
- SPARC: f77/f95
-fnonstd
- SPARC: f77/f95
このオプションは、以下のオプションフラグの組み合わせと同義です。
- SPARC:
-fns -ftrap=common
-fnonstd
を指定することは、Fortran 主プログラムの先頭で次の 2 つの呼び出しを行うのとほぼ同じです。
i=ieee_handler("set", "common", SIGFPE_ABORT)call nonstandard_arithmetic()
nonstandard_arithmetic()
ルーチンは、旧式のabrupt_underflow()
ルーチンの代わりです。
-fnonstd
オプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。このオプションを使用すると、浮動小数点ハードウェアが初期化されて以下が実行されます。段階的アンダーフローおよび非正規数についての詳細は、
-fns
を参照してください。
-fnonstd
オプションは、浮動小数点オーバーフロー、ゼロによる除算、無効な演算などの例外処理のためのハードウェアトラップを可能にします。これらのハードウェアトラップは SIGFPE シグナルに変換され、プログラムに SIGFPE ハンドラがなければメモリーダンプして終了します。詳細は、
ieee_handler
(3m) とieee_functions
(3m) のマニュアルページ、『数値計算ガイド』、『Fortran プログラミングガイド』を参照してください。-fns[={no|yes}]
- SPARC: f77/f95
- デフォルトは SPARC の標準の浮動小数点モードです (
-fns=no
) (『Fortran プログラミングガイド』の第 6 章「浮動小数点演算」を参照してください)。
-fast
などの-fns
フラグが含まれるマクロフラグの後に=yes
または=no
オプションを使用して、-fns
フラグを切り替えることができます。-fns
は、-fns=yes
と同じです。このオプションフラグは、プログラムの実行開始時に、規格外の浮動小数点モードを有効にします。SPARC システムのなかには、規格外の浮動小数点モードを指定すると 「段階的アンダーフロー」 を無効にするシステムもあります。それが原因で、非正規数ではなくゼロにフラッシュされます。また、非正規オペランドがゼロに置き換えられます。このような SPARC システムでは、ハードウェアの段階的アンダーフローや非正規数がサポートされておらず、このオプションを使用するとプログラムのパフォーマンスを著しく改善することができます。
x が完全なアンダーフローの原因にならないとき、非正規数 x とは次の範囲にある数です。
表 3-8 非正規数 REAL と DOUBLE REAL
0.0 < |x| < 1.17549435e-38 DOUBLE PRECISION
0.0 < |x| < 2.22507385072014e-308
非正規数に関する詳細は、『数値計算ガイド』を参照してください。また、このオプションおよび関連するオプションについては『Fortran プログラミングガイド』の第 6 章「浮動小数点演算」を参照してください。(演算によっては、非正規数を表すのに 「指数が最小の非正規化数」 という用語を使用している場合があります。)
-fns
オプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。-fpover[={yes|no}]
- SPARC: f77/f95
-fpover=yes
を指定すると、I/O ライブラリは書式付きの入力で実行時浮動小数点オーバーフローを検出し、エラー条件 (1031) を返します。デフォルトでは、このようなオーバーフローの検出は行いません (-fpover=no
)。-fpover
は-fpover=yes
と同義です。-fpp
l SPARC: f95
ファイルの拡張子に関係なく、f95 コマンド行上にリストされた全入力ソースファイルを fpp プリプロセッサに渡します (通常、fpp によって自動的に先行処理されるファイルは、拡張子が .F、.F90、または F95 のファイルだけです)。
-free
- SPARC:f95
コマンド行で指定したソースファイルはすべて、ファイル名の拡張子を問わず、
f95
自由書式と解釈されます。通常、f95
は.f
ファイルを固定書式、また.f95
ファイルを自由書式とみなします。-fround=r
- SPARC: f77/f95
r には
nearest
、tozero
、negative
、positive
のいずれかを指定します。
-fround
オプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。このオプションは、IEEE 754 の丸めモードを以下のように設定します。
r が
tozero
、negative
、またはpositive
の場合、プログラムの実行開始時に、オプションは丸め方向を round-to-zero、round-to-negative-infinity、または
round-to-positive-infinity にそれぞれ設定します。-fround
を指定しない場合は、デフォルトで-fround=nearest
が使用され、丸め方向は round-to-nearest になります。このオプションの意味は、ieee_flags
関数の場合と同じです (『Fortran プログラミングガイド』の第6章「浮動小数点演算」を参照してください)。-fsimple[=n]
- SPARC: f77/f95
オプティマイザが浮動小数点演算に関する前提を単純化できるようにします (『Fortran プログラミングガイド』の第 6 章「浮動小数点演算」を参照してください)。
一貫した結果を得るには、プログラム中のすべての副プログラムを同じ
-fsimple
オプションを付けてコンパイルする必要があります。n には、0、1、2 のいずれかを指定します。デフォルトは以下のとおりです。
-fsimple=0
前提を単純化しません。IEEE 754 に厳密に準拠してください。
若干の単純化を認めます。生成されるコードは IEEE 754 に厳密には準拠していませんが、大半のプログラムの数値結果は変わりありません。
-fsimple=1
を指定すると、オプティマイザは以下のことを前提とします。
- IEEE 754 のデフォルトの丸め/トラップモードは、プロセス初期化後も変化しない。
- 浮動小数点例外を除いて、外に現れない結果 (中間結果) を生成する演算は削除してもよい。
- 演算対象として無限または非数を伴う演算において、非数を結果に反映させる必要はない。たとえば、
x*0
は0
で置き換えてよい。- 演算がゼロの符号に応じて変化することはない。
-fsimple=1
を指定した場合、丸めや例外をまったく考慮しないで最適化を行うことはできません。特に、浮動小数点演算を、実行時に一定に保たれる丸めモードにおいて異なる結果を生成する浮動小数点演算と置き換えることはできません。-fsimple=2
より広範囲の浮動小数点の最適化行います。丸めが変わると、多くのプログラムにおいて、生成される数値結果が異なることがあります。
たとえば、
z=1/y
が 1 回は計算され一時ファイルに保存されている場合は、-fsimple=2
を指定するとオプティマイザはx/y
の反復演算をx*y
で置き換えることができ、除算は削除されます。ただし、
-fsimple=2
を指定していても、-fsimple=2
を指定しなければ発生しない浮動小数点例外をプログラムに発生させるような最適化はできません。-ftrap=t
- SPARC: f77/f95
t には、以下のうち 1 つまたは複数の項目をコンマで区切って指定します。
%all, %none, %common, [no%]invalid, [no%]overflow,
[no%]underflow,[no%]division, [no%]inexact
-ftrap=common
は、-ftrap=invalid,overflow,underflow,division.のマクロです。
f77
のデフォルトは-ftrap=%none
、f95
のデフォルトは-ftrap=common
です。このオプションは、プログラムの初期化時に確定される IEEE 754 のトラップモードを設定します。処理は左から右に行われます。共通の例外とは、演算不可能、ゼロによる除算、およびオーバーフローと定義されています。たとえば、
-ftrap=overflow
のように指定します。例 :
-ftrap=%all,no%inexact
は、inexact
を除くすべての例外に対して、トラップを設定するという意味です。以下の点を除いて
、-ftrap=
t の意味はieee_flags()
と同じです。
%all
は、全トラップモードをオンにし、予期している例外にも予期していない例外にもトラップを発生させます。この代わりにcommon
を使用してください。%none
(f77
のデフォルト) はすべてのトラップモードをオフにします。- 先頭に付いている
no%
はそのトラップモードをオフにします。このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。
詳細は、『Fortran プログラミングガイド』の第 6 章「浮動小数点演算」を参照してください。
-G
実行可能ファイルの代わりに、動的共有ライブラリを構築します。
- SPARC: f77/f95
- このオプションは、動的共有ライブラリを構築するようリンカーに指示します。
-G
を指定しないとリンカーは実行可能ファイルを構築します。出力ファイル名を指定するには、-G
オプションと共に-o
オプションを使用します。詳細は、『Fortran プログラミングガイド』の第 4 章「ライブラリ」を参照してください。-g
- SPARC: f77/f95
dbx
(1) と Sun WorkShop のデバッグユーティリティを使用してデバッグできるように、シンボルテーブル情報を生成します。
-g
の指定がなくてもある程度のデバッグはできますが、dbx
とデバッグのすべての機能を使用するには、-g
を付けてコンパイルする必要があります。
-g
とともに指定したオプションの機能が制限される場合があります。詳細に関しては、『dbx コマンドによるデバッグ』を参照してください。
SPARC の場合:
コマンド行上に.o
オブジェクトファイルを指定すると、-g
オプションによって、-xildon
がデフォルトのインクリメンタルリンカーオプションになります 。つまり、-g
を指定すると、コマンド行で-G
オプションまたはソースファイル名を指定しないかぎり、ld
ではなくild
が自動的に起動されます。-hname
- SPARC: f77/f95
このオプションはリンカーに渡されます。詳細は、Solaris の『リンカーとライブラリ』および『Fortran プログラミングガイド』の第 4 章「ライブラリ」を参照してください。
-h
name オプションにより、作成される共有動的ライブラリに、ライブラリの内部名として name という名前が記録されます。-h
と name の間には空白文字を入れないでください (ライブラリ名がelp
の場合を除く。この場合、空白が必要となる)。通常、name には-o
の後に指定する名前と同じものを指定してください。-G
を指定せずにこのオプションを使用しても意味がありません。
-h
name オプションを省略すると、ライブラリファイルに内部名は記録されません。ライブラリに内部名がある場合、このライブラリを引用する実行可能プログラムを実行するときは、実行時リンカーはあらゆるパスを検索して、同じ内部名を持つライブラリを探します。内部名を指定しておくと、実行時リンクの際に行うライブラリの検索が、より柔軟になります。このオプションは、共有ライブラリのバージョンを指定する場合にも使用できます。
共有ライブラリの内部名がない場合、リンカーは代わりに共有ライブラリファイルの特定のパスを使用します。
-help
- SPARC: f77/f95
オプションの要約リストを表示します。「-xhelp=h」も参照してください。
-Idir
- SPARC: f77/f95
インクルードファイルの検索パスの先頭に、ディレクトリ
dir
を挿入します。-I
と dir の間には、空白文字を入れないでください。無効なディレクトリを指定した場合には、警告メッセージが表示されずに無視されます。インクルードファイルの検索パスとは、インクルードファイルを探すために使用するディレクトリのリストです。インクルードファイルとは、プリプロセッサ指令
#include
、または Fortran のINCLUDE
文に指定するファイルです。
例
:/usr/app/include
でインクルードファイルを検索するには
demo%f77 -I/usr/app/include growth.F
コマンド行で複数回
-I
dir オプションを指定することができます。各オプションを指定するごとに、検索パスリストの先頭に最初に検索するパスとして追加されます。
INCLUDE
文または#include
指令の相対パス名は次の順序で検索されます。
-I
dir のデフォルトのリストは、コンパイラのインストールディレクトリに依存します。標準インストールの場合、コンパイラのソフトウェアパッケージは、/opt
ディレクトリに置かれます。インクルードファイルのデフォルトの検索パスは次のようになります。<install_dir>/SUNWspro/<release>/include/f77 /usr/include
<install_dir> は、インストールされているパッケージへのパス (通常インストールでは、
<install_dir>/SUNWspro/<release>/include/f90 /usr/include
/opt
) であり、<release> は、リリースごとに異なるパスです。
-i2
- SPARC: f77
整定数、論理定数、およびサイズが明示的に宣言されていない変数のデフォルトサイズを 2 バイトに設定します (ただし
INTEGER*n
Y
とした場合は、-i2
オプションを指定してもY
は n バイトに宣言されます)。このオプションによってパフォーマンスが低下する場合があります。したがって、-i2
オプションを使用するよりも具体的な変数INTEGER*2
を使用することをお勧めします。-i4
- SPARC:f77
整定数、論理定数、およびサイズが明示的に宣言されていない変数のデフォルトサイズを 4 バイトに設定します (ただし
INTEGER*n
Y
とした場合は、-i4
オプションを指定してもY
は n バイトに宣言されます)。
INTEGER
とLOGICAL
のデフォルトサイズは4
バイトですが、このオプションを使用することにより、デフォルトを8
バイトに設定。-dbl
や-r8
オプションによる設定を変更することができます。
demo%f77 -dbl -i4 *.f
f77
: 警告: 廃止予定の-r8
、-dbl
には-xtypemap
を使います;f77
マニュ アルページを参照コマンド行の警告:-i4
により-dbl
の整数部が上書きされます。-inline=[%auto][[,][no%]f1,...[no%]fn]
- SPARC: f77/f95
オプティマイザが、f1,...,fn リストで指定されたユーザー作成ルーチンをインライン化します。ルーチン名に
no%
という接頭辞をつけると、そのルーチンのインライン化が無効になります。インライン化とは最適化の手法の 1 つで、
リストには、関数とサブルーチンをコンマで区切って指定します。関数のインライン化を禁止するには、関数名にCALL
や関数呼び出しなどの副プログラムの引用を、実際の副プログラムコードに効果的に置き換えます。インライン機能を有効にすると、オプティマイザが効率的なコードを生成できる機会が増えます。no%
という接頭辞を付けます。
-inline
と-O4
を同時に指定すると、コンパイラが通常実行する自動インライン化が無効になります。ただし、これは、%auto
に-inline
を指定していない場合に限ります。
例:ルーチン
xbar
、zbar
、vpoint
をインライン化します。
demo$f95 -O3 -inline=xbar,zbar,vpoint *.f
このオプションを使用するための条件を示します。ただし、条件が満たされていなくても、警告メッセージは出力されません。
- SPARC: 最適化レベルが
-O3
以上に設定されている。- ルーチンのソースがコンパイルされているファイル中にある。ただし、
-xcrossfile
が指定されている場合を除く。- コンパイラは、実際にインライン化した結果が安全で効果があるかどうかを判断する。
なお、
-O4
を指定すると、コンパイラは通常、ユーザー作成のサブルーチンや関数をすべてインライン化しようとします。-O4
に
-inline
を追加すると、オプティマイザはリスト中にあるルーチンに限ってインライン化を行うため、実際にはパフォーマンスが低下します。この場合、%auto
サブオプションを使用して、-O4
および-O5
で自動インライン化を有効にします。
demo% f95 -O4 -inline=%auto,no%zpoint *.f上記の例では、
-O4
の自動インライン化を有効にしながら、コンパイラが試みるzpoint()
ルーチンのインライン化を無効にしています。-Kpic
- SPARC: f77/f95
-KPIC
- SPARC: f77/f95
-Ldir
ライブラリ検索ディレクトリのリストに dir を追加します。
- SPARC: f77/f95
オブジェクトライブラリの検索ディレクトリのリストの先頭にディレクトリ dir を追加します。
-L
と dir の間の空白文字はあってもなくてもかまいません。このオプションはリンカーに渡されます。「-lx」を参照してください。
ld
(1) は、実行可能ファイルを生成しながら、dir
でアーカイブライブラリ (.a
ファイル) と共有ライブラリ (.so
ファイル)を探します。ld
はまず dir を検索してから、デフォルトのディレクトリを探します (ライブラリの検索順序に関する詳細は、『Fortran プログラミングガイド』の第 4 章「ライブラリ」を参照してください)。LD_LIBRARY_PATH
と -L
dir の相対的な序列についてはld
(1) を参照してください。例:
-L
dir を使用して、ライブラリを検索するディレクトリを指定します。
demo$ f77 -Ldir1 -Ldir2 any.f
注 - -L
dir を使用して/usr/lib
または/usr/ccs/lib
を指定すると、バンドルされていないlibm
はリンクされなくなります。これらのディレクトリはデフォルトで検索されます。
-lx
リンカー検索ライブラリのリストに、ライブラリ
libx.a
を追加します。
- SPARC: f77/f95
-l
x をリンカーに渡して、ld
が未解決の参照を検索するためのライブラリを追加指定します。オブジェクトライブラリlib
x をリンクします。共有ライブラリlib
x.so
が使用できる場合 (-Bstatic
または
-dn
が指定されていない場合)、ld
はこれを使用します。そうでなければ、ld
は静的ライブラリlib
x.a
を使用します。共有ライブラリを使用する場合は、名前はa.out
に組み込まれます。-l
と x の間には空白文字を入れないでください。
demo$f77 any.f -lV77
複数のライブラリとリンクするには、
-l
x を再度使用してください。例 : ライブラリ
liby
とlibz
をリンクします。
demo$f77 any.f -ly -lz
ライブラリの検索パス、および検索順序については、『Fortran プログラミングガイド』の第 4 章「ライブラリ」を参照してください。
-libmil
最適化として
libm
ライブラリルーチンをインライン化します。
- SPARC: f77/f95
libm
ライブラリルーチンの一部をインライン化します。このオプションによって、現在使用している浮動小数点オプションおよびプラットフォームにおいて最も速い実行可能ファイルを生成するインラインテンプレートが選択されます。詳細は、
libm_single
(3F) およびlibm_double
(3F) のマニュアルページを参照してください。-loopinfo
- SPARC: f77/f95
-parallel、-autopar、
または-explicitpar
の各オプションによって並列化されたループとされていないループを表示します。(オプション-loopinfo
は、いずれかの並列化オプションと一緒に指定しなければなりません。)Fortran コンパイラの並列化機能には、Sun WorkShop HPC のライセンスが必要です。
-loopinfo
により、標準エラーに次のメッセージリストが出力されます。
f77
のコンパイルとerror
(1) ユーティリティを使用すると、このメッセージリストをソースファイルにマージして、各ループに並列化の有無を示すタグを付けたソースを生成することができます。
demo$
f95
-autopar -loopinfo any.f 2>&1 | error オプション
error
により、入力ソースファイルが書き換えられる点に注意してください。error
について詳細は、error
(1) マニュアルページ、または『Fortran プログラミングガイド』のデバッグに関する説明を参照してください。-Mdir
Fortran 95 モジュールの検索に使用するディレクトリに dir を追加します。
- SPARC:f95
- モジュールファイルの検索に使用するディレクトリのリストに dir を追加します。
-M
と dir の間に空白文字は入れません。
-M
で指定したディレクトリは、現在のディレクトリの後に検索されます。モジュールのあるソースファイルをコンパイルすると、検出されたMODULE
ごとに.mod
モジュールファイルが生成されます。Fortran 95 モジュールについての詳細は、「モジュールファイル」を参照してください。-misalign
- SPARC: f77
-misalign
オプションは、通常であればエラーになるようなメモリー境界整列に失敗したデータを受け付けます。COMMON 文および EQUIVALENCE 文の使用法によっては、データの境界整列が失敗する場合もあります (コンパイラの診断時)。-misalign
オプションを使用すれば、コンパイラは作為的な境界整列の失敗を受け入れ、COMMON ブロックに本来のデータの境界整列を保証するためのパディングを挿入しません。しかし、これによってパフォーマンスはかなり低下します。このオプションを使用する代わりに、データが正しく整列されるようにコードを書き直すことをお勧めします。
-misalign
を使用する場合は、プログラム内のすべてのルーチンをこのオプションでコンパイルしなければなりません。コンパイルとリンクを別々に行う場合に、-misalign
オプションでコンパイルするときは、リンクでもこのオプションを指定する必要があります。-misalign
は、-xmemalign=1i -aligncommon=1
と等価なマクロです。
「-xmemalign[=<a><b>]」 を参照してください。
-mp={%none|sun|cray|openmp}
- SPARC: f77/f95
同じコンパイラ単位内では、OpenMP 指令は Sun または Cray のいずれかの指令と併用することができます。しかし、Sun 指令と Cray 指令は、同じコンパイル単位内で同時に使用することはできません。たとえば、
-mp=sun, openmp
および-mp=cray, openmp
は、指定できますが、-mp=sun, creay
は指定できません。並列化を有効にするには、
-explicitpar
(または-parallel
) を指定する必要があります。正確さを期すには、-stackvar
も指定します。
-explicitpar -stackvar -mp=openmp
「-openmp」 も参照してください。
Fortran の並列化機能には、Sun WorkShop HPC のライセンスが必要です。
これらの
f77/f95
指令については、このマニュアルの付録 E にまとめられています。詳細は、『Fortran プログラミングガイド』の並列化に関する説明を参照してください。
-mt
マルチスレッド環境で使用しても安全なライブラリが必要になります。
- SPARC: f77/f95
スレッド環境 で使用しても安全なライブラリにリンクする必要があります。ユーザーが独自に低レベルのスレッド管理を行う場合 (たとえば、
libthread
ライブラリを呼び出す場合) は、-mt
を使用してコンパイルすると、衝突を防ぐことができます。libthread
ライブラリを呼び出す C のマルチスレッド C コードとFortran を併用する場合は、-mt
を使用します。Solarisの『マルチスレッドのプログラミング』も参照してください。
-autopar
、-explicitpar
または-parallel
のオプションを使用すると、自動的に-mt
の機能が有効になります。
-mt
を使用するときは、入出力を伴う関数の副プログラム自体を入出力文の一部として引用することはできません。このような入出力は再帰入出力と呼ばれ、デッドロックの原因になることがあります。- 一般的な注意として、ユーザー独自でマルチスレッド化したコードを
-autopar、
または
-explicitpar、-parallel
オプションを付けてコンパイルしないでください。コンパイラが生成するスレッドライブラリへの呼び出しとプログラム自体の呼び出しが衝突して、予測できない結果になることがあります。- シングルプロセッサシステムの場合に、
-mt
オプションを使用すると、パフォーマンスが低下することがあります。-native
- SPARC: f77/f95
このオプションは、
-xtarget=native
と同じです。-fast
オプションでは、-xtarget=native
と設定します。-noautopar
- SPARC: f77/f95
- コマンド行で先に指定された
-autopar
で起動されている自動並列化を無効にします。-nodepend
- SPARC: f77/f95
- コマンド行で先に指定された
-depend
を取り消します。-noexplicitpar
- SPARC: f77/f95
- コマンド行で先に指定された
-explicitpar
で起動されている明示的な並列化を無効にします。-nolib
- SPARC: f77/f95
システムライブラリや言語ライブラリと自動的にリンクを行いません。つまりデフォルトの
-l
x オプションをld
に渡さないということです。通常は、ユーザーがコマンド行で指定しなくても、システムライブラリは実行可能ファイルに自動的にリンクされます。
-nolib
オプションを使用すると、必要なライブラリの中の 1 つを静的にリンクするといった作業が容易になります。ただし、システムライブラリや言語ライブラリは、最終的な実行に必要なので、ユーザーが手作業でそれらのライブラリをリンクしてください。たとえば、
libF77
と動的にリンクされているプログラムが、libF77
をもたないリモートシステム上でエラーになる例を考えてみます。-nolib
オプションを使用することによって、ライブラリをプログラムに静的にリンクすることができます。
f77
では、libF77
を静的にリンクし、libc
を動的にリンクします。
demo$f77 -nolib any.f -Bstatic -lF77 -Bdynamic -lm -lc
f95
では、libm
を静的にリンクし、libc
を動的にリンクします。
demo%f95 -nolib any.f95 -Bstatic -lm -Bdynamic -lc
-l
x オプションの指定の順番には意味があります。例に示す順序で指定してください。-nolibmil
- SPARC: f77/f95
このオプションは、次の例のように、
-fast
オプションの後に使用して、libm
数学ルーチンのインライン化を無効にします。
demo$f77 -fast -nolibmil ...
-noqueue
- SPARC: f77/f95
このオプションを使用している場合には、コンパイラを実行するためのソフトウェアライセンスがないと、ユーザー要求をキューイングせず、コンパイルを行わずに返します。
make
ファイルでの判定用に、ゼロでない環境ステータスが返されます。-noreduction
- SPARC: f77/f95
-reduction
は、別の並列化オプションとともに使用します。このオプションにより、-reduction
オプションが取り消されます。-norunpath
実行可能ファイル中に、実行時共有ライブラリのパスを設定しません。
- SPARC: f77/f95
コンパイラは通常、実行時リンカーが共有ライブラリを検索する位置を示すパスを実行可能ファイル中に設定します。このパスはインストールの形式によって異なります。
-norunpath
オプションは、実行可能ファイルにパスが組み込まれないようにします。ライブラリを標準でない場所にインストールし、別のサイトで実行可能ファイルを実行したときに、ローダーがそのパスを検索しないようにする場合に、このオプションを使用します。
-R
path と比較してみてください。詳細は、『Fortran プログラミングガイド』の第 4 章「ライブラリ」を参照してください。
-O[n]
- SPARC: f77/f95
n には
1、2、3、4、5
のいずれかを指定します。-O
と n の間には空白文字を入れないでください。
-O[
n]
の指定がない場合、基本的な最適化のレベルは、局所の共通部分式の除去、および不要コードの分析だけに限られます。プログラムのパフォーマンスは、最適化なしの場合よりも、特定の最適化レベルを指定してコンパイルした方が、大幅に改善されることがあります。通常のプログラムには、-O
オプション (レベル-O3
) または-fast
オプション (レベル-O5
) を使用することをお勧めします。
-O
n の各レベルには、それよりも低いレベルでの最適化が含まれています。一般に、プログラムのコンパイル時の最適化レベルが高いと、実行時のパフォーマンスも向上します。ただし、最適化レベルを高くすると、コンパイル時間が長くなり、実行可能ファイルのサイズが大きくなります。
-g
オプションは-O
n を抑制しませんが、-O
n は-g
のいくつかの機能を制限します。dbx
に関するマニュアルを参照してください。
-O3
と
-O4
のオプションでは、dbx
から変数を表示できないという点で、デバッグ機能が制限されますが、dbx
where
コマンドを使用してシンボルを追跡することができます。SPARC 上でオプティマイザがメモリーを使い切ると、レベルを下げて最適化をやり直します。以降のルーチンでは元のレベルに戻ってコンパイルを行います。
最適化の詳細については、『Fortran プログラミングガイド』の第 8 章「パフォーマンスプロファイリング」と第 9 章「パフォーマンスと最適化」を参照してください。
-O
-O1
高いレベルの最適化では、コンパイル時間が長すぎる場合、またはスワップ領域が不足する場合に、
-O1
を使用します。-O2
通常、生成されるコードのサイズが最も小さくなります (「-xspace」を参照してください)。
-O3
を使用すると、コンパイル時間が長すぎる場合、スワップ領域が不足する場合、または生成される実行可能ファイルのサイズが大きすぎる場合には-O2
を使用します。これ以外の場合は、-O3
を使用してください。-O3
通常、
-O2、-O1
を使用した場合よりも生成される実行可能ファイルのサイズが大きくなります。-O4
インライン化が行われるため、生成される実行可能ファイルのサイズが通常大きくなります。
-g
オプションを指定すると、-O4
による自動的なインライン化は行われません。-xcrossfile
を使用すると、-O4
によるインライン化の範囲が拡張されます。-O5
プログラム中で、全体の計算時間のうちの最大部分を消費する部分に限って適用してください。
-O5
の最適化アルゴリズムは、ソースプログラム中でこのレベルを適用する部分が大きすぎると、コンパイルに時間がかかり、パフォーマンスが低下します。プロファイルのフィードバックと併せて使用すると、最適化がパフォーマンスの向上につながる可能性が高まります。「-xprofile=p」を参照してください。
-o name
- SPARC: f77/f95
-o
と nm の間には空白文字を 1 つ入れてください。このオプションを省略すると、デフォルトとして実行可能ファイルがa.out
に書き込まれます。また-c
とともに使用すると、-o
はターゲットの.o
オブジェクトファイルの名前を指定します。また-G
とともに使用すると、ターゲットの.so
ライブラリファイルの名前を指定します。-oldldo
- SPARC:f77/f95
並びによる出力で各記録の始まりにある空白を省きます。現在のデフォルトは
f77
リリース 1.4 以前のバージョンとは異なり、Fortran 規格に合わせるため、空白を付けるようになっています。また、OPEN
の
FORM='PRINT'
オプションにも注意してください。-oldldo
をプログラムの一部だけに適用し、残りの部分にはこのオプションを指定せずにコンパイルすることもできます。-onetrip
- SPARC: f77/f95
DO
ループが、少なくとも 1 回は実行されるようにコンパイルします。標準 Fortran のDO
ループは、一部の古典的な Fortran の実装とは異なり、上限が下限より小さい場合には、1 回も実行されません。-openmp
Fortran 95 の OpenMP 指令で明示的な並列化を有効にします。
l SPARC: f77/f95
このマクロは、次に示すオプションを組み合わせたマクロです。
-mp=openmp -explicitpar -stackvar -D_OPENMP
OpenMP 指令については、付録 E にまとめられています。
並列化されたプログラムをマルチスレッド環境で実行するには、実行前にPARALLEL
(またはOMP_NUM_THREADS
) 環境変数を設定しておく必要があります。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。一般的に、ターゲットプラットフォーム上のPARALLEL
変数またはOMP_NUM_THREADS
変数には、利用可能なプロセッサ数を設定します。
Fortran の並列化機能には、Sun WorkShop HPC のライセンスが必要です。
-p
prof
プロファイラを使用するプロファイル用にコンパイルします。
- SPARC: f77/f95
プロファイル用のオブジェクトファイルを作成します。prof
(1) を参照してください。コンパイルとリンクを分けて行う場合、-p
オプションを付けてコンパイルしたときはリンクでも必ず-p
オプションを付けてください。-p
とprof
は主に旧式のシステムとの互換性を保つため使用します。gprof
と
-pg
の方を使用することをお勧めします。詳細は、『Fortran プログラミングガイド』のパフォーマンスプロファイルに関する説明を参照してください。-pad[=p]
- SPARC:f77/f95
配列や文字変数が、静的な局所変数でまだ初期化されていない場合、または共通のブロックにある場合、間にパディングを挿入します。またキャッシュを効率的に利用できるように、データにパディングを追加します。いずれの場合も、配列または文字変数を等価にすることはできません。
-pad
[=p] で p を指定する場合は、以下のいずれか (または両方) を指定します。
local
隣接する局所変数の間にパディングを追加挿入します。common
共通ブロック変数の間にパディングを追加挿入します。
-pad[
=p]
オプションが指定されていない場合は、コンパイラはパディングを挿入しません。-pad
だけが指定され p の指定がない場合は、コンパイラは局所変数と共通ブロック変数の両方にパディングを挿入します。
-pad[=
p]
オプションは、以下の条件を満たす項目に適用されます。局所変数、または静的変数については、「-stackvar」の説明を参照してください。
- 配列と文字列のどちらに対しても
EQUIVALENCE
文を適用できません。- ある共通ブロックを引用するファイルのコンパイルで
-pad=common
を指定するときは、その共通ブロックを引用するすべてのファイルのコンパイルで-pad=common
を指定する必要があります。このオプションは、共通ブロック内の変数の配置を変更します。あるプログラム単位をこのオプション付きでコンパイルし、別のプログラム単位をこのオプションなしでコンパイルすると、共通ブロック内の同じ位置への引用が、別の位置を引用してしまう可能性が生じます。-pad=common
を指定する場合、別のプログラム単位にある共通ブロックの変数宣言を名前を除いて同じにする必要があります。共通ブロックの変数の間に挿入されるパディングの量は、このような変数の宣言内容に応じて異なります。別のプログラム単位にある変数のサイズやランクが異なる場合は、同じファイル内でも変数の位置が異なることがあります。-pad=common
を指定する場合、共通ブロック変数を伴うEQUIVALENCE
を宣言すると、エラーになります。-parallel
-autopar、-explicitpar、-depend
でループを並列化します。
- SPARC: f77/f95
並列化するループの選択は、コンパイラによって自動的に、またユーザーの明示的な指令によって行われます。最適化レベルが
-O3
よりも低い場合は、自動的に-O3
に設定されます。パフォーマンスを改善するには、並列化オプション (
-autopar
も含む) を使用する場合には、-stackvar
オプションも指定してください。91ページの
-mp
を使用して、Sun、Cray またはf95
の OpenMP のいずれかの形式の並列化指令を選択します。ユーザー独自のスレッド管理を行なっている場合は、
-parallel
は使用しないでください。91ページの-mp
の説明を参照してください。並列化されたプログラムをマルチスレッド環境で実行するには、実行前に
-parallel
のような並列化オプションは、マルチプロセッサシステムで実行するための実行可能プログラムを生成することを前提としています。シングルプロセッサシステムで並列化を行うと、通常はパフォーマンスが低下します。PARALLEL
(またはOMP_NUM_THREADS
) 環境変数を設定しておく必要があります。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。一般的に、ターゲットプラットフォーム上のPARALLEL
変数またはOMP_NUM_THREADS
変数には、利用可能なプロセッサ数を設定します。
-parallel を使用して、同じステップ内でコンパイルおよびリンクを行うと、リンクには自動的にマルチスレッドライブラリおよびスレッド対応の Fortran 実行時ライブラリが含まれます。-parallel
を使用して、コンパイルおよびリンクを別々のステップで行う場合は、リンクする際にも-parallel
を指定しなければなりません。
Fortran の並列化機能には、Sun WorkShop HPCのライセンスが必要です。
詳細は、『Fortran プログラミングガイド』の第 10 章「並列化」を参照してください。
-pg
gprof
プロファイラを使用するプロファイル用にコンパイルします。
- SPARC: f77/f95
-p
オプションを使用した場合と同様の形式でプロファイル用にコードをコンパイルします。ただし詳細な統計情報を記録する実行時記録メカニズムも起動され、プログラムが正常に終了すると、gmon.out
ファイルが生成されます。gprof
を実行すると、実行プロファイルが生成されます。詳細は、gprof
(1) のマニュアルページおよび『Fortran プログラミングガイド』を参照してください。ライブラリオプションは、
.f
と.o
ファイルの後に指定してください (-pg
ライブラリは静的です)。コンパイルとリンクを分けて行う場合、
-pg
を付けてコンパイルしたときはリンクでも必ず-pg
を付けてください。-pic
- SPARC: f77/f95
このオプションでコンパイルしたコードは動的共有ライブラリ用です。大域的なデータへの引用はそれぞれ、大域的なオフセットテーブル内でポインタの間接引用として生成されます。関数呼び出しは、プロシージャリンケージテーブルを通して pc 相対アドレッシングモードで生成されます。
-pic
または-PIC
には、次のようなパフォーマンス上の影響があります。
-pic
または-PIC
のいずれかでコンパイルされたルーチンは、エントリで命令をいくつか実行することによって、共有ライブラリの大域変数や静的変数へのアクセスに使用する大域的なオフセットテーブルを指すようにレジスタを設定します。- 大域変数または静的変数にアクセスするごとに、大域オフセットテーブルを介して余分な間接メモリー引用を行います。
-PIC
でコンパイルを実行すると、大域的または静的なメモリー引用を行うごとに、命令が 2 つ追加されます。以上のパフォーマンス上の犠牲を比較した場合、
-pic
と-PIC
を使用すると、ライブラリコードが共有されるため、必要なシステムメモリーが大幅に少なくなります。-pic
または-PIC
でコンパイルした共有ライブラリ中のコードの各ページは、そのライブラリを使用する各プロセスどうしで共有することができます。共有ライブラリ中にあるコードのページに 1 つでも-pic
でコンパイルされていないメモリー参照
(直接メモリー参照) があると、このページは共有できなくなるため、ライブラリを使用したプログラムを実行するたびに、そのページのコピーが作成されます。
.o
ファイルが
-pic
または
-PIC
でコンパイルされているかどうかを調べるには、nm
コマンドを使用する方法が最も簡単です。
%nm
file.o | grep _GLOBAL_OFFSET_TABLE_
U _GLOBAL_OFFSET_TABLE_位置独立コードを含む
.o
ファイルには、_GLOBAL_OFFSET_TABLE_
への未解決の外部参照があります。未解決の参照はU
の文字で示されます。
-pic
または-PIC
のどちらかを使用するかは、nm
を使用して、そのライブラリ内で使用または定義されている特定の大域変数または静的変数の数を調べて判断します。_GLOBAL_OFFSET_TABLE_
のサイズが 8,192 バイト未満であれば、-pic
を使用できます。これ以外の場合は、-PIC
を使用します。64 ビットの Solaris 7 で
-xarch=v9
またはv9a
を使用して共有動的ライブラリを構築する場合、-pic
または-PIC
オプション、あるいはこれらと同義の-xcode
オプションを指定する必要があります。-PIC
共有ライブラリ用の位置独立コードをコンパイルします。ただし 32 ビットアドレスを使用します。
- SPARC: f77/f95
-pic
に似ていますが、大域的なオフセットテーブルが 32 ビットアドレスの範囲にわたる点が異なります。このオプションは-pic
では大域的なデータオブジェクトが多すぎる場合に使用します。-pic
と-PIC
オプションを同時に指定しないでください。64 ビットの Solaris 7 で
-xarch=v9
またはv9a
を使用して共有動的ライブラリを構築する場合、-pic
または-PIC
オプション、あるいはこれらと同義の-xcode
オプションを指定する必要があります。-Qoption pr ls
- SPARC: f77/f95
サブオプションリスト
ls
をコンパイルフェーズpr
に渡します。Qoption
とpr
お
よびls
の間には必ず空白文字を入れます。Q
は大文字でも小文字でもかまいません。ls
には、コンパイル段階に適したサブオプションをコンマで区切って指定します。リスト中には空白文字を入れないでください。また、サブオプションの先頭にマイナス記号を付けることができます。このオプションは主に、サポートスタッフによる内部デバッグ用として用意されています。
LD_OPTIONS
環境変数を使用してリンカーにオプションを渡します。『Fortran プログラミングガイド』のリンクとライブラリに関する章を参照してください。-qp
- SPARC: f77/f95
-R ls
- SPARC: f77/f95
- このオプションを指定すると、
ld
(1) リンカーは動的ライブラリ検索パスのリストを実行可能ファイルに格納します。ls には、ライブラリ検索パスのディレクトリをコロンで区切って指定します。
-R
と ls の間には空白文字があってもなくてもかまいません。このオプションを複数指定した場合は、それぞれのディレクトリリストがコロンで区切られて連結されます。
このリストは実行時に実行時リンカー
ld.so
が使用します。実行時に、このリストにあるパスで動的なライブラリを検索し、未解決の参照を解決しようとします。このオプションは、動的ライブラリへのパスを指定するオプションを意識せずに出荷用の実行可能ファイルを実行できるようにしたいときに使用します。
-R
paths を使用して実行可能ファイルを構築すると、ディレクトリパスはデフォルトのパスに追加されます。デフォルトのパスは、常に最後に検索されます。詳細は、『Fortran プログラミングガイド』の第 4 章「ライブラリ」および Solaris の『リンカーとライブラリ』を参照してください。
-r8
REAL、INTEGER、DOUBLE、
およびCOMPLEX
のデフォルトのバイトサイズを 2 倍に設定します。
- SPARC:f77/
注 - このオプションと -dbl は、現在では使用されなくなっており、将来のリリースで削除される可能性があります。より一般的なオプションである-xtypemap
を使用してください。
-r8
を使用すると、明示的なバイトサイズを指定せずに宣言されている、REAL、INTEGER、DOUBLE、
およびCOMPLEX
の変数のデフォルトのバイトサイズが拡張されます。
表 3-9 デフォルトのデータサイズ (バイト) と -r8 INTEGER
4 8 REAL
4 8 DOUBLE
8 16
このオプションは、変数、パラメータ、定数、および関数に適用されます。
また、
LOGICAL
はINTEGER、COMPLEX
は 2 つのREAL、DOUBLE
COMPLEX
は 2 つのDOUBLE
として扱われます。また、
-dbl
と-r8
は、より汎用的な-xtypemap=
オプションで表すことができます。
-dbl :
-xtypemap=real:64,double:128,integer:64
と同義
-r8 :
-xtypemap=real:64,double:128,integer:mixed
と同義- これらのオプションによってデフォルトの
DOUBLE PRECISION
データがQUAD
PRECISION
(128 ビット) になりますが、パフォーマンスは低下する可能性があります。この場合、-dbl
よりも-xtypemap=real:64
,double:64,
を使用した方が適切です。
integer:64通常、1 つの副プログラムを
-r8
付きでコンパイルする場合は、そのプログラムのすべての副プログラムも-r8
付きでコンパイルしてください。これは特に、各ファイル間で入出力形式が統一されていないプログラムでは重要になります。またこのオプションを使用すると、関数名にデータのサイズを明示的に指定しない限り、ライブラリ関数の呼び出しも含め、関数のデフォルトのデータサイズが変更される点に注意する必要があります。このオプションが実行時のパフォーマンスに与える影響はかなり大きいものです。
-r8
を付けてコンパイルすると、float = 15.0d0*float
のような式が、定数 15 の宣言のために 4 倍精度で評価されることに注意してください。
-r8
と-i2
を両方指定した場合の結果は予測できません。-r8const
単精度の定数を REAL * 8 の定数に変換します。
単精度の
- SPARC: f77/f95
REAL
定数はすべてREAL * 8
に変換されます。倍精度 (Real *8
) 定数は変更されません。このオプションは、定数にだけ適用されます。定数と変数の両方を変換する場合は、「xtypemap=spec」 を使用してください。
-reduction
- SPARC: f77/f95
自動並列化中にループを解析し縮約演算を認識します。ループの縮約には、潜在的に丸めのエラーがあります。
縮約演算によって、配列内の要素が単一のスカラー値に変換されます。縮約演算の典型的な例として、あるベクトルの各要素をまとめる処理があります。このような演算は並列化の対象ではありませんが、
-reduction
を指定すると、コンパイラは縮約演算を認識し、特別な例として並列化します。コンパイラが認識する縮約演算については、『Fortran プログラミングガイド』の第 10 章「並列化」を参照してください。このオプションは、自動並列化オプションの
-autopar
または-parallel
を使用する場合のみ使用できます。それ以外の場合は無視されます。明示的に並列化されたループは縮約演算の解析の対象にはなりません。
demo$ f77-parallel -reduction any.f
-S
l SPARC: f77/f95
指定したプログラムをコンパイルし、アセンブリ言語の出力結果を、接尾辞
.s
の付いた名前のファイルに出力します。.o
ファイルは作成しません。-s
- SPARC: f77/f95
実行可能ファイルを縮小し、リバースエンジニアがしにくくします。また、このオプションを使用すると、
dbx
その他のツールによるデバッグができなくなり、-g
オプショは無視されます。-sb
Sun WorkShop ソースコードブラウザ用のテーブル情報を生成します。
- SPARC:f77/f90
詳細は『Sun WorkShop の概要』を参照してください。
注 --sb
は、コンパイラがfpp
またはcpp
プリプロセッサを経由して自動的に渡すソースファイル (すなわち、拡張子が.F
、.F90
または.F95
のファイル) 上で使用することはできません。
-sbfast
- SPARC:f77/f95
Sun WorkShop ソースブラウザ用のテーブル情報を生成した後、処理を終了します。アセンブルやリンクは行わず、オブジェクトファイルも作成しません。
-silent
- SPARC:f77/f95
コンパイラから送られる重要でないメッセージの表示をすべて抑制します。エラーメッセージと警告メッセージは表示されます。デフォルトでは、コンパイル中に検出されたファイルとエントリの名前が表示されます。
-stackvar
- SPARC: f77/f95
特に別の指定がない限り、ルーチン中にある局所変数と配列をメモリースタックに割り当てます。これにより、その変数や配列は静的ではなく自動変数になります。また、サブプログラムを呼び出してループをl並列化するときに、オプティマイザの自由度が高くなります。
並列化オプションを使用する場合は、
-stackvar
を使用するようにしてください。
SUBROUTINE
またはFUNCTION
文中の引数 (すでにスタック上にある)COMMON
、SAVE
、STATIC
文中の大域的な項目- 次のような型宣言文、または
DATA
文で初期化された項目
REAL X/8.0/
またはDATA X/8.0/
f77 のみ次の例のように、
-stackvar
を使用しているときに、Data
文の中の局所変数に対する実行可能な引用の後、この局所変数を初期化しようとすると、エラーになります。
demo%cat stak.f
real xx = 1.t = 0.print*, tdata x/3.0/print *,x+tenddemo%f77 -o stak -stackvar stak.f
stak.f:MAIN:"stak.f", 5 行目: エラー: 自動変数を初期化しようとしています: x
-stackvar
を使用してサイズが大きい配列をスタック上に割り当てると、スタックからオーバーフローし、セグメンテーションフォルトが発生する場合があります。このような場合はスタックサイズを大きくする必要があります。デフォルトのスタックサイズはメインスタックが 8MB、各スレッドスタックが 1 BM (SPARC V9 プラットフォームの場合は 2MB) です。引数なしで
limit
コマンドを実行すると、現在のメインスタックのサイズが表示されます。-stackvar
を使用した時にセグメンテーションフォルトが発生する場合は、メインスタックとスレッドスタックのサイズを大きくしてみてください。
demo%limit
cputime 制限なしfilesize 制限なしdatasize 523256 kbytesstacksize 8192 kbytes <---coredumpsize 制限なしdescriptors 64memorysize 制限なしdemo%
demo%limit stacksize 65536
例 : 各スレッドスタックのサイズを 8MB に設定します。
demo%setenv STACKSIZE 8192
並列化と
-stackvar
を併用する方法については、『Fortran プログラミングガイド』の第 10 章「並列化」を参照してください。limit
コマンドの詳細については、csh
(1) を参照してください。-stop_status=yn
- SPARC:f77/f95
yn には
yes
またはno
を指定します。デフォルトはyes
です。
-stop_status=yes
を付けると、STOP
文に整数の定数を入れることができます。その値は、プログラムの終了時に環境に渡されます。STOP 123
STOP
文には、0 から 255 の範囲にある値を指定してください。これよりも大きい値は切り捨てられ、実行時メッセージが出力されます。ただし、STOP
'stop string'
は受け付けられます。この場合は環境にステータス値 0 が返されます。ただし、コンパイラの警告メッセージは出力されます。
このステータス環境変数は、C シェル (
csh
) では$status
、また Bourne (sh
) シェルと Korn (ksh
) シェルでは$?
です。-temp=dir
- SPARC: f77/f95
コンパイラによって使用される一時ファイル用のディレクトリを dir に設定します。このオプションでは空白文字を入れないでください。このオプションを指定しない場合、一時ファイルは
/tmp
ディレクトリに置かれます。-time
- SPARC: f77/f95
-U
- SPARC:f77/f95
大文字と小文字を区別します。デフォルトでは、文字列定数中を除き、大文字をすべて小文字として解釈します。このオプションを指定すると、
Delta、DELTA、
およびdelta
はすべて別の記号として解釈されます。Fortran を別の言語に移植したり、混用したりする場合は、
-U
オプションを指定する必要があります。詳細は、『Fortran プログラミングガイド』を参照してください。-u
- SPARC:f77/f95
すべての変数に対するデフォルトの型を、Fortran の暗黙の型宣言を使用せずに「未宣言」にします。宣言していない変数に対して警告メッセージが出力されます。ただし、このオプションは、
IMPLICIT
文や明示的に型を指定する文より優先されることはありません。-unroll=n
- SPARC:f77/f95
一般に、ループを展開するとパフォーマンスが改善されますが、実行可能ファイルのサイズが大きくなります。ループの展開と各種のコンパイラの最適化については、『Fortran プログラミングガイド』の第 9 章「パフォーマンスと最適化」を参照してください。また、「UNROLL 指令」も参照してください。
-V
- SPARC: f77/f95
コンパイラの実行時に、各パスの名前とバージョンを表示します。
上記の情報は、問題が発生した場合にご購入先に問い合わせる時に役立ちます。
-v
- SPARC: f77/f95
-V
と同様に、コンパイラの実行時にそれぞれのパス名を表示し、ドライバが使用したオプションと環境変数を詳細に表示します。-vax=v
有効にする VMS Fortran の拡張機能を指定します。
- SPARC:f77/
v には、1 つまたは複数のサブオプションをコンマで区切って指定します。各サブオプションのキーワードの前に
no%
を置くと (例 :no%logical_name
)、無効にする機能を指定することができます。主なオプションは、
-vax=align
と-vax=misalign
です。
-vax=align
は、境界整列されていないデータを許可せずに、すべてのサブオプションを選択します。これは、f77
リリース 3.0.1 以前の-xl
オプションの動作です。
-vax=misalign
は、サブオプションをすべて選択し、境界整列されていないデータを許可します。これは、f77
リリース 3.0.1 、4.0、4.2、5.0 および Sun WorkShop 6 の-xl
オプションの動作です。
%all
と%none
を使用して、これらのサブオプションを全部選択する、またはまったく選択しない、のいずれかを指定できます。サブオプションは、リスト v が左から右に読み込まれるに従って蓄積されます。たとえば、1 つの機能を除いてすべてを使用可能にするには次のように指定します。
-vax=%all, no%rsize
「-misalign」を参照してください。
-vpara
- SPARC: f77/f95
- コンパイラが、並列化指令で明示的に指定されたループを分析するごとに、検出されるデータの依存関係に関する警告メッセージを出力します。ただし、ループの並列化は続けられます。
例 : 並列化に関する詳細な警告メッセージを出力する
-vpara
オプション
demo%f77 -explicitpar -vpara any.f
any.f:MAIN any:"any.f", 11 行目: 警告: ループには参照を無効にする並列化が含まれているかも しれません-w
- SPARC: f77/f95
ほとんどの警告メッセージを出力しないようにします。ただし、前に指定したオプションのすべて、あるいは一部が無効になるようなオプションを指定している場合には、警告メッセージが表示されます。
例 :
-w
オプションを使用しても警告メッセージが出力される場合
demo%f77 -w -03 -fast -O4 any.f
f95
: 警告: -O4 は、すでに設定されている最適化レベル -03 に優先しますdemo%
f95
では、0 ~ 4 のレベルを指定できます。-w0
では抑制する警告メッセージが最も少なく、-w4
では抑制する警告メッセージが最も多くなります。-w
は-w0
と同義です。-xa
l SPARC: f77/f95
-xarch=isa
命令セットアーキテクチャ (ISA) を指定します。
表 3-11 -xarch ISA キーワード プラットフォーム 有効な -xarch キーワード SPARC generic, native, v7, v8a, v8, v8plus, v8plusa, v8plusb, v9, v9a, v9b
表 3-11 に、-xarch キーワード isa で受け付けられるアーキテクチャを示します。-xarch
は単独でも使用できますが、-xtarget
オプションが展開される一部であり、これを使用すると、特定の-xtarget
オプションで設定した-xarch
値を無効にすることができます。たとえば、次のように指定すると、
% f95 -xtarget=ultra2 -xarch=v8plusb ...
-xtarget=ultra2
で設定した-xarch=v8
が無効になります。
このオプションは、指定の命令セットだけを許すことによって、コンパイラが指定の命令セットアーキテクチャの命令に対応するコードしか生成できないようにします。なお、ターゲット固有の命令が使用されるとは限りません。
このオプションを最適化で使用する場合は、適切なアーキテクチャを選択すると、そのアーキテクチャ上での実行パフォーマンスを向上させることができます。不適切な選択を行うと、意図したターゲットプラットフォームでは実行できないバイナリプログラムが生成されます。
SPARC プラットフォームでの
-xarch
の使用表3-12 に、もっとも一般的な
-xarch
オプションについてまとめます。
- SPARC 命令セットアーキテクチャの V7、V8 および V8a は、すべてバイナリ互換があります。
v8plus
およびv8plusa
を指定してコンパイルしたオブジェクトバイナリファイル (.o
) は、リンクし、まとめて実行することができますが、実行は SPARC V8plusa 互換プラットフォーム上だけに限ります。v8plus
、v8plusa
およびv8plusb
を指定してコンパイルしたオブジェクトバイナリファイル (.o
) は、リンクし、まとめて実行することができますが、実行は SPARCV8plusb
互換プラットフォーム上だけに限ります。-xarch
値にv9
、v9a
およびv9b
を指定できるのは、UltraSPARC 64 ビットの Solaris環境だけです。v9
およびv9a
を指定してコンパイルしたオブジェクトバイナリファイル (.o
) は、リンクし、まとめて実行することができますが、実行は SPARCV9a
互換プラットフォーム上だけに限ります。v9
、v9a
およびv9b
を指定してコンパイルしたオブジェクトバイナリファイル (.o
) は、リンクし、まとめて実行することができますが、実行は SPARC V9b 互換プラットフォーム上だけに限ります。オプションの選択によっては、生成された実行可能プログラムのパフォーマンスが、初期のアーキテクチャよりかなり劣ることがあります。また、4 倍精度 (
REAL*16
およびlong double
) 浮動小数点命令は、これらの命令セットアーキテクチャの多くで使用できますが、コンパイラは、それらの命令を生成したコードで使用しません。表 3-13 に、SPARC プラットフォーム上で使用する各
-xarch
キーワードについて詳細に説明します。
-xautopar
- SPARC: f77/f95
-xcache=c
n
- SPARC: f77/f95
- c には以下のいずれかを指定します。
generic
n s1 / l1 / a1
n s1 / l1 / a1:s2 / l2 / a2
- s1 / l1 / a1:s2 / l2 / a2:s3 / l3 / a3
si レベル i のデータキャッシュのサイズ (キロバイト単位)
li レベル i のデータキャッシュのラインサイズ (バイト単位)
このオプションは、オプティマイザが使用できるキャッシュ特性を指定します。特定のキャッシュ特性が必ず使用されるわけではありません。
このオプションは、
-xtarget
オプションを展開した機能の一部です。-xtarget
オプションで暗黙に指定された-xcache
値の指定を変更する場合に、このオプションを単独で使用します。例 :
-xcache=16/32/4:1024/32/1
により次の内容が指定されます。
レベル 1 のキャッシュ : 16K バイト、32 バイト行サイズ、4 面結合
レベル 2 のキャッシュ : 1024K バイト、32 バイト行サイズ、ダイレクトマップ結合
-xcg89
- SPARC: f77/f95
-xcg92
- SPARC: f77/f95
-xchip=c
- SPARC: f77/f95
このオプションは、処理対象となるプロセッサを指定することによって、タイミング特性を指定します。
このオプションは、
-xtarget
オプションを展開した機能の一部です。-xtarget
オプションで暗黙に指定された-xchip
値の指定を変更する場合に、このオプションを単独で使用します。表 3-15
に、-xchip
の有効な値をまとめてあります。
-xcode=code
SPARC プラットフォームのコードアドレス空間を指定します。
- SPARC: f77/f95
デフォルト (
-xcode
=code を明示的に指定しない) は次のとおりです。
-xcode=abs32
SPARC V8 および V7 プラットフォーム-xcode=abs64
SPARC および UltraSPARC V9 (-arch=v9
またはv9a
)64 ビットの Solaris 7 環境で
-xarch=v9
またはv9a
を使用して共有動的ライブラリを構築する場合、-xcode=pic13
または-xcode=pic32
(あるいは-pic
か-PIC
) を指定する必要があります。-xcommonchk[={no|yes}]
- SPARC: f77/f95
このオプションは、
TASK COMMON
や並列化を使用しているプログラムで共通ブロックに不一致がないかデバッグ検査を行います。(『Fortran プログラミングガイド』の 「並列化」 の章でTASK COMMON
に関する説明を参照してください。)デフォルトは
-xcommonchk=no
です。共通ブロック不一致の実行時検査を行うとパフォーマンスが低下するので、デフォルトではこのオプションは無効になっています。このオプションはプログラム開発とデバッグのときだけ使用し、生産品質プログラムには使用しないでください。
-xcommonchk=yes
でコンパイルすると実行時検査が行われます。1 つのソースプログラム単位で正規の共通ブロックとして宣言されている共通ブロックがTASK COMMON
指令の中で指定されていると、プログラムは停止し、不一致を示すエラーメッセージが出力されます。-xcrossfile[=n]
- SPARC:f77/f95
- 指定する場合、n には
0
、または1
を指定できます。- 通常、コンパイラが分析する範囲はコマンド行で指定した個別のファイルに限られます。たとえば、
-O4
の自動インライン化は、単一のソースファイル中で定義され、引用される副プログラムに対してのみ行われます。
-xcrossfile
を付けると、コンパイラは、コマンド行で指定されたすべてのファイルを分析します。
-xcrossfile
オプションは、-O4
または-O5
を使用している場合のみ有効です。ファイル間のインライン化を行うと、ソースファイルどうしの相互依存関係が生まれます。
-xcrossfile
を指定してコンパイルしたファイルセット中のいずれかのファイルを変更した場合は、新しいコードが正しくインライン化されるように、全ファイルを再コンパイルする必要があります。
インライン化については 「-inline=[%auto][[,][no%]f1,...[no%]fn]の説明を参照してください。デフォルトでは、コマンド行に
-xcrossfile
を指定しないので、-xcrossfile=0
となり、ファイル間の最適化は行われません。ファイル間の最適化を有効にするには、-xcrossfile
(-crossfile=1
と同義) と指定します。-xdepend
- SPARC: f77/f95
-xexplicitpar
- SPARC: f77/f95
-xF
Sun WorkShop アナライザにより、関数レベルの並べ替えを行います。
- SPARC: f77/f95
- コンパイラ、アナライザ、リンカーを使用して、コアイメージで関数 (副プログラム) の並べ替えができます。
-xF
オプションでコンパイルすると、アナライザが実行されます。これにより、マップファイルを作成して、関数がどのように使用すされるかに応じて、メモリー中の関数の順序を並べ替えることができます。その後、実行可能ファイルを構築するリンクにおいて、-M
mapfile リンカーオプションを使って、そのマップを使用するように指定することができます。これによって、実行可能ファイルの関数が別々のセクションに配置されます。メモリー中の副プログラムの並べ替えは、アプリケーションのテキストページフォルト時間がアプリケーションの実行時間に占める割合が大きい場合にのみ役に立ちます。その他の場合は並べは、アプリケーションの全体的なパフォーマンスは改善されません。アナライザは、WorkShop に組み込まれています。アナライザについて詳細は、『Sun WorkShop の概要』および『プログラムのパフォーマンス解析』を参照してください。
-xhelp=h
オプションに関するヘルプ情報または
README
ファイルを表示します。
- SPARC: f77/f95
h には
readme
かflags
のいずれかを指定します。
-xhelp=readme
: 本リリースのコンパイラに関するREADME
ファイルの内容を表示します。-xhelp=flags
: コンパイラフラグ (オプション) を表示します。-xia[=v]
- SPARC: f95
v には、
widestneed
またはstrict
のいずれかを指定します。指定しない場合のデフォルトとしてwidestneed
が仮定されます。Fortran 95 で拡張された区間演算の詳細は、『Fortran 95 区間演算プログラミングリファレンス』に記載されています。「-xinterval[=v]」 を参照してください。
-xia または
-xia=widestneed -xinterval=widestneed -ftrap=%none -fns=no -fsimple=0 -xia=strict -xinterval=strict -ftrap=%none -fns=no -fsimple=0
-xildoff
- SPARC: f77/f95
このオプションは、
-g
オプションを使用しない場合のデフォルトです。また、-G
を使用する場合や、コマンド行でソースファイル名を指定する場合のデフォルトでもあります。このデフォルトは、
-xildon
オプションによって解除されます。-xildon
- SPARC: f77/f95
インクリメンタルリンカーをオンにし、インクリメンタルモードで
ild
を使用するようにします。このオプションは、
-G
でなく、-g
を指定し、コマンド行にソースファイルを指定しない場合 (オブジェクトファイルやライブラリだけを指定する場合) のデフォルトです。このデフォルトは、
-xildoff
オプションによって解除されます。『C ユーザーズガイド』の
ild
のセクションを参照してください。-xinline=list
- SPARC: f77/f95
-xinterval[=v]
- SPARC: f95
v には、
no
、widestneed
またはstrict
のいずれかを指定します。指定しない場合のデフォルトはwidestneed
です。
no
区間演算処理を有効にしません。 widestneed
モードが混在した式に含まれる非間隔変数および定数を、式の中でもっとも広い間隔のデータ型に変換します。 strict
型や長さが混在した間隔式の使用を禁止します。間隔型および長さの変換はすべて明示的に行わなければなりません。
Fortran 95 で拡張された区間演算の詳細は、『Fortran 95 区間演算プログラミングリファレンス』に記載されています。「-xia[=v]」 も参照してください。
-xl[d]
- SPARC:f77/
-xl
:
コンパイラがより多くの VMS Fortran 機能を使用できるようになります。これは、-vax=misalign
をマクロ化したもので、以下のような言語機能を提供します。
「-vax=v」の説明を参照してください。特別なオプションを指定しなくても、ほとんどの VMS 機能は
f77
で自動的に有効になりますが、VMS 機能によっては-xl
オプションを指定する必要があります。通常は、ソース文が VMS
、f77、
またはf95
のいずれにも解釈できるときに、VMS として解釈させたい場合に-xl
オプションを指定します。-xl
オプションを指定すると、コンパイラは VMS として解釈します。以下に示す VMS の言語機能は、このオプションを指定して有効にします。
- 書式なし記録のバイトではなくワードでのサイズ (
-xl
)- VMS 形式の論理ファイル名 (
-xl
)- 引用符文字 (
"
) で始まる 8 進定数 (-xl
)- 文字定数内の本来の文字としてのバックスラッシュ (
\
) 文字 (-xl
)PARAMETER
文の非標準書式 (-xl
)- VMS としての構造体の境界整列 (
-xl
)- 注釈行あるいは Fortran 文としてのデバッグ文 (
-xld
)VMS の構造体がどのように実装されているかを、プログラムが認識できる場合に、
-xl
を使用して VMS の境界整列を行なってください。
-xld
を使用してデバッグ用の注釈 (D
またはd
が 1 カラム目にある) をコンパイルさせます。-xld
オプションを省略すると、注釈として扱われます。
(-xl
とd
の間には空白文字を入れないでください。)
C
ルーチンと構造体を共有するプログラムでは、-xl
は使用しません。VMS ライブラリについての詳細は、『Fortran ライブラリ・リファレンス』を参照してください。
F77
コンパイラが自動認識する『FORTRAN 77 言語リファレンス』の、VMS 言語拡張機能に関する記述も参照してください。-xlibmil
- SPARC: f77/f95
-xlibmopt
- SPARC: f77/f95
このオプションによって通常は高速なコードが生成されます。結果が若干異なる場合がありますが、このときは普通は最終ビットが違っています。このライブラリオプションをコマンド行で指定する順序には意味はありません。
-xlic_lib=sunperf
- SPARC:f77/f95
リンクするライブラリをコンマで区切って指定します。たとえば、次のとおりです。
f77 -o pgx -fast pgx.f -xlic_lib=sunperf
-l
オプションと同様に、このオプションもコマンド行中でソースファイルおよびオブジェクトファイルの名前をすべて並べた後に指定します。このオプションを使用して、サンのパフォーマンスライブラリとリンクさせなければなりません (『Sun Performance Library User's Guide』を参照してください)。
-xlicinfo
- SPARC: f77/f95
このオプションはライセンスのあるシステムに関するライセンス情報を返します。特に、ライセンスサーバーの名前とライセンスをチェックアウトしている個々のユーザーの ID を返します。
通常、このオプションではコンパイルが行われず、ライセンスは獲得されません。このオプションは、他のオプションと一緒には使用されません。しかし、衝突するオプションが使用されると、コマンド行の最後のオプションが選択され、警告メッセージが出力されます。
-Xlist[x]
- SPARC: f77/f95
このオプションは、潜在的なプログラミングバグを検出するときに使用します。もう 1 つ別のコンパイラパスを起動して、プログラムを大域的に検査することにより、副プログラム呼び出しの引数、共通ブロック、およびパラメータに整合性があるかどうかを調べます。このオプションにより、クロスリファレンステーブルを含む、行番号の付いたソースコードが表示されます。
-Xlist
オプションによって生成されるエラーメッセージは警告であるため、プログラムのコンパイルやリンクは停止しません。
注 - 大域的プログラム検査を行う-Xlist
オプションでコンパイルを実行する前に、必ずソースコードのすべての構文エラーを修正してください。構文エラーを修正しないままソースコードで GPC を実行すると、予期せぬレポートが出力される可能性があります。
demo%f95 -Xlist fil.f
上記の例では、出力ファイル
fil.lst
に次の情報が書き込まれます。デフォルトでは、リストは
name.lst
というファイルに書き込まれます。name
は、コマンド行で最初に指定したソースファイルの名前から拡張子を除いたものです。以下に示すサブオプションによって、さまざまな動作を選択することができます。サブオプションは、
-Xlist
メインオプションの後に続けて指定します。
-Xlistc、-Xlistf、-Xlistflndir、-Xlisth、-Xlists、-Xlistv
n の各オプションは、f95
では使用できません。詳細は、『Fortran プログラミングガイド』の第 5 章「プログラムの解析とデバッグ」を参照してください。
-xloopinfo
- SPARC: f77/f95
-xmaxopt[=n]
- SPARC: f77/f95
n には 1 〜 5 の値を指定でき、それぞれ最適化レベル
-01
〜-05
に対応しています。指定しない場合、コンパイラは 5 を使用します。このオプションは、
C$PRAGMA SUN OPT
=n 指令がソース入力に指定されている場合にその指令を有効にします。このオプションを指定しないと、コンパイラはこれらの指令行を注釈として解釈します。このようなプラグマ指令が
-xmaxopt
フラグの最大レベルを超える最適化レベルで指定されている場合は、コンパイラは-xmaxopt
レベルを使用します。-xmemalign[=<a><b>]
メモリ境界整列の最大値の想定と、境界整列不正データへアクセスした時の振る舞いを指定します。
- SPARC: f77/f95
境界整列がコンパイル時に決定できるメモリアクセスの場合、コンパイラは、そのデータ境界整列に適したロード/ストア命令のシーケンスを生成します。
境界整列がコンパイル時に決定できないメモリアクセスの場合、コンパイラは、境界整列を想定して、必要なロード/ストア命令のシーケンスを生成します。
-xmemalign
フラグを使用すると、このような曖昧な状況の場合にコンパイラが想定するデータの最大メモリ境界整列を指定することができます。アライメント不正データへのメモリアクセスが行われた場合の実行時エラーの振る舞いも指定します。指定する値は、二種類です。すなわち、数値の境界整列値 <a> と、英数字の振る舞いフラグ <b> です。
1
最大で 1 バイトの境界整列を想定します。2
最大で 2 バイトの境界整列を想定します。4
最大で 4 バイトの境界整列を想定します。8
最大で 8 バイトの境界整列を想定します。16
最大で 16 バイトの境界整列を想定します。不正境界整列データにアクセスした場合のエラーの振る舞いを表す <b> に指定できる値は、次のとおりです。
i
アクセスを解釈し、実行を継続します。S
SIGBUS という信号を発生させます。F
4 バイト以下の境界整列にだけ SIGBUS 信号を発生させます。
-xmemalign
を指定しない場合のデフォルト値は、次のようになります。
-xarch=generic
、v7
、v8
、v8a
、v8plus
、v8plusa
の場合は、4s
- C および
C++
の-xarch=v9
、v9a
の場合は、8s
- Fortran の
-xarch=v9
、v9a
の場合は、8f
値をまったく指定しない場合の
-xmemalign
のデフォルト値は、すべてのプラットフォームで1i
です。
-dalign
(67ページ参照) および-misalign
(91ページ) のオプションは、それぞれ次のマクロです。
-dalign
は、-xmemalign=8s -aligncommon
=8 のマクロです。-misalign
は、-xmemalign=1i -aligncommon
=1 のマクロです。-xnolib
- SPARC: f77/f95
-xnolibmil
- SPARC: f77/f95
-xnolibmopt
- SPARC: f77/f95
-fast
と併用すると、最適化済みの数学ライブラリとリンクされません。f77 -fast -xnolibmopt ...
-xOn
- SPARC: f77/f95
-xpad
- SPARC:f77
-xparallel
- SPARC: f77/f95
-xpg
- SPARC: f77/f95
-xpp={fpp|cpp}
- SPARC: f77/f95
コンパイラは
fpp
(1) を使用して、.F
または.f95
のソースファイルの前処理を行います。fpp
(1) は Fortran 用のプリプロセッサです。旧バージョンでは、標準の C プリプロセッサcpp
が使用されていました。cpp
を選択するには、-xpp=cpp
を指定します。-xprefetch[v]
UltraSPARC II など、先読み命令をサポートするプラットフォーム上で先読み命令を有効にします。
- SPARC: f77/f95
-xprefetch=yes
と指定すると、コンパイラは適切であると判断したときに先読み命令を挿入します。その結果、UltraSPARC II プロセッサ (-xarch=v8plus, v9plusa, v9, v9a) のパフォーマンスが改善されます。v を指定する場合は、次に示すサブオプションのうち、一つを指定するか、またはそのいくつかをコンマで区切ったリストを指定します。
指定しない場合、コンパイラは
-xprefetch=no
とみなします。-xprefetch
だけを指定すると、デフォルトで-xprefetch=yes
となります。Fortran の
PREFETCH
命令については、31 ページを参照してください。-xprofile=p
実行時のプロファイル用データを収集、またはそのデータを使用して最適化を行います。
- SPARC: f77/f95
p には
collect
[:nm]、use
[:nm]、tcov
のいずれかを指定します。最適化レベルは、-O2
以上を指定してください。後に
-xprofile=use
オプションを使用してプログラムをコンパイルする時に、オプティマイザが使用する実行頻度データを収集し保存します。コンパイラは、文の実行頻度を測定するコードを生成します。nm には、解析対象の実行可能ファイル名を指定します。この名前の指定は省略することができます。nm が指定されていない場合は、
a.out
が実行可能ファイル名とみなされます。
-xprofile=collect:
nm でコンパイルしたプログラムは、実行時にnm.profile
サブディレクトリを作成します。データは、このサブディレクトリにあるfeedback
ファイルに書き込まれます。プログラムを複数回実行すると、実行頻度データはfeedback
ファイルに蓄積されていくので、以前の実行頻度データは失われません。
collect:
nm の場合と同じように nm には、実行可能ファイル名を指定します。名前の指定は省略することもできます。
-xprofile=collect
オプションを付けてコンパイルした時に生成され、feedback
ファイルに保存された実行頻度データを使用して、プログラムが最適化されます。ソースファイル、その他のコンパイルオプションは、
feedback
ファイルが生成されるプログラムをコンパイルした時に使用したのと同じものを指定してください。
-xprofile=collect:
nm でコンパイルするときと、-xprofile=use:
nm で最適化コンパイルをするときのプログラム名は同一のものを指定する必要があります。tcov
新しい形式の
tcov
を使用して、基本的なカバレージ分析を行います。コード計測方法は
-a
と似ていますが、各ソースファイルごとに.d
ファイルは生成されません。最終的な実行可能ファイルに基づく名前のファイルが 1 つ生成されます。たとえば、実行可能ファイルがstuff
である場合、stuff.profile/tcovd
がデータファイルとなります。
tcov
を実行する場合、-x
オプションを付けて、新しい形式のデータを使用するよう指示する必要があります。-x
オプションを指定しないと、tcov
はデフォルトでは古い.d
ファイルがあればそれをデータとして使用し、予測外の結果が生成されます。
-a
とは異なり、TCOVDIR
環境変数はコンパイル時には影響しませんが、プログラムの実行時に使用され、プロファイルデータを置くサブディレクトリの位置が決まります。詳細は、
tcov
(1) マニュアルページ、『Fortran プログラミングガイド』の第 8 章「パフォーマンスプロファイリング」および『プログラムのパフォーマンス解析』を参照してください。
注 -tcov
で作成されたレポートは、-O4
または-inline
によって副プログラムがインライン化されている場合、信頼性がない可能性があります。インライン化されているルーチンへの呼び出しの範囲は記録されません。
-xrecursive
RECURSIVE
属性をもたないルーチンが自分自身を再帰的に呼び出せるようにします。
- SPARC: f95
RECURSIVE
属性で定義された副プログラムは、-xrecursive
を使用してコンパイルされていない場合に限って、自分自身を再帰的に呼び出すことができます。
-xrecursive
を使用してコンパイルすると、パフォーマンスが低下する可能性があります。-xrecursive
は単独ではメモリスタック上に局所変数を割り当てないので、-xrecursive
と-stackvar
の併用も検討してください。-xreduction
- SPARC: f77/f95
-xregs=r
- SPARC: f77/f95
r には、以下の 1 つまたは複数の項目をコンマで区切って指定します。
[no%]appl, [no%]float
appl :
アプリケーションレジスタを使用できるようにします。
- SPARC システムでは、ある特定のレジスタをアプリケーションレジスタと呼びます。これらのレジスタを使用すると必要なロードおよびストア命令が少なくてすむため、パフォーマンスが向上します。ただし、アセンブリコードで記述された古いライブラリプログラムとの間で衝突が起きることがあります。
- アプリケーションレジスタの組み合わせは、SPARC プラットフォームによって異なります。
-xarch=v8
またはv8a
の場合 - レジスタ%g2
、%g3
および%g4
-xarch=v8
またはv8a
の場合 - レジスタ%g2
、%g3
および%g4
-xarch=v8plus
またはv8plusa
の場合 - レジスタ%g2
、%g3
および%g4
-xarch=v9
またはv9a
の場合 - レジスタ%g2
および%g3
no%appl :appl
レジスタを使用しません。float :SPARC ABI
に指定されているように浮動小数点レジスタを使用できるようにします。
これらのレジスタは、プログラムに浮動小数点のコードがない場合でも使用することができます。no%float :
浮動小数点レジスタを使用しません。
このオプションを使用すると、コンパイラは浮動小数点レジスタを浮動小数点演算の用途にのみ使用し、共通ブロックや構造体のコピーのためには使用しません。-xs
オブジェクトファイル (
.o
) がなくてもdbx
によってデバッグを実行できるようにします。
- SPARC: f77/f95
実行可能ファイルを別のディレクトリに移動した場合でも、オブジェクトファイル (
.o
) を無視してそのままdbx
を使用することができます。このオプションは、.o
ファイルを残しておくことができない場合に使用します。
- コンパイラは、
-s
オプションをアセンブラに渡し、リンカーはdbx
用のシンボルテーブルをすべて実行可能ファイル内に配置します。- このようにシンボルテーブルを処理する方法は旧式の方法です。この方法を非自動読み込みと呼ぶことがあります。
- リンカーによるリンクや
dbx
による初期化が遅くなります。
-xs
を付けずに実行可能ファイルを移動する場合は、ソースファイルとオブジェクト
(.o
) ファイルの両方を移動するか、あるいはdbx
の
pathmap
コマンドかuse
コマンドのいずれかでパスを設定する必要があります。
- これはシンボルテーブルを読み込む新しいデフォルトの方法です。この方法を自動読み込みと呼ぶことがあります。
- シンボルテーブルは、必要な場合にのみ
dbx
がシンボルテーブル情報を読み込むように、.o
ファイル中に配置されます。したがって、リンク処理と、dbx
による初期化が高速で実行されます。-xsafe=mem
- SPARC: f77/f95
このオプションを使用する場合、コンパイラはメモリーに関するトラップが発生しないことを前提とします。V9 マシン上で投機的なロード命令を使用することができます。このオプションは、
-05
と-xarch=v8plus
がともに指定されている場合に限り、有効になります。-xsb
- SPARC: f77/f95
-xsbfast
- SPARC:f77/f95
-xspace
- SPARC: f77/f95
- コードのサイズが増大するような最適化は行いません。
たとえば、コードのサイズが増大する場合は、ループの展開や並列化は行いません。
-xtarget=t
- SPARC: f77/f95
命令セットと最適化の対象とするプラットフォームを指定します。
t には
native、generic、
プラットフォーム名のいずれかを指定します。
-xtarget
オプションは、実際のプラットフォームで発生する、-xarch、-xchip、
をまとめて指定することができます。
-xcache-xtarget
の意味は = の後に指定した値を展開したものにあります。対象となるハードウェア (コンピュータ) を正確にコンパイラに指定すると、パフォーマンスが向上するプログラムもあります。プログラムのパフォーマンスが重要な場合は、対象となるハードウェアを正確に指定してください。これは特に、新しい SPARC プロセッサ上でプログラムを実行する場合に当てはまります。ただし、ほとんどのプログラムおよびより旧式の SPARC プロセッサでは、パフォーマンス向上はごくわずかなので、
generic
を指定することで十分です。
native
:
ホストプラットフォームに対してパフォーマンスを最適化します。コンパイラは、ホストプラットフォームに対して最適化されたコードを生成します。コンパイラが動作しているマシンで利用できるアーキテクチャ、チップ、キャッシュ特性が選択されます。
generic :
一般的なアーキテクチャ、チップ、キャッシュに対して最高のパフォーマンスが得られるようにします。コンパイラは
-xtarget=generic
を次のように展開します。
-xarch=generic -xchip=generic -xcache=generic
プラットフォーム名 : 指定したプラットフォームに対して最高のパフォーマンスが得られるようにします。
コンパイラで使用できる現在の SPARC プラットフォームの名前 (
-xtarget=ultra2i
など) については、付録 D「-xtarget プラットフォームの展開」を参照してください。-xtime
- SPARC: f77/f95
-xtypemap=spec
- SPARC:f77/f95
デフォルトのデータ型に対するバイトサイズを指定することができます。
-dbl
と-r8
よりもこのオプションを使用することをお勧めします。このオプションは、デフォルトサイズの変数および定数の両方に割り当てられます。指定する文字列 spec には、次の全部またはいずれかをコンマで区切ったリストとして指定します。
real:
sizedouble:
sizeinteger:
size指定できるデータのサイズ size は、
real
に対しては64
、double
に対しては128
、integer
に対しては32
、64
、mixed
です。
-xtypemap=real:64,double:64,integer:64
このオプションは
REAL XYZ
(64 ビットのXYZ
になる) のように明示的にバイトサイズを指定しないで宣言されたすべての変数に適用されます。また、単精度REAL
定数はすべて、REAL*8
に変換されます。
integer:mixed
のマッピングは、8 バイトデータを指定しますが、4 バイト演算だけを行います。これは、f77
でだけ使用できます。integer:64
の使用をお勧めします。
f77
フラグの-dbl
および-r8
のオプションは、-xtypemap
で次のように表すことができます。
-dbl
次と同等:-xtypemap=real:64,double:128,integer:64
-r8
次と同等:-xtypemap=real:64,double:128,integer:mixed
これらは、デフォルトの
REAL
とDOUBLE
を 8 バイトにします。また、これらはDOUBLE PRECISION
からQUAD PRECISION
にできませんが、-dbl
や-r8
より優先して使用します。
INTEGER
とLOGICAL
は等価として扱われます。また、COMPLEX
は 2 つのREAL
として扱われます。DOUBLE COMPLEX
はDOUBLE
と同じように扱われます。-xunroll=n
- SPARC: f77/f95
-xvector[={yes|no}]
- SPARC: f77/f95
-xvector=yes
と指定すると、コンパイラは、必要に応じて、DO ループ内の数学ライブラリ呼び出しを特定して、同等のベクトル化されたライブラリルーチンの単一呼び出しに変換できます。その結果、ループカウントの大きいループのパフォーマンスが改善されます。デフォルトは
-xvector=no
です。-xvector
だけを指定すると、デフォルトで-xvector=yes
になります。このオプションは
-depend
もトリガーします。(コマンド行で-xvector
に続けて-nodepend
を指定すると、依存解析を取り消すことができます。)
-xvector
が指定されている場合は、libmvec
とlibc
ライブラリをロードステップに含めるように、コンパイラはリンカーに自動通知します。ただし、コンパイルとリンクを別々に行う場合は、必要なライブラリを正確に選択するためにリンクステップで-xvector
を指定する必要があります。-xvpara
- SPARC: f77
-Zlp
ループツールを使用するループパフォーマンスのプロファイル用にコンパイルします。
- SPARC: f77/f95
このオプションはループのプロファイラであるループツール用にオブジェクトファイルを準備します。次に
looptool
(1) ユーティリティを実行すると、プログラムに関するループ統計情報が生成されます。コンパイルとリンクを分けて行う場合、
-Zlp
を付けてコンパイルしたときはリンクにも必ず-Zlp
を付けてください。1 つの副プログラムに
-Zlp
を付けてコンパイルしたとしても、そのプログラムのすべての副プログラムに-Zlp
を付けてコンパイルする必要はありません。ただし、ループ情報が得られるのは-Zlp
を付けてコンパイルしたファイルからだけです。そのプログラムに含まれている他のファイルの情報は得られません。詳細は、『プログラムのパフォーマンス解析』を参照してください。
-ztext
- SPARC: f77/f95
-ztext
の主な目的は、生成されたライブラリが純粋なテキストであるかどうか、すべての命令が位置独立コードであるかどうかを確認することです。したがって、通常は-G
および-pic
と共に使用します。
-ztext
を指定すると、テキストセグメントに不完全な再配置がある場合、ld
はライブラリを構築しません。データセグメントに不完全な再配置がある場合は、ld
はライブラリを構築しますが、そのデータセグメントは書き込み可能となります。
-ztext
を指定しない場合、ld
は再配置の状況とは無関係にライブラリを構築します。このオプションは主に、オブジェクトファイルが
-pic
を付けて作成されたかどうかが不明な場合に、ソースファイルとオブジェクトファイルの両方からライブラリを作成するときに使用します。例 : ソースファイルとオブジェクトファイルの両方からライブラリを作成します。
demo%f95
-G -pic -ztext -o MyLib -hMyLib a.f b.f x.o y.o
また、コードが位置独立コードであるかどうかを確認するためにも、このオプションを使用します。
-pic
を付けずにコンパイルすると、純粋なテキストであるかどうかを確認できます。例 :
-pic
を付けない場合は、純粋なテキストであるかどうかを確認します。
demo%f95
-G -ztext -o MyLib -hMyLib a.f b.f x.o y.o
-ztext
を付けてコンパイルしてもld
によってライブラリが構築されなかった場合は、-ztext
を付けずにコンパイルし直すとld
によってライブラリが構築されます。-ztext
を指定した場合に構築が失敗するということは、ライブラリ中に共有不可能な成分があることを示します。ただし、この場合でもその他の成分は共有できるはずですが、パフォーマンスが最高でない可能性もあります。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |