ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: Fortran ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
3.4.1 -aligncommon[ ={1|2|4| 8|16}]
3.4.11 -dbl_align_all[ ={yes|no}]
3.4.16 -erroff[ ={%all|%none| taglist}]
3.4.18 -errwarn[ ={%all|%none| taglist}]
3.4.31 -fprecision={ single|double|extended}
3.4.33 -fround={ nearest|tozero|negative| positive}
3.4.43 -inline=[ %auto][[,][no%] f1,...[no%]fn]
3.4.44 -iorounding[ ={compatible|processor-defined}]
3.4.84 -stop_status[ ={yes|no}]
3.4.87 -traceback[ ={%none|common| signals_list}]
3.4.103 -xannotate[ ={yes|no}]
3.4.104.1 x86/x64 プラットフォームでの特別な注意
3.4.105 -xassume_control[ =keywords]
3.4.107 -xbinopt={prepare | off}
3.4.112 -xcommonchk[ ={yes|no}]
3.4.113 -xdebugformat={ dwarf|stabs}
3.4.116 -xfilebyteorder= options
3.4.119 -xhwcprof[={enable | disable}]
3.4.120 -xia[={ widestneed|strict}]
3.4.122 -xinstrument=[%no]datarace
3.4.123 -xinterval[ ={widestneed|strict| no}]
3.4.125 -xipo_archive[ ={none|readonly| writeback}]
3.4.128 -xkeepframe[ =[%all,%none,name, no%name]]
3.4.129 -xknown_lib=library_list
3.4.140 -xmodel=[ small | kernel | medium]
3.4.145 -xopenmp[={ parallel|noopt|none}]
3.4.149 -xpagesize_stack= size
3.4.154 -xprefetch_auto_type=indirect_array_access
3.4.155 -xprefetch_level={ 1|2|3}
3.4.157 -xprofile_ircache[ =path]
3.4.158 -xprofile_pathmap= collect_prefix:use_prefix
4. Solaris Studio Fortran の機能および拡張機能
この節では、すべての f95 コンパイラコマンド行オプションフラグについて説明します。これには、さまざまなリスク、制約、警告、相互作用、例、およびその他の詳細情報も含まれます。
各オプションは、特に付記していないかぎり、SPARC および x64/x86 プラットフォームの両方で有効です。SPARC プラットフォームでのみ有効なオプションフラグは (SPARC) と付記しています。x64/x86 プラットフォームでのみ有効なオプションフラグは (x86) と付記しています。
(廃止) と付記されているオプションフラグは廃止されているため、使用しないでください。多くの場合、代わりに使用すべきほかのオプションまたはフラグに置き換えられています。
共通ブロックおよび標準の数値連続型のデータの境界整列を指定します。。
指定された値は、共通ブロックおよび標準数値連続型内のデータ要素の整列の最大値 (単位はバイト) を示します。
注 - 標準数値連続型 は、SEQUENCE 文と、デフォルトコンポーネントデータ型 ( KIND= または * size を持たない INTEGER、REAL、DOUBLEPRECISION、COMPLEX) のみを含む構造型です。REAL*8 などのほかの型は、型を非標準にします。
たとえば、-aligncommon=4 と指定すると、4 バイト以上の自然整列サイズを保つ全データ要素が、4 バイト境界に整列します。
このオプションは、指定のサイズより小さい自然整列サイズを保つデータに影響しません。
-aligncommon を指定しないと、共通ブロック内のデータおよび数値連続型のデータは、多くても 4 バイト境界に整列されます。
値を指定せずに -aligncommon だけを指定すると、デフォルトの 1 が仮定され、共通ブロックおよび数値連続型の要素は、すべて 1 バイト境界に整列されます。要素間のパディングは行われません。
-aligncommon=16 は、64 ビットが有効ではないプラットフォームにおいて -aligncommon=8 に戻ります。
-aligncommon=1 を -xmemalign とともに使用しないでください。これらの指令は衝突するため、同じプラットフォームや構成でセグメント例外が発生する場合があります。
SPARC プラットフォームで —aligncommon=1 を使用すると、不正な整列によるバスエラーが発生する可能性があります。この場合は、—xmemalign オプションの使用を選択する必要があります。アプリケーションに応じて、—xmemalign=1s、—xmemalign=4i、または —xmemalign=8i を指定すると、パフォーマンスを最適化するとともに、セグメント例外を回避できます。
—xmemalign も参照してください。
ソースコード中で、標準外の Fortran の拡張機能を使用すると、警告メッセージが出力されます。
このオプションを使って代替エントリポイントを持つ副プログラムをコンパイルする場合、f95 は、copy または restore を使用して、ダミー引数と実際の引数の関連付けを保持します。
このオプションは、従来の FORTRAN 77 プログラムとの互換性のために用意されています。このオプションに依存するコードは、標準外です。
ループの自動並列化を使用可能にします。
マルチプロセッサで並列処理の対象に適するループを探し、そのループを並列化します。内部反復データに依存するループを解析し、ループを再構築します。最適化レベルが -O3 以上に設定されていない場合は、自動的に -O3 に設定されます。
-autopar などの並列化オプションを使用している場合は、-stackvar オプションも指定します。-autopar を使用している場合は、-stackvar オプションを使用した方がパフォーマンスが改善される場合があります。これは、オプティマイザが並列化する機会をより多く検出できるようになるためです。メインスレッドおよびスレーブスレッドのスタックサイズを設定する方法については、-stackvar オプションの説明を参照してください。
プログラム中に libthread スレッドライブラリへの明示的な呼び出しがある場合は、-autopar は使用しないでください。「3.4.56 -mt[={ yes|no}]」の注釈を参照してください。
-autopar オプションは、シングルプロセッサのシステムには適していません。シングルプロセッサのシステムでこのオプションを付けてコンパイルを行うと、通常は実行速度が低下します。
-xautopar コンパイラオプションによって自動的に並列化されるプログラムを実行するときは、使用するスレッド数を指定する前に、OMP_NUM_THREADS 環境変数を使用してください。OMP_NUM_THREADS が設定されない場合、使用されるデフォルトのスレッド数は 2 です。多くのスレッドを使用するには、OMP_NUM_THREADS を高い値に設定してください。1 スレッドのみで実行するには、OMP_NUM_THREADS を 1 に設定します。一般的に、OMP_NUM_THREADS は、実行中のシステム上で使用可能な仮想プロセッサ数に設定します。これは、Oracle Solaris の psrinfo(1) コマンドを使用して判別できます。詳細は、『OpenMP API ユーザーズガイド』を参照してください。
-autopar を使用してコンパイルとリンクを一度に行う場合、マルチスレッド処理ライブラリとスレッド対応の Fortran 実行時ライブラリが自動的にリンクされます。-autopar を使用してコンパイルとリンクを別々に行う場合は、適切なライブラリにリンクするために、-autopar を使用してリンクを行う必要があります。
-reduction オプションは、-autopar オプションと組み合わせて使用することもできます。
並列化についての詳細は、『Fortran プログラミングガイド』を参照してください。明示的にユーザーが制御して並列化を行う場合は、OpenMP 指令および —xopenmp オプションを使用します。
動的または静的ライブラリリンクを指定します。
-B と dynamic または static の間に空白文字を入れないでください。-B を省略すると、デフォルトとして -Bdynamic が使用されます。
次の点にも注意してください。
static を指定した場合に動的ライブラリしか見つからないと、「library was not found」(ライブラリがありません) という警告メッセージが出力され、ライブラリのリンクは行われません。
dynamic を指定した場合に静的ライブラリしか見つからないと、その静的ライブラリとリンクされます。警告メッセージは表示されません。
コマンド行で、-Bstatic と -Bdynamic を切り替えることができます。次のように、-Bstatic と -Bdynamic をコマンド行で切り替えて、何回でもライブラリを静的および動的にリンクすることができます。
f95 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 実行時システムの静的ライブラリと動的ライブラリを組み合わせて使用することは推奨しません。リンカーエラーが発生したり、データが警告なしに破壊されたりする可能性があります。必ず、Fortran 実行時システムの最新の共有動的ライブラリとリンクさせてください。
静的ライブラリと動的ライブラリについての詳細は、『Fortran プログラミングガイド』を参照してください。
配列の添字が宣言されている範囲を超えると、セグメント例外などの予期しない結果になる場合があります。-C オプションはコンパイル時と実行時に、配列の添字に違反がないかどうかを検査します。-C は、実行時に、配列の構文が適合しているかも検査します。
-C を指定すると、実行可能ファイルのサイズが大きくなる場合があります。
-C オプションを使用すると、配列の添字違反はエラーとして扱われます。ソースコードのコンパイル中に配列添字の範囲違反が検出されると、コンパイルエラーとして扱われます。
配列添字の違反が実行時だけに検出される場合、コンパイラは実行可能プログラムの中に範囲を検査するコードを生成します。この結果、実行時間が長くなることがあります。したがって、プログラムの開発やデバッグを行なっている間にこのオプションを使用して配列添字の検査を有効にしておき、最後に添字検査なしで最終バージョンの実行可能ファイルを再コンパイルすると効果的です。
コンパイルだけを行い、.o オブジェクトファイルを生成します。リンクは行いません。
ソースファイルごとに .o ファイルを作成します。1 つのソースファイルだけをコンパイルする場合は、-o オプションを使用して、出力先の .o ファイルの名前を指定することができます。
定数の引数への代入を可能にします。
定数である仮引数を副プログラムが変更できるようにします。このオプションは、すでに作成済みのコードのコンパイル時と実行時にエラーが発生しないようにすることだけを目的としています。
-copyargs を指定しない場合、定数の引数をサブルーチンに渡し、そのサブルーチン内でその定数を変更しようとすると、実行が異常終了します。
-copyargs を指定した場合、定数の引数をサブルーチンに渡し、そのサブルーチン内でその定数を変更しようとしても、実行が必ずしも異常終了するとは限りません。
-copyargs を指定しないと異常終了してしまうコードは、Fortran 規格に準拠していません。また、このようなコードは予測できない動作をすることがあります。
このオプションは .F、.F90、.F95、および .F03 ソースファイルだけに適用します。
-Dname=def name が値 def を持つものと定義します。
-Dname name を 1 と定義します。
このオプションはコマンド行で name を、
#define name[= def]
とソースファイルに記述されている場合のように定義します。= def の指定がないと、シンボル名 name は値 1 として定義されます。マイクロシンボル name はプリプロセッサ fpp (または cpp。-xpp オプションを参照) に渡されて展開されます。
事前定義されたマクロシンボルの前には 2 つの下線を付けます。Fortran 構文には事前定義されたマクロの実際の値は使用できません。事前定義されたマクロは、fpp か cpp のプリプロセッサ指令内だけで使用してください (初めに付く 2 つの下線に注意)。
コンパイラバージョンは _ _SUNPRO_F90 および _ _SUNPRO_F95 内で (16 進で) 事前定義されています。たとえば、_ _SUNPRO_F95 は、Oracle Solaris Studio 12.3 リリースの Fortran コンパイラのバージョン 8.6 の場合、0x860 です。
次のマクロは、該当するシステム上でそれぞれ事前定義されています。
_ _sparc、_ _unix、 _ _sun、_ _SVR4、__i386 、 _ _SunOS_5_10、_ _SunOS_5_11
記号 _ _sparc、_ _sparcv8、および _ _sparcv9 は、それぞれの SPARC システム上で定義されます。
sparc、unix、sun は、下線なしで事前定義されていますが、将来のリリースで削除される可能性があります。
64 ビット x86 システムでは、__amd64 および __x86_64 マクロが定義されています。
.F、.F90、.F95、または .F03 ソースファイルを -v 詳細オプションでコンパイルすると、コンパイラによって想定されるプリプロセッサ定義が表示されます。
これらの値は、次のようなプリプロセッサ条件で使用することができます。
#ifdef _ _sparc
f95 は、デフォルトで fpp(1) プリプロセッサを使用します。C プリプロセッサ cpp(1) と同様に、fpp はソースコードマクロを展開して、コードを条件付きでコンパイルすることができます。ただし、cpp とは異なり、fpp は Fortran 構文を理解できるので、Fortran プリプロセッサとしてはこちらを使用することをお勧めします。-xpp=cpp フラグを使用すると、コンパイラは fpp ではなく cpp を使用します。
COMMON ブロックおよび標準の数値連続型の整列を行い、高速なマルチワードのロード/ストアを生成します。
このフラグを使用すると、COMMON ブロック、数値連続型、および EQUIVALENCE クラスのデータレイアウトが変更されるため、コンパイラは、そのデータに対する高速なマルチワードのロード/ストアを生成できるようになります。
データレイアウトは、-f フラグを指定した時と同じようになります。COMMON ブロックと EQUIVALENCE クラスの倍精度および 4 倍精度のデータが、メモリー内で「自然に」境界整列されます。これは、8 バイトの境界整列になります。なお、64 ビット環境で -m64 を指定してコンパイルを行うと、4 倍精度のデータは 16 バイトに境界整列されます。COMMON ブロック内のデータのデフォルト整列は、4 バイトの境界整列です。コンパイラも自然整列を前提とするため、高速なマルチワードのロード/ストアを生成してデータを参照できるようになります。
-dalign を -xtypemap=real:64,double:64,integer:64 とともに使用すると、SPARC プロセッサで 64 ビット整数変数がダブルワードで境界整列されます。
注 - -dalign を使用すると、データの境界整列が標準に合わなくなる場合があります。これが原因で、EQUIVALENCE や COMMON の変数に問題が生じることがあります。さらに、-dalign が必要な場合、移植性のないプログラムになります。
-dalign は、次と同等なマクロです。
SPARC プラットフォームの場合、-xmemalign=8s -aligncommon=16
32 ビット x86 プラットフォームの場合、-aligncommon=8
64 ビット x86 プラットフォームの場合、-aligncommon=16
ある 1 つの副プログラムに -dalign を付けてコンパイルした場合は、プログラムのすべての副プログラムに -dalign を付けてコンパイルしてください。このオプションは -fast オプションに含まれます。
-dalign は、-aligncommon を呼び出すので、標準の数値連続型も影響を受けます。「3.4.1 -aligncommon[ ={1|2|4| 8|16}]」を参照してください。
8 バイトの境界上でデータを強制的に整列します。
値には yes または no のいずれかを指定します。値が yes の場合、変数はすべて 8 バイトの境界に整列されます。デフォルトは、-dbl_align_all=no です。
64 ビット環境で -m64 を使用してコンパイルした場合、4 倍精度のデータは 16 バイト境界に整列されます。
このフラグによって、COMMON ブロック内のデータレイアウトやユーザー定義の構造体が変更されることはありません。
-dalign と併用して、マルチワードのロード/ストアで追加した効率を有効にします。
使用した場合、すべてのルーチンをこのフラグでコンパイルする必要があります。
反復間のデータ依存についてループを解析し、ループを再構築します。ループの再構築には、ループ交換、ループ融合、およびスカラー置換が含まれます。
-depend を指定しない場合、デフォルトは -depend=yes です。-depend を指定しても、引数を指定しない場合、コンパイラは -depend=yes を使用します。
依存解析をオフにするには、-depend=no でコンパイルします。
-xdepend は -depend と同義です。
f95 のコマンド行ドライバによって実行されるコマンド群を表示しますが、コンパイルは行いません。
デバッグ時に便利です。このオプションにより、コンパイルを実行するために呼び出されるコマンドとサブオプションが表示されます。
実行可能ファイル全体に対して、動的ライブラリを使用可能または使用不可にします。
このオプションを指定しない場合は、デフォルトとして -dy が使用されます。
-Bx とは異なり、このオプションは実行可能ファイル全体に適用され、コマンド行で 1 回だけ使用します。
-dy|-dn は、ローダーおよびリンカーのオプションです。これらのオプションを付けてコンパイルとリンクを別々に行う場合は、リンクでも同じオプションを指定する必要があります。
64 ビットの Solaris 環境で共有動的ライブラリとしてだけ使用できるシステムライブラリはほとんどありません。これらのシステムライブラリには、libm.so および libc.so があります。libm.a と libc.a は提供していません。このため、64 ビット Solaris プラットフォームと 32 ビット Solaris x86 プラットフォーム、Solaris 10 release 以降の 32 ビット Solaris プラットフォームのすべてで、-dn および -Bstatic がリンクエラーを引き起こすことがあります。この場合、アプリケーションを動的ライブラリとリンクさせる必要があります。
拡張された入力ソース行を受け付けます。
ソース行は、132 文字まで拡張できます。コンパイラは 132 桁目まで各行の右側を空白で埋めます。-e オプションを指定してコンパイルする場合に継続行を使用するときは、文字定数が複数行にまたがらないようにしてください。複数行にまたがると、不必要な空白が定数に挿入されてしまいます。
タグ名によって一覧表示された警告メッセージを抑制します。
各タグ名をコンマで区切った並び (taglist) で指定した警告メッセージの表示を抑制します。%all を指定した場合は、すべての警告が抑制されます。これは、 -w オプションを指定するのと同じです。%none の場合、警告は抑制されません。引数なしで —erroff を指定した場合は、—erroff=%all を指定するのと同じです。
例:
f95 -erroff=WDECL_LOCAL_NOTUSED ink.f
-errtags オプションを使用して、警告メッセージに関連付けられているタグ名を表示します。
メッセージタグが各警告メッセージ付きで表示されます。
-errtags=yes を付けると、コンパイラの内部エラータグ名が警告メッセージとともに表示されます。-errtags だけの場合は -errtags=yes と同じです。
デフォルトでは、タグは表示されません (-errtags=no)。
demo% f95 -errtags ink.f ink.f: MAIN: "ink.f", line 11: Warning: local variable "i" never used (WDECL_LOCAL_NOTUSED)
taglist は、エラーとして処理する警告メッセージのコンマ区切りのタグ名リストです。%all を指定した場合は、すべての警告メッセージがエラーとして処理されます。 %none の場合、警告メッセージはエラーとして処理されません。
-errtags も参照してください。
外部名に下線を付けるかどうかを指定します。
e には、plain、underscores、または fsecond-underscore のいずれかを指定します。デフォルトは underscores です。
-ext_names=plain: 下線を付けません。
-ext_names=underscores: 下線を付けます。
–ext_names=fsecond-underscore: 下線を含む外部名に二重下線を付け、下線を含まない外部名に一重下線を付けます。
外部名とは、サブルーチン、関数、ブロックデータ副プログラム、名前付き共通ブロックの名前のことです。このオプションは、ルーチンの入口の名前と、その呼び出しに使用する名前の両方に影響を与えます。このフラグを使用すると、Fortran のルーチンから別のプログラム言語のルーチンを呼び出す、または呼び出しを受けることができます。
fsecond-underscore は、gfortran との互換性のために用意されています。
ソースファイルプリプロセッサを呼び出しますが、コンパイルしません。
コマンド行に表示された .F、.F90、.F95、および .F03 ソースファイルに fpp プリプロセッサを適用し、同じファイル名で拡張子を .f (または .f95、.f03) に変えたファイルに結果を書き込みます。ただし、コンパイルは行いません。
例:
f95 -F source.F
このコマンドを実行すると、ソースファイルが source.f に書き込まれます。
fpp は Fortran のデフォルトのプリプロセッサです。C のプリプロセッサ (cpp) は、-xpp=cpp を指定すると選択されます。
COMMON ブロックの倍精度および 4 倍精度のデータを境界整列します。
-f は従来のオプションフラグで、-aligncommon=16 と同義です。-aligncommon を使用してください。
COMMON ブロック内のデータのデフォルト整列は、4 バイトの境界整列です。-f を使用すると、COMMON ブロックと EQUIVALENCE クラスの倍精度および 4 倍精度のデータが、メモリー内で「自然に」境界整列されます。これは、8 バイトの境界整列になります。なお、64 ビット環境で -m64 を指定してコンパイルを行うと、4 倍精度のデータは 16 バイトに境界整列されます。
注 - -f を使用すると、データの境界整列が標準に合わなくなることがあります。これが原因で、EQUIVALENCE や COMMON の変数に問題が生じることがあります。さらに、-f が必要な場合、移植性のないプログラムになります。
-f オプションを指定してプログラムのいずれかの部分をコンパイルする場合は、そのプログラムに含まれる副プログラムもすべて -f オプションを指定してコンパイルする必要があります。
このオプションを単独で使用すると、コンパイラで倍精度および 4 倍精度のデータに対して高速のマルチワードのフェッチ/ストア命令を生成することはできません。-dalign オプションがこれを実行し、-f も呼び出します。-f よりも -dalign を使用することをお勧めします。「3.4.10 -dalign」を参照してください。これは、-dalign が -f と同様に -fast オプションの一部であるからです。
FORTRAN 77 互換性モードを選択します。
このオプションフラグによって、Sun WorkShop f77 コンパイラが使用可能な言語拡張機能を含むソースプログラムを含め、従来の FORTRAN 77 ソースプログラムの f95 Fortran コンパイラへの移植が可能になります(FORTRAN 77 コンパイラは存在しません)。
list は、次のキーワードから選択された、コンマで区切られたリストです。
|
すべてのキーワードは、no% を前に付けて無効にすることができます。
-f77=%all,no%backslash
-f77 が指定されない場合は、デフォルトとして -f77=%none が使用されます。リストなしの -f77 は、-f77=%all と同じ意味を持ちます。
例外トラップと -f77:
-f77 を指定すると、Fortran のトラップモードが変更されず、-ftrap=common になります。f95 と FORTRAN 77 コンパイラは、演算例外トラップの動作が異なります。FORTRAN 77 コンパイラは、演算例外が発生したあとでも実行を継続することができます。-f77 によるコンパイルでも、プログラムはプログラム終了時に ieee_retrospective を呼び出して、演算例外が発生した場合はそれらの例外をすべて報告します。コマンド行の -f77 オプションフラグのあとに -ftrap=%none を指定すると、元の FORTRAN 77 の動作を真似することができます。
f77 の互換性および FORTRAN 77 から Fortran 95 への移行の詳細は、「4.12 言語の混在」を参照してください。
間違った結果を生じさせる可能性がある標準外のプログラミングの問題を処理する方法については、-xalias フラグも参照してください。
実行パフォーマンスを最適化するオプションを選択します。
注 - このオプションは、リリースごと、またはコンパイラごとに変更されることのあるほかのオプションを選択する機能として定義されています。-fast により選択されるいくつかのオプションはすべてのプラットフォームで使用できない可能性があります。-fast の展開を表示するには、-dryrun フラグを使用してコンパイルしてください。
-fast は、特定のベンチマークアプリケーションのパフォーマンスを引き上げます。しかし、オプションによっては、アプリケーションで使用できない場合があります。-fast を使用して、最大のパフォーマンスを得るためにアプリケーションをコンパイルしてください。しかし、さらに調整が必要な場合があります。-fast を指定してコンパイルしたプログラムが正しく動作しない場合、-fast を形成している個々のオプションを調査して、プログラムを正しく動作させるオプションだけを呼び出してください。
また、-fast でコンパイルされたプログラムは、使用するデータセットにより、高いパフォーマンスと正確な結果を実現できないことがあります。浮動小数点演算の特定プロパティーに依存しているプログラムは、-fast を使用してコンパイルしないでください。
-fast で選択されたオプションの一部は暗黙的にリンクするため、コンパイルとリンクを別々に行う場合は、リンク時も必ず -fast を指定してください。
-fast では次のオプションが選択されます。
-xtarget=native ハードウェアターゲット。 コンパイルを行うのとは異なるマシンでプログラムを実行する場合は、-fast のあとにコード生成オプションを付けます。例: f95 -fast -xtarget=ultraT2 ...
-depend オプションは、データの依存関係と再構築についてループを解析します。(このオプションは最適化レベル -xO3 以上でコンパイルすると、常に有効になります。)
システムが提供するインライン展開テンプレート用の -libmil オプション。 例外処理を使用する C モジュールでは、-fast のあとに -nolibmil (-fast -nolibmil のように) を付けます。-libmil を使うと errno の設定や、matherr(3m) の呼び出しによって、例外を検出することができなくなります。
積極的に浮動小数点を最適化しようとする -fsimple=2 オプション。厳密に IEEE 754 標準に準拠する必要がある場合は -fsimple=2 は適していません。「3.4.34 -fsimple[ ={1|2|0}]」を参照してください。
共通ブロックの倍および 4 倍データ用に倍長ロードとストアを生成する -dalign オプション。このオプションを使用すると、標準外の形式で共通ブロックの Fortran データの境界整列が行われる可能性があります。
-pad=local は、キャッシュの利用率を改善するために、適宜共通ブロック内の変数の間にパディングを挿入します。(SPARC)
-xvector=lib は、DO ループ内のある特定の数学ライブラリ呼び出しを、同等のベクトル化されたライブラリルーチンの単一呼び出しに変換します。(SPARC)
–fns は、標準外の浮動小数点演算の例外ハンドリングおよび段階的アンダーフローを選択します。「3.4.28 -fns[ ={yes| no}]」を参照してください。
—xvector および —xlibmopt で必要なため、-fround=nearest が選択されます。(Solaris)
共通の浮動小数点例外のトラッピング -ftrap=common は、f95 で有効です。
-nofstore は、式の精度を強制的に結果の精度にする設定を取り消します。(x86)
x86 で -xregs=frameptr を使用すると、コンパイラは汎用レジスタとしてフレームポインタレジスタを使用できます。特に C、C++、Fortran が混在するソースコードをコンパイルする場合は、詳細について —xregs=frameptr の説明を参照してください。-fast のあとに -xregs=no%frameptr を指定すると、フレームポインタレジスタは通常の用途でのレジスタとして使用されません。(x86)
次に示すように、-fast オプションのあとに別のオプションを付けて、このリストに追加したり削除したりできます。
f95 -fast -fsimple=1 -xnolibmopt ...
この例では、-fast で選択された -fsimple=2 の指定を変更し、-xlibmopt を無効にしています。
-fast は -dalign、-fns、-fsimple=2 を呼び出すため、-fast でコンパイルされたプログラムは、標準外の浮動小数点演算、標準外のデータ整列、および標準外の式評価の配列を招くことがあります。これらの選択オプションは、ほとんどのプログラムに適していない可能性があります。
-fast フラグで選択する一連のオプションは、コンパイラのリリースによって変更されることがあります。-dryrun を指定してコンパイラを呼び出すと、-fast の展開値が表示されます。
<sparc>%f95 -dryrun -fast |& grep ### ### command line files and options (expanded): ### -dryrun -xO5 -xarch=sparcvis2 -xcache=64/32/4:1024/64/4 -xchip=ultra3i -xdepend=yes -xpad=local -xvector=lib -dalign -fsimple=2 -fns=yes -ftrap=common -xlibmil -xlibmopt -fround=nearest
固定形式の Fortran 95 ソース入力ファイルを指定します。
コマンド行に指定するソースファイルはすべて、ファイル名の拡張子に関係なく固定形式として解釈されます。通常、f95 は .f のファイルだけを固定形式として解釈し、.f95 ファイルを自由形式として解釈します。
-help と同義です。
(SPARC) 浮動小数点演算、融合演算、積和演算命令の自動生成を有効にします。-fma=none は、これらの命令の生成を無効にします。-fma=fused は、コンパイラが浮動小数点演算、融合演算、積和演算命令を使用して、コードのパフォーマンスを改善する機会を見つけようとすることを許可します。デフォルトは -fma=none です。
融合した積和演算命令を生成するには、コンパイラに対して -xarch=sparcfmaf および最適化レベルが -xO2 以上に設定されていることが最低限必要です。融合した積和演算命令が生成された場合は、これらの命令をサポートしていないプラットフォームでプログラムが実行されないように、コンパイラはバイナリプログラムにマークを付けます。
積和演算 (FMA) により、積と和 (乗算と加算) の間で中間の丸め手順が排除されます。その結果、-fma=fused を指定してコンパイルしたプログラムは、精度は減少ではなく増加する傾向にありますが、異なる結果になることがあります。
浮動小数点算術ハードウェアの非標準の初期化を行います。
このオプションは、次のオプションフラグを組み合わせたマクロです。
–fns -ftrap=common
-fnonstd を指定することは、Fortran 主プログラムの先頭で次の 2 つの呼び出しを行うのとほぼ同じです。
i=ieee_handler("set", "common", SIGFPE_ABORT) call nonstandard_arithmetic()
nonstandard_arithmetic() ルーチンは、旧式の abrupt_underflow() ルーチンの代わりです。
このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。
このオプションを使用すると、浮動小数点ハードウェアが初期化されて次の処理が実行されます。
浮動小数点例外で異常終了 (トラップ) します。
速度が改善する場合には、アンダーフローのフラッシュ時に、IEEE 規格の要求しているような非正規数ではなく、ゼロを生成します。
段階的アンダーフローおよび非正規数についての詳細は、-fns を参照してください。
-fnonstd オプションは、浮動小数点オーバーフロー、ゼロによる除算、無効な演算などの例外処理のためのハードウェアトラップを可能にします。これらのハードウェアトラップは SIGFPE シグナルに変換され、プログラムに SIGFPE ハンドラがなければメモリーダンプして終了します。
詳細は、ieee_handler(3m) と ieee_functions(3m) のマニュアルページ、『数値計算ガイド』、および『Fortran プログラミングガイド』を参照してください。
デフォルトは標準の浮動小数点モード (-fns=no) です。『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。
-fast などの -fns フラグが含まれるマクロフラグのあとに =yes または =no オプションを使用して -fns フラグを切り替えることができます。値を指定しない場合、 -fns は、-fns=yes と同じです。
このオプションフラグは、プログラムの実行開始時に、非標準の浮動小数点モードを有効にします。SPARC プラットフォームで非標準の浮動小数点モードを指定すると、「段階的アンダーフロー」が無効になります。つまり、小さな結果は、非正規数にはならず、ゼロに切り捨てられます。さらに、このモードでは、非正規のオペランドが報告なしにゼロに置き換えられます。このような SPARC システムでは、ハードウェアの段階的アンダーフローや非正規数がサポートされておらず、このオプションを使用するとプログラムのパフォーマンスを著しく改善することができます。
x が完全なアンダーフローの原因にならない場合、|x| が次の範囲にある数であるときにのみ、x は非正規数になります。
表 3-8 非正規数 REAL と DOUBLE
|
非正規数に関する詳細は、『数値計算ガイド』を参照してください。また、このオプションおよび関連するオプションについては『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。(演算によっては、「非正規数」を表すのに「指数が最小の非正規化数」という用語を使用している場合があります)。
デフォルトでは、浮動小数点は標準の設定に初期化されます。
x86 プラットフォームの場合、このオプションは Pentium III および Pentium 4 プロセッサ (sse または sse2 命令セット) でのみ有効です。
x86 では、-fns は SSE flush-to-zero モードを選択します。利用可能な場合には、denormals-are-zero モードが選択されます。このフラグは、非正規数の結果をゼロに切り捨てます。また、利用可能な場合には、非正規数オペランドもゼロとして扱われます。このフラグは、SSE または SSE2 命令セットを利用しない従来の x87 浮動小数点演算には影響しません。
このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。
書式付きの入力で浮動小数点オーバーフローを検出します。
-fpover=yes を指定すると、入出力ライブラリは書式付きの入力で実行時浮動小数点オーバーフローを検出し、エラー条件 (1031) を返します。デフォルトでは、このようなオーバーフローの検出は行いません (–fpover=no )。値を指定しない場合、-fpover は -fpover=yes と同等です。—ftrap とともに使用すると、完全な診断情報が表示されます。
ファイルの拡張子に関係なく、f95 コマンド行にリストされた全入力ソースファイルを fpp プリプロセッサに渡します。通常、fpp によって自動的に先行処理されるファイルは、拡張子が .F、.F90、または .F95 のファイルのみです。「3.4.152 -xpp={ fpp|cpp}」も参照してください。
(x86) 非標準の浮動小数点丸め精度モードを初期設定します。
x86 プラットフォームで、浮動小数点精度モードを single、double、extended のいずれかに設定します。
single か double の場合、丸め精度モードは、プログラムの実行が始まるときに、それぞれ単精度、倍精度に設定されます。extended か、-fprecision が指定されなかった場合のデフォルトでは、丸め精度モードは拡張精度に初期設定されます。
このオプションは、x86 システムでメインプログラムのコンパイル時に使用する場合にのみ有効で、64 ビット (-m64) または SSE2 対応 (-xarch=sse2) プロセッサでコンパイルする場合は無視されます。SPARC システムでも無視されます。
コマンド行で指定したソースファイルはすべて、ファイル名の拡張子を問わず、f95 自由形式と解釈されます。通常、f95 は .f のファイルだけを固定形式として解釈し、.f95 ファイルを自由形式として解釈します。
起動時に IEEE の丸めモードを有効にします。
このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。
このオプションは、次に示す IEEE 754 丸めモードを設定します。
定数式の評価時にコンパイラによって使用されます。
実行時のプログラム初期化中に設定されます。
値が tozero、negative、または positive の場合、プログラムの実行開始時に、オプションは丸め方向を round-to-zero、round-to-negative-infinity、または round-to-positive-infinity にそれぞれ設定します。-fround を指定しない場合は、デフォルトで -fround=nearest が使用され、丸め方向は round-to-nearest になります。このオプションの意味は ieee_flags 関数の場合と同じです。『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。
浮動小数点最適化の設定を選択します。
オプティマイザが浮動小数点演算に関する前提を単純化できるようにします。『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。
一貫した結果を得るには、プログラム中のすべての副プログラムを同じ -fsimple オプションを付けてコンパイルする必要があります。
デフォルトは次のとおりです。
-fsimple フラグが指定されていない場合、コンパイラは -fsimple=0 とみなします。
値なしで -fsimple が指定されている場合、コンパイラは -fsimple=1 を使用します。
別の浮動小数点単純化レベルは次のとおりです。
仮定の設定を許可しません。IEEE 754 に厳密に準拠します。
若干の単純化を認めます。生成されるコードは IEEE 754 に厳密には準拠していませんが、大半のプログラムの数値結果は変わりありません。
-fsimple=1 の場合、次に示す内容を前提とした最適化が行われます。
IEEE 754 のデフォルトの丸めとトラップモードが、プロセスの初期化以後も変わらない。
浮動小数点例外以外には、目に見える結果が生じない演算は削除できる。
演算対象として無限または非数を伴う演算において、非数を結果に反映させる必要はない。たとえば、x*0 は 0 で置き換えてよい。
-fsimple=1 を指定すると、オプティマイザは必ず丸めまたは例外に応じた、完全な最適化を行います。特に、浮動小数点演算を、実行時に一定に保たれる丸めモードにおいて異なる結果を生成する浮動小数点演算と置き換えることはできません。
—fsimple=1 に加えて、積極的な浮動小数点の最適化を許可します。このため、一部のプログラムは、数式の評価方法の変更が原因で、異なる数値結果を出すことがあります。特に、Fortran の標準規則は、部分式の明示的な括弧を重視して式の評価の配列を制御するため、-fsimple=2 によって違反が生じることがあります。その結果、Fortran の規則に依存するプログラムにおいて、数値の丸めに差異が生じる可能性があります。
たとえば、-fsimple=2 を使用すると、コンパイラは C-(A-B) を (C-A)+B として評価するため、最終的なコードがより良好に最適化されている場合、明示的な括弧について標準規則の違反が生じます。また、コンパイラは、x/y の反復演算を x*z で置き換えることがあります。この場合、z=1/y が 1 回だけ計算されて一時的に保存されるため、コストのかかる割り算が除去されます。
浮動小数点演算の特定プロパティーに依存するプログラムは、-fsimple=2 でコンパイルしないでください。
ただし、-fsimple=2 を指定していても、-fsimple=2 を指定しなければ発生しない浮動小数点例外をプログラムに発生させるような最適化はできません。
-fast は -fsimple=2 を選択します。
代入文の場合、このオプションはあらゆる浮動小数点式を強制的に代入先の変数の精度にします。これはデフォルト値です。ただし、-fast オプションには、このオプションを無効にする -nofstore が含まれています。再びこのオプションを有効にするには、-fast のあとに -fstore を続けてください。
t には、次の 1 つまたは複数の項目をコンマで区切って指定します。
%all、%none、common、[no%]invalid、[no%]overflow、[no%]underflow、[no%]division、[no%]inexact。
-ftrap=common は、-ftrap=invalid,overflow,division のマクロです。
f95 のデフォルトは -ftrap=common です。これは、C および C++ コンパイラのデフォルト (-ftrap=none) と異なります。
起動時に IEEE 745 のトラップモードを有効にします。ただし、SIGFPE ハンドラは組み込まれません。トラップの設定と SIGFPE ハンドラの組み込みを同時に行うには、ieee_handler(3M) か fex_set_handling(3M) を使用します。複数の値を指定すると、それらの値は左から右に処理されます。共通の例外とは、演算不可能、ゼロによる除算、およびオーバーフローと定義されています。
例: -ftrap=%all,no%inexact は、inexact を除くすべての例外に対して、トラップを設定するという意味です。
次の点を除いて、-ftrap=t の意味は ieee_flags() と同じです。
%all は、全トラップモードをオンにし、予期している例外にも予期していない例外にもトラップを発生させます。この代わりに common を使用してください。
%none は、すべてのトラップモードをオフにします。
先頭に付いている no% はそのトラップモードをオフにします。
このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。
詳細は、『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。
実行可能ファイルの代わりに、動的共有ライブラリを構築します。
このオプションは、動的共有ライブラリを構築するようリンカーに指示します。-G を指定しないと、リンカーは実行可能ファイルを構築します。-G を指定すると、動的ライブラリを構築します。出力ファイル名を指定するには、-G オプションとともに -o オプションを使用します。詳細は、『 Fortran プログラミングガイド 』の「ライブラリ」の章を参照してください。
dbx(1) デバッグユーティリティーによるデバッグ、およびパフォーマンスアナライザによるパフォーマンス分析のために、シンボルテーブル情報を生成します。
-g の指定がなくてもある程度のデバッグはできますが、dbx とデバッガのすべての機能を使用するには、-g を付けてコンパイルする必要があります。
-g とともに指定した、ほかのオプションの機能の一部が制限される場合があります。詳細は、『dbx コマンドによるデバッグ』を参照してください。
パフォーマンスアナライザの機能を最大限に利用するには、-g オプションを指定してコンパイルします。一部のパフォーマンス分析機能は -g を必要としませんが、注釈付きのソースコード、一部の関数レベルの情報、およびコンパイラの注釈メッセージを確認するには、-g でコンパイルする必要があります。詳細は、analyzer(1) マニュアルページおよびマニュアル『Solaris Studio パフォーマンスアナライザ』を参照してください。
-g で生成される注釈メッセージは、プログラムのコンパイル時にコンパイラの実行した最適化と変換について説明します。これらのメッセージは、ソースコードに挿入されているため、er_src(1) コマンドで表示できます。
注釈メッセージは、コンパイラが実際に最適化を実行した場合に限り表示されます。-xO4、-fast などを使用して高度な最適化レベルを要求すると、注釈メッセージの表示される可能性が高くなります。
このオプションはリンカーに渡されます。詳細は、Oracle Solaris の『リンカーとライブラリガイド』および『Fortran プログラミングガイド』の「ライブラリ」の章を参照してください。
-hname オプションにより、作成される共有動的ライブラリに、ライブラリの内部名として name という名前が記録されます。-h と name の間には空白文字があってもなくてもかまいません (ライブラリ名が elp の場合を除く。この場合、空白が必要となる)。通常、name には -o のあとに指定する名前と同じものを指定してください。-G を指定せずにこのオプションを使用しても意味がありません。
-hname オプションを省略すると、ライブラリファイルに内部名は記録されません。
ライブラリに内部名がある場合、このライブラリを引用する実行可能プログラムを実行するときは、実行時リンカーはあらゆるパスを検索して、同じ内部名を持つライブラリを探します。内部名を指定しておくと、実行時リンクの際に行うライブラリの検索が、より柔軟になります。このオプションは、共有ライブラリのバージョンを指定する場合にも使用できます。
共有ライブラリの内部名がない場合、リンカーは代わりに共有ライブラリファイルの特定のパスを使用します。
コンパイルオプションの一覧を表示します。
「3.4.118 -xhelp=flags」も参照してください。
INCLUDE ファイルの検索パスに path を追加します。
INCLUDE ファイルの検索パスの先頭に、ディレクトリパス path を挿入します。-I と path の間に空白があってもかまいません。無効なディレクトリを指定した場合には、警告メッセージが表示されずに無視されます。
「インクルードファイルの検索パス」とは、INCLUDE ファイルを探すために使用するディレクトリのリストです。インクルードファイルとは、プリプロセッサ指令 #include、または Fortran の INCLUDE 文に指定するファイルです。
検索パスは、MODULE ファイルの検索にも使用されます。
例: /usr/app/include で INCLUDE ファイルを検索するには、次のようにします。
demo% f95 -I/usr/app/include growth.F
コマンド行で複数回 -IIpath オプションを指定することができます。各オプションを指定するごとに、検索パスリストの先頭に最初に検索するパスとして追加されます。
INCLUDE 文または #include 指令の相対パス名は次の順序で検索されます。
プリプロセッサを呼び出すには、.F、.F90、.F95、または .F03 の拡張子付きのソースファイルをコンパイルする必要があります。
このコンパイラで 8 バイト INTEGER を指定するには、—xtypemap=integer:64 を使用します。
指定のルーチンのインライン化を有効または無効にします。
関数およびサブルーチン名のコンマ区切りのリストに指定されたユーザー作成のルーチンをインライン化するようオプティマイザに要求します。ルーチン名に no% という接頭辞を付けると、そのルーチンのインライン化が無効になります。
インライン化とは最適化の手法の 1 つで、CALLや関数呼び出しなどの副プログラムの引用を、実際の副プログラムコードに効果的に置き換えます。インライン機能を有効にすると、オプティマイザが効率的なコードを生成できる機会が増えます。
%auto を指定すると、最適化レベル -O4 または -O5 での自動インライン化が有効になります。-inline で明示的なインライン化が指定されている場合、通常、これらの最適化レベルでの自動インライン化は無効になります。
関数や %auto を指定せずに -xinline= を指定した場合、ソースファイル中のルーチンはいずれもインライン化されません。
例: ルーチン xbar、zbar、vpoint をインライン化します。
demo% f95 -O3 -inline=xbar,zbar,vpoint *.f
このオプションを使用するための条件は次のとおりです。ただし、条件が満たされていなくても、警告メッセージは出力されません。
最適化レベルが -O3 以上に設定されている。
ルーチンのソースがコンパイルされているファイル中にある。ただし、-xipo または -xcrossfile が指定されている場合を除く。
コンパイラは、実際にインライン化した結果が安全で効果があるかどうかを判断する。
-inline を -O4 とともに指定すると、コンパイラが通常実行する自動インライン化機能が使用できなくなります (%auto も指定した場合は除く)。なお、-O4 を指定すると、コンパイラは通常、ユーザー作成の適切なサブルーチンや関数をすべてインライン化しようとします。-O4 に -inline を追加すると、オプティマイザはリスト中にあるルーチンに限ってインライン化を行うため、実際にはパフォーマンスが低下します。この場合、%auto サブオプションを使用して、-O4 および -O5 で自動インライン化を有効にします。
demo% f95 -O4 -inline=%auto,no%zpoint *.f
前述の例では、-O4 の自動インライン化を有効にしながら、コンパイラが試みる zpoint() ルーチンのインライン化を無効にしています。
すべての書式付き入出力操作の ROUND= 指示子を広域的に設定します。
-iorounding=compatible と指定する場合は、データ変換によって得られる値は、2 つのもっとも近い表示値のうち、より近い方の表示値になります。値が表示値のちょうど中間である場合は、0 から離れている方の表示値になります。
-iorounding=processor-defined を指定する場合は、丸めモードは、プロセッサのデフォルトのモードです。-iorounding が指定されない場合は、これがデフォルトになります。
コンパイル中に作成された一時ファイルを保持します。
(廃止) -pic と同義です。
(廃止) -PIC と同義です。
ライブラリ検索ディレクトリパスのリストに path を追加します。
オブジェクトライブラリの検索ディレクトリのリストの先頭にディレクトリ path を追加します。-L と path の間の空白文字はあってもなくてもかまいません。このオプションはリンカーに渡されます。「3.4.49 -lx」も参照してください。
ld(1) は、実行可能ファイルを生成しながら、path でアーカイブライブラリ (.a ファイル) と共有ライブラリ (.so ファイル) を探します。ld はまず path を検索してから、デフォルトのディレクトリを探します。ライブラリの検索順序に関する詳細は、『Fortran プログラミングガイド』の「ライブラリ」の章を参照してください。LD_LIBRARY_PATH および -Lpath の相対的な順序については、ld(1) を参照してください。
注 - -L path を使用して /usr/lib または /usr/ccs/lib を指定すると、バンドルされていない libm はリンクされなくなります。これらのディレクトリはデフォルトで検索されます。
例: -Lpath を使用して、ライブラリを検索するディレクトリを指定します。
demo% f95 -L./dir1 -L./dir2 any.f
リンカー検索ライブラリのリストに、ライブラリ libx.a を追加します。
-lx をリンカーに渡して、ld が未解決の参照を検索するためのライブラリを追加指定します。ld は、オブジェクトライブラリ libx をリンクします。共有ライブラリ libx.so が使用できる場合 (-Bstatic または -dn が指定されていない場合)、ld はこれを使用します。そうでなければ、ld は静的ライブラリ libx .a を使用します。共有ライブラリを使用する場合は、名前は a.out に組み込まれます。-l と x の間には、空白文字を入れないでください。
例: ライブラリ libVZY をリンクします。
demo% f95 any.f -lVZY
複数のライブラリとリンクするには、-lx を再度使用してください。
例: ライブラリ liby と libz をリンクします。
demo% f95 any.f -ly -lz
ライブラリの検索パス、および検索順序については、『Fortran プログラミングガイド』の「ライブラリ」の章を参照してください。
最適化として libm ライブラリルーチンをインライン化します。
一部の libm ライブラリルーチンには、インラインテンプレートがあります。このオプションを指定すると、これらのテンプレートが選択され、現在選択されている浮動小数点オプションとプラットフォームに対してもっとも高速な実行可能コードが生成されます。
詳細は、libm_single(3F) および libm_double(3F) のマニュアルページを参照してください。
Oracle Solaris Studio 提供のパフォーマンスライブラリにリンクします。(『Sun Performance Library User’s Guide 』を参照)。
–autopar オプションで並列化されたループと並列化されなかったループを表示します。
-loopinfo により、標準エラーに次のメッセージリストが出力されます。
demo% f95 -c -fast -autopar -loopinfo shalow.f ... "shalow.f", line 172: PARALLELIZED, and serial version generated "shalow.f", line 173: not parallelized, not profitable "shalow.f", line 181: PARALLELIZED, fused "shalow.f", line 182: not parallelized, not profitable ... ...etc
MODULE ディレクトリ、アーカイブ、またはファイルを指定します。
現在のコンパイルで参照されている Fortran モジュールの検索で、指定されたパスを調べます。現在のディレクトリのほかに、このパスが調べられます。
path には、ディレクトリ、.a アーカイブファイル (プリコンパイル済みモジュールファイルの場合)、または .mod プリコンパイル済みモジュールファイルを指定できます。コンパイラは、ファイルの内容を検査してファイルの種類を判定します。
.a アーカイブファイルは、-M オプションフラグで、モジュールが検索されることが明示的に指定される必要があります。デフォルトでは、コンパイラはアーカイブファイルを検索しません。
USE 文にある MODULE 名と同じ名前の .mod ファイルのみが検索されます。たとえば USE ME 文があると、コンパイラは me.mod モジュールファイルのみ検索します。
検索時には、モジュールファイルの書き込み先のディレクトリが優先されます。これは、-moddir コンパイラオプションか MODDIR 環境変数で制御します。どちらも指定されていない場合は、現在のディレクトリがデフォルトの書き込み先ディレクトリになります。両方とも指定されている場合、-moddir フラグで指定されているパスが書き込み先ディレクトリになります。
これは、-M フラグのみが表示されている場合は、-M フラグに指定されているすべてのオブジェクトの前に現在のディレクトリでモジュール検索が行われることを意味します。以前のリリースの動作をエミュレートするには、次を使用します。
-moddir=empty-dir -Mdir -M
ここで empty-dir は空のディレクトリへのパスです。
検索対象の場所でファイルが見つからない場合は、—I path で指定されたディレクトリでモジュールファイルが検索されます。
-M とパスの間に空白文字を入れてもかまいません。たとえば、-M /home/siri/PK15/Modules のようにします。
Solaris で、アーカイブやモジュールファイル以外の通常ファイルをパスに指定した場合は、コンパイラは ld オプションをリンカーに渡し、リンカーマップファイルとしてファイルを処理します。これは C および C++ コンパイラと同様の便利な機能です。
Fortran モジュールについての詳細は、「4.9 モジュールファイル」を参照してください。
コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。
32 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m32 を使用します。64 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m64 を使用します。
ILP32 メモリーモデル (32 ビット int、long、ポインタデータ型) は 64 ビット対応ではないすべての Solaris プラットフォームおよび Linux プラットフォームのデフォルトです。LP64 メモリーモデル (64 ビット long、ポインタデータ型) は 64 ビット対応の Linux プラットフォームのデフォルトです。-m64 は、LP64 モデルが使用可能なプラットフォームでのみ許可されます。
-m32 でコンパイルされたオブジェクトファイルまたはライブラリは、-m64 でコンパイルされたオブジェクトファイルまたはライブラリとリンクできません。
x64 プラットフォームで大量の静的データを持つアプリケーションを -m64 を使用してコンパイルするときは、-xmodel=medium も必要になることがあります。
一部の Linux プラットフォームは、ミディアムモデルをサポートしていません。
旧バージョンのコンパイラでは、-xarch で命令セットを選択することで、メモリーモデルの ILP32 または LP64 が暗黙に指定されていました。Solaris Studio 12 以降のコンパイラでは、このようなことはありません。ほとんどのプラットフォームでは、64 ビットオブジェクトを作成するのに、コマンド行に -m64 を追加するだけです。
Solaris では、-m32 がデフォルト値です。64 ビットプログラムをサポートしている Linux システムでは、-m64 -xarch=sse2 がデフォルト値です。
コンパイルされた .mod MODULE ファイルの書き込み先を指定します。
コンパイラは、コンパイルした .mod MODULE 情報ファイルを path で指定されたディレクトリに書き込みます。ディレクトリパスは、MODDIR 環境変数で指定することもできます。両方が指定されている場合は、このオプションフラグが優先されます。
デフォルトでは、コンパイラは .mod ファイルの書き込み先として現在のディレクトリを使用します。
Fortran モジュールについての詳細は、「4.9 モジュールファイル」を参照してください。
このオプションを使用して、Oracle Solaris スレッドまたは POSIX スレッドの API を使用しているマルチスレッド化コードをコンパイルおよびリンクします。-mt=yes オプションにより、ライブラリが適切な順序でリンクされることが保証されます。
このオプションは -D_REENTRANT をプリプロセッサに渡します。
Linux プラットフォーム上では、POSIX スレッドの API のみが使用できます (Linux プラットフォームには libthread はありません)。したがって、Linux プラットフォームで -mt=yes を使用すると、—lthread の代わりに —lpthread が追加されます。Linux プラットフォームで POSIX スレッドを使用するには、—mt を使用してコンパイルします。
—G を使用してコンパイルする場合は、-mt=yes を指定しても、—lthread と —lpthread のどちらも自動的には含められません。共有ライブラリを構築する場合は、これらのライブラリを明示的にリストする必要があります。
(OpenMP 共有メモリー並列化 API を使用するための) —xopenmp オプションには、-mt=yes が自動的に含まれます。
-mt=yes を指定してコンパイルを実行し、リンクを個別の手順でリンクする場合は、コンパイル手順と同様にリンク手順でも -mt=yes オプションを使用する必要があります。-mt=yes を使用して 1 つの変換ユニットをコンパイルおよびリンクする場合は、-mt=yes を指定してプログラムのすべてのユニットをコンパイルおよびリンクする必要があります。
-mt=yes は、コンパイラのデフォルトの動作です。この動作が望ましくない場合は、-mt=no でコンパイルします。
オプション -mt は、-mt=yes と同じです。
(廃止) ホストシステムに対してパフォーマンスを最適化します。
このオプションは、-xtarget=native と同義です。-xtarget=native の使用を推奨します。-fast オプションでは -xtarget=native と設定します。
コマンド行で先に指定された -autopar で起動されている自動並列化を無効にします。
コマンド行で先に指定された -depend を取り消します。-depend=no は、-nodepend よりも優先して使用されます。
コンパイラのデフォルトは -fstore です。-fast には、-nofstore が含まれています。
どの システムライブラリや言語ライブラリとも自動的にリンクを行いません。つまりデフォルトの -lx オプションを ld に渡さないということです。通常は、ユーザーがコマンド行で指定しなくても、システムライブラリは実行可能ファイルに自動的にリンクされます。
-nolib オプションを使用すると、必要なライブラリの中の 1 つを静的にリンクするといった作業が容易になります。最終的な実行には、システムおよび言語ライブラリが必要です。手動でライブラリとのリンクを行なってください。このオプションを使用すると、すべてを管理できます。
f95 では、libm を静的にリンクし、libc を動的にリンクします。
demo% f95 -nolib any.f95 -Bstatic -lm -Bdynamic -lc
-lx オプションの指定の順番には意味があります。例に示す順序で指定してください。
コマンド行の -libmil を取り消します。
このオプションは、次の例のように、-fast オプションのあとに使用して、libm 数学ルーチンのインライン化を無効にします。
demo% f95 -fast -nolibmil …
コマンド行の -reduction を無効にします。
このオプションにより、-reduction オプションが無効になります。
実行可能ファイル中に、実行時共有ライブラリのパスを設定しません。
コンパイラは通常、実行時リンカーが共有ライブラリを検索する位置を示すパスを実行可能ファイル中に設定します。このパスはインストールの形式によって異なります。-norunpath オプションは、実行可能ファイルにパスが組み込まれないようにします。
ライブラリを標準でない場所にインストールし、別のサイトで実行可能ファイルを実行したときに、ローダーがそのパスを検索しないようにする場合に、このオプションを使用します。-Rpaths と比較してみてください。
詳細は、『 Fortran プログラミングガイド 』の「ライブラリ」の章を参照してください。
n には 1、2、3、4、5 のいずれかを指定します。-O と n の間には空白文字を入れないでください。
-O[n] の指定がない場合は、基本的な最適化のレベルは、局所的な共通部分式の除去、および不要コードの分析だけに限られます。プログラムのパフォーマンスは、最適化なしの場合よりも、特定の最適化レベルを指定してコンパイルした方が、大幅に改善されることがあります。通常のプログラムには、-O (レベル -O3) または -fast (レベル -O5) を使用することをお勧めします。
-On の各レベルには、それよりも低いレベルでの最適化が含まれています。一般に、プログラムのコンパイル時の最適化レベルが高いと、実行時のパフォーマンスも向上します。ただし、最適化レベルを高くすると、コンパイル時間が長くなり、実行可能ファイルのサイズが大きくなります。
-g を使用するデバッグは -On を抑制しませんが、-On は -g のいくつかの機能を制限します。dbx に関するマニュアルを参照してください
-O3 と -O4 のオプションでは、dbx から変数を表示できないという点で、デバッグ機能が制限されますが、dbx where コマンドを使用してシンボルを追跡することができます。
オプティマイザがメモリーを使い切ると、レベルを下げて最適化をやり直します。以降のルーチンでは元のレベルに戻ってコンパイルを行います。
最適化についての詳細は、『Fortran プログラミングガイド』の「パフォーマンスプロファイリング」と「パフォーマンスと最適化」の章を参照してください。
-O3 と同義です。
文レベルの最小限の最適化を行います。
高いレベルの最適化では、コンパイル時間が長すぎる場合、またはスワップ領域を超えている場合に使用します。
基本ブロックレベルの最適化を行います。
通常、生成されるコードのサイズがもっとも小さくなります (-xspace も参照)。
-O3 を使用すると、コンパイル時間が長すぎる場合、スワップ領域を超えている場合、または生成される実行可能ファイルのサイズが大きすぎる場合には -O2 を使用します。これ以外の場合は、-O3 を使用してください。
関数レベルで、ループを展開し大域的に最適化を行います。-depend を自動的に追加します。
通常、-O3 では生成される実行可能ファイルのサイズが大きくなります。
同じファイル内にあるルーチンの自動インライン化を追加します。
インライン化が行われるため、-O4 では、生成される実行可能ファイルのサイズが通常大きくなります。
-g オプションを指定すると、前に説明した -O4 による自動的なインライン化は行われません。–xcrossfile を使用すると、-O4 によるインライン化の範囲が拡張されます。
最高レベルの最適化を試行します。
プログラムの中で、全体の計算時間のうちの最大部分を消費する部分に限って適用してください。-O5 の最適化アルゴリズムは、ソースプログラム中でこのレベルを適用する部分が大きすぎると、コンパイルに時間がかかり、パフォーマンスが低下する場合もあります。
プロファイルのフィードバックと併せて使用すると、最適化がパフォーマンスの向上につながる可能性が高まります。-xprofile=p を参照してください。
書き込み先の実行可能ファイルの名前を指定します。
-o と filename の間には空白文字を 1 つ入れてください。このオプションを省略すると、デフォルトとして実行可能ファイルが a.out に書き込まれます。また -c とともに使用すると、-o はターゲットの .o オブジェクトファイルの名前を指定します。また -G とともに使用すると、ターゲットの .so ライブラリファイルの名前を指定します。
DO ループが少なくとも 1 回は実行されるようにコンパイルします。標準 Fortran の DO ループは、一部の古典的な Fortran の実装とは異なり、上限が下限より小さい場合には、1 回も実行されません。
(廃止) prof プロファイラを使用するプロファイル用にコンパイルします。
プロファイル用のオブジェクトファイルを作成します。prof (1) を参照してください。コンパイルとリンクを分けて行う場合、-p オプションを付けてコンパイルしたときはリンクでも必ず -p オプションを付けてください。-p と prof は主に旧式のシステムとの互換性を保つために使用します。gprof を使用した -pg プロファイリングの方をお勧めします。詳細は、『Fortran プログラミングガイド』のパフォーマンスプロファイルに関する説明を参照してください。
キャッシュを効率よく利用するためにパディングを挿入します。
配列や文字変数が、静的な局所変数で初期化されていない場合、または共通ブロックにある場合、間にパディングを挿入します。パディングは、キャッシュを効率的に利用できる位置にデータが配置されるように挿入されます。いずれの場合も、配列または文字変数を等値化することはできません。
p を指定する場合は、%none か、local または common のいずれかまたは両方を指定する必要があります。
|
local と common の両方を指定する場合、順序はどちらが先でもかまいません。
-pad のデフォルトは、次のとおりです。
デフォルトではコンパイラはパディングを挿入しません。
値なしの -pad は -pad=local,common と指定するのと同じです。
-pad[=p] オプションは、次の条件を満たす項目に適用されます。
配列または文字変数になっている項目
静的で局所的または共通ブロックにある項目
局所変数または静的変数については、「3.4.83 -stackvar」を参照してください。
プログラムは次の制限事項に従っている必要があります。
配列と文字列のどちらも等値化されません。
ある共通ブロックを引用するファイルのコンパイルで -pad=common を指定するときは、その共通ブロックを引用するすべてのファイルのコンパイルで -pad=common を指定する必要があります。このオプションは、共通ブロック内の変数の配置を変更します。あるプログラム単位をこのオプション付きでコンパイルし、別のプログラム単位をこのオプションなしでコンパイルすると、共通ブロック内の同じ位置への引用が、別の位置を引用してしまう可能性が生じます。
-pad=common を指定する場合、別のプログラム単位にある共通ブロックの変数宣言を、名前を除いて同じにする必要があります。共通ブロックの変数の間に挿入されるパディングの量は、このような変数の宣言内容に応じて異なります。別のプログラム単位にある変数のサイズやランクが異なる場合は、同じファイル内でも変数の位置が異なることがあります。
-pad=common が指定されている場合、共通ブロック変数を伴う EQUIVALENCE を宣言すると、警告メッセージが表示されてエラーになります。ブロックはパディングされません。
-pad=common が指定されている場合、共通ブロック内の配列のオーバーインデックスを避けてください。パディングされた共通ブロックで隣接データの位置を変更すると、予想外の形でオーバーインデックスが失敗します。
-pad が使用されたときに、共通ブロックのコンパイルの一貫性が維持されるようにする必要があります。異なるプログラムユニットの共通ブロックを -pad=common を付けてコンパイルしたとき、その一貫性が維持されない場合は、エラーになります。-Xlist を付けたコンパイルでは、同じ名前の共通ブロックの長さがプログラムユニットの間で異なる場合に、そのことが報告されます。
gprof プロファイラを使用するプロファイリング用にコンパイルします。(-xpg は -pg と同義です)
-p オプションを使用した場合と同様の形式でプロファイル用にコードをコンパイルします。ただし、詳細な統計情報を記録する実行時記録メカニズムも起動され、プログラムが正常に終了すると、gmon.out ファイルが生成されます。gprof を実行すると、実行プロファイルが生成されます。詳細は、gprof(1) のマニュアルページおよび『Fortran プログラミングガイド』を参照してください。
ライブラリオプションは、ソースファイルと .o ファイルのあとに指定してください (-pg ライブラリは静的)。
注 - -pg を指定した場合、-xprofile でコンパイルする利点はありません。これら 2 つの機能は、他方で使用できるデータを生成せず、他方で生成されたデータを使用できません。
64 ビット Solaris プラットフォームで prof(1) または gprof(1)、32 ビット Solaris プラットフォームで gprof を使用して生成されたプロファイルには、おおよそのユーザー CPU 時間が含まれます。これらの時間は、メインの実行可能ファイルのルーチンと、実行可能ファイルをリンクするときにリンカー引数として指定した共有ライブラリのルーチンの PC サンプルデータ (pcsample(2) を参照) から導出されます。そのほかの共有ライブラリ (dlopen(3DL) を使用してプロセスの起動後に開かれたライブラリ) のプロファイルは作成されません。
32 ビット Solaris システムの場合、prof(1) を使用して生成されたプロファイルには、実行可能ファイルのルーチンだけが含まれます。32 ビット共有ライブラリのプロファイルは、-pg で実行可能ファイルをリンクし、gprof(1) を使用することで作成できます。
Solaris 10 ソフトウェアには、 -p でコンパイルされたシステムライブラリが含まれません。その結果、Solaris 10 プラットフォームで収集されたプロファイルには、システムライブラリルーチンの呼び出し回数が含まれません。
コンパイラオプション -p、-pg、または -xpg の実行時サポートは、スレッドに対して安全ではありません。そのため、マルチスレッドプログラムのコンパイルには使用しないでください。マルチスレッドを使用するプログラムをこれらのオプションを付けてコンパイルすると、実行時に、不正な結果やセグメント例外が発生する可能性があります。
gprof プロファイリング用に -xpg を使用してコンパイルされたバイナリは、binopt(1) と一緒に使用してはいけません。これは、両者に互換性がなく、内部エラーが発生する可能性があるためです。
コンパイルとリンクを分けて行う場合、-pg を付けてコンパイルしたときはリンクでも必ず -pg を付けてください。
x86 システムでは、-pg には -xregs=frameptr との互換性がないため、これらの 2 つのオプションは一緒に使用してはいけません。-xregs=frameptr は -fast に含まれている点にも注意してください。
共有ライブラリ用に位置独立コードをコンパイルします。
SPARC では、-pic は -xcode=pic13 と同等です。位置独立コードの詳細は、「3.4.111 -xcode= keyword」 を参照してください。
x86 では、位置独立コードを生成します。このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。大域データへの各参照は、大域オフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して PC 相対アドレス指定モードで生成されます。
32 ビットアドレスで位置独立コードをコンパイルします。
SPARC では、-PIC は -xcode=pic32 と同等です。位置独立コードの詳細は、「3.4.111 -xcode= keyword」を参照してください。
x86 では、—PIC は —pic と同等です。
サブオプションリスト ls をコンパイル段階 pr に渡します。
Qoption、pr、および ls の間には必ず空白文字を入れます。Q は大文字でも小文字でもかまいません。リスト には、コンパイル段階に適したサブオプションをコンマで区切って指定します。リストには空白文字を入れないでください。また、サブオプションの先頭にマイナス記号を付けることができます。
このオプションは主に、サポートスタッフによる内部デバッグ用に使われます。LD_OPTIONS 環境変数を使用してリンカーにオプションを渡します。『Fortran プログラミングガイド』のリンクとライブラリに関する章を参照してください。
-p と同義です。
動的ライブラリの検索パスを実行可能ファイルに設定します。
このオプションを指定すると、ld(1) リンカーは動的ライブラリ検索パスのリストを実行可能ファイルに格納します。
ls には、ライブラリ検索パスのディレクトリをコロンで区切って指定します。-R と ls の間には空白文字があってもなくてもかまいません。
このオプションを複数指定した場合は、それぞれのディレクトリリストがコロンで区切られて連結されます。
このリストは実行時に実行時リンカー ld.so が使用します。実行時に、このリストにあるパスで動的なライブラリを検索し、未解決の参照を解決しようとします。
このオプションは、動的ライブラリへのパスを指定するオプションを意識せずに出荷用の実行可能ファイルを実行できるようにしたいときに使用します。
-Rpaths を使用して実行可能ファイルを構築すると、ディレクトリパスはデフォルトのパスに追加されます。デフォルトのパスは、常に最後に検索されます。
詳細は、『Fortran プログラミングガイド』の「ライブラリ」の章および Oracle Solaris の『リンカーとライブラリガイド』を参照してください。
単精度の REAL 定数はすべて REAL*8 に変換されます。倍精度 (REAL*8) 定数は変更されません。このオプションは、定数にだけ適用されます。定数と変数の両方を変換す る場合は、「3.4.167 -xtypemap= spec」を参照してください。
このオプションフラグを使用する際には注意が必要です。REAL*4 引数を期待するサブルーチンまたは関数が REAL*4 定数で呼び出される場合に、REAL*8 の指令を受け取ることになるため、インタフェースの問題が生じる可能性があります。また、入出力リストに REAL*4 定数がある書式なし write によって書き込まれた、書式なしデータファイルの読み取りプログラムで問題を生じる可能性もあります。
デフォルトの出力記録長を設定します。
接続済みの装置の出力 (標準の出力) と エラー (標準のエラー) のいずれかまたは両方に対するデフォルトの記録長 (文字数単位) を設定します。このオプションは、次のいずれかの書式で指定する必要があります。
–recl=out:N
–recl=error:N
–recl=out:N1 ,error:N2
–recl=error:N1 ,out:N2
–recl=all:N
ここで N、N1、N2 は、72 ~ 2147483646 の範囲のすべての正の整数です。out は標準の出力を、error は標準のエラーを指し、all によってデフォルトの記録長が両方に設定されます。デフォルトは -recl=all:80 です。このオプションは、コンパイルされるプログラムが Fortran 主プログラムを持つ場合にのみ有効です。
ループ中にある縮約演算を識別します。
自動並列化中にループを解析し、縮約演算を調べます。ループの縮約には、潜在的に丸めのエラーがあります。
「縮約演算」によって、配列内の要素が単一のスカラー値に変換されます。縮約演算の典型的な例として、あるベクトルの各要素をまとめる処理があります。このような演算は並列化の対象ではありませんが、-reduction を指定すると、コンパイラは縮約演算を認識し、特別な例として並列化します。コンパイラが認識する縮約演算については、『Fortran プログラミングガイド』の「並列化」の章を参照してください。
このオプションは、自動並列化オプション —autopar とともに使用する場合にのみ使用できます。それ以外の場合は無視されます。明示的に並列化されたループは縮約演算の解析の対象にはなりません。
コンパイルし、アセンブリのソースコードだけを生成します。
指定したプログラムをコンパイルし、アセンブリ言語の出力結果を、接尾辞 .s の付いた名前のファイルに出力します。.o ファイルは作成しません。
実行可能ファイルを縮小しますが、リバースエンジニアを困難にします。また、このオプションを使用すると、dbx その他のツールによるデバッグができなくなり、-g オプションは無視されます。
(廃止) コンパイラメッセージの出力を抑制します。
通常、f95 コンパイラは、コンパイル中に、エラー診断以外のメッセージを発行しません。このオプションフラグは、従来の f77 コンパイラとの互換性を保つために準備されています。-f77 互換性フラグとともに使用しない場合は、このオプションフラグは必要ありません。
可能な場合はいつでも局所変数をメモリースタックに割り当てます。
このオプションは、再帰的で再入力可能なコードの記述を簡単にし、ループを並列化する際の最適化により自由度を与えることができます。
並列化オプションを使用する場合は、-stackvar を使用するようにしてください。
局所変数は、仮引数ではない変数、 COMMON 変数、外部スコープから継承された変数、または USE 文によってアクセス可能になったモジュール変数です。
-stackvar を有効にすると、局所変数は、属性 SAVE または STATIC を持たないかぎり、スタックに割り当てられます。明示的に初期化された変数は、SAVE 属性を使用して暗黙的に宣言されます。明示的に初期化されず、いくつかのコンポーネントが初期化されている構造変数は、デフォルトでは、SAVE を使用して暗黙的に宣言されません。また、SAVE または STATIC 属性を持つ変数と同等な変数は、暗黙的に SAVE または STATIC です。
静的に割り当てられた変数は、プログラムによって明示的に値を指定されないかぎり、暗黙的に 0 に初期化されます。スタックに割り当てられた変数は、構造変数のコンポーネントがデフォルトで初期化できる場合を除き、暗黙的に初期化されません。
-stackvar を使用してサイズが大きい配列をスタック上に割り当てると、スタックからオーバーフローし、セグメント例外が発生する場合があります。このような場合はスタックサイズを大きくする必要があります。
プログラムを実行する初期スレッドには、メインスタックがあり、マルチスレッド化されたプログラムの各ヘルパースレッドには、それぞれスレッドスタックがあります。
メインスタックのデフォルトのサイズは、約 8M バイトです。デフォルトのスレッドスタックサイズは、32 ビットシステムで 4M バイト、64 ビットシステムで 8M バイトです。引数なしで limit コマンドを実行すると、現在のメインスタックのサイズが表示されます。-stackvar を使用したときにセグメント例外が発生する場合は、メインスタックとスレッドスタックのサイズを大きくしてみてください。
例: 現在のメインスタックのサイズを表示します。
demo% limit cputime unlimited filesize unlimited datasize 523256 kbytes stacksize 8192 kbytes <––– coredumpsize unlimited descriptors 64 memorysize unlimited demo%
例: メインスタックのサイズを 64M バイトに設定します。
demo% limit stacksize 65536
例: 各スレッドスタックのサイズを 8M バイトに設定します。
demo% setenv STACKSIZE 8192
各スレーブスレッドで使用されるスタックサイズは、STACKSIZE 環境変数に値 (キロバイト単位) を指定することで設定できます。
% setenv STACKSIZE 8192
この例は、各スレーブスレッドのスタックサイズを 8M バイトに設定します。
STACKSIZE 環境変数は、接尾辞 B、K、M、または G の付いた数値も受け付けます。これらの接尾辞はそれぞれ、バイト、キロバイト、メガバイト、ギガバイトを表します。デフォルトはキロバイトです。
STACKSIZE 環境変数は、—xopenmp または —xautopar オプションを使用してコンパイルされたプログラムにのみ影響し、Solaris システムで pthread インタフェースを使用するプログラムには影響しません。
並列化と -stackvar を併用する方法の詳細は、『Fortran プログラミングガイド』の「並列化」の章を参照してください。limit コマンドについての詳細は、csh(1) を参照してください。
-xcheck=stkovf フラグを指定してコンパイルすると、スタックオーバーフロー状態に対する実行時の検査が有効になります。「3.4.109 -xcheck= keyword」を参照してください。
デフォルトは -stop_status=no です。
-stop_status=yes を付けると、STOP 文に整数の定数を入れることができます。その値は、プログラムの終了時に環境に渡されます。
STOP 123
0 ~ 255 の範囲にある値を指定してください。これよりも大きい値は切り捨てられ、実行時メッセージが出力されます。ただし、
STOP ”stop string’
は受け付けられます。この場合は環境にステータス値 0 が返されます。ただし、コンパイラの警告メッセージは出力されます。
このステータス環境変数は、C シェル (csh) では $status、また Bourne (sh) シェルと Korn (ksh) シェルでは $? です。
一時ファイルのディレクトリを設定します。
コンパイラによって使用される一時ファイル用のディレクトリを dir に設定します。このオプション文字列の中にはスペースを入れてはいけません。このオプションを指定しない場合、一時ファイルは /tmp ディレクトリに置かれます。
このオプションは、TMPDIR 環境変数の値に優先されます。
各コンパイル段階の経過時間を表示します。
実行時に重大エラーが発生した場合にスタックトレースを発行します。
-traceback オプションを指定すると、プログラムによって特定のシグナルが生成された場合に、実行可能ファイルで stderr へのスタックトレースが発行されて、コアダンプが実行され、終了します。複数のスレッドが 1 つのシグナルを生成すると、スタックトレースは最初のスレッドに対してのみ生成されます。
追跡表示を使用するには、リンク時に -traceback オプションをコンパイラコマンド行に追加します。このオプションはコンパイル時にも使用できますが、実行可能バイナリが生成されない場合無視されます。-traceback を -G とともに使用して共有ライブラリを作成すると、エラーが発生します。
表 3-9 -traceback オプション
|
このオプションを指定しない場合、デフォルトは -traceback=%none になります。
値を指定せずに、-traceback だけを指定すると、-traceback=common と同義になります。
注: コアダンプが不要な場合は、次を使用して coredumpsize 制限を 0 に設定できます。
% limit coredumpsize 0
-traceback オプションは、実行時のパフォーマンスに影響しません。
ソースファイル中の大文字と小文字を区別します。
大文字を小文字と同等には取り扱いません。デフォルトでは、文字列定数中を除き、大文字をすべて小文字として解釈します。このオプションを指定すると、Delta、DELTA、および delta はすべて別の記号として解釈されます。組み込み関数の呼び出しは、このオプションによる影響を受けません。
Fortran を別の言語に移植したり、混用したりする場合は、-U オプションを指定する必要があることがあります。『Fortran プログラミングガイド』の Solaris Studio Fortran への移植に関する章を参照してください。
プリプロセッサのマクロ name の定義を取り消します。
このオプションは、fpp または cpp プリプロセッサを呼び出すソースファイルにのみ適用されます。このオプションは、同じコマンド行の -Dname で作成されたプリプロセッサのマクロ name の初期定義を削除します。この場合、オプションの順序に関係なく、コマンド行ドライバによって暗黙に配置された -Dname も対象となります。ソースファイルのマクロ定義には影響しません。コマンド行に複数の -Uname フラグを配置できます。-U とマクロ name の間に空白文字を入れることはできません。
未宣言の変数を報告します。
すべての変数に対するデフォルトの型を、Fortran の暗黙の型宣言を使用せずに「未宣言」にします。これは、各コンパイル単位で IMPLICIT NONE が指定されていることと同じです。宣言していない変数に対して警告メッセージが出力されます。ただし、このオプションは、IMPLICIT 文や明示的に type を指定する文より優先されることはありません。
DO ループの展開が可能な個所で、使用可能にします。
n は正の整数です。次の選択が可能です。
n が 1 の場合、ループの展開をすべて禁止します。
n>1 の場合、オプティマイザはループを n 回展開します。
一般に、ループを展開するとパフォーマンスが改善されますが、実行可能ファイルのサイズが大きくなります。ループの展開と各種のコンパイラの最適化については、『Fortran プログラミングガイド』の「パフォーマンスと最適化」の章を参照してください。「2.3.1.3 UNROLL 指令」も参照してください。
暗黙的な USE モジュールを指定します。
list は、モジュール名またはモジュールファイル名のコンマ区切りのリストです。
-use=module_name を使用してコンパイルすると、USE module_name 文をコンパイルされる各副プログラムまたはモジュールに追加することになります。-use=module_file_name を使用してコンパイルすると、指定されたファイルに含まれる各モジュールの USE module_name を追加することになります。
Fortran モジュールについての詳細は、「4.9 モジュールファイル」を参照してください。
コンパイラの実行時に、各パスの名前とバージョンを表示します。
各コンパイラパスの詳細情報を表示します。
-V と同様に、コンパイラの実行時にそれぞれのパス名を表示し、ドライバが使用したオプション、マクロフラグ展開、および環境変数を詳細に表示します。
有効にするレガシーの VAX VMS Fortran 拡張機能の選択を指定します。
keywords 指定子は、次のサブオプションのいずれか、またはこれらのサブオプションをいくつか組み合わせて、コンマで区切ったリストとして指定します。
|
サブオプションは個々に選択することもオフにすることもできます。個々にオフにするには、サブオプションの前に no% を付けます。
例:
-vax=debug,rsize,no%blank_zero
デフォルトは —vax=%none です。サブオプションなしで —vax を指定すると、—vax=%all と同じ結果になります。
コンパイラが、並列化指令で明示的に指定されたループを分析するごとに、検出されるデータの依存関係に関する警告メッセージを出力します。ただし、ループの並列化は続けられます。
-xopenmp と OpenMP API 指令とともに使用します。
警告は、コンパイラが次の状態を検出したときに表示されます。
OpenMP 並列領域でのアクセスによってデータの競合が起きる可能性がある共有変数の宣言、並列領域に値があって並列領域のあとで使用されるスレッド固有変数の宣言など、OpenMP のデータ共有属性節の問題のある使用
すべての並列化指令が問題なく処理される場合、警告は表示されません。
注 - Solaris Studio のコンパイラは OpenMP API の並列化モデルをサポートします。そのため、従来の C$MIC 並列化指令は非推奨で、無視されます。OpenMP API への移植については、『OpenMP API ユーザーズガイド』を参照してください。
引数はコンマだけで区切る必要があります。すべての -W 引数は、残りのコマンド行引数のあとに渡されます。コンマを引数の一部として含めるには、コンマの直前にエスケープ文字 \ (バックスラッシュ) を使用します。すべての -W arg は、通常のコマンド行引数のあとに渡されます。
たとえば、-Wa,-o,objfile は、-o と objfile を、この順序でアセンブラに渡します。また、-Wl,-I,name; を指定すると、リンク段階で動的リンカー /usr/lib/ld.so.1 のデフォルト名が無効になります。
ほかの指定されるコマンド行オプションに関して引数がツールに渡される順序は、後続のコンパイラリリースで変更されることがあります。
c について可能な値を次の表で一覧表示します。
表 3-10 -W のフラグ
|
注: -Wd を使用して f95 オプションを Fortran コンパイラに渡すことはできません。
警告メッセージを表示または抑制します。
ほとんどの警告メッセージを表示または出力しないようにします。ただし、前に指定したオプションのすべて、あるいは一部が無効になるようなオプションを指定している場合には、警告メッセージが表示されます。
-w0 は、エラーメッセージのみを表示します。これは -w と同義です。-w1 はエラーと警告を表示します。これは、-w を省略したときのデフォルトです。-w2 は、エラー、警告、および注意を表示します。-w3 は、エラー、警告、注意、および注を表示します。-w4 は、エラー、警告、注意、注、およびコメントを表示します。
arg をリンカー ld(1) に渡します。 —z arg と同義です。
(Solaris のみ) リストを生成し、大域的なプログラム検査 (GPC) を実行します。
このオプションを使用すると、潜在的なプログラムのバグを発見できます。このオプションは、予備のコンパイラパスを呼び出し、大域プログラムを通して、副プログラムの引数、共通ブロック、およびパラメータの一貫性をチェックします。また、このオプションは、相互参照表などの行番号付きのソースコードリストも生成します。-Xlist オプションが発行するエラーメッセージは助言レベルの警告であり、プログラムのコンパイルやリンクを中断するものではありません。
注 - ソースコードのすべての構文エラーを訂正してから、-Xlist でコンパイルを実行してください。構文エラーのあるソースコードでコンパイルを実行すると、予想外の結果が報告されることがあります。
例: ルーチン間の一貫性をチェックします。
demo% f95 -Xlist fil.f
前述の例により、出力ファイル fil.lst に次の項目が書き込まれます。
行番号付きのソースリスト (デフォルト)
ルーチン間の矛盾についてのエラーメッセージ (リストに組み込まれている)
識別子の相互参照表 (デフォルト)
デフォルトにより、ファイル name.lst にリスト内容が書き込まれます。ここで、name はコマンド行に最初に配置されているソースファイルの名前です。
多数のサブオプションにより、さまざまな動作を柔軟に選択できます。これらのサブオプションは、-Xlist オプションの接尾辞によって指定されます。次の表を参照してください。
表 3-11 -Xlist サブオプション
|
詳細は、『Fortran プログラミングガイド』の「プログラムの解析とデバッグ」の章を参照してください。
Linux システムでは、このオプションはありません。
(x86/x64 のみ) -xaddr32=yes コンパイルフラグは、生成される実行可能ファイルまたは共有オブジェクトを 32 ビットアドレス空間に制限します。
この方法でコンパイルする実行可能ファイルは、32 ビットアドレス空間に制限されるプロセスを作成する結果になります。-xaddr32=no を指定する場合は、通常の 64 ビットバイナリが作成されます。-xaddr32 オプションを指定しないと、-xaddr32=no が使用されます。-xaddr32 だけを指定すると、-xaddr32=yes が使用されます。
このオプションは、-m64 のコンパイルのみ、および SF1_SUNW_ADDR32 ソフトウェア機能をサポートしている Solaris プラットフォームのみに適用できます。Linux カーネルはアドレス空間制限をサポートしないため、このオプションは Linux では使用できません。-xaddr32 オプションは Linux では無視されます。
単一のオブジェクトファイルが -xaddr32=yes を指定してコンパイルされた場合は、出力ファイル全体が -xaddr32=yes を指定してコンパイルされたものと、リンク時に想定されます。32 ビットアドレス空間に制限される共有オブジェクトは、制限された 32 ビットモードのアドレス空間内で実行されるプロセスから読み込む必要があります。詳細は、『Linker and Libraries Guide』で説明されている SF1_SUNW_ADDR32 ソフトウェア機能の定義を参照してください。
コンパイラが仮定する別名付けの程度を指定します。
標準規格以外のプログラム手法によっては、コンパイラの最適化方法に干渉する状況になります。オーバーインデックスおよびポインタの使用、および大域変数または一意ではない変数を副プログラムの引数として渡すことは、不明確な状況を引き起こし、予定どおりにコードが実行されない場合があります。
-xalias フラグを使用すると、別名付けが Fortran の標準規則からどのくらい離れているかをコンパイラに知らせることができます。
フラグには、キーワードのリストがある場合も、ない場合もあります。キーワードのリストはコンマで区切られ、各キーワードはプログラムにおける別名付けの状況を表しています。
キーワードに接頭辞 no% が付いている場合は、その別名付けが存在しないことを表します。
別名付けのキーワードは、次のとおりです。
表 3-12 -xalias オプションキーワード
|
リストなしで -xalias を指定すると、Fortran の別名付け規則に違反しないほとんどのプログラムで最高のパフォーマンスを得ることができます。これは、次に対応します。
no%dummy,no%craypointer,no%actual,no%overindex,no%ftnpointer
有効にするには、-xalias は、最適化レベル -xO3 以上でコンパイルするときに使用する必要があります。
-xalias フラグが指定されていない場合は、コンパイラのデフォルトでは、次の Cray ポインタを除き、Fortran の標準に準拠しているとみなされます。
no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer
別名付けの状況の例、および -xalias を使用した指定方法については、『Fortran プログラミングガイド』の移植に関する章を参照してください。
(Solaris のみ) 最適化ツールおよび可観測性ツール binopt(1)、 code-analyzer(1)、discover(1)、collect (1)、および uncover(1) によって後で使用できるバイナリを作成します。
デフォルトは -xannotate=yes です。値なしで -xannotate を指定することは、-xannotate=yes と同等です。
最適化ツールおよび可観測性ツールの最適な使用のためには、-xannotate=yes をコンパイル時とリンク時の両方で有効にする必要があります。最適化ツールおよび可観測性ツールを使用しない場合、-xannotate=no を指定してコンパイルおよびリンクすると、わずかに小さいバイナリおよびライブラリが生成されます。
Linux システムでは、このオプションはありません。
次の表は、SPARC および x86 の両方のプラットフォームに共通する -xarch キーワードの一覧を示しています。
表 3-13 SPARC および x86 の両方のプラットフォームに共通する -xarch キーワード
|
-xarch は単独で使用できますが、-xtarget オプションの展開の一部です。特定の -xtarget オプションで設定されている -xarch の値を上書きするために使用することもできます。例:
% f95 -xtarget=ultra2 -xarch=sparcfmaf ...
-xtarget=ultra2 で設定した -xarch が無効になります。
このオプションは、指定の命令セットだけを許すことによって、コンパイラが指定の命令セットアーキテクチャーの命令に対応するコードしか生成できないようにします。このオプションは、すべてのターゲットを対象とするような命令としての使用は保証しません。
このオプションを最適化で使用する場合は、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。不適切なアーキテクチャーを選択すると、バイナリプログラムがその対象プラットフォーム上で実行できなくなることがあります。
次の点に注意してください。
generic、sparc、sparcvis2、sparcvis3、sparcfmaf、sparcima でコンパイルされたオブジェクトライブラリファイル (.o) をリンクして、一度に実行できます。ただし、実行できるのは、リンクされているすべての命令セットをサポートしているプロセッサのみです。
特定の設定で、生成された実行可能ファイルが実行されなかったり、従来のアーキテクチャーよりも実行速度が遅くなったりする場合があります。また、4 倍精度 (REAL*16 および long double) 浮動小数点命令は、これらの命令セットアーキテクチャーのいずれにも実装されないため、コンパイラは、それらの命令を生成したコードで使用しません。
-xarch が指定されない場合のデフォルトは、generic です。
表 3-14 に、SPARC プラットフォーム上で使用する各 -xarch キーワードについてプラットフォームの詳細を説明します。
表 3-14 SPARC プラットフォーム上の -xarch の値
|
表 3-15 に、x86 プラットフォーム上で使用する各 -xarch キーワードについて詳細を説明します。x86 で -xarch が指定されなかった場合のデフォルトは generic です (または —m64 が指定された場合は generic64)。
表 3-15 x86 プラットフォーム上の -xarch の値
|
x86 Solaris プラットフォームでコンパイルを行う場合は、次の点が重要です。
プログラムのいずれかの部分が x86 プラットフォーム上で —m64 でコンパイルまたはリンクされる場合、プログラムのすべての部分もこれらのいずれかのオプションでコンパイルされる必要があります。さまざまな Intel 命令セットアーキテクチャー (SSE、SSE2、SSE3、SSSE3 など) の詳細は、Intel-64 および IA-32 の『Intel Architecture Software Developer's Manual』を参照してください
-xarch を sse、sse2、sse2a、または sse3 以降に設定してコンパイルしたプログラムは、これらの機能および拡張機能をサポートするプラットフォームで実行する必要があります。
コンパイルとリンクを別々に行う場合は、必ずコンパイラを使ってリンクし、同じ -xarch 設定で正しい起動ルーチンがリンクされるようにしてください。
x86 の 80 バイト浮動小数点レジスタが原因で、x86 での演算結果が SPARC の結果と異なる場合があります。この差を最小にするには、 -fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は -xarch=sse2 でコンパイルします。
これらの -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。
この警告は、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、SSE3 (およびそれ以降の) 命令と拡張機能を利用している __asm() アセンブラコードにも当てはまります。
ASSUME プラグマを制御するパラメータを設定します。
このフラグを使用して、コンパイラがソースコード内の ASSUME プラグマを処理する方法を制御します。
プログラマは ASSUME プラグマを使用することによって、コンパイラがより良い最適化を得るために使用できる特殊な情報を表明することができます。これらの表明は、確率を指定することができます。確率が 0 または 1 の場合は確実 (certain) とされ、それ以外の場合は不確実 (non-certain) とみなされます。
また、可能性または確実性を指定して、次に DO ループのトリップカウント、または分岐が起こることを表明することもできます。
f95 コンパイラが認識する ASSUME プラグマの説明については、「2.3.1.8 ASSUME 指令」を参照してください。
-xassume_control オプションの keywords には、1 つのサブオプションキーワードまたはコンマで区切られたキーワードのリストを指定できます。認識されるキーワードサブオプションは、次のとおりです。
|
コンパイラのデフォルトは次のとおりです。
-xassume_control=optimize
これは、コンパイラが ASSUME プラグマを認識し、最適化に影響を与えますが、検査は行わないという意味です。
パラメータを指定しない場合、-xassume_control は次と同義です。
-xassume_control=check,fatal
この場合、コンパイラは certain とマークされたすべての ASSUME プラグマを受け付け、検査しますが、最適化には影響を与えません。表明が無効の場合、プログラムは終了します。
-autopar と同義です。
(SPARC) このオプションは廃止されたため、コンパイラの将来のリリースで削除されます。「3.4.103 -xannotate[ ={yes|no}]」を参照してください。
コンパイル後の最適化用にバイナリを準備します。
コンパイル済みのバイナリファイルは、あとで binopt(1) を使用して、最適化、変換、分析できます。このオプションは、実行可能ファイルまたは共有オブジェクトを構築するときに使用できます。また、有効にするには、最適化レベルを -O1 以上にする必要があります。
このオプションを使用して構築すると、バイナリファイルのサイズが約 5% 増加します。
コンパイルとリンクを個別に実行する場合、コンパイルとリンクの両方で -xbinopt を指定する必要があります。
アプリケーションのすべてのソースコードを -xbinopt でコンパイルしなかった場合でも、次のように、プログラムバイナリを構築する最後のリンク手順で -xbinopt フラグを使用します。
example% f95 -0 program -xbinopt=prepare a.o b.o c.f95
-xbinopt を使用してコンパイルしたコードだけが、binopt(1) で最適化できます。
gprof プロファイリング用に -xpg を使用してコンパイルされたバイナリは、binopt と一緒に使用してはいけません。これは、両者に互換性がなく、内部エラーが発生する可能性があるためです。
デフォルトは -xbinopt=off です。
このオプションは、オプティマイザが使用できるキャッシュ特性を指定します。特別なキャッシュ特性が必ず使用されるわけではありません。
このオプションは、-xtarget オプションを展開した機能の一部です。-xtarget オプションで暗黙に指定された -xcache 値の指定を変更する場合に、このオプションを単独で使用します。
表 3-16 -xcache の値
|
si/li /ai/ti フィールドは次のように定義されます。
レベル i のデータキャッシュのサイズ (キロバイト単位)
レベル i のデータキャッシュのラインサイズ (バイト単位)
レベル i のデータキャッシュの結合特性
レベル i でキャッシュを共有するハードウェアスレッドの数 (省略可能)
例: -xcache=16/32/4:1024/32/1 では、次の内容を指定します。
レベル 1 のキャッシュ: 16K バイト、32 バイト行サイズ、4 面結合
レベル 2 のキャッシュ: 1024K バイト、32 バイト行サイズ、ダイレクトマップ結合
実行時の特別な検査を生成します。
キーワードには次のいずれかを指定します。
|
スタックオーバーフローは、特に、スタックに大きな配列が割り当てられるマルチスレッドアプリケーションで、近傍のスレッドスタックのデータを警告なしに破壊する可能性があります。スタックオーバーフローの可能性がある場合は、-xcheck=stkovf を使用してすべてのルーチンをコンパイルします。ただし、このフラグを使用してコンパイルしても、このフラグを使用せずにコンパイルしたルーチンでスタックオーバーフローが起こる可能性があるので、すべてのスタックオーバーフローの状況が検出されるわけではありません。
このオプションは、処理対象となるプロセッサを指定することによって、タイミング特性を指定します。
このオプションは単独で使用できますが、-xtarget オプションを展開した機能の一部です。-xtarget オプションで暗黙に指定された -xchip 値の指定を変更する場合に、このオプションを使用します。
-xchip=c は次のものに影響を与えます。
命令の順序 (スケジューリング)
分岐をコンパイルする方法
同義の代替命令の選択
次の表に、-xchip の有効なプロセッサ名の値をまとめてあります。
表 3-17 -xchip でよく使われる SPARC プロセッサ名
|
x86 プラットフォーム: -xchip 値は、 pentium、 pentium_pro、 pentium3、 pentium4、 generic、 opteron、 core2、 penryn、 nehalem、 amdfam10、 sandybridge、 westmere、 および native のいずれかです。
(SPARC) SPARC プラットフォームのコードアドレス空間を指定します。
keyword の値は次のとおりです。
|
-xcode=keyword を明示的に指定しなかった場合のデフォルトは、次のとおりです。
32 ビットのプラットフォームの場合は、–xcode=abs32です。64 ビットのプラットフォームの場合は、–xcode=abs44 です。
実行時のパフォーマンスを向上するために動的共有ライブラリを作成するときには、-xcode=pic13 または -xcode=pic32 を使用します。
動的実行可能ファイルのコードは、通常、メモリーの固定アドレスに結び付けられ、位置独立コードは、プロセスのどのようなアドレス空間でもロードすることができます。
位置独立コードを使用する場合は、大域オフセットテーブルを使用した直接的なリファレンスとして、再配置可能なリファレンスが作成されます。頻繁にアクセスされる共有オブジェクトの項目は、-xcode=pic13 または -xcode=pic32 を使用してコンパイルすると、位置独立コード以外のコードによって行われる多数の再配置が必要なくなるという利点があります。
大域オフセットテーブルのサイズは、8K バイトに制限されます。
-xcode={pic13|pic32} には、次のようなパフォーマンス上の影響があります。
-xcode=pic13 または -xcode=pic32 のいずれかでコンパイルされたルーチンは、エントリで命令をいくつか実行することによって、共有ライブラリの大域変数や静的変数へのアクセスに使用する大域的なオフセットテーブルを指すようにレジスタを設定します。
大域変数または静的変数にアクセスするごとに、大域オフセットテーブルを介して余分な間接メモリー参照を行います。pic32 でコンパイルを実行すると、大域的または静的なメモリー参照を行うごとに、命令が 2 つ追加されます。
こうした影響があるとしても、-xcode=pic13 または -xcode=pic32 を使用すると、ライブラリコードを共有できるため、必要となるシステムメモリーを大幅に減らすことができます。-xcode=pic13 または -xcode=pic32 でコンパイルした共有ライブラリ中のコードの各ページは、そのライブラリを使用する各プロセスで共有することができます。共有ライブラリ中にあるコードのページに 1 つでも -pic でコンパイルされていないメモリー参照 (直接メモリー参照) があると、このページは共有できなくなるため、ライブラリを使用したプログラムを実行するたびに、そのページのコピーが作成されます。
.o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされているかどうかを調べるには、nm コマンドを使用する方法がもっとも簡単です。
nm file.o | grep _GLOBAL_OFFSET_TABLE_
位置独立コードを含む .o ファイルには、_GLOBAL_OFFSET_TABLE_ への未解決の外部参照があります。未解決の参照は U の文字で示されます。
-xcode=pic13 または -xcode=pic32 のどちらを使用するか決定するときは、elfdump -c (詳細は elfdump(1) のマニュアルページを参照) を使用することによって、セクションヘッダー (sh_name: .got) を探して、大域オフセットテーブル (GOT) のサイズを調べてください。sh_size 値が GOT のサイズです。GOT のサイズが 8,192 バイトに満たない場合は -xcode=pic13、そうでない場合は -xcode=pic32 を指定します。
一般に、-xcode の使用方法の決定に際しては、次のガイドラインに従ってください。
実行可能ファイルを構築する場合は、-xcode=pic13 と -xcode=pic32 のどちらも使わない。
実行可能ファイルへのリンク専用のアーカイブライブラリを構築する場合は、-xcode=pic13 と -xcode=pic32 のどちらも使わない。
共有ライブラリを構築する場合は、-xcode=pic13 から開始し、GOT のサイズが 8,192 バイトを超えたら、-xcode=pic32 を使用する。
共有ライブラリへのリンク用のアーカイブライブラリを構築する場合は、-xcode=pic32 のみ使用する。
動的ライブラリを構築する場合は、-xcode=pic13 または pic32 (または -pic または -PIC) オプションを使用してコンパイルしてください。Oracle Solaris の『リンカーとライブラリ』を参照してください。
このオプションは、TASK COMMON や並列化を使用しているプログラムで共通ブロックに不一致がないかデバッグ検査を行います。『Fortran プログラミングガイド』の「並列化」の章で TASK COMMON 指令に関する説明を参照してください。
デフォルトは -xcommonchk=no です。共通ブロック不一致の実行時検査を行うとパフォーマンスが低下するので、デフォルトではこのオプションは無効になっています。-xcommonchk=yes はプログラム開発とデバッグのときだけ使用し、製品版のプログラムには使用しないでください。
-xcommonchk=yes でコンパイルすると実行時検査が行われます。1 つのソースプログラム単位で正規の共通ブロックとして宣言されている共通ブロックが TASK COMMON 指令の中で指定されていると、プログラムは停止し、不一致を示すエラーメッセージが出力されます。値を指定しない場合、-xcommonchk は -xcommonchk=yes と同等です。
Solaris Studio コンパイラのデバッガ情報の形式は、「stabs」形式から「dwarf」形式に移行しつつあります。このリリースのデフォルト設定は、-xdebugformat=dwarf です。
デバッグ情報を読み取るソフトウェアを保守している場合は、今回からそのようなツールを stab 形式から dwarf 形式へ移行するためのオプションが加わりました。
このオプションは、ツールを移植する場合に新しい形式を使用する方法として使用してください。デバッガ情報を読み取るソフトウェアを保守していないか、ツールでこれらの内のいずれかの形式のデバッガ情報が必要でなければ、このオプションを使用する必要はありません。
-xdebugformat=stabs は、stab 標準形式を使用してデバッグ情報を生成します。
-xdebugformat=dwarf は、dwarf 標準形式を使用してデバッグ情報を生成します。
-xdebugformat を指定しない場合は、コンパイラでは -xdebugformat=dwarf が指定されます。引数なしでこのオプションを指定するとエラーになります。
このオプションは、-g オプションによって記録されるデータの形式に影響します。また、この情報の一部の形式はこのオプションで制御されます。したがって、-g を使用しなくても、-xdebugformat は有効です。
dbx とパフォーマンスアナライザソフトウェアは、stab 形式と dwarf 形式を両方とも認識するので、このオプションを使用しても、ツールの機能にはまったく影響を与えません。
これは過渡的なインタフェースなので、今後のリリースでは、マイナーリリースであっても互換性なく変更されることがあります。stab と dwarf のどちらであっても、特定のフィールドまたは値の詳細は、今後とも変更される可能性があります。
コンパイルされたオブジェクトまたは実行可能ファイルのデバッグ情報の形式を判断するには、dwarfdump(1) コマンドを使用します。
-depend と同義です。
パフォーマンスアナライザにより、関数レベルの並べ替えを行います。
コンパイラ、パフォーマンスアナライザ、およびリンカーを使用して、コアイメージで関数 (副プログラム) の並べ替えを再度実行できます。-xF オプションでコンパイルすると、アナライザが実行されます。これにより、マップファイルを作成して、関数がどのように使用されるかに応じて、メモリー中の関数の順序を並べ替えることができます。そのあと、実行可能ファイルを構築するリンクにおいて、-Mmapfile リンカーオプションを使って、そのマップを使用するように指定することができます。これによって、実行可能ファイルの関数が別々のセクションに配置されます 。f95 —M path オプションも、リンカーに通常ファイルを渡します。f95 —Mpath オプションの説明を参照してください。
メモリー中の副プログラムの並べ替えは、アプリケーションのテキストページフォルト時間がアプリケーションの実行時間に占める割合が大きい場合にのみ役に立ちます。その他の場合の並べ替えでは、アプリケーションの全体的なパフォーマンスは改善されない場合があります。アナライザについての詳細は、『プログラムのパフォーマンス解析』を参照しください。
リトルエンディアン式プラットフォームとビッグエンディアン式プラットフォーム間のファイルの共有をサポートします。
このフラグは、書式なし入出力ファイル内のデータのバイト順序とバイト列を特定します。options には、次のフラグを任意に組み合わせたものを指定しますが、少なくとも 1 つのフラグを指定する必要があります。
littlemax_align:spec
bigmax_align:spec
native:spec
max_align は、ターゲットプラットフォームの最大バイト列を宣言します。指定できる値は 1、2、4、8、および 16 です。境界整列は、C 言語の構造体との互換性を維持するため、プラットフォーム依存のバイト列を使用する Fortran VAX 構造体と Fortran 派生型に適用されます。
最大バイト列が max_align のプラットフォームでは、little は「リトルエンディアン」ファイルを表します。たとえば little4 は 32 ビット x86 ファイルを表すのに対し、little16 は 64 ビット x86 ファイルを表します。
big は、最大バイト列が max_align の「ビッグエンディアン」ファイルを指定します。たとえば big8 が 32 ビット SPARC ファイルを表すのに対し、big16 は 64 ビット SPARC ファイルを表します。
native は、コンパイルしているプロセッサプラットフォームが使用しているのと同じバイト順序、バイト列の「ネイティブ」ファイルを表します。次は、「ネイティブ」とみなされます。
|
spec には、コンマ区切りのリストで次を指定します。
%all
unit
filename
%all は、SCRATCH として開かれるか、-xfilebyteorder フラグで明示的に指定する以外のすべてのファイルと、その他の論理ユニットを表します。%all は、1 回だけ指定できます。
unit は、プログラムによって開かれた特定の Fortran ユニット番号を表します。
filename は、プログラムによって開かれた特定の Fortran ファイル名を表します。
-xfilebyteorder=little4:1,2,afile.in,big8:9,bfile.out,12 -xfilebyteorder=little8:%all,big16:20
このオプションは、STATUS="SCRATCH" を指定して開かれたファイルには適用されません。それらのファイルに対する入出力操作は、常にネイティブプロセッサのバイト順序とバイト列が使用されます。
コンパイラコマンド行に -xfilebyteorder が指定されていない場合の最初のデフォルトは、-xfilebyteorder=native:%all です。
このオプションには、ファイル名およびユニット番号をそれぞれ 1 回だけ宣言できます。
コマンド行に -xfilebyteorder を含める場合は、little、big、または native の少なくとも 1 つの指定と組み合わせる必要があります。
このフラグで明示的に宣言されていないファイルは、ネイティブファイルとみなされます。たとえば、-xfilebyteorder=little4:zork.out を付けて zork.out をコンパイルした場合、このファイルは、4 バイトの最大データ整列規則を持つリトルエンディアンの 32 ビット x86 ファイルと宣言され、ほかのすべてのファイルはネイティブファイルになります。
ファイルに指定されたバイト順序はネイティブプロセッサと同じであるが、バイト列が異なる場合は、バイトスワップが行われないにしても、適切なパディングが使用されます。たとえば m64 を付けた、64 ビット x86 プラットフォーム向けのコンパイルで、-xfilebyteorder=little4:filename が指定された場合などがそうです。
ビッグエンディアンとリトルエンディアン式プラットフォーム間で共有されるデータレコード内で宣言する型は、同じサイズである必要があります。たとえば、-xtypemap=integer:64,real:64,double:128 を付けてコンパイルした SPARC 実行可能ファイルの生成するファイルを、-xtypemap=integer:64,real:64,double:64 を付けてコンパイルした x86 実行可能ファイルが読み取ることはできません。これは、両者のデフォルトの倍精度データ型のサイズが異なるためです。(ただし、Solaris Studio 12 Update 1 のリリース以降では、double:128 は x64 プロセッサで受け入れられます)。
VAX 構造体の成分の整列を変更するオプション (—vax=struct_align など) または構造型の成分の整列を変更するオプション (—aligncommon や —dalign など) をあるプラットフォームで使用する場合、同じ整列オプションを、その整列オプションの影響を受ける内容を持つ同じ書式なしデータファイルを共有する他のプラットフォームでも使用する必要があります。
ネイティブ以外のファイルとして指定されたファイルに対して、UNION/MAP データオブジェクト全体を使った入出力操作を行うと、実行時入出力エラーになります。ネイティブ以外のファイルに対しては、MAP の個別メンバーを使った入出力操作のみ行うことができます。UNION/MAP を含む VAX レコード全体を使った入出力操作は行えません。
ホレリス定数を実際の引数リストの文字列として扱います。
-xhasc=yes を指定すると、コンパイラは、サブルーチンまたは関数でホレリス定数が実際の引数として指定された場合にそれらの定数を文字列として扱います。これはデフォルトであり、Fortran の標準に準拠しています。コンパイラが生成する実際のコールリストには、各文字列の非表示の長さが示されます。
-xhasc=no を指定すると、ホレリス定数は副プログラムの型なしの値として扱われ、それらの値のアドレスだけが実際の引数リストに配置されます。副プログラムに渡される実際のコールリストには、文字列の長さは示されません。
ホレリス定数で副プログラムが呼び出され、呼び出された副プログラムが引数を INTEGER (または CHARACTER 以外) と予測する場合、ルーチンを -xhasc=no でコンパイルします。
例:
demo% cat hasc.f call z(4habcd, ’abcdefg’) end subroutine z(i, s) integer i character *(*) s print *, "string length = ", len(s) return end demo% f95 -o has0 hasc.f demo% has0 string length = 4 <-- should be 7 demo% f95 -o has1 -xhasc=no hasc.f demo% has1 string length = 7 <-- now correct length for s
z への 4habcd の受け渡しは、-xhasc=no でコンパイルすることにより、正しく行われます。
このフラグは、従来の FORTRAN 77 プログラムの移植を支援するために提供されています。
コンパイラのオプションフラグを一覧表示します。-help と同義です。
(SPARC) コンパイラのデータ空間プロファイリングのサポートを有効にします。
-xhwcprof を有効にすると、コンパイラは、プロファイル対象のロード命令およびストア命令と、それらが参照するデータ型および構造体メンバーをツールが関連付けるのに役立つ情報を、-g で生成されたシンボル情報と組み合わせて生成します。プロファイルデータは、ターゲットの命令空間ではなく、データ空間と関連付けられ、命令のプロファイリングだけでは入手の容易でない、動作に関する詳細情報が提供されます。
指定した一連のオブジェクトファイルは、-xhwcprof を使用してコンパイルできます。ただし、このオプションがもっとも役立つのは、アプリケーション内のすべてのオブジェクトファイルに適用したときです。このオプションによって、アプリケーションのオブジェクトファイルに分散しているすべてのメモリー参照を識別したり、関連付けたりするカバレージが提供されます。
コンパイルとリンクを別々に行う場合は、-xhwcprof をリンク時にも使用してくだ さい。
-xhwcprof=enable または -xhwcprof=disableのインスタンスは、同じコマンド行にある以前の -xhwcprof のインスタンスをすべて無効にします。
-xhwcprof はデフォルトでは無効です。引数を指定せずに -xhwcprof と指定することは、-xhwcprof=enable と指定することと同じです。
-xhwcprof を使用する場合は最適化を有効にし、デバッグのデータ形式を dwarf (-xdebugformat=dwarf) に設定しておく必要があります。これは、この Solaris Studio のリリースのデフォルトです。
-xhwcprof と -g を組み合わせて使用すると、コンパイラに必要な一時ファイル記憶領域は、-xhwcprof と -g を単独で指定することによって増える量の合計を超えて大きくなります。
次のコマンドは example.f をコンパイルし、ハードウェアカウンタによるプロファイリングのサポートを指定し、DWARF シンボルを使用してデータ型と構造体メンバーのシンボリック解析を指定します。
f95 -c -O -xhwcprof -g example.f
ハードウェアカウンタによるプロファイリングの詳細は、『Oracle Solaris Studio パフォーマンスアナライザ』マニュアルを参照してください。
(Solaris) 区間演算処理を有効化し、適切な浮動小数点環境を設定します。
指定しない場合のデフォルトは、-xia=widestneed です。
区間演算計算についての Fortran 拡張機能の詳細は、『区画演算プログラミングリファレンス』を参照してください。「3.4.123 -xinterval[ ={widestneed|strict| no}]」も参照してください。
-xia フラグは、次のように展開されるマクロです。
|
-inline と同義です。
スレッドアナライザで分析するためにプログラムをコンパイルして計測するには、このオプションを指定します。
スレッドアナライザについての詳細は、tha(1) を参照してください。
このオプションを使用してコンパイルすることにより、パフォーマンスアナライザを使用して collect -r races オプションを付けて計測されるプログラムを実行し、データ競合検出実験を作成できます。計測されたコードをスタンドアロンで実行できますが、低速で実行されます。
この機能を無効にするには、-xinstrument=no%datarace と指定します。これはデフォルト値です。
-xinstrument には、引数を 1 つ指定する必要があります。
コンパイルとリンクを別々に行う場合は、両方の手順で -xinstrument=datarace を指定してください。
このオプションは、プリプロセッサトークン __THA_NOTIFY を定義します。#ifdef __THA_NOTIFY を指定して、libtha(3) ルーチンへの呼び出しを保護することができます。
このオプションでは、-g も設定します。
(Solaris) 区間演算処理を有効化します。
オプションの値には、no、widestneed、または strict のいずれかを指定します。指定しない場合のデフォルトは、widestneed です。
|
区間演算計算についての Fortran 拡張機能の詳細は、『Fortran 95 区画演算プログラミングリファレンス』を参照してください。「3.4.120 -xia[={ widestneed|strict}]」も参照してください。
相互手続きの最適化を実行します。
内部手続き解析パスを呼び出すことにより、プログラム全体の最適化を実行します。-xipo はリンクステップですべてのオブジェクトファイル全体にわたって最適化を実行し、コンパイルコマンドのソースファイルのみに限定されません。
-xipo は、大きなマルチファイルアプリケーションをコンパイルおよびリンクする際に便利です。このフラグでコンパイルされたオブジェクトファイルは、それらのファイル内でコンパイルされた解析情報を保持します。これらの解析情報は、ソースおよびコンパイル前のプログラムファイルで内部手続き解析を可能にします。ただし、解析と最適化は、-xipo でコンパイルされたオブジェクトファイルに限られ、ライブラリのオブジェクトファイルまで拡張できません。
-xipo=0 は内部手続き解析を無効にし、-xipo=1 は有効にします。-xipo=2 は、キャッシュのパフォーマンスを向上させるために、手続き間の別名付けの解析、および記憶域割り当てとレイアウトの最適化を追加します。デフォルトは -xipo=0 で、-xipo が値なしで指定された場合は、-xipo=1 が使用されます。
-xipo=2 を付けてコンパイルすると、-xipo=2 を付けずにコンパイルされた関数やサブルーチン (たとえばライブラリ) から -xipo=2 を付けてコンパイルされた関数やサブルーチンへの呼び出しがあるべきではありません。
一例として、malloc() の置き換えとして、-xipo=2 を付けてコンパイルした独自のバージョンの malloc() を使用する場合は、作成したコードとリンクするライブラリ内の malloc() を参照するすべての関数も -xipo=2 を付けてコンパイルする必要があります。ただし、システムライブラリに対してこのようなことを行うのは不可能な場合があるため、この独自のバージョンの malloc のコンパイルに -xipo=2 を使うべきではありません。
コンパイルとリンクを個別に実行する場合、-xipo をコンパイルとリンクの両方で指定しなければなりません。
単一のコンパイル/リンク処理での -xipo の使用例:
demo% f95 -xipo -xO4 -o prog part1.f part2.f part3.f
オプティマイザは 3 つのすべてのソースファイル間でファイル間のインライン化を実行します。これは最終的なリンク手順で実行されるため、すべてのソースファイルのコンパイルを単一のコンパイル処理で実行する必要はありません。-xipo を随時指定することにより、個別のコンパイルが多数発生してもかまいません。
個別のコンパイル/リンク処理での -xipo の使用例:
demo% f95 -xipo -xO4 -c part1.f part2.f demo% f95 -xipo -xO4 -c part3.f demo% f95 -xipo -xO4 -o prog part1.o part2.o part3.o
コンパイルステップで作成されるオブジェクトファイルは、それらのファイル内でコンパイルされる追加の分析情報を保持します。そのため、リンクステップにおいてファイル相互の最適化を実行できます。
ここでの制限事項は、-xipo でコンパイルを実行しても、ライブラリがファイル相互の内部手続き解析に含まれない点です。次の例を参照してください。
demo% f95 -xipo -xO4 one.f two.f three.f demo% ar -r mylib.a one.o two.o three.o ... demo% f95 -xipo -xO4 -o myprog main.f four.f mylib.a
ここで、one.f、two.f、および three.f の間、および main.f と four.f の間で相互手続きの最適化が実行されますが、main.f または four.f と、mylib.a のルーチンの間では相互手続きの最適化が実行されません。最初のコンパイルは未定義のシンボルに関する警告を生成する場合がありますが、相互手続きの最適化は、コンパイル手順でありしかもリンク手順であるために実行されます。
-xipo に関するそのほかの重要な情報を次に示します。
少なくとも最適化レベル -xO4 を必要とします。
-xipo を付けてコンパイルされた実行可能プログラムを、並列 make ツールを使用して構築する場合、並列実行するリンク手順に共通のオブジェクトファイルが存在すると、問題が発生する可能性があります。リンク処理の前に、最適化されるオブジェクトファイルのコピーをリンク手順ごとに作成してください。
-xipo なしでコンパイルされたオブジェクトは、-xipo でコンパイルされたオブジェクトと自由にリンクできます。
-xipo オプションは、ファイルを介して最適化を実行する際に必要な情報を追加するため、非常に大きなオブジェクトファイルを生成します。ただし、この補足情報は最終的な実行可能バイナリファイルの一部にはなりません。実行可能プログラムのサイズが拡大する原因は、最適化の追加実行にあります。
このリリースにおいて、ファイル相互の副プログラムのインライン化は、-xipo で実行される唯一の相互手続きの最適化です。
.s のアセンブリ言語ソースファイルは、内部手続き解析には関係しません。
-S を付けたコンパイルでは、-xipo フラグは無視されます。
コンパイルに -xipo を使用すべきでないケース
内部手続き解析では、コンパイラは、リンクステップでオブジェクトファイル群を操作しながら、プログラム全体の解析と最適化を試みます。このとき、コンパイラは、このオブジェクトファイル群に定義されているすべての foo() 関数 (またはサブルーチン) に関して次の 2 つのことを仮定します。
(1) 実行時、このオブジェクトファイル群の外部で定義されている別のルーチンによって foo() が明示的に呼び出されない。
(2) オブジェクトファイル群内のルーチンから呼び出される foo() が、そのオブジェクトファイル群の外部に定義されている別のバージョンの foo() によって置き換えられることがない。
アプリケーションに対して仮定 (1) が当てはまらない場合は、-xipo=2 でコンパイルしないでください。仮定 (2) が当てはまらない場合は、-xipo=1 および -xipo=2 でコンパイルしないでください。
一例として、独自のソースバージョンの malloc() で関数 -xipo=2 を置き換えるケースを考えてみましょう。その独自のコードとリンクされる malloc() を参照するライブラリのすべての関数も -xipo=2 でコンパイルする必要があり、リンク手順でそれらのオブジェクトファイルが必要になります。しかしながら、システムライブラリでは、このことが不可能なことがあり、このため、独自のバージョンの malloc のコンパイルに -xipo=2 を使うべきではありません。
もう 1 つの例として、別々のソースファイルにある foo() および bar() という 2 つの外部呼び出しを含む共有ライブラリを構築するケースを考えてみましょう。bar() はその本体内で foo() を呼び出します。関数呼び出し foo() が実行時に割り込み処理される場合、foo() または bar() いずれのソースファイルも -xipo=1 または-xipo=2 でコンパイルしません。foo() が bar() 内にインライン化され、-xipo でコンパイルした場合に不正な結果になる可能性があります。
(SPARC) ファイル相互の最適化でアーカイブ ((.a) ライブラリを取り込むことを可能にします。
値には、次のいずれかを指定します。
|
-xipo_archive の値が指定されていない場合、コンパイラは -xipo_archive=none に設定します。
!DIR$ IVDEP 指令の解釈を無効または設定します。
IVDEP 指令は、ループ内で検出された一部またはすべての配列参照のループがもたらす依存関係を無視し、特にほかの方法では実行できないマイクロベクトル化、配布、ソフトウェアパイプラインなどのさまざまなループの最適化を実行するように、コンパイラに指示します。これは、依存関係が重要ではない、または依存関係が実際に発生しないことをユーザーが把握している状況で使用されます。
!DIR$ IVDEP 指令の解釈は、-xivdep オプションの値に応じて異なります。p の次の値は、次のように解釈されます。
|
これらの解釈は、ほかのベンダーの IVDEP 指令の解釈と互換性があります。
—xivdep が指定されていない場合、および引数を使用せずに —xivdep が指定されている場合のデフォルトはどちらも —xivdep=loop です。これは、!DIR$ IVDEP 指令がデフォルトで有効であることを示します。
詳細は、「2.3.3 IVDEP 指令」を参照してください。
複数のプロセッサを使用してコンパイルします。
コンパイラが処理を行うために生成するプロセスの数を設定するには、-xjobs オプションを指定します。このオプションを使用すると、マルチ CPU マシン上での構築時間を短縮できます。このリリースの f95 コンパイラでは、-xjobs とともに使用できるのは -xipo オプションだけです。-xjobs=n を指定すると、内部手続きオプティマイザ は、さまざまなファイルをコンパイルするために呼び出せるコードジェネレータインスタンスの最大数として n を使用します。
一般に、n に指定する確実な値は、使用できるプロセッサ数に 1.5 を掛けた数です。生成されたジョブ間のコンテキスト切り替えにより生じるオーバーヘッドのため、使用できる仮想プロセッサ数の何倍もの値を指定すると、パフォーマンスが低下することがあります。また、あまり大きな数を使用すると、スワップ領域などシステムリソースの限界を超える場合があります。
-xjobs には必ず値を指定する必要があります。値を指定しないと、エラー診断が表示され、コンパイルは中止します。
コマンド行で複数の -xjobs の指定がある場合、一番右にあるインスタンスの指定によって上書きされます。
次の例に示すコマンドは 2 つのプロセッサを持つシステム上で、-xjobs オプションを指定しないで実行された同じコマンドよりも高速にコンパイルを実行します。
example% f95 -xipo -xO4 -xjobs=3 t1.f t2.f t3.f
指定した機能 (name) のスタック関連の最適化を禁止します。
%all - すべてのコードのスタック関連の最適化を禁止します。
%none - すべてのコードのスタック関連の最適化を許可します。
このオプションは累積的で、コマンド行で複数回指定できます。たとえば、—xkeepframe=%all —xkeepframe=no%func1 は、func1 を除くすべての関数についてスタックフレームを維持するべきであることを示しています。また、—xkeepframe は —xregs=frameptr を上書きします。たとえば、—xkeepframe=%all —xregs=frameptr は、すべての関数についてスタックを維持するべきだが、—xregs=frameptr の最適化は無視されることを示しています。
このオプションがコマンド行で指定されていないと、コンパイラはデフォルトの -xkeepframe=%none を使用します。このオプションが値なしで指定されると、コンパイラは -xkeepframe=%all を使用します。
既知のライブラリの呼び出しを認識します。
指定された場合は、既知のライブラリの参照をイントリンシクスとして扱い、ユーザー定義のバージョンを無視します。これによって、コンパイラは、ライブラリに関する情報に基づき、ライブラリルーチンの呼び出しを最適化します。
library_list には、現時点では blas、blas1、blas2、blas3、および intrinsics に対する、コンマで区切られたキーワードのリストを指定します。コンパイラは次の BLAS1、BLAS2、および BLAS3 ライブラリルーチンを認識し、Sun のパフォーマンスライブラリの実装に適するように自由に最適化します。コンパイラは、これらのライブラリルーチンのユーザー指定バージョンを無視し、Sun Performance Library 中の BLAS ルーチンを使用するか、このルーチンをインライン化します。
Sun Performance Library にリンクするには —library=sunperf オプションが必要です。
|
(廃止) この旧バージョンの f77 オプションはサポートされていません。現在の Fortran コンパイラの同等オプションとして次を使用してください。-f77=%all,no%backslash -vax=$all,no%debug
(SPARC)旧バージョンの f77 コンパイラで作成されたオブジェクトと互換性のある実行時ライブラリを伴うリンクを作成します。
f95 -xlang=f77 は、f77compat ライブラリを伴うリンクを暗黙に定義し、f95 オブジェクトファイルと FORTRAN 77 オブジェクトファイルのリンクを容易にします。このフラグを使用してコンパイルすることによって、適切な実行環境が保証されます。
f95 および f77 のコンパイル済みオブジェクトを単一の実行可能ファイルにリンクする際に、f95 -xlang=f77 を使用します。
-xlang を付けたコンパイルでは、次のことに注意してください。
コンパイルで -xnolib および -xlang の両方を使わないでください。
Fortran オブジェクトファイルと C++ が混在する場合は、C++ コンパイラを使用し、CC コマンド行で -xlang=f95 を指定してください。
C++ オブジェクトと、並列オプションを付けてコンパイルした Fortran オブジェクトファイルが混在する場合は、リンク用の CC コマンド行で -mt も指定する必要があります。
(廃止) この (f77) オプションはサポートされていません。現在の Fortran コンパイラの同等オプションとして次を使用してください。-f77=%all,no%backslash -vax=$all,no%debug
-libmil と同義です。
速度の最適化のために選択された数学ルーチンを使用します。このオプションによって通常は高速なコードが生成されます。結果が若干異なる場合がありますが、このときは普通は最終ビットが違っています。このライブラリオプションをコマンド行に指定する順序は重要ではありません。
廃止。Sun Performance Library とリンクするには —library=sunperf を使用します。
(SPARC) 再配置可能なオブジェクトファイルのリンク時の最適化を実行します。
ポストオプティマイザは、リンク時にバイナリオブジェクトコードに対して高度なパフォーマンス最適化を多数実行します。オプションの値には、実行する最適化のレベルを 0、1、2 のいずれかで設定します。
|
値なしで -xlinkopt フラグを指定すると、-xlinkopt=1 とみなされます。
このような最適化は、リンク時にオブジェクトのバイナリコードを解析することによって実行されます。オブジェクトファイルは書き換えられませんが、最適化された実行可能コードは元のオブジェクトコードとは異なる場合があります。
このオプションは、プログラム全体をコンパイルし、実行時プロファイルフィードバックとともに使用されるともっとも効果的です。
コンパイルとリンクを個別に実行する場合、-xlinkopt はコンパイルとリンクの両方で指定する必要があります。
demo% f95 -c -xlinkopt a.f95 b.f95 demo% f95 -o myprog -xlinkopt=2 a.o b.o
レベルパラメータは、コンパイラのリンク時にだけ使用されます。前述の例では、オブジェクトバイナリが暗黙的に指定された 1 のレベルでコンパイルされていても、使用される最適化後のレベルは 2 です。
リンク時のポストオプティマイザは、インクリメンタルリンカー ild とともに使用することはできません。-xlinkopt フラグは、デフォルトリンカーを ld に設定します。-xildon フラグを使用してインクリメンタルリンカーを明示的に有効にしたときに -xlinkopt オプションも指定していると、-xlinkopt オプションは無効になります。
-xlinkopt オプションを有効にするには、プログラム内のルーチンの少なくとも一部は、このオプションを指定してコンパイルする必要があります。-xlinkopt を指定しないでコンパイルされたオブジェクトバイナリについても、オプティマイザは限定的な最適化を実行できます。
-xlinkopt オプションは、コンパイラのコマンド行にある静的ライブラリのコードは最適化しますが、コマンド行にある共有 (動的) ライブラリのコードは最適化しません。共有ライブラリを構築 (-G でコンパイル) する場合は、-xlinkopt も使用できます。
リンク時のポストオプティマイザは、実行時のプロファイルフィードバックとともに使用するのがもっとも効果的です。プロファイリングによって、コードでもっともよく使用される部分ともっとも使用されない部分が明らかになるので、オプティマイザはそれに基づき処理を集中するよう指示されます。これは、リンク時に実行されるコードの最適な配置が命令のキャッシュミスを低減できるような、大きなアプリケーションにとって特に重要です。このようなコンパイルの例を次に示します。
demo% f95 -o progt -xO5 -xprofile=collect:prog file.f95 demo% progt demo% f95 -o prog -xO5 -xprofile=use:prog -xlinkopt file.95
プロファイルフィードバックの使用方法の詳細は、-xprofile オプションを参照してください。
このオプションを指定してコンパイルすると、リンク時間がわずかに増えます。オブジェクトファイルも大きくなりますが、実行可能ファイルのサイズは変わりません。-xlinkopt フラグと -g フラグを指定してコンパイルすると、デバッグ情報が取り込まれるため、実行可能ファイルのサイズが増えます。
-loopinfo と同義です。
n には 1 ~ 5 の値を指定でき、それぞれ最適化レベル -O1 ~ -O5 に対応しています。指定しない場合、コンパイラは 5 を使用します。
このオプションを指定すると、!$PRAGMA SUN OPT=n 指令がソース入力に表示されている場合に有効になります。このオプションを指定しないと、コンパイラはこれらの指令行を注釈として解釈します。「2.3.1.5 OPT 指令」を参照してください。
このプラグマ指令が -xmaxopt フラグの最大レベルを超える最適化レベルで指定されている場合は、コンパイラは -xmaxopt で設定したレベルを使用します。
(SPARC) メモリー境界整列の最大値の想定と、境界整列不正データへアクセスした時の動作を指定します。
コンパイル時に境界整列を決定できるメモリーアクセスの場合、コンパイラは、そのデータ境界整列に適したロード/ストア命令のシーケンスを生成します。
境界整列がコンパイル時に決定できないメモリーアクセスの場合、コンパイラは、境界整列を想定して、必要なロード/ストア命令のシーケンスを生成します。
-xmemalign フラグを使用すると、このようなあいまいな状況の場合にコンパイラが想定するデータの最大メモリー境界整列を指定することができます。整列不正データへのメモリーアクセスが行われた場合の実行時エラーの動作も指定します。
指定する値は、2 種類です。すなわち、数値の境界整列値 <a> と、英数字の動作フラグ <b> です。
境界整列値 <a> に指定できる値は、次のとおりです。
最大で 1 バイトの境界整列を想定します。
最大で 2 バイトの境界整列を想定します。
最大で 4 バイトの境界整列を想定します。
最大で 8 バイトの境界整列を想定します。
最大で 16 バイトの境界整列を想定します。
不正境界整列データにアクセスした場合のエラーの動作を表す <b> に指定できる値は、次のとおりです。
アクセスを解釈し、実行を継続します。
SIGBUS という信号を発生させます。
64 ビットのプラットフォームでは、4 バイト以下の境界整列にだけ SIGBUS 信号を発生させます。それ以外ではアクセスを解釈して実行を継続します。その他のプラットフォームでは、f は i と等価です。
-xmemalign を指定しない場合のコンパイル時のデフォルト値は、次のようになります。
32 ビットのプラットフォームの場合は、8i
C および C++ の 64 ビットのプラットフォームの場合は、8s
Fortran の 64 ビットのプラットフォームの場合は、8f
値をまったく指定しない場合の -xmemalign のデフォルト値は、すべてのプラットフォームで 1i です。
-xmemalign そのものは、特定のデータ整列を強制的に行わせることはありません。強制的にデータ境界整列を行わせるには、-dalign または -aligncommon を使用してください。
また、b の値に i または f を指定してコンパイルしたオブジェクトファイルにリンクする場合は、必ず、-xmemalign を指定してください。
-dalign オプションはマクロです。
-dalign は、-xmemalign=8s -aligncommon=16 のマクロです。
-aligncommon=1 を -xmemalign とともに使用しないでください。これらの指令は衝突するため、同じプラットフォームや構成でセグメント例外が発生する場合があります。
詳細は、「3.4.1 -aligncommon[ ={1|2|4| 8|16}]」を参照してください。
(x86) Solaris x64 プラットフォームで共有オブジェクトのデータアドレスモデルを指定します。
-xmodel オプションを使用すると、コンパイラで Oracle Solaris x64 プラットフォーム用の 64 ビット共有オブジェクトを作成できます。このオプションは、そのようなオブジェクトのコンパイル時にのみ指定してください。
このオプションは、64 ビットに対応した x86 プラットフォーム ("x64") で -m64 が指定されている場合にのみ有効です。
このオプションは、実行されるコードの仮想アドレスがリンク時にわかっていて、すべてのシンボルが 0 ~ 231 - 224 - 1 の範囲の仮想アドレスに配置されることがわかっているスモールモデルのコードを生成します。
すべてのシンボルが 264 - 231 ~ 264 - 224 の範囲で定義されるカーネルモデルのコードを生成します。
データセクションへのシンボリック参照の範囲に関する前提がないミディアムモデルのコードを生成します。テキストセクションのサイズとアドレスは、スモールコードモデルの場合と同じように制限されます。静的データのサイズが大きいアプリケーションでは、—m64 を指定してコンパイルする際に —xmodel=medium の指定が必要な場合があります。
-xmodel を指定しない場合、コンパイラは -xmodel=small とみなします。引数を指定せずに-xmodel を指定すると、エラーになります。
この範囲内でオブジェクトにアクセスすることが確実であれば、必ずしもすべてのルーチンをこのオプションでコンパイルする必要はありません。
-nolib と同義です。
-nolibmil と同義です。
高速数学ライブラリを使用しません。
最適化された数学ライブラリとのリンクを無効にする場合に -fast と組み合わせて使用します。
f95 -fast -xnolibmopt …
-On と同義です。
Fortran の OpenMP Version 3.1 の指令で明示的な並列化を有効にします。
フラグには、次のキーワードサブオプションを使用できます。
OpenMP プラグマの認識を有効にし、そのプラグマに基づいてプログラムが並列化されます。
-xopenmp=parallel の最小限の最適化レベルは -xO3 です。コンパイラは、必要に応じて最適化のレベルを低いレベルから -xO3 に上げ、警告を出力します。
プリプロセッサトークン _OPENMP を定義します。
-stackvar を自動的に呼び出します。
OpenMP プラグマの認識を有効にし、そのプラグマに基づいてプログラムが並列化されます。
最適化のレベルが -xO3 より低い場合でも、コンパイラは最適化のレベルを上げません。最適化レベルを -xO2 -xopenmp=noopt のように明示的に -xO3 よりも低く設定すると、エラーが表示されます。-xopenmp=noopt で最適化レベルを指定しなかった場合、OpenMP プラグマが認識され、その結果プログラムが並列化されますが、最適化は行われません。
プリプロセッサトークン _OPENMP を定義します。
-stackvar を自動的に呼び出します。
OpenMP プラグマの認識を無効にし、最適化レベルを変更しませんコンパイラのデフォルトです。
サブオプションキーワードなしで指定した -xopenmp は、-xopenmp=parallel と同義です。このデフォルトは将来のリリースで変更される可能性があります。
dbx で OpenMP プログラムをデバッグするには、-g -openmp=noopt を指定してコンパイルすれば、並列化部分にブレークポイントを設定して変数の内容を表示することができます。
OpenMP 指令の概要については、『OpenMP API ユーザーズガイド』を参照してください。
—xopenmp でコンパイルされたプログラムを実行するときは、使用するスレッド数を指定するために、OMP_NUM_THREADS 環境変数を使用してください。OMP_NUM_THREADS が設定されない場合、使用されるデフォルトのスレッド数は 2 です。多くのスレッドを使用するには、OMP_NUM_THREADS を高い値に設定してください。1 スレッドのみで実行するには、OMP_NUM_THREADS を 1 に設定します。一般的に、OMP_NUM_THREADS は、実行中のシステム上で使用可能な仮想プロセッサ数に設定します。これは、Oracle Solaris の psrinfo(1) コマンドを使用して判別できます。詳細は、『OpenMP API ユーザーズガイド』を参照してください。
入れ子並列を有効にするには、OMP_NESTED 環境変数を TRUE に設定する必要があります。入れ子並列は、デフォルトでは無効です。入れ子並列についての詳細は、Oracle Solaris Studio の『OpenMP API ユーザーズガイド』を参照してください。
OpenMP では、プリプロセッサ記号 _OPENMP の定義に 10 進数 YYYYMM を含める必要があります。ここで、YYYY と MM は、この実装がサポートする OpenMP Fortran API のバージョンの年と月を示します。現在の Solaris Studio リリースでは、この値は OpenMP Version 3.1 を表す 201131 です。
コンパイルとリンクを分けて行う場合は、リンク時にも -xopenmp を指定する必要があります。これは、OpenMP 指令を含むライブラリをコンパイルする場合、特に重要です。
-pad と同義です。
SPARC プラットフォームでは、size 値には次のいずれかを指定します。
8K 64K 512K 4M 32M 256M 2G 16G または default
x86 プラットフォームでは、size 値には次のいずれかを指定します。
4K 2M 4M または default
例: -xpagesize=4M
これらすべてのページサイズが、あらゆるプラットフォームでサポートされているわけではなく、アーキテクチャーと Solaris 環境に依存します。指定されるページサイズは、ターゲットプラットフォーム上で Oracle Solaris オペレーティング環境に有効なページサイズにする必要があります。有効なページサイズは getpagesizes(3C) によって返されます。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。Oracle Solaris 環境では、ページサイズ要求に従うという保証はありません。
実行中のプログラムが要求したページサイズを受け取ったかどうかを判断するには、pmap(1) または meminfo(2) を使用します。
-xpagesize=default を指定すると、フラグは無視されます。size 値を指定しないで -xpagesize を指定することは、-xpagesize=default と同義です。
このオプションは、-xpagesize_heap=size と -xpagesize_stack=size を組み合わせたマクロです。これらの 2 つのオプションは -xpagesize と同じ次の引数を使用します。両方に同じ値を設定するには -xpagesize=size を指定します。別々の値を指定するには個々に指定します。
このフラグを指定してコンパイルするのは、LD_PRELOAD 環境変数を同等のオプションで mpss.so.1 に設定するか、またはプログラムを開始する前に同等のオプションを指定して Oracle Solaris コマンドの ppgsz(1) を実行するのと同じことです。詳細は Oracle Solaris のマニュアルページを参照してください。
size の値は、-xpagesize の説明と同じです。
詳細は、-xpagesize を参照してください。
size の値は、-xpagesize の説明と同じです。
詳細は、-xpagesize を参照してください。
PEC (Portable Executable Code) バイナリを生成します。
このオプションは、オブジェクトファイルおよびバイナリ内にプログラム中間表現を配置します。このバイナリは、あとで調整およびトラブルシューティングに使用できます。
-xpec を使用して構築したバイナリは、-xpec を使用しないで構築したバイナリの通常 5 ~ 10 倍の大きさになります。デフォルトは -xpec=no です。
引数がない場合、-xpec は -xpec=yes と同義です。
-pg と同義です。
デフォルトは -xpp=fpp です。
コンパイラは fpp(1) を使用して、.F、.F95、または .F03 のソースファイルの前処理を行います。このプリプロセッサは Fortran 用に適しています。旧バージョンでは、標準の C プリプロセッサ cpp が使用されていました。cpp を選択するには、-xpp=cpp と指定します。
先読みをサポートするアーキテクチャーで先読み命令を有効にします。
Fortran PREFETCH 指令の詳細は、「2.3.1.7 PREFETCH 指令」 を参照してください。
a には次のいずれかを指定します。
先読み命令の自動生成を有効にします。
先読み命令の自動生成を無効にします。
明示的な先読みマクロを有効にします。
明示的な先読みマクロを無効にします。
(SPARC) 指定の係数により、コンパイラの先読みからロード、および先読みからストアまでの応答時間を調整します。係数には必ず正の浮動小数点または整数を指定します。
大型の SPARC マルチプロセッサで集約的なコードを実行する場合、-xprefetch=latx:factor を使用すると役立つことがあります。このオプションは、指定の係数により、先読みからロードまたはストアまでのデフォルトの応答時間を調整するようにコード生成プログラムに指示します。
先読みの応答時間とは、先読み命令を実行してから先読みされたデータがキャッシュで利用可能となるまでのハードウェアの遅延のことです。コンパイラは、先読み命令と先読みされたデータを使用するロードまたはストア命令の距離を決定する際に先読み応答時間の値を想定します。
注 - 先読みからロードまでのデフォルト応答時間は、先読みからストアまでのデフォルト応答時間と同じでない場合があります。
コンパイラは、幅広いマシンとアプリケーションで最適なパフォーマンスを得られるように先読み機構を調整します。しかし、コンパイラの調整作業が必ずしも最適であるとはかぎりません。メモリーに負担のかかるアプリケーション、特に大型のマルチプロセッサでの実行を意図したアプリケーションの場合、先読みの応答時間の値を引き上げることにより、パフォーマンスを向上できます。この値を引き上げるには、1 よりも大きい係数を使用します。.5 と 2.0 の間の値は、おそらく最高のパフォーマンスを提供します。
データセットが全体的に外部キャッシュに常駐しているアプリケーションの場合、先読みの応答時間の値を引き下げることにより、パフォーマンスを向上できます。値を引き下げるには、1 よりも小さい係数を使用します。
-xprefetch=latx:factor オプションを使用するには、1.0 に近い係数の値から始め、アプリケーションに対してパフォーマンステストを実施します。そのあと、テストの結果に応じて係数を増減し、パフォーマンステストを再実行します。係数の調整を継続し、最適なパフォーマンスに到達するまでパフォーマンステストを実行します。係数を小刻みに増減すると、しばらくはパフォーマンスに変化がなく、突然変化し、再び平常に戻ります。
-xprefetch=yes は -xprefetch=auto,explicit と同義です。
-xprefetch=no は -xprefetch=no%auto,no%explicit と同義です。
-xprefetch、-xprefetch=auto、および -xprefetch=yes を指定すると、コンパイラは生成したコードに自由に先読み命令を挿入します。その結果、先読みをサポートするアーキテクチャーでパフォーマンスが向上します。
-xprefetch を指定しないと、-xprefetch=auto,explicit が使用されます。
-xprefetch だけを指定すると、-xprefetch=auto,explicit が使用されます。
-xprefetch または -xprefetch=yes などで自動先読みを有効にしても、応答時間係数を指定しないと、-xprefetch=latx:1.0 が使用されます。
-xprefetch=explicit を指定すると、コンパイラは次の指令を認識します。
|
-xchip 設定は、想定した応答時間、つまり latx:factor 設定の結果に影響します。
latx:factor サブオプションは、SPARC プロセッサで自動先読み (auto) が実行可能な場合のみ有効です。
明示的な先読みは、測定値によってサポートされた特殊な環境でのみ使用すべきです。
コンパイラは、広範囲なマシンやアプリケーション間で最適なパフォーマンスを得るために先読み機構を調整しますが、-xprefetch=latx:factor は、パフォーマンステストで明らかに利点があることが確認された場合にかぎり使用してください。使用先読み応答時間は、リリースごとに変わる可能性があります。したがって、別のリリースに切り替えたら、その都度応答時間係数の影響を再テストすることを推奨します。
間接アクセスされるデータ配列に対して間接先読み命令を生成します。
直接メモリーアクセスに対して先読み命令が生成されるのと同じ方法で、-xprefetch_level={1|2|3} オプションが指示するループに対して間接先読み命令を生成します。接頭辞 no% を付けると、この宣言を無効にできます。
デフォルトは -xprefetch_auto_type=no%indirect_array_access です。
このオプションを使用するには、-xprefetch=auto および最適化レベル -xO3 以上が必須です。
-xdepend などのオプションは、メモリー別名のあいまいさを排除する情報の生成に役立つため、間接先読み候補の計算の積極性に影響し、このため、自動的な間接先読みの挿入が促進されることがあります。
先読み命令の自動生成をコントロールします。
このオプションは、次の設定でコンパイルしたときのみ有効です。
-xprefetch=auto
最適化レベル 3 以上
先読みをサポートするプラットフォーム上
-xprefetch_level を指定しない場合の -xprefetch=auto のデフォルトは、レベル 2 です。
先読みレベル 2 は、レベル 1 よりも多くの先読み命令の機会を生成します。先読みレベル 3 は、レベル 2 よりも多くの先読み命令を生成します。
先読みレベル 2 および 3 は、旧バージョンの SPARC または x86 プラットフォームでは無効な場合があります。
プロファイルのデータを収集したり、プロファイルを使用して最適化したりします。
p には、collect[ :profdir]、use[ :profdir]、または tcov[ :profdir] を指定する必要があります。
このオプションを指定すると、実行頻度のデータが収集されて実行中に保存されます。このデータを以降の実行で使用すると、パフォーマンスを向上させることができます。プロファイルの収集は、マルチスレッド対応のアプリケーションにとって安全です。すなわち、独自のマルチタスク (-mt) を実行するプログラムをプロファイリングすることで、正確な結果が得られます。このオプションは、最適化レベルを -xO2 かそれ以上に指定するときにのみ有効になります。コンパイルとリンクを別々の手順で実行する場合は、リンク手順とコンパイル手順の両方で同じ -xprofile オプションを指定する必要があります。
実行頻度のデータを集めて保存します。のちに -xprofile=use を指定した場合にオプティマイザがこれを使用します。コンパイラによって文の実行頻度を測定するためのコードが生成されます。
-xMerge、-ztext、および -xprofile=collect を一緒に使用しないでください。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。
プロファイルディレクトリ名として profdir を指定すると、この名前が、プロファイル化されたオブジェクトコードを含むプログラムまたは共有ライブラリの実行時にプロファイルデータが保存されるディレクトリのパス名になります。profdir パス名が絶対パスではない場合、プログラムがオプション -xprofile=use:profdir でコンパイルされるときの現在の作業用ディレクトリの相対パスとみなされます。
—xprofile=collect: prof_dir または —xprofile=tcov: prof_dir でプロファイルディレクトリ名が指定されないと、プロファイルデータは実行時に program.profile という名前のディレクトリに保存されます。program はプロファイル化されたプロセスのメインプログラムのベース名です。この場合、環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR は、プロファイルデータが実行時に格納される場所を制御するために使用できます。設定された場合、プロファイルデータは $SUN_PROFDATA_DIR/$SUN_PROFDATA によって指定されるディレクトリに書き込まれます。プロファイルディレクトリ名がコンパイル時に指定された場合、 SUN_PROFDATA_DIR および SUN_PROFDATA は実行時に効果がありません。これらの環境変数は、tcov で書き込まれたプロファイルデータファイルのパスと名前を tcov(1) マニュアルページの説明どおり、同様に制御します。
これらの環境変数が設定されていない場合、プロファイルデータは現在のディレクトリの profdir .profile ディレクトリに書き込まれます (profdir は実行可能ファイルの名前または -xprofile=collect: profdir フラグで指定された名前)。 profdir が .profile ですでに終了している場合、-xprofile では、profile が profdir に追加されません。プログラムを複数回実行すると、実行頻度データは profdir.profile ディレクトリに蓄積されていくので、以前の実行頻度データは失われません。
別々の手順でコンパイルしてリンクする場合は、-xprofile=collect を指定してコンパイルしたオブジェクトファイルは、リンクでも必ず -xprofile=collect を指定してください。
—xprofile=collect[: profdir] または —xprofile=tcov[: profdir] でコンパイルされたコードから収集された実行頻度データを使用して、プロファイル化されたコードが実行されたときに実行された作業用に最適化します。profdir は、—xprofile=collect[: profdir] または —xprofile=tcov[: profdir] でコンパイルされたプログラムを実行して収集されたプロファイルデータを含むディレクトリのパス名です。
tcov および —xprofile=use[:profdir] の両方によって使用できるデータを生成するには、オプション —xprofile=tcov[:profdir] を使用して、プロファイルディレクトリをコンパイル時に指定する必要があります。—xprofile=tcov: profdir および —xprofile=use: profdir の両方で同じプロファイルディレクトリを指定する必要があります。混乱を最小限に抑えるために、profdir を絶対パス名として指定します。
profdir パス名は省略可能です。 profdir が指定されていない場合、実行可能バイナリの名前が使用されます。-o が指定されていない場合、a.out が使用されます。 profdir が指定されていない場合、コンパイラは、profdir .profile/feedback、または a.out.profile/feedback を探します。例:
demo: f95 -xprofile=collect -o myexe prog.f95 demo: f95 -xprofile=use:myexe -xO5 -o myexe prog.f95
-xprofile=collect オプションを付けてコンパイルしたときに生成され、プログラムの前の実行で作成されたフィードバックファイルに保存された実行頻度データを使用して、プログラムが最適化されます。
-xprofile オプションを除き、ソースファイルおよびコンパイラのほかのオプションは、フィードバックファイルを生成したコンパイル済みプログラムのコンパイルに使用したものと完全に同一のものを指定する必要があります。同じバージョンのコンパイラは、収集構築と使用構築の両方に使用する必要があります。
-xprofile=collect:profdir を付けてコンパイルした場合は、-xprofile=use: profdir のコンパイルの最適化に同じプロファイルディレクトリ名 profdir を使用する必要があります。
収集 (collect) 段階と使用 (use) 段階の間のコンパイル速度を高める方法については、-xprofile_ircache も参照してください。
tcov(1) を使用する基本のブロックカバレッジ分析用の命令オブジェクトファイル。
オプションの profdir 引数を指定すると、コンパイラは指定された場所にプロファイルディレクトリを作成します。プロファイルディレクトリに保存されたデータは、tcov(1) または -xprofile=use:profdir を付けたコンパイラで使用できます。オプションの profdir パス名を省略すると、プロファイル化されたプログラムの実行時にプロファイルディレクトリが作成されます。プロファイルディレクトリに保存されたデータは、tcov(1) でのみ使用できます。プロファイルディレクトリの場所は、環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR を使用して指定できます。
profdir で指定された場所が絶対パス名ではない場合、コンパイル時に、コンパイル時点での現在の作業ディレクトリの相対パスと解釈されます。いずれかのオブジェクトファイルに profdir を指定する場合は、同じプログラムのすべてのオブジェクトファイルに対して同じ場所を指定する必要があります。場所が profdir で指定されているディレクトリには、プロファイル化されたプログラムを実行するときにすべてのマシンからアクセスできる必要があります。プロファイルディレクトリはその内容が必要なくなるまで削除できません。コンパイラでプロファイルディレクトリに保存されたデータは、再コンパイルする以外復元できません。
例 [1]: 1 つ以上のプログラムのオブジェクトファイルが -xprofile=tcov:/test/profdata でコンパイルされる場合、/test/profdata.profile という名前のディレクトリがコンパイラによって作成されて、プロファイル化されたオブジェクトファイルを表すデータの保存に使用されます。実行時に同じディレクトリを使用して、プロファイル化されたオブジェクトファイルに関連付けられた実行データを保存できます。
例 [2]: myprog という名前のプログラムが -xprofile=tcov でコンパイルされ、ディレクトリ /home/joe で実行されると、実行時にディレクトリ /home/joe/myprog.profile が作成されて、実行時プロファイルデータの保存に使用されます。
(SPARC) プロファイルの収集段階と使用段階の間、コンパイルデータを保存および再利用します。
収集段階で保存したコンパイルデータを再利用することによって使用段階のコンパイル時間を短縮するには、-xprofile=collect|use とともに使用します。
指定すると、path はキャッシュファイルが保存されているディレクトリを上書きします。デフォルトでは、これらのファイルはオブジェクトファイルと同じディレクトリに保存されます。収集段階と使用段階が 2 つの別のディレクトリで実行される場合は、パスを指定しておくと便利です。
一般的なコマンドシーケンスを次に示します。
demo% f95 -xO5 -xprofile=collect -xprofile_ircache t1.c t2.c demo% a.out collects feedback data demo% f95 -xO5 -xprofile=use -xprofile_ircache t1.c t2.c
大きなプログラムでは、中間データが保存されるため、使用段階のコンパイル時間を大幅に向上させることができます。ただし、データを保存するために必要なディスク容量が増大します。
(SPARC) プロファイルデータファイル用のパスマッピングを設定します。
-xprofile_pathmap オプションは -xprofile=use オプションとともに使用します。
コンパイラが -xprofile=use でコンパイルされたオブジェクトファイルのプロファイルデータを見つけられず、次の点に該当する場合は、-xprofile_pathmap を使用します。
前回 -xprofile=collect でコンパイルしたときに使用されたディレクトリとは異なるディレクトリで、-xprofile=use を指定してコンパイルしている。
オブジェクトファイルはプロファイルで共通ベース名を共有しているが、異なるディレクトリのそれぞれの位置で相互に識別されている。
collect-prefix は、オブジェクトファイルが -xprofile=collect でコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。
use-prefix は、オブジェクトファイルが -xprofile=use を指定してコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。
-xprofile_pathmap の複数のインスタンスを指定すると、コンパイラは指定した順序でインスタンスを処理します。-xprofile_pathmap のインスタンスで指定された各 use-prefix は、一致する use-prefix が識別されるか、最後に指定された use-prefix がオブジェクトファイルのパス名と一致しないことが確認されるまで、オブジェクトファイルのパス名と比較されます。
RECURSIVE 属性をもたないルーチンが自分自身を再帰的に呼び出せるようにします。
通常、RECURSIVE 属性によって定義された副プログラムのみが再帰的に自分自身を呼び出すことができます。
-xrecursive を使用してコンパイルすると、RECURSIVE 属性で定義されていない副プログラムも、再帰的に自分自身を呼び出すことができます。ただし、RECURSIVE で定義されたサブルーチンとは異なり、このフラグを使用しても、デフォルトで局所変数がスタックに割り当てられることはありません。副プログラムの再帰的な呼び出しごとに異なる局所変数を持つ場合は、-stackvar を使用してコンパイルし、局所変数をスタックに設定します。
-xO2 より上の最適化レベルで間接的な再帰 (ルーチン A がルーチン B を呼び出し、そのあとにルーチン B がルーチン A を呼び出す) を実行すると、得られる結果に一貫性がない場合があります。-xrecursive フラグを指定してコンパイルすると、-xO2 より上の最適化レベルであっても、間接的な再帰を実行した場合の正確さが保証されます。
-xrecursive を使用してコンパイルすると、パフォーマンスが低下する可能性があります。
-reduction と同義です。
生成されたコードのレジスタの使用法を指定します。
r には、appl、float、frameptr サブオプションのいずれか 1 つ以上をコンマで区切って指定します。
サブオプションの前に no% を付けるとそのサブオプションは無効になります。
—xregs サブオプションは、特定のハードウェアプラットフォームでしか使用できません。
例: -xregs=appl,no%float
表 3-18 -xregs サブオプション
|
SPARC のデフォルトは -xregs=appl,float です。
x86 のデフォルトは -xregs=no%frameptr です。-fast の展開に含まれる場合は -xregs=frameptr です。
アプリケーションにリンクする共有ライブラリ用のコードは、-xregs=no%appl,float を指定してコンパイルすることをお勧めします。少なくとも、共有ライブラリとリンクするアプリケーションがこれらのレジスタの割り当てを認識するように、共有ライブラリがアプリケーションレジスタを使用する方法を明示的に示す必要があります。
たとえば、大局的な方法で (重要なデータ構造体を示すためにレジスタを使用するなど) レジスタを使用するアプリケーションは、ライブラリと確実にリンクするため、-xregs=no%appl なしでコンパイルされたコードを含むライブラリがアプリケーションレジスタをどのように使用するかを正確に特定する必要があります。
x86 システムでは、-pg には -xregs=frameptr との互換性がないため、これらの 2 つのオプションは一緒に使用してはいけません。-xregs=frameptr は -fast に含まれている点にも注意してください。
オブジェクトファイル (.o) がなくても dbx によってデバッグを実行できるようにします。
-xs を指定すると、すべてのデバッグ情報が実行可能ファイルにコピーされます。実行可能ファイルを別のディレクトリに移動した場合でも、オブジェクトファイル (.o) を無視してそのまま dbx を使用することができます。このオプションは、.o ファイルを維持できない場合に使用します。
-xs を付けずに実行可能ファイルを移動する場合は、ソースファイルとオブジェクトファイル (.o) の両方を移動するか、あるいは dbx の pathmap コマンドか use コマンドのいずれかでパスを設定する必要があります。
(SPARC) コンパイラは、メモリー保護の違反が発生していないことを想定できます。
このオプションを使用する場合、コンパイラはメモリーに関するトラップが発生しないことを前提とします。SPARC V9 プラットフォーム上で投機的なロード命令を使用することができます。
このオプションは、最適化レベルの -xO5 と、次のいずれかの値の -xarch を組み合わせた場合にだけ有効です。m32 と m64 の両方で sparc、sparcvis、-sparcvis2、または -sparcvis3。
注意 - アドレスの位置合わせが合わない、またはセグメンテーション侵害などの違反が発生した場合は違反のないロードはトラップを引き起こさないので、このオプションはこのような違反が起こる可能性のないプログラムでしか使用しないでください。ほとんどのプログラムではメモリーに関するトラップは起こらないので、大多数のプログラムでこのオプションを安全に使用できます。例外条件を扱うためにメモリーに関するトラップに明示的に依存するプログラムで、このオプションを使用しないでください。 |
例: コードのサイズが増大する場合は、ループの展開や並列化は行いません。
命令セットと最適化の対象とするプラットフォームを指定します。
t には native、native64、generic、generic64、platform-name のいずれかを指定します。
-xtarget オプションは、実際のプラットフォームで発生する、-xarch、-xchip、-xcache をまとめて指定することができます。-xtarget の意味は = のあとに指定した値を展開したものにあります。
対象となるハードウェア (コンピュータ) の正式な名前をコンパイラに指定した方がパフォーマンスが優れているプログラムもあります。プログラムのパフォーマンスが重要な場合は、対象となるハードウェアを正確に指定してください。これは特に、新しい SPARC プロセッサ上でプログラムを実行する場合に当てはまります。ただし、ほとんどのプログラムおよびより旧式の SPARC プロセッサでは、パフォーマンス向上はごくわずかなので、generic の指定で十分です。
-xtarget の実際の展開値は、リリースによって異なる可能性があります。コンパイラが使用する展開値は、-dryrun フラグを使用して判断できます。
demo% f95 -dryrun -xtarget=ultra4plus ### command line files and options (expanded): ### -dryrun -xarch=sparcvis -xcache=64/32/4/1:2048/64/4/2:32768/64/4/2 -xchip=ultra4plus
特定の指定プラットフォームでの —xtarget 展開は、同じプラットフォームでの —xtarget=native 指定の展開と異なる場合があることに注意してください。
ホストプラットフォーム (32 ビット) で、パフォーマンスを最適化します。
—m32 —xarch=native —xchip=native —xcache=native に展開します。
廃止。代わりに、—xtarget=native —m64 を使用してください。
たいていの 32 ビットプラットフォームで最高のパフォーマンスが得られるようにします。
これがデフォルトで、次のように展開します。-m32 -xarch=generic -xchip=generic -xcache=generic
廃止。代わりに -xtarget=generic -m64 を使用してください。
指定したプラットフォームで、最高のパフォーマンスが得られるようにします。次に一覧で表示します。
次の表は、コンパイラが認識できる、一般に使用されているシステムプラットフォーム名の一覧です。
表 3-19 一般に使用されている -xtarget システムプラットフォームの展開
|
64 ビット対応のプラットフォームでの 64 ビット Solaris OS 向けのコンパイルは、-m64 フラグで指示します。-xtarget を指定する場合は、次に示すように -xtarget フラグのあとに -m64 を表示する必要があります。
-xtarget=ultra2 ... -m64
この指定がないと、デフォルトの 32 ビットメモリーモデルが使用されます。
x86 システムの有効な -xtarget プラットフォーム名とその展開を、次の表に示します。
表 3-20 x86 プラットフォームでの -xtarget の値
|
64 ビット対応の x86 プラットフォームでの 64 ビット Solaris OS 向けのコンパイルは、-m64 フラグで指示します。たとえば、-xtarget=opteron でのコンパイルは、必要でもなく、十分でもありません。-xtarget を指定する場合は、次に示すように -xtarget フラグのあとに -m64 オプションを表示する必要があります。
-xtarget=opteron -m64
この指定がないと、32 ビット x86 用のコンパイルに戻ります。
-time と同義です。
デフォルトのデータサイズを指定します。
デフォルトのデータ型に対するバイトサイズを指定することができます。このオプションは、デフォルトのサイズの変数および定数に適用されます。
指定する文字列 spec には、次の全部またはいずれかをコンマで区切ったリストで指定します。
real:size,double: size,integer: size
各プラットフォームで使用できる組み合わせは次のとおりです。
real:32
real:64
double:64
double:128
integer:16
integer:32
integer:64
例:
-xtypemap=real:64,double:64,integer:64
デフォルトの REAL および DOUBLE を 8 バイトにマップします。
このオプションは REAL XYZ (64 ビットの XYZ になる) のように明示的にバイトサイズを指定しないで宣言されたすべての変数に適用されます。単精度の REAL 定数はすべて REAL*8 に変換されます。
INTEGER および LOGICAL は同じように扱われ、COMPLEX は 2 つの REAL としてマップされます。また、DOUBLE COMPLEX は DOUBLE がマップされる方法で扱われます。
-unroll=n と同義です。
ベクタライブラリ関数の呼び出しの自動生成や、SIMD (Single Instruction Multiple Data) をサポートする x86 プロセッサ上で SIMD 命令の生成ができます。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。
-xvector オプションを指定するには、最適化レベルが -xO3 かそれ以上に設定されていることが必要です。最適化レベルが指定されていない場合や —xO3 よりも低い場合はコンパイルは続行されず、メッセージが表示されます。
a についての可能な値は、次の表に一覧で示します。no% 接頭辞は、関連するサブオプションを無効にします。
表 3-21 -xvector サブオプション
|
デフォルトは、x86 では -xvector=simd で、SPARC プラットフォームでは -xvector=%none です。サブオプションなしで -xvector を指定すると、コンパイラは x86 Solaris では -xvector=simd,lib、SPARC Solaris では -xvector=lib、Linux プラットフォームでは -xvector=simd と想定します。
コンパイラは、リンク時に libmvec ライブラリを取り込みます。
コンパイルとリンクを別々のコマンドで実行する場合は、リンク時の CC コマンドに必ず -xvector を使用してください。
再配置を伴わない純粋なライブラリだけを生成します。
-ztext の主な目的は、生成されたライブラリが純粋なテキストであるかどうか、すべての命令が位置独立コードであるかどうかを確認することです。したがって、通常は -G および -pic とともに使用します。
-ztext を指定すると、text セグメントに不完全な再配置がある場合、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 オプションと -xprofile=collect オプションを一緒に使用しないでください。-ztext が読み取り専用記憶領域での位置依存シンボルの再配置を禁止する一方で、-xprofile=collect は書き込み可能記憶領域での静的に初期化された位置依存シンボルの再配置を生成します。
-ztext を付けてコンパイルしても ld によってライブラリが構築されなかった場合は、-ztext を付けずにコンパイルし直すと ld によってライブラリが構築されます。-ztext を指定した場合に構築が失敗するということは、ライブラリ中に共有不可能な成分があることを示します。ただし、この場合でもその他の成分は共有できるはずですが、パフォーマンスが最高でない可能性もあります。