JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: Fortran ユーザーズガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  概要

2.  Solaris Studio Fortran の使用

3.  Fortran コンパイラオプション

3.1 コマンド構文

3.2 オプションの構文

3.3 オプションのまとめ

3.3.1 頻繁に利用するオプション

3.3.2 マクロフラグ

3.3.3 下位互換のための旧オプション

3.3.4 旧オプションフラグ

3.4 オプションリファレンス

3.4.1 -aligncommon[ ={1|2|4| 8|16}]

3.4.2 -ansi

3.4.3 -arg=local

3.4.4 -autopar

3.4.5 -B{static |dynamic}

3.4.6 -C

3.4.7 -c

3.4.8 -copyargs

3.4.9 -Dname[ =def]

3.4.10 -dalign

3.4.11 -dbl_align_all[ ={yes|no}]

3.4.12 -depend[ ={yes|no}]

3.4.13 -dryrun

3.4.14 -d{ y|n}

3.4.15 -e

3.4.16 -erroff[ ={%all|%none| taglist}]

3.4.17 -errtags[ ={yes|no}]

3.4.18 -errwarn[ ={%all|%none| taglist}]

3.4.19 -ext_names= e

3.4.20 -F

3.4.21 -f

3.4.22 -f77[= list]

3.4.23 -fast

3.4.24 -fixed

3.4.25 -flags

3.4.26 -fma={ none|fused}

3.4.27 -fnonstd

3.4.28 -fns[ ={yes| no}]

3.4.29 -fpover[ ={yes|no}]

3.4.30 -fpp

3.4.31 -fprecision={ single|double|extended}

3.4.32 -free

3.4.33 -fround={ nearest|tozero|negative| positive}

3.4.34 -fsimple[ ={1|2|0}]

3.4.35 -fstore

3.4.36 -ftrap= t

3.4.37 -G

3.4.38 -g

3.4.39 -hname

3.4.40 -help

3.4.41 -Ipath

3.4.42 -i8

3.4.43 -inline=[ %auto][[,][no%] f1,...[no%]fn]

3.4.44 -iorounding[ ={compatible|processor-defined}]

3.4.45 -keeptmp

3.4.46 -Kpic

3.4.47 -KPIC

3.4.48 -Lpath

3.4.49 -lx

3.4.50 -libmil

3.4.51 -library=sunperf

3.4.52 -loopinfo

3.4.53 -Mpath

3.4.54 -m32 | -m64

3.4.55 -moddir= path

3.4.56 -mt[={ yes|no}]

3.4.57 -native

3.4.58 -noautopar

3.4.59 -nodepend

3.4.60 -nofstore

3.4.61 -nolib

3.4.62 -nolibmil

3.4.63 -noreduction

3.4.64 -norunpath

3.4.65 -O[n]

3.4.66 -o filename

3.4.67 -onetrip

3.4.68 -openmp

3.4.69 -p

3.4.70 -pad[= p]

3.4.71 -pg

3.4.72 -pic

3.4.73 -PIC

3.4.74 -Qoption pr ls

3.4.75 -qp

3.4.76 -R ls

3.4.77 -r8const

3.4.78 -recl=a[ ,b]

3.4.79 -reduction

3.4.80 -S

3.4.81 -s

3.4.82 -silent

3.4.83 -stackvar

3.4.84 -stop_status[ ={yes|no}]

3.4.85 -temp= dir

3.4.86 -time

3.4.87 -traceback[ ={%none|common| signals_list}]

3.4.88 -U

3.4.89 -Uname

3.4.90 -u

3.4.91 -unroll= n

3.4.92 -use= list

3.4.93 -V

3.4.94 -v

3.4.95 -vax= keywords

3.4.96 -vpara

3.4.97 -Wc ,arg

3.4.98 -w[n ]

3.4.99 -Xlinker arg

3.4.100 -Xlist[ x]

3.4.101 -xaddr32[ ={yes|no}]

3.4.102 -xalias[ =keywords]

3.4.103 -xannotate[ ={yes|no}]

3.4.104 -xarch=isa

3.4.104.1 x86/x64 プラットフォームでの特別な注意

3.4.105 -xassume_control[ =keywords]

3.4.106 -xautopar

3.4.107 -xbinopt={prepare | off}

3.4.108 -xcache=c

3.4.109 -xcheck= keyword

3.4.110 -xchip= c

3.4.111 -xcode= keyword

3.4.111.1 位置独立コード

3.4.112 -xcommonchk[ ={yes|no}]

3.4.113 -xdebugformat={ dwarf|stabs}

3.4.114 -xdepend

3.4.115 -xF

3.4.116 -xfilebyteorder= options

3.4.116.1 次に例を示します。

3.4.116.2 備考:

3.4.117 -xhasc[ ={yes|no}]

3.4.118 -xhelp=flags

3.4.119 -xhwcprof[={enable | disable}]

3.4.120 -xia[={ widestneed|strict}]

3.4.121 -xinline= list

3.4.122 -xinstrument=[%no]datarace

3.4.123 -xinterval[ ={widestneed|strict| no}]

3.4.124 -xipo[ ={0|1|2}]

3.4.125 -xipo_archive[ ={none|readonly| writeback}]

3.4.126 -xivdep[ =p]

3.4.127 -xjobs= n

3.4.128 -xkeepframe[ =[%all,%none,name, no%name]]

3.4.129 -xknown_lib=library_list

3.4.130 -xl

3.4.131 -xlang=f77

3.4.132 -xld

3.4.133 -xlibmil

3.4.134 -xlibmopt

3.4.135 -xlic_lib=sunperf

3.4.136 -xlinkopt[ ={1|2|0}]

3.4.137 -xloopinfo

3.4.138 -xmaxopt[ =n]

3.4.139 -xmemalign[ =<a><b>]

3.4.140 -xmodel=[ small | kernel | medium]

3.4.141 -xnolib

3.4.142 -xnolibmil

3.4.143 -xnolibmopt

3.4.144 -xOn

3.4.145 -xopenmp[={ parallel|noopt|none}]

3.4.146 -xpad

3.4.147 -xpagesize= size

3.4.148 -xpagesize_heap= size

3.4.149 -xpagesize_stack= size

3.4.150 -xpec[ ={yes|no}]

3.4.151 -xpg

3.4.152 -xpp={ fpp|cpp}

3.4.153 -xprefetch[ =a[,a]]

3.4.153.1 デフォルト

3.4.153.2 相互作用

3.4.153.3 警告

3.4.154 -xprefetch_auto_type=indirect_array_access

3.4.155 -xprefetch_level={ 1|2|3}

3.4.156 -xprofile= p

3.4.157 -xprofile_ircache[ =path]

3.4.158 -xprofile_pathmap= collect_prefix:use_prefix

3.4.159 -xrecursive

3.4.160 -xreduction

3.4.161 -xregs= r

3.4.162 -xs

3.4.163 -xsafe=mem

3.4.164 -xspace

3.4.165 -xtarget=t

3.4.165.1 一般的なプラットフォームとネイティブプラットフォーム

3.4.165.2 SPARC プラットフォーム

3.4.165.3 x86 プラットフォーム

3.4.166 -xtime

3.4.167 -xtypemap= spec

3.4.168 -xunroll= n

3.4.169 -xvector[= a]

3.4.170 -ztext

4.  Solaris Studio Fortran の機能および拡張機能

5.  FORTRAN 77 の互換性: Solaris Studio Fortran への移行

A.  実行時のエラーメッセージ

B.  各リリースにおける機能変更

C.  Fortran 指令の要約

索引

3.4 オプションリファレンス

この節では、すべての f95 コンパイラコマンド行オプションフラグについて説明します。これには、さまざまなリスク、制約、警告、相互作用、例、およびその他の詳細情報も含まれます。

各オプションは、特に付記していないかぎり、SPARC および x64/x86 プラットフォームの両方で有効です。SPARC プラットフォームでのみ有効なオプションフラグは (SPARC) と付記しています。x64/x86 プラットフォームでのみ有効なオプションフラグは (x86) と付記しています。

(廃止) と付記されているオプションフラグは廃止されているため、使用しないでください。多くの場合、代わりに使用すべきほかのオプションまたはフラグに置き換えられています。

3.4.1 –aligncommon[ ={1|2|4| 8|16}]

共通ブロックおよび標準の数値連続型のデータの境界整列を指定します。

指定された値は、共通ブロックおよび標準数値連続型内のデータ要素の整列の最大値 (単位はバイト) を示します。


注 - 標準数値連続型 は、SEQUENCE 文と、デフォルトコンポーネントデータ型 ( KIND= または * size を持たない INTEGERREALDOUBLEPRECISIONCOMPLEX) のみを含む構造型です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 も参照してください。

3.4.2 -ansi

標準外の拡張機能を識別します。

ソースコード中で、標準外の Fortran の拡張機能を使用すると、警告メッセージが出力されます。

3.4.3 -arg=local

ENTRY 文に対する実際の引数を保持します。

このオプションを使って代替エントリポイントを持つ副プログラムをコンパイルする場合、f95 は、copy または restore を使用して、ダミー引数と実際の引数の関連付けを保持します。

このオプションは、従来の FORTRAN 77 プログラムとの互換性のために用意されています。このオプションに依存するコードは、標準外です。

3.4.4 -autopar

ループの自動並列化を使用可能にします。

マルチプロセッサで並列処理の対象に適するループを探し、そのループを並列化します。内部反復データに依存するループを解析し、ループを再構築します。最適化レベルが -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 オプションを使用します。

3.4.5 –B{static |dynamic}

動的または静的ライブラリリンクを指定します。

-Bdynamic または static の間に空白文字を入れないでください。-B を省略すると、デフォルトとして -Bdynamic が使用されます。

次の点にも注意してください。

コマンド行で、-Bstatic-Bdynamic を切り替えることができます。次のように、-Bstatic-Bdynamic をコマンド行で切り替えて、何回でもライブラリを静的および動的にリンクすることができます。

f95 prog.f -Bdynamic -lwells -Bstatic -lsurface

これらはローダーおよびリンカーのオプションです。コンパイルコマンドに -Bx オプションを指定してコンパイルとリンクを分けて行う場合は、リンク時にも -Bx オプションを指定する必要があります。

-Bdynamic-dn の両方をコマンド行に指定することはできません。-dn を指定すると動的ライブラリのリンクが行われなくなるためです。

64 ビットの Solaris 環境では、ほとんどのシステムライブラリが共有動的ライブラリとして単独使用できます。これらのシステムライブラリには、libm.so および libc.so があります。libm.alibc.a は提供していません。つまり、64 ビットの Solaris 環境で -Bstatic-dn を指定するとリンクエラーが発生する場合があります。この場合、アプリケーションを動的ライブラリとリンクさせる必要があります。

Fortran 実行時システムの静的ライブラリと動的ライブラリを組み合わせて使用することは推奨しません。リンカーエラーが発生したり、データが警告なしに破壊されたりする可能性があります。必ず、Fortran 実行時システムの最新の共有動的ライブラリとリンクさせてください。

静的ライブラリと動的ライブラリについての詳細は、『Fortran プログラミングガイド』を参照してください。

3.4.6 -C

実行時に、配列の添字の範囲および適合性を検査します。

配列の添字が宣言されている範囲を超えると、セグメント例外などの予期しない結果になる場合があります。-C オプションはコンパイル時と実行時に、配列の添字に違反がないかどうかを検査します。-C は、実行時に、配列の構文が適合しているかも検査します。

-C を指定すると、実行可能ファイルのサイズが大きくなる場合があります。

-C オプションを使用すると、配列の添字違反はエラーとして扱われます。ソースコードのコンパイル中に配列添字の範囲違反が検出されると、コンパイルエラーとして扱われます。

配列添字の違反が実行時だけに検出される場合、コンパイラは実行可能プログラムの中に範囲を検査するコードを生成します。この結果、実行時間が長くなることがあります。したがって、プログラムの開発やデバッグを行なっている間にこのオプションを使用して配列添字の検査を有効にしておき、最後に添字検査なしで最終バージョンの実行可能ファイルを再コンパイルすると効果的です。

3.4.7 -c

コンパイルだけを行い、.o オブジェクトファイルを生成します。リンクは行いません。

ソースファイルごとに .o ファイルを作成します。1 つのソースファイルだけをコンパイルする場合は、-o オプションを使用して、出力先の .o ファイルの名前を指定することができます。

3.4.8 -copyargs

定数の引数への代入を可能にします。

定数である仮引数を副プログラムが変更できるようにします。このオプションは、すでに作成済みのコードのコンパイル時と実行時にエラーが発生しないようにすることだけを目的としています。

-copyargs を指定しないと異常終了してしまうコードは、Fortran 規格に準拠していません。また、このようなコードは予測できない動作をすることがあります。

3.4.9 –Dname[ =def]

プリプロセッサのシンボル name を定義します。

このオプションは .F.F90.F95、および .F03 ソースファイルだけに適用します。

-Dname=def name が値 def を持つものと定義します。

-Dname name1 と定義します。

このオプションはコマンド行で name を、

#define name[= def]

とソースファイルに記述されている場合のように定義します。= def の指定がないと、シンボル名 name は値 1 として定義されます。マイクロシンボル name はプリプロセッサ fpp (または cpp-xpp オプションを参照) に渡されて展開されます。

事前定義されたマクロシンボルの前には 2 つの下線を付けます。Fortran 構文には事前定義されたマクロの実際の値は使用できません。事前定義されたマクロは、fppcpp のプリプロセッサ指令内だけで使用してください (初めに付く 2 つの下線に注意)。

.F.F90.F95、または .F03 ソースファイルを -v 詳細オプションでコンパイルすると、コンパイラによって想定されるプリプロセッサ定義が表示されます。

これらの値は、次のようなプリプロセッサ条件で使用することができます。

#ifdef _ _sparc

f95 は、デフォルトで fpp(1) プリプロセッサを使用します。C プリプロセッサ cpp(1) と同様に、fpp はソースコードマクロを展開して、コードを条件付きでコンパイルすることができます。ただし、cpp とは異なり、fpp は Fortran 構文を理解できるので、Fortran プリプロセッサとしてはこちらを使用することをお勧めします。-xpp=cpp フラグを使用すると、コンパイラは fpp ではなく cpp を使用します。

3.4.10 -dalign

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 を使用すると、データの境界整列が標準に合わなくなる場合があります。これが原因で、EQUIVALENCECOMMON の変数に問題が生じることがあります。さらに、-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}]」を参照してください。

3.4.11 –dbl_align_all[ ={yes|no}]

8 バイトの境界上でデータを強制的に整列します。

値には yes または no のいずれかを指定します。値が yes の場合、変数はすべて 8 バイトの境界に整列されます。デフォルトは、-dbl_align_all=no です。

64 ビット環境で -m64 を使用してコンパイルした場合、4 倍精度のデータは 16 バイト境界に整列されます。

このフラグによって、COMMON ブロック内のデータレイアウトやユーザー定義の構造体が変更されることはありません。

-dalign と併用して、マルチワードのロード/ストアで追加した効率を有効にします。

使用した場合、すべてのルーチンをこのフラグでコンパイルする必要があります。

3.4.12 –depend[ ={yes|no}]

反復間のデータ依存についてループを解析し、ループを再構築します。ループの再構築には、ループ交換、ループ融合、およびスカラー置換が含まれます。

-depend を指定しない場合、デフォルトは -depend=yes です。-depend を指定しても、引数を指定しない場合、コンパイラは -depend=yes を使用します。

依存解析をオフにするには、-depend=no でコンパイルします。

-xdepend-depend と同義です。

3.4.13 –dryrun

f95 のコマンド行ドライバによって実行されるコマンド群を表示しますが、コンパイルは行いません。

デバッグ時に便利です。このオプションにより、コンパイルを実行するために呼び出されるコマンドとサブオプションが表示されます。

3.4.14 –d{ y|n}

実行可能ファイル全体に対して、動的ライブラリを使用可能または使用不可にします。

このオプションを指定しない場合は、デフォルトとして -dy が使用されます。

-Bx とは異なり、このオプションは実行可能ファイル全体に適用され、コマンド行で 1 回だけ使用します。

-dy|-dn は、ローダーおよびリンカーのオプションです。これらのオプションを付けてコンパイルとリンクを別々に行う場合は、リンクでも同じオプションを指定する必要があります。

64 ビットの Solaris 環境で共有動的ライブラリとしてだけ使用できるシステムライブラリはほとんどありません。これらのシステムライブラリには、libm.so および libc.so があります。libm.alibc.a は提供していません。このため、64 ビット Solaris プラットフォームと 32 ビット Solaris x86 プラットフォーム、Solaris 10 release 以降の 32 ビット Solaris プラットフォームのすべてで、-dn および -Bstatic がリンクエラーを引き起こすことがあります。この場合、アプリケーションを動的ライブラリとリンクさせる必要があります。

3.4.15 -e

拡張された入力ソース行を受け付けます。

ソース行は、132 文字まで拡張できます。コンパイラは 132 桁目まで各行の右側を空白で埋めます。-e オプションを指定してコンパイルする場合に継続行を使用するときは、文字定数が複数行にまたがらないようにしてください。複数行にまたがると、不必要な空白が定数に挿入されてしまいます。

3.4.16 –erroff[ ={%all|%none| taglist}]

タグ名によって一覧表示された警告メッセージを抑制します。

各タグ名をコンマで区切った並び (taglist) で指定した警告メッセージの表示を抑制します。%all を指定した場合は、すべての警告が抑制されます。これは、 -w オプションを指定するのと同じです。%none の場合、警告は抑制されません。引数なしで —erroff を指定した場合は、—erroff=%all を指定するのと同じです。

例:

f95 -erroff=WDECL_LOCAL_NOTUSED ink.f

-errtags オプションを使用して、警告メッセージに関連付けられているタグ名を表示します。

3.4.17 –errtags[ ={yes|no}]

メッセージタグが各警告メッセージ付きで表示されます。

-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)  

3.4.18 –errwarn[ ={%all|%none| taglist}]

警告メッセージをエラーとして処理します。

taglist は、エラーとして処理する警告メッセージのコンマ区切りのタグ名リストです。%all を指定した場合は、すべての警告メッセージがエラーとして処理されます。 %none の場合、警告メッセージはエラーとして処理されません。

-errtags も参照してください。

3.4.19 –ext_names= e

外部名に下線を付けるかどうかを指定します。

e には、plainunderscores、または fsecond-underscore のいずれかを指定します。デフォルトは underscores です。

-ext_names=plain: 下線を付けません。

-ext_names=underscores: 下線を付けます。

–ext_names=fsecond-underscore: 下線を含む外部名に二重下線を付け、下線を含まない外部名に一重下線を付けます。

外部名とは、サブルーチン、関数、ブロックデータ副プログラム、名前付き共通ブロックの名前のことです。このオプションは、ルーチンの入口の名前と、その呼び出しに使用する名前の両方に影響を与えます。このフラグを使用すると、Fortran のルーチンから別のプログラム言語のルーチンを呼び出す、または呼び出しを受けることができます。

fsecond-underscore は、gfortran との互換性のために用意されています。

3.4.20 -F

ソースファイルプリプロセッサを呼び出しますが、コンパイルしません。

コマンド行に表示された .F.F90.F95、および .F03 ソースファイルに fpp プリプロセッサを適用し、同じファイル名で拡張子を .f (または .f95.f03) に変えたファイルに結果を書き込みます。ただし、コンパイルは行いません。

例:

f95 -F source.F

このコマンドを実行すると、ソースファイルが source.f に書き込まれます。

fpp は Fortran のデフォルトのプリプロセッサです。C のプリプロセッサ (cpp) は、-xpp=cpp を指定すると選択されます。

3.4.21 -f

COMMON ブロックの倍精度および 4 倍精度のデータを境界整列します。

-f は従来のオプションフラグで、-aligncommon=16 と同義です。-aligncommon を使用してください。

COMMON ブロック内のデータのデフォルト整列は、4 バイトの境界整列です。-f を使用すると、COMMON ブロックと EQUIVALENCE クラスの倍精度および 4 倍精度のデータが、メモリー内で「自然に」境界整列されます。これは、8 バイトの境界整列になります。なお、64 ビット環境で -m64 を指定してコンパイルを行うと、4 倍精度のデータは 16 バイトに境界整列されます。


注 - -f を使用すると、データの境界整列が標準に合わなくなることがあります。これが原因で、EQUIVALENCECOMMON の変数に問題が生じることがあります。さらに、-f が必要な場合、移植性のないプログラムになります。


-f オプションを指定してプログラムのいずれかの部分をコンパイルする場合は、そのプログラムに含まれる副プログラムもすべて -f オプションを指定してコンパイルする必要があります。

このオプションを単独で使用すると、コンパイラで倍精度および 4 倍精度のデータに対して高速のマルチワードのフェッチ/ストア命令を生成することはできません。-dalign オプションがこれを実行し、-f も呼び出します。-f よりも -dalign を使用することをお勧めします。「3.4.10 -dalignを参照してください。これは、-dalign -f と同様に -fast オプションの一部であるからです。

3.4.22 –f77[= list]

FORTRAN 77 互換性モードを選択します。

このオプションフラグによって、Sun WorkShop f77 コンパイラが使用可能な言語拡張機能を含むソースプログラムを含め、従来の FORTRAN 77 ソースプログラムの f95 Fortran コンパイラへの移植が可能になります(FORTRAN 77 コンパイラは存在しません)。

list は、次のキーワードから選択された、コンマで区切られたリストです。

キーワード
意味
%all
FORTRAN 77 のすべての互換性機能を有効にします。
%none
FORTRAN 77 のすべての互換性機能を無効にします。
backslash
文字列のバックスラッシュをエスケープシーケンスとして受け入れます。
input
f77 が受け付ける入力書式を許可します。
intrinsics
組み込み関数の認識を FORTRAN 77 組み込み関数のみに制限します。
logical
次に示す論理変数の FORTRAN 77 での使用法を受け入れます。

- 整数値を論理変数に割り当てる - 論理条件式の演算式を .TRUE. を表す .NE.0 とともに使用する - 関連演算子 .EQ. および .NE. を論理演算子とともに使用する

misc
その他の f77 FORTRAN 77 拡張機能を許可します。
output
並び出力および NAMELIST 出力を含む、f77 形式の出力を生成します。
subscript
配列添字として整数式以外の表現を許可します。
tab
無制限のソース行の長さを含む、f77 形式の TAB フォーマットを有効にします。72 文字未満のソース行に対して、空白文字のパディングは行われません。

すべてのキーワードは、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 フラグも参照してください。

3.4.23 -fast

実行パフォーマンスを最適化するオプションを選択します。


注 - このオプションは、リリースごと、またはコンパイラごとに変更されることのあるほかのオプションを選択する機能として定義されています。-fast により選択されるいくつかのオプションはすべてのプラットフォームで使用できない可能性があります。-fast の展開を表示するには、-dryrun フラグを使用してコンパイルしてください。


-fast は、特定のベンチマークアプリケーションのパフォーマンスを引き上げます。しかし、オプションによっては、アプリケーションで使用できない場合があります。-fast を使用して、最大のパフォーマンスを得るためにアプリケーションをコンパイルしてください。しかし、さらに調整が必要な場合があります。-fast を指定してコンパイルしたプログラムが正しく動作しない場合、-fast を形成している個々のオプションを調査して、プログラムを正しく動作させるオプションだけを呼び出してください。

また、-fast でコンパイルされたプログラムは、使用するデータセットにより、高いパフォーマンスと正確な結果を実現できないことがあります。浮動小数点演算の特定プロパティーに依存しているプログラムは、-fast を使用してコンパイルしないでください。

-fast で選択されたオプションの一部は暗黙的にリンクするため、コンパイルとリンクを別々に行う場合は、リンク時も必ず -fast を指定してください。

-fast では次のオプションが選択されます。

次に示すように、-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

3.4.24 -fixed

固定形式の Fortran 95 ソース入力ファイルを指定します。

コマンド行に指定するソースファイルはすべて、ファイル名の拡張子に関係なく固定形式として解釈されます。通常、f95.f のファイルだけを固定形式として解釈し、.f95 ファイルを自由形式として解釈します。

3.4.25 –flags

-help と同義です。

3.4.26 –fma={ none|fused}

(SPARC) 浮動小数点演算、融合演算、積和演算命令の自動生成を有効にします。-fma=none は、これらの命令の生成を無効にします。-fma=fused は、コンパイラが浮動小数点演算、融合演算、積和演算命令を使用して、コードのパフォーマンスを改善する機会を見つけようとすることを許可します。デフォルトは -fma=none です。

融合した積和演算命令を生成するには、コンパイラに対して -xarch=sparcfmaf および最適化レベルが -xO2 以上に設定されていることが最低限必要です。融合した積和演算命令が生成された場合は、これらの命令をサポートしていないプラットフォームでプログラムが実行されないように、コンパイラはバイナリプログラムにマークを付けます。

積和演算 (FMA) により、積と和 (乗算と加算) の間で中間の丸め手順が排除されます。その結果、-fma=fused を指定してコンパイルしたプログラムは、精度は減少ではなく増加する傾向にありますが、異なる結果になることがあります。

3.4.27 -fnonstd

浮動小数点算術ハードウェアの非標準の初期化を行います。

このオプションは、次のオプションフラグを組み合わせたマクロです。

–fns -ftrap=common

-fnonstd を指定することは、Fortran 主プログラムの先頭で次の 2 つの呼び出しを行うのとほぼ同じです。

i=ieee_handler("set", "common", SIGFPE_ABORT) call nonstandard_arithmetic()

nonstandard_arithmetic() ルーチンは、旧式の abrupt_underflow() ルーチンの代わりです。

このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。

このオプションを使用すると、浮動小数点ハードウェアが初期化されて次の処理が実行されます。

段階的アンダーフローおよび非正規数についての詳細は、-fns を参照してください。

-fnonstd オプションは、浮動小数点オーバーフロー、ゼロによる除算、無効な演算などの例外処理のためのハードウェアトラップを可能にします。これらのハードウェアトラップは SIGFPE シグナルに変換され、プログラムに SIGFPE ハンドラがなければメモリーダンプして終了します。

詳細は、ieee_handler(3m) と ieee_functions(3m) のマニュアルページ、『数値計算ガイド』、および『Fortran プログラミングガイド』を参照してください。

3.4.28 –fns[ ={yes| no}]

非標準の浮動小数点モードを選択します。

デフォルトは標準の浮動小数点モード (-fns=no) です。『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。

-fast などの -fns フラグが含まれるマクロフラグのあとに =yes または =no オプションを使用して -fns フラグを切り替えることができます。値を指定しない場合、 -fns は、-fns=yes と同じです。

このオプションフラグは、プログラムの実行開始時に、非標準の浮動小数点モードを有効にします。SPARC プラットフォームで非標準の浮動小数点モードを指定すると、「段階的アンダーフロー」が無効になります。つまり、小さな結果は、非正規数にはならず、ゼロに切り捨てられます。さらに、このモードでは、非正規のオペランドが報告なしにゼロに置き換えられます。このような SPARC システムでは、ハードウェアの段階的アンダーフローや非正規数がサポートされておらず、このオプションを使用するとプログラムのパフォーマンスを著しく改善することができます。

x が完全なアンダーフローの原因にならない場合、|x| が次の範囲にある数であるときにのみ、x非正規数になります。

表 3-8 非正規数 REAL と DOUBLE

データの種類
範囲
REAL
0.0 < |x| < 1.17549435e-38
DOUBLE PRECISION
0.0 < |x| < 2.22507385072014e-308

非正規数に関する詳細は、『数値計算ガイド』を参照してください。また、このオプションおよび関連するオプションについては『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。(演算によっては、「非正規数」を表すのに「指数が最小非正規化数」という用語を使用している場合があります)。

デフォルトでは、浮動小数点は標準の設定に初期化されます。

x86 プラットフォームの場合、このオプションは Pentium III および Pentium 4 プロセッサ (sse または sse2 命令セット) でのみ有効です。

x86 では、-fns は SSE flush-to-zero モードを選択します。利用可能な場合には、denormals-are-zero モードが選択されます。このフラグは、非正規数の結果をゼロに切り捨てます。また、利用可能な場合には、非正規数オペランドもゼロとして扱われます。このフラグは、SSE または SSE2 命令セットを利用しない従来の x87 浮動小数点演算には影響しません。

このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。

3.4.29 –fpover[ ={yes|no}]

書式付きの入力で浮動小数点オーバーフローを検出します。

-fpover=yes を指定すると、入出力ライブラリは書式付きの入力で実行時浮動小数点オーバーフローを検出し、エラー条件 (1031) を返します。デフォルトでは、このようなオーバーフローの検出は行いません (–fpover=no )。値を指定しない場合、-fpover-fpover=yes と同等です。—ftrap とともに使用すると、完全な診断情報が表示されます。

3.4.30 –fpp

fpp を使用して、入力の前処理を強制的に行います

ファイルの拡張子に関係なく、f95 コマンド行にリストされた全入力ソースファイルを fpp プリプロセッサに渡します。通常、fpp によって自動的に先行処理されるファイルは、拡張子が .F.F90、または .F95 のファイルのみです。「3.4.152 -xpp={ fpp|cpp}」も参照してください。

3.4.31 –fprecision={ single|double|extended}

(x86) 非標準の浮動小数点丸め精度モードを初期設定します。

x86 プラットフォームで、浮動小数点精度モードを singledoubleextended のいずれかに設定します。

singledouble の場合、丸め精度モードは、プログラムの実行が始まるときに、それぞれ単精度、倍精度に設定されます。extended か、-fprecision が指定されなかった場合のデフォルトでは、丸め精度モードは拡張精度に初期設定されます。

このオプションは、x86 システムでメインプログラムのコンパイル時に使用する場合にのみ有効で、64 ビット (-m64) または SSE2 対応 (-xarch=sse2) プロセッサでコンパイルする場合は無視されます。SPARC システムでも無視されます。

3.4.32 -free

自由形式のソース入力ファイルを指定します。

コマンド行で指定したソースファイルはすべて、ファイル名の拡張子を問わず、f95 自由形式と解釈されます。通常、f95.f のファイルだけを固定形式として解釈し、.f95 ファイルを自由形式として解釈します。

3.4.33 –fround={ nearest|tozero|negative| positive}

起動時に IEEE の丸めモードを有効にします。

デフォルトは -fround=nearest です。

このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。

このオプションは、次に示す IEEE 754 丸めモードを設定します。

値が tozeronegative、または positive の場合、プログラムの実行開始時に、オプションは丸め方向を round-to-zeroround-to-negative-infinity、または round-to-positive-infinity にそれぞれ設定します。-fround を指定しない場合は、デフォルトで -fround=nearest が使用され、丸め方向は round-to-nearest になります。このオプションの意味は ieee_flags 関数の場合と同じです。『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。

3.4.34 –fsimple[ ={1|2|0}]

浮動小数点最適化の設定を選択します。

オプティマイザが浮動小数点演算に関する前提を単純化できるようにします。『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。

一貫した結果を得るには、プログラム中のすべての副プログラムを同じ -fsimple オプションを付けてコンパイルする必要があります。

デフォルトは次のとおりです。

別の浮動小数点単純化レベルは次のとおりです。

-fsimple=0

仮定の設定を許可しません。IEEE 754 に厳密に準拠します。

-fsimple=1

若干の単純化を認めます。生成されるコードは IEEE 754 に厳密には準拠していませんが、大半のプログラムの数値結果は変わりありません。

-fsimple=1 の場合、次に示す内容を前提とした最適化が行われます。

  • IEEE 754 のデフォルトの丸めとトラップモードが、プロセスの初期化以後も変わらない。

  • 浮動小数点例外以外には、目に見える結果が生じない演算は削除できる。

  • 演算対象として無限または非数を伴う演算において、非数を結果に反映させる必要はない。たとえば、x*00 で置き換えてよい。

  • 演算がゼロの符号に応じて変化することはない。

-fsimple=1 を指定すると、オプティマイザは必ず丸めまたは例外に応じた、完全な最適化を行います。特に、浮動小数点演算を、実行時に一定に保たれる丸めモードにおいて異なる結果を生成する浮動小数点演算と置き換えることはできません。

-fsimple=2

—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 を選択します。

3.4.35 –fstore

(x86)、浮動小数点式の精度を強制的に設定します。

代入文の場合、このオプションはあらゆる浮動小数点式を強制的に代入先の変数の精度にします。これはデフォルト値です。ただし、-fast オプションには、このオプションを無効にする -nofstore が含まれています。再びこのオプションを有効にするには、-fast のあとに -fstore を続けてください。

3.4.36 –ftrap= t

起動時に有効になる浮動小数点のトラップモードを設定します。

t には、次の 1 つまたは複数の項目をコンマで区切って指定します。

%all%nonecommon[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() と同じです。

このオプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルする必要があります。

詳細は、『Fortran プログラミングガイド』の「浮動小数点演算」の章を参照してください。

3.4.37 -G

実行可能ファイルの代わりに、動的共有ライブラリを構築します。

このオプションは、動的共有ライブラリを構築するようリンカーに指示します。-G を指定しないと、リンカーは実行可能ファイルを構築します。-G を指定すると、動的ライブラリを構築します。出力ファイル名を指定するには、-G オプションとともに -o オプションを使用します。詳細は、『 Fortran プログラミングガイド 』の「ライブラリ」の章を参照してください。

3.4.38 -g

デバッグとパフォーマンス分析のためにコンパイルします。

dbx(1) デバッグユーティリティーによるデバッグ、およびパフォーマンスアナライザによるパフォーマンス分析のために、シンボルテーブル情報を生成します。

-g の指定がなくてもある程度のデバッグはできますが、dbxデバッガのすべての機能を使用するには、-g を付けてコンパイルする必要があります。

-g とともに指定した、ほかのオプションの機能の一部が制限される場合があります。詳細は、『dbx コマンドによるデバッグ』を参照してください。

パフォーマンスアナライザの機能を最大限に利用するには、-g オプションを指定してコンパイルします。一部のパフォーマンス分析機能は -g を必要としませんが、注釈付きのソースコード、一部の関数レベルの情報、およびコンパイラの注釈メッセージを確認するには、-g でコンパイルする必要があります。詳細は、analyzer(1) マニュアルページおよびマニュアル『Solaris Studio パフォーマンスアナライザ』を参照してください。

-g で生成される注釈メッセージは、プログラムのコンパイル時にコンパイラの実行した最適化と変換について説明します。これらのメッセージは、ソースコードに挿入されているため、er_src(1) コマンドで表示できます。

注釈メッセージは、コンパイラが実際に最適化を実行した場合に限り表示されます。-xO4-fast などを使用して高度な最適化レベルを要求すると、注釈メッセージの表示される可能性が高くなります。

3.4.39 –hname

生成する動的共有ライブラリの名前を指定します。

このオプションはリンカーに渡されます。詳細は、Oracle Solaris の『リンカーとライブラリガイド』および『Fortran プログラミングガイド』の「ライブラリ」の章を参照してください。

-hname オプションにより、作成される共有動的ライブラリに、ライブラリの内部名として name という名前が記録されます。-hname の間には空白文字があってもなくてもかまいません (ライブラリ名が elp の場合を除く。この場合、空白が必要となる)。通常、name には -o のあとに指定する名前と同じものを指定してください。-G を指定せずにこのオプションを使用しても意味がありません。

-hname オプションを省略すると、ライブラリファイルに内部名は記録されません。

ライブラリに内部名がある場合、このライブラリを引用する実行可能プログラムを実行するときは、実行時リンカーはあらゆるパスを検索して、同じ内部名を持つライブラリを探します。内部名を指定しておくと、実行時リンクの際に行うライブラリの検索が、より柔軟になります。このオプションは、共有ライブラリのバージョンを指定する場合にも使用できます。

共有ライブラリの内部名がない場合、リンカーは代わりに共有ライブラリファイルの特定のパスを使用します。

3.4.40 –help

コンパイルオプションの一覧を表示します。

「3.4.118 -xhelp=flagsも参照してください。

3.4.41 –Ipath

INCLUDE ファイルの検索パスに path を追加します

INCLUDE ファイルの検索パスの先頭に、ディレクトリパス path を挿入します。-Ipath の間に空白があってもかまいません。無効なディレクトリを指定した場合には、警告メッセージが表示されずに無視されます。

インクルードファイルの検索パス」とは、INCLUDE ファイルを探すために使用するディレクトリのリストです。インクルードファイルとは、プリプロセッサ指令 #include、または Fortran の INCLUDE 文に指定するファイルです。

検索パスは、MODULE ファイルの検索にも使用されます。

例: /usr/app/includeINCLUDE ファイルを検索するには、次のようにします。

demo% f95 -I/usr/app/include growth.F

コマンド行で複数回 -IIpath オプションを指定することができます。各オプションを指定するごとに、検索パスリストの先頭に最初に検索するパスとして追加されます。

INCLUDE 文または #include 指令の相対パス名は次の順序で検索されます。

  1. ソースファイルがあるディレクトリ

  2. -I オプションで指定したディレクトリ

  3. コンパイラのデフォルトの内部リストにあるディレクトリ

  4. /usr/include/

プリプロセッサを呼び出すには、.F.F90.F95、または .F03 の拡張子付きのソースファイルをコンパイルする必要があります。

3.4.42 -i8

-i8 オプションはありません

このコンパイラで 8 バイト INTEGER を指定するには、—xtypemap=integer:64 を使用します。

3.4.43 –inline=[ %auto][[,][no%] f1,…[no%]fn]

指定のルーチンのインライン化を有効または無効にします。

関数およびサブルーチン名のコンマ区切りのリストに指定されたユーザー作成のルーチンをインライン化するようオプティマイザに要求します。ルーチン名に no% という接頭辞を付けると、そのルーチンのインライン化が無効になります。

インライン化とは最適化の手法の 1 つで、CALLや関数呼び出しなどの副プログラムの引用を、実際の副プログラムコードに効果的に置き換えます。インライン機能を有効にすると、オプティマイザが効率的なコードを生成できる機会が増えます。

%auto を指定すると、最適化レベル -O4 または -O5 での自動インライン化が有効になります。-inline で明示的なインライン化が指定されている場合、通常、これらの最適化レベルでの自動インライン化は無効になります。

関数や %auto を指定せずに -xinline= を指定した場合、ソースファイル中のルーチンはいずれもインライン化されません。

例: ルーチン xbarzbarvpoint をインライン化します。

demo% f95 -O3 -inline=xbar,zbar,vpoint *.f

このオプションを使用するための条件は次のとおりです。ただし、条件が満たされていなくても、警告メッセージは出力されません。

-inline-O4 とともに指定すると、コンパイラが通常実行する自動インライン化機能が使用できなくなります (%auto も指定した場合は除く)。なお、-O4 を指定すると、コンパイラは通常、ユーザー作成の適切なサブルーチンや関数をすべてインライン化しようとします。-O4-inline を追加すると、オプティマイザはリスト中にあるルーチンに限ってインライン化を行うため、実際にはパフォーマンスが低下します。この場合、%auto サブオプションを使用して、-O4 および -O5 で自動インライン化を有効にします。

demo% f95 -O4 -inline=%auto,no%zpoint *.f

前述の例では、-O4 の自動インライン化を有効にしながら、コンパイラが試みる zpoint() ルーチンのインライン化を無効にしています。

3.4.44 –iorounding[ ={compatible|processor-defined}]

書式付き入出力の浮動小数点の丸めモードを設定します。

すべての書式付き入出力操作の ROUND= 指示子を広域的に設定します。

-iorounding=compatible と指定する場合は、データ変換によって得られる値は、2 つのもっとも近い表示値のうち、より近い方の表示値になります。値が表示値のちょうど中間である場合は、0 から離れている方の表示値になります。

-iorounding=processor-defined を指定する場合は、丸めモードは、プロセッサのデフォルトのモードです。-iorounding が指定されない場合は、これがデフォルトになります。

3.4.45 -keeptmp

コンパイル中に作成された一時ファイルを保持します。

3.4.46 -Kpic

(廃止) -pic と同義です。

3.4.47 –KPIC

(廃止) -PIC と同義です。

3.4.48 –Lpath

ライブラリ検索ディレクトリパスのリストに path を追加します。

オブジェクトライブラリの検索ディレクトリのリストの先頭にディレクトリ path を追加します。-Lpath の間の空白文字はあってもなくてもかまいません。このオプションはリンカーに渡されます。「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

3.4.49 -lx

リンカー検索ライブラリのリストに、ライブラリ libx.a を追加します。

-lx をリンカーに渡して、ld が未解決の参照を検索するためのライブラリを追加指定します。ld は、オブジェクトライブラリ libx をリンクします。共有ライブラリ libx.so が使用できる場合 (-Bstatic または -dn が指定されていない場合)、ld はこれを使用します。そうでなければ、ld は静的ライブラリ libx .a を使用します。共有ライブラリを使用する場合は、名前は a.out に組み込まれます。-lx の間には、空白文字を入れないでください。

例: ライブラリ libVZY をリンクします。

demo% f95 any.f -lVZY

複数のライブラリとリンクするには、-lx を再度使用してください。

例: ライブラリ libylibz をリンクします。

demo% f95 any.f -ly -lz

ライブラリの検索パス、および検索順序については、『Fortran プログラミングガイド』の「ライブラリ」の章を参照してください。

3.4.50 -libmil

最適化として libm ライブラリルーチンをインライン化します。

一部の libm ライブラリルーチンには、インラインテンプレートがあります。このオプションを指定すると、これらのテンプレートが選択され、現在選択されている浮動小数点オプションとプラットフォームに対してもっとも高速な実行可能コードが生成されます。

詳細は、libm_single(3F) および libm_double(3F) のマニュアルページを参照してください。

3.4.51 -library=sunperf

Oracle Solaris Studio 提供のパフォーマンスライブラリにリンクします。(『Sun Performance Library User’s Guide 』を参照)。

3.4.52 –loopinfo

ループの並列化結果を表示します。

–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

3.4.53 –Mpath

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 モジュールファイル」を参照してください。

3.4.54 –m32 | –m64

コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。

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 がデフォルト値です。

3.4.55 –moddir= path

コンパイルされた .mod MODULE ファイルの書き込み先を指定します。

コンパイラは、コンパイルした .mod MODULE 情報ファイルを path で指定されたディレクトリに書き込みます。ディレクトリパスは、MODDIR 環境変数で指定することもできます。両方が指定されている場合は、このオプションフラグが優先されます。

デフォルトでは、コンパイラは .mod ファイルの書き込み先として現在のディレクトリを使用します。

Fortran モジュールについての詳細は、「4.9 モジュールファイル」を参照してください。

3.4.56 -mt[={ yes|no}]

このオプションを使用して、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 と同じです。

3.4.57 -native

(廃止) ホストシステムに対してパフォーマンスを最適化します。

このオプションは、-xtarget=native と同義です。-xtarget=native の使用を推奨します。-fast オプションでは -xtarget=native と設定します。

3.4.58 -noautopar

コマンド行で先に指定された -autopar で起動されている自動並列化を無効にします。

3.4.59 –nodepend

コマンド行で先に指定された -depend を取り消します。-depend=no は、-nodepend よりも優先して使用されます。

3.4.60 -nofstore

(x86) コマンド行の -fstore を取り消します。

コンパイラのデフォルトは -fstore です。-fast には、-nofstore が含まれています。

3.4.61 -nolib

システムライブラリとリンクしません

どの システムライブラリや言語ライブラリとも自動的にリンクを行いません。つまりデフォルトの -lx オプションを ld渡さないということです。通常は、ユーザーがコマンド行で指定しなくても、システムライブラリは実行可能ファイルに自動的にリンクされます。

-nolib オプションを使用すると、必要なライブラリの中の 1 つを静的にリンクするといった作業が容易になります。最終的な実行には、システムおよび言語ライブラリが必要です。手動でライブラリとのリンクを行なってください。このオプションを使用すると、すべてを管理できます。

f95 では、libm を静的にリンクし、libc を動的にリンクします。

demo% f95 -nolib any.f95 -Bstatic -lm -Bdynamic -lc

-lx オプションの指定の順番には意味があります。例に示す順序で指定してください。

3.4.62 -nolibmil

コマンド行の -libmil を取り消します。

このオプションは、次の例のように、-fast オプションのあとに使用して、libm 数学ルーチンのインライン化を無効にします。

demo% f95 -fast -nolibmil …

3.4.63 -noreduction

コマンド行の -reduction を無効にします。

このオプションにより、-reduction オプションが無効になります。

3.4.64 -norunpath

実行可能ファイル中に、実行時共有ライブラリのパスを設定しません。

コンパイラは通常、実行時リンカーが共有ライブラリを検索する位置を示すパスを実行可能ファイル中に設定します。このパスはインストールの形式によって異なります。-norunpath オプションは、実行可能ファイルにパスが組み込まれないようにします。

ライブラリを標準でない場所にインストールし、別のサイトで実行可能ファイルを実行したときに、ローダーがそのパスを検索しないようにする場合に、このオプションを使用します。-Rpaths と比較してみてください。

詳細は、『 Fortran プログラミングガイド 』の「ライブラリ」の章を参照してください。

3.4.65 –O[n]

最適化レベルを指定します

n には 12345 のいずれかを指定します。-On の間には空白文字を入れないでください。

-O[n] の指定がない場合は、基本的な最適化のレベルは、局所的な共通部分式の除去、および不要コードの分析だけに限られます。プログラムのパフォーマンスは、最適化なしの場合よりも、特定の最適化レベルを指定してコンパイルした方が、大幅に改善されることがあります。通常のプログラムには、-O (レベル -O3) または -fast (レベル -O5) を使用することをお勧めします。

-On の各レベルには、それよりも低いレベルでの最適化が含まれています。一般に、プログラムのコンパイル時の最適化レベルが高いと、実行時のパフォーマンスも向上します。ただし、最適化レベルを高くすると、コンパイル時間が長くなり、実行可能ファイルのサイズが大きくなります。

-g を使用するデバッグは -On を抑制しませんが、-On-g のいくつかの機能を制限します。dbx に関するマニュアルを参照してください

-O3-O4 のオプションでは、dbx から変数を表示できないという点で、デバッグ機能が制限されますが、dbx where コマンドを使用してシンボルを追跡することができます。

オプティマイザがメモリーを使い切ると、レベルを下げて最適化をやり直します。以降のルーチンでは元のレベルに戻ってコンパイルを行います。

最適化についての詳細は、『Fortran プログラミングガイド』の「パフォーマンスプロファイリング」と「パフォーマンスと最適化」の章を参照してください。

-O

-O3 と同義です。

-O1

文レベルの最小限の最適化を行います。

高いレベルの最適化では、コンパイル時間が長すぎる場合、またはスワップ領域を超えている場合に使用します。

-O2

基本ブロックレベルの最適化を行います。

通常、生成されるコードのサイズがもっとも小さくなります (-xspace も参照)。

-O3 を使用すると、コンパイル時間が長すぎる場合、スワップ領域を超えている場合、または生成される実行可能ファイルのサイズが大きすぎる場合には -O2 を使用します。これ以外の場合は、-O3 を使用してください。

-O3

関数レベルで、ループを展開し大域的に最適化を行います。-depend を自動的に追加します。

通常、-O3 では生成される実行可能ファイルのサイズが大きくなります。

-O4

同じファイル内にあるルーチンの自動インライン化を追加します。

インライン化が行われるため、-O4 では、生成される実行可能ファイルのサイズが通常大きくなります。

-g オプションを指定すると、前に説明した -O4 による自動的なインライン化は行われません。–xcrossfile を使用すると、-O4 によるインライン化の範囲が拡張されます。

-O5

最高レベルの最適化を試行します。

プログラムの中で、全体の計算時間のうちの最大部分を消費する部分に限って適用してください。-O5 の最適化アルゴリズムは、ソースプログラム中でこのレベルを適用する部分が大きすぎると、コンパイルに時間がかかり、パフォーマンスが低下する場合もあります。

プロファイルのフィードバックと併せて使用すると、最適化がパフォーマンスの向上につながる可能性が高まります。-xprofile=p を参照してください。

3.4.66 –o filename

書き込み先の実行可能ファイルの名前を指定します。

-ofilename の間には空白文字を 1 つ入れてください。このオプションを省略すると、デフォルトとして実行可能ファイルが a.out に書き込まれます。また -c とともに使用すると、-o はターゲットの .o オブジェクトファイルの名前を指定します。また -G とともに使用すると、ターゲットの .so ライブラリファイルの名前を指定します。

3.4.67 -onetrip

DO ループを 1 回だけ実行します。

DO ループが少なくとも 1 回は実行されるようにコンパイルします。標準 Fortran の DO ループは、一部の古典的な Fortran の実装とは異なり、上限が下限より小さい場合には、1 回も実行されません。

3.4.68 -openmp

-xopenmp と同義です。

3.4.69 -p

(廃止) prof プロファイラを使用するプロファイル用にコンパイルします。

プロファイル用のオブジェクトファイルを作成します。prof (1) を参照してください。コンパイルとリンクを分けて行う場合、-p オプションを付けてコンパイルしたときはリンクでも必ず -p オプションを付けてください。-pprof は主に旧式のシステムとの互換性を保つために使用します。gprof を使用した -pg プロファイリングの方をお勧めします。詳細は、『Fortran プログラミングガイド』のパフォーマンスプロファイルに関する説明を参照してください。

3.4.70 –pad[= p]

キャッシュを効率よく利用するためにパディングを挿入します。

配列や文字変数が、静的な局所変数で初期化されていない場合、または共通ブロックにある場合、間にパディングを挿入します。パディングは、キャッシュを効率的に利用できる位置にデータが配置されるように挿入されます。いずれの場合も、配列または文字変数を等値化することはできません。

p を指定する場合は、%none か、local または common のいずれかまたは両方を指定する必要があります。

local
隣接する局所変数の間にパディングを追加挿入します。
common
共通ブロック変数の間にパディングを追加挿入します。
%none
パディングを追加挿入しません (コンパイラのデフォルト)。

localcommon の両方を指定する場合、順序はどちらが先でもかまいません。

-pad のデフォルトは、次のとおりです。

-pad[=p] オプションは、次の条件を満たす項目に適用されます。

局所変数または静的変数については、「3.4.83 -stackvarを参照してください。

プログラムは次の制限事項に従っている必要があります。

-pad が使用されたときに、共通ブロックのコンパイルの一貫性が維持されるようにする必要があります。異なるプログラムユニットの共通ブロックを -pad=common を付けてコンパイルしたとき、その一貫性が維持されない場合は、エラーになります。-Xlist を付けたコンパイルでは、同じ名前の共通ブロックの長さがプログラムユニットの間で異なる場合に、そのことが報告されます。

3.4.71 –pg

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 に含まれている点にも注意してください。

3.4.72 –pic

共有ライブラリ用に位置独立コードをコンパイルします。

SPARC では、-pic-xcode=pic13 と同等です。位置独立コードの詳細は、「3.4.111 -xcode= keyword を参照してください。

x86 では、位置独立コードを生成します。このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。大域データへの各参照は、大域オフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して PC 相対アドレス指定モードで生成されます。

3.4.73 -PIC

32 ビットアドレスで位置独立コードをコンパイルします。

SPARC では、-PIC-xcode=pic32 と同等です。位置独立コードの詳細は、「3.4.111 -xcode= keywordを参照してください。

x86 では、—PIC—pic と同等です。

3.4.74 –Qoption pr ls

サブオプションリスト ls をコンパイル段階 pr に渡します。

Qoptionpr、および ls の間には必ず空白文字を入れます。Q は大文字でも小文字でもかまいません。リスト には、コンパイル段階に適したサブオプションをコンマで区切って指定します。リストには空白文字を入れないでください。また、サブオプションの先頭にマイナス記号を付けることができます。

このオプションは主に、サポートスタッフによる内部デバッグ用に使われます。LD_OPTIONS 環境変数を使用してリンカーにオプションを渡します。『Fortran プログラミングガイド』のリンクとライブラリに関する章を参照してください。

3.4.75 –qp

-p と同義です。

3.4.76 –R ls

動的ライブラリの検索パスを実行可能ファイルに設定します。

このオプションを指定すると、ld(1) リンカーは動的ライブラリ検索パスのリストを実行可能ファイルに格納します。

ls には、ライブラリ検索パスのディレクトリをコロンで区切って指定します。-Rls の間には空白文字があってもなくてもかまいません。

このオプションを複数指定した場合は、それぞれのディレクトリリストがコロンで区切られて連結されます。

このリストは実行時に実行時リンカー ld.so が使用します。実行時に、このリストにあるパスで動的なライブラリを検索し、未解決の参照を解決しようとします。

このオプションは、動的ライブラリへのパスを指定するオプションを意識せずに出荷用の実行可能ファイルを実行できるようにしたいときに使用します。

-Rpaths を使用して実行可能ファイルを構築すると、ディレクトリパスはデフォルトのパスに追加されます。デフォルトのパスは、常に最後に検索されます。

詳細は、『Fortran プログラミングガイド』の「ライブラリ」の章および Oracle Solaris の『リンカーとライブラリガイド』を参照してください。

3.4.77 –r8const

単精度の定数を REAL*8 定数に変換します。

単精度の REAL 定数はすべて REAL*8 に変換されます。倍精度 (REAL*8) 定数は変更されません。このオプションは、定数にだけ適用されます。定数と変数の両方を変換す る場合は、「3.4.167 -xtypemap= specを参照してください。

このオプションフラグを使用する際には注意が必要です。REAL*4 引数を期待するサブルーチンまたは関数が REAL*4 定数で呼び出される場合に、REAL*8 の指令を受け取ることになるため、インタフェースの問題が生じる可能性があります。また、入出力リストに REAL*4 定数がある書式なし write によって書き込まれた、書式なしデータファイルの読み取りプログラムで問題を生じる可能性もあります。

3.4.78 –recl=a[ ,b]

デフォルトの出力記録長を設定します。

接続済みの装置の出力 (標準の出力) と エラー (標準のエラー) のいずれかまたは両方に対するデフォルトの記録長 (文字数単位) を設定します。このオプションは、次のいずれかの書式で指定する必要があります。

ここで N、N1、N2 は、72 ~ 2147483646 の範囲のすべての正の整数です。out は標準の出力を、error は標準のエラーを指し、all によってデフォルトの記録長が両方に設定されます。デフォルトは -recl=all:80 です。このオプションは、コンパイルされるプログラムが Fortran 主プログラムを持つ場合にのみ有効です。

3.4.79 -reduction

ループ中にある縮約演算を識別します。

自動並列化中にループを解析し、縮約演算を調べます。ループの縮約には、潜在的に丸めのエラーがあります。

縮約演算」によって、配列内の要素が単一のスカラー値に変換されます。縮約演算の典型的な例として、あるベクトルの各要素をまとめる処理があります。このような演算は並列化の対象ではありませんが、-reduction を指定すると、コンパイラは縮約演算を認識し、特別な例として並列化します。コンパイラが認識する縮約演算については、『Fortran プログラミングガイド』の「並列化」の章を参照してください。

このオプションは、自動並列化オプション —autopar とともに使用する場合にのみ使用できます。それ以外の場合は無視されます。明示的に並列化されたループは縮約演算の解析の対象にはなりません。

3.4.80 -S

コンパイルし、アセンブリのソースコードだけを生成します。

指定したプログラムをコンパイルし、アセンブリ言語の出力結果を、接尾辞 .s の付いた名前のファイルに出力します。.o ファイルは作成しません。

3.4.81 -s

実行可能ファイルからシンボルテーブルを取り除きます。

実行可能ファイルを縮小しますが、リバースエンジニアを困難にします。また、このオプションを使用すると、dbx その他のツールによるデバッグができなくなり、-g オプションは無視されます。

3.4.82 –silent

(廃止) コンパイラメッセージの出力を抑制します。

通常、f95 コンパイラは、コンパイル中に、エラー診断以外のメッセージを発行しません。このオプションフラグは、従来の f77 コンパイラとの互換性を保つために準備されています。-f77 互換性フラグとともに使用しない場合は、このオプションフラグは必要ありません。

3.4.83 -stackvar

可能な場合はいつでも局所変数をメモリースタックに割り当てます。

このオプションは、再帰的で再入力可能なコードの記述を簡単にし、ループを並列化する際の最適化により自由度を与えることができます。

並列化オプションを使用する場合は、-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 環境変数は、接尾辞 BKM、または G の付いた数値も受け付けます。これらの接尾辞はそれぞれ、バイト、キロバイト、メガバイト、ギガバイトを表します。デフォルトはキロバイトです。

STACKSIZE 環境変数は、—xopenmp または —xautopar オプションを使用してコンパイルされたプログラムにのみ影響し、Solaris システムで pthread インタフェースを使用するプログラムには影響しません。

並列化と -stackvar を併用する方法の詳細は、『Fortran プログラミングガイド』の「並列化」の章を参照してください。limit コマンドについての詳細は、csh(1) を参照してください。

-xcheck=stkovf フラグを指定してコンパイルすると、スタックオーバーフロー状態に対する実行時の検査が有効になります。「3.4.109 -xcheck= keywordを参照してください。

3.4.84 –stop_status[ ={yes|no}]

STOP 文により整数のステータス値を返します。.

デフォルトは -stop_status=no です。

-stop_status=yes を付けると、STOP 文に整数の定数を入れることができます。その値は、プログラムの終了時に環境に渡されます。

STOP 123

0 ~ 255 の範囲にある値を指定してください。これよりも大きい値は切り捨てられ、実行時メッセージが出力されます。ただし、

STOPstop string

は受け付けられます。この場合は環境にステータス値 0 が返されます。ただし、コンパイラの警告メッセージは出力されます。

このステータス環境変数は、C シェル (csh) では $status、また Bourne (sh) シェルと Korn (ksh) シェルでは $? です。

3.4.85 –temp= dir

一時ファイルのディレクトリを設定します。

コンパイラによって使用される一時ファイル用のディレクトリを dir に設定します。このオプション文字列の中にはスペースを入れてはいけません。このオプションを指定しない場合、一時ファイルは /tmp ディレクトリに置かれます。

このオプションは、TMPDIR 環境変数の値に優先されます。

3.4.86 -time

各コンパイル段階の経過時間を表示します。

各コンパイル段階で費やされた時間とリソースが表示されます。

3.4.87 –traceback[ ={%none|common| signals_list}]

実行時に重大エラーが発生した場合にスタックトレースを発行します。

-traceback オプションを指定すると、プログラムによって特定のシグナルが生成された場合に、実行可能ファイルで stderr へのスタックトレースが発行されて、コアダンプが実行され、終了します。複数のスレッドが 1 つのシグナルを生成すると、スタックトレースは最初のスレッドに対してのみ生成されます。

追跡表示を使用するには、リンク時に -traceback オプションをコンパイラコマンド行に追加します。このオプションはコンパイル時にも使用できますが、実行可能バイナリが生成されない場合無視されます。-traceback -G とともに使用して共有ライブラリを作成すると、エラーが発生します。

表 3-9 -traceback オプション

オプション
意味
common
sigillsigfpesigbussigsegv、または sigabrt の共通シグナルのいずれかのセットが発生した場合にスタックトレースを発行することを指定します。
signals_list
スタックトレースを生成するシグナルの名前を小文字で入力してコンマで区切ったリストを指定します。sigquitsigillsigtrapsigabrtsigemtsigfpesigbussigsegvsigsyssigxcpusigxfsz のシグナル (コアファイルが生成されるシグナル) をキャッチできます。

これらのシグナルの前に no% を付けると、シグナルのキャッチは無効になります。

たとえば、-traceback=sigsegv,sigfpe と指定すると、sigsegv または sigfpe が発生した場合にスタックトレースとコアダンプが生成されます。

%none または none
追跡表示を無効にします。

このオプションを指定しない場合、デフォルトは -traceback=%none になります。

値を指定せずに、-traceback だけを指定すると、-traceback=common と同義になります。

注: コアダンプが不要な場合は、次を使用して coredumpsize 制限を 0 に設定できます。

% limit coredumpsize 0            

-traceback オプションは、実行時のパフォーマンスに影響しません。

3.4.88 -U

ソースファイル中の大文字と小文字を区別します。

大文字を小文字と同等には取り扱いません。デフォルトでは、文字列定数中を除き、大文字をすべて小文字として解釈します。このオプションを指定すると、DeltaDELTA、および delta はすべて別の記号として解釈されます。組み込み関数の呼び出しは、このオプションによる影響を受けません。

Fortran を別の言語に移植したり、混用したりする場合は、-U オプションを指定する必要があることがあります。『Fortran プログラミングガイド』の Solaris Studio Fortran への移植に関する章を参照してください。

3.4.89 –Uname

プリプロセッサのマクロ name の定義を取り消します。

このオプションは、fpp または cpp プリプロセッサを呼び出すソースファイルにのみ適用されます。このオプションは、同じコマンド行の -Dname で作成されたプリプロセッサのマクロ name の初期定義を削除します。この場合、オプションの順序に関係なく、コマンド行ドライバによって暗黙に配置された -Dname も対象となります。ソースファイルのマクロ定義には影響しません。コマンド行に複数の -Uname フラグを配置できます。-U とマクロ name の間に空白文字を入れることはできません。

3.4.90 -u

未宣言の変数を報告します。

すべての変数に対するデフォルトの型を、Fortran の暗黙の型宣言を使用せずに「未宣言」にします。これは、各コンパイル単位で IMPLICIT NONE が指定されていることと同じです。宣言していない変数に対して警告メッセージが出力されます。ただし、このオプションは、IMPLICIT 文や明示的に type を指定する文より優先されることはありません。

3.4.91 –unroll= n

DO ループの展開が可能な個所で、使用可能にします。

n は正の整数です。次の選択が可能です。

一般に、ループを展開するとパフォーマンスが改善されますが、実行可能ファイルのサイズが大きくなります。ループの展開と各種のコンパイラの最適化については、『Fortran プログラミングガイド』の「パフォーマンスと最適化」の章を参照してください。「2.3.1.3 UNROLL 指令」も参照してください。

3.4.92 –use= list

暗黙的な USE モジュールを指定します。

list は、モジュール名またはモジュールファイル名のコンマ区切りのリストです。

-use=module_name を使用してコンパイルすると、USE module_name 文をコンパイルされる各副プログラムまたはモジュールに追加することになります。-use=module_file_name を使用してコンパイルすると、指定されたファイルに含まれる各モジュールの USE module_name を追加することになります。

Fortran モジュールについての詳細は、「4.9 モジュールファイル」を参照してください。

3.4.93 -V

各コンパイラパスの名前とバージョンを表示します。

コンパイラの実行時に、各パスの名前とバージョンを表示します。

3.4.94 –v

各コンパイラパスの詳細情報を表示します。

-V と同様に、コンパイラの実行時にそれぞれのパス名を表示し、ドライバが使用したオプション、マクロフラグ展開、および環境変数を詳細に表示します。

3.4.95 –vax= keywords

有効にするレガシーの VAX VMS Fortran 拡張機能の選択を指定します。

keywords 指定子は、次のサブオプションのいずれか、またはこれらのサブオプションをいくつか組み合わせて、コンマで区切ったリストとして指定します。

blank_zero
書式付き入力の空白を内部ファイルでゼロと解釈します。
debug
文字「D」で始まる行を、VMS Fortran と同じように、注釈行ではなく通常の Fortran 文として解釈します。
rsize
書式なしレコードサイズを、バイト単位ではなくワード単位で解釈します。
struct_align
VAX 構造体の成分を、メモリー内に VMS Fortran と同じようにレイアウトします。パディングは挿入しません。注: このサブオプションを指定すると、データの不正な整列が発生する場合があります。このようなエラーを回避するには、—xmemalign と併せて使用してください。
%all
前述すべての VAX VMS 機能を有効にします。
%none
前述すべての VAX VMS 機能を無効にします。

サブオプションは個々に選択することもオフにすることもできます。個々にオフにするには、サブオプションの前に no% を付けます。

例:

-vax=debug,rsize,no%blank_zero

デフォルトは —vax=%none です。サブオプションなしで —vax を指定すると、—vax=%all と同じ結果になります。

3.4.96 -vpara

並列化に関する詳細メッセージを表示します。

コンパイラが、並列化指令で明示的に指定されたループを分析するごとに、検出されるデータの依存関係に関する警告メッセージを出力します。ただし、ループの並列化は続けられます。

-xopenmp と OpenMP API 指令とともに使用します。

警告は、コンパイラが次の状態を検出したときに表示されます。

すべての並列化指令が問題なく処理される場合、警告は表示されません。


注 - Solaris Studio のコンパイラは OpenMP API の並列化モデルをサポートします。そのため、従来の C$MIC 並列化指令は非推奨で、無視されます。OpenMP API への移植については、『OpenMP API ユーザーズガイド』を参照してください。


3.4.97 -Wc ,arg

引数 arg を指定された構成要素 c に渡します。

引数はコンマだけで区切る必要があります。すべての -W 引数は、残りのコマンド行引数のあとに渡されます。コンマを引数の一部として含めるには、コンマの直前にエスケープ文字 \ (バックスラッシュ) を使用します。すべての -W arg は、通常のコマンド行引数のあとに渡されます。

たとえば、-Wa,-o,objfile は、-oobjfile を、この順序でアセンブラに渡します。また、-Wl,-I,name; を指定すると、リンク段階で動的リンカー /usr/lib/ld.so.1 のデフォルト名が無効になります。

ほかの指定されるコマンド行オプションに関して引数がツールに渡される順序は、後続のコンパイラリリースで変更されることがあります。

c について可能な値を次の表で一覧表示します。

表 3-10 -W のフラグ

フラグ
意味
a
アセンブラ: (fbe); (gas)
c
Fortran コードジェネレータ: (cg) (SPARC) ;
d
f95 ドライバ
l
リンクエディタ (ld)
m
mcs
O (大文字の o)
手続き間オプティマイザ
o (小文字の o)
ポストオプティマイザ
p
プリプロセッサ (cpp)
0 (ゼロ)
コンパイラ (f90comp)
2
オプティマイザ: (iropt)

注: -Wd を使用して f95 オプションを Fortran コンパイラに渡すことはできません。

3.4.98 –w[n ]

警告メッセージを表示または抑制します。

ほとんどの警告メッセージを表示または出力しないようにします。ただし、前に指定したオプションのすべて、あるいは一部が無効になるようなオプションを指定している場合には、警告メッセージが表示されます。

n は、0、1、2、3、または 4 です

-w0 は、エラーメッセージのみを表示します。これは -w と同義です。-w1 はエラーと警告を表示します。これは、-w を省略したときのデフォルトです。-w2 は、エラー、警告、および注意を表示します。-w3 は、エラー、警告、注意、および注を表示します。-w4 は、エラー、警告、注意、注、およびコメントを表示します。

3.4.99 -Xlinker arg

arg をリンカー ld(1) に渡します。 —z arg と同義です。

3.4.100 –Xlist[ x]

(Solaris のみ) リストを生成し、大域的なプログラム検査 (GPC) を実行します。

このオプションを使用すると、潜在的なプログラムのバグを発見できます。このオプションは、予備のコンパイラパスを呼び出し、大域プログラムを通して、副プログラムの引数、共通ブロック、およびパラメータの一貫性をチェックします。また、このオプションは、相互参照表などの行番号付きのソースコードリストも生成します。-Xlist オプションが発行するエラーメッセージは助言レベルの警告であり、プログラムのコンパイルやリンクを中断するものではありません。


注 - ソースコードのすべての構文エラーを訂正してから、-Xlist でコンパイルを実行してください。構文エラーのあるソースコードでコンパイルを実行すると、予想外の結果が報告されることがあります。


例: ルーチン間の一貫性をチェックします。

 demo% f95 -Xlist fil.f

前述の例により、出力ファイル fil.lst に次の項目が書き込まれます。

デフォルトにより、ファイル name.lst にリスト内容が書き込まれます。ここで、name はコマンド行に最初に配置されているソースファイルの名前です。

多数のサブオプションにより、さまざまな動作を柔軟に選択できます。これらのサブオプションは、-Xlist オプションの接尾辞によって指定されます。次の表を参照してください。

表 3-11 -Xlist サブオプション

オプション
機能
–Xlist
エラー、リスト、および相互参照表を示します。
-Xlistc
コールグラフとエラーを示します。
-XlistE
エラーを示します。
-Xlisterr[nnn]
エラー nnn のメッセージを抑制します。
-Xlistf
エラー、リスト、および相互参照表を示します。オブジェクトファイルは出力しません。
-Xlisth
エラー検出時にコンパイルを終了します。
-XlistI
ソースファイルとともに #include および INCLUDE ファイルを分析します。
-XlistL
リストとエラーのみを示します。
-Xlistln
ページの長さを n 行に設定します。
-XlistMP
OpenMP 指令を検査します (SPARC)。
-Xlisto name
レポートファイルを file.lst ではなく、name に出力します。
-Xlists
相互参照表から参照されない名前を抑制します。
-Xlistvn
検査レベルを n (1、2、3、または 4) に設定します。デフォルトは 2 です。
-Xlistw[nnn]
出力行の幅を nnn カラムに設定します。デフォルトは 79 です。
-Xlistwar[nnn]
警告 nnn のメッセージを抑制します。
-XlistX
相互参照表とエラーを表示します。

詳細は、『Fortran プログラミングガイド』の「プログラムの解析とデバッグ」の章を参照してください。

Linux システムでは、このオプションはありません。

3.4.101 –xaddr32[ ={yes|no}]

(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 ソフトウェア機能の定義を参照してください。

3.4.102 –xalias[ =keywords]

コンパイラが仮定する別名付けの程度を指定します。

標準規格以外のプログラム手法によっては、コンパイラの最適化方法に干渉する状況になります。オーバーインデックスおよびポインタの使用、および大域変数または一意ではない変数を副プログラムの引数として渡すことは、不明確な状況を引き起こし、予定どおりにコードが実行されない場合があります。

-xalias フラグを使用すると、別名付けが Fortran の標準規則からどのくらい離れているかをコンパイラに知らせることができます。

フラグには、キーワードのリストがある場合も、ない場合もあります。キーワードのリストはコンマで区切られ、各キーワードはプログラムにおける別名付けの状況を表しています。

キーワードに接頭辞 no% が付いている場合は、その別名付けが存在しないことを表します。

別名付けのキーワードは、次のとおりです。

表 3-12 -xalias オプションキーワード

キーワード
意味
dummy
副プログラムの仮 (形式的な) パラメータは、お互いに別名を付けることができ、大域変数にも別名を付けます。
no%dummy
(デフォルト)。Fortran 標準規格に従って仮パラメータを使用します。パラメータはお互いに別名を付けたり、大域変数に別名を付けることはしません。
craypointer
(デフォルト)。Cray ポインタは、そのアドレスを LOC() 関数が受け取るようなすべての大域変数または局所変数を指すことができます。また、2 つの Cray ポインタが同一のデータを指す可能性もあります。このような前提に基づいて、いくつかの最適化が抑制されるため安全です。
no%craypointer
Cray ポインタは malloc() によって得られるアドレスなど、一意のメモリーアドレスのみ指します。また、2 つの Cray ポインタが同一のデータを指すことはありません。この前提によって、コンパイラは Cray ポインタ参照を最適化することができます。
actual
コンパイラは、副プログラムの実引数を大域的な変数として扱います。引数を副プログラムに渡すことは、Cray ポインタを通して別名を付けることになります。
no%actual
(デフォルト) 引数を渡しても、別名は付けられません。
overindex
  • COMMON ブロックの要素のリファレンスは、COMMON ブロックまたは同等のグループの要素を参照します。
  • COMMON ブロックまたは同等のグループの要素を実際の引数として副プログラムに渡すと、呼び出される副プログラムに、COMMON ブロックまたは同等のグループの要素へのアクセスを提供することになります。

  • 連続構造型は、COMMON ブロックのように扱われ、このような変数の要素は、その変数の別の要素に別名を付けます。

  • 各配列境界には違反しますが、前述したものを除いては、参照される配列の要素は配列内に残ります。配列構文、WHERE、および FORALL 文は、オーバーインデックスを考慮していません。これらの構文で配列の境界を越えた添字付けが発生する場合は、DO ループとして構文を書き直す必要があります。

no%overindex
(デフォルト) 配列境界は違反しません。配列の参照がほかの変数を参照することもありません。
ftnpointer
外部関数の呼び出しによって、Fortran ポインタは、どのような型、種類、またはランクのターゲット変数でもポイントする場合があります。
no%ftnpointer
(デフォルト) Fortran ポインタは標準規則に準拠します。

リストなしで -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 プログラミングガイド』の移植に関する章を参照してください。

3.4.103 –xannotate[ ={yes|no}]

(Solaris のみ) 最適化ツールおよび可観測性ツール binopt(1)、 code-analyzer(1)、discover(1)、collect (1)、および uncover(1) によって後で使用できるバイナリを作成します。

デフォルトは -xannotate=yes です。値なしで -xannotate を指定することは、-xannotate=yes と同等です。

最適化ツールおよび可観測性ツールの最適な使用のためには、-xannotate=yes をコンパイル時とリンク時の両方で有効にする必要があります。最適化ツールおよび可観測性ツールを使用しない場合、-xannotate=no を指定してコンパイルおよびリンクすると、わずかに小さいバイナリおよびライブラリが生成されます。

Linux システムでは、このオプションはありません。

3.4.104 –xarch=isa

命令セットアーキテクチャー (ISA) を指定します。

次の表は、SPARC および x86 の両方のプラットフォームに共通する -xarch キーワードの一覧を示しています。

表 3-13 SPARC および x86 の両方のプラットフォームに共通する -xarch キーワード

フラグ
意味
generic
ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルト値です。
generic64
ほとんどの 64 ビットプラットフォームで良好なパフォーマンスを得られるようにコンパイルします。このオプションは -m64 -xarch=generic に相当し、以前のリリースとの互換性のために提供されています。
native
このシステムで良好なパフォーマンスを得られるようにコンパイルします。現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。
native64
64 ビットシステムで良好なパフォーマンスを得られるようにコンパイルします。このオプションは -m64 -xarch=native に相当し、以前のリリースとの互換性のために提供されています。

-xarch は単独で使用できますが、-xtarget オプションの展開の一部です。特定の -xtarget オプションで設定されている -xarch の値を上書きするために使用することもできます。例:

% f95 -xtarget=ultra2 -xarch=sparcfmaf ...

-xtarget=ultra2 で設定した -xarch が無効になります。

このオプションは、指定の命令セットだけを許すことによって、コンパイラが指定の命令セットアーキテクチャーの命令に対応するコードしか生成できないようにします。このオプションは、すべてのターゲットを対象とするような命令としての使用は保証しません。

このオプションを最適化で使用する場合は、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。不適切なアーキテクチャーを選択すると、バイナリプログラムがその対象プラットフォーム上で実行できなくなることがあります。

次の点に注意してください。

-xarch が指定されない場合のデフォルトは、generic です。

表 3-14 に、SPARC プラットフォーム上で使用する各 -xarch キーワードについてプラットフォームの詳細を説明します。

表 3-14 SPARC プラットフォーム上の -xarch の値

-xarch=
意味 (SPARC)
sparc
SPARC V9-ISA 用のコンパイルを行います。

V9 ISA 用のコンパイルですが、Visual Instruction Set (VIS) や、その他の実装固有の ISA 拡張機能は含まれません。このオプションを使用して、コンパイラは、V9 ISA で良好なパフォーマンスが得られるようにコードを生成できます。

sparc4
SPARC4 バージョンの SPARC-V9 ISA 用のコンパイルを行います

SPARC-V9 命令セット、VIS 1.0 を含む UltraSPARC 拡張機能、VIS2.0、浮動小数点積和演算命令、VIS 3.0、および SPARC4 命令を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。

sparcvis
UltraSPARC 拡張機能付きの SPARC-V9 ISA 用のコンパイルを行います。

SPARC-V9 + VIS (Visual Instruction Set) version 1.0 + UltraSPARC 拡張機能用のコンパイルを実行します。このオプションを使用すると、コンパイラは、UltraSPARC アーキテクチャー上で良好なパフォーマンスが得られるようにコードを生成することができます。

sparcvis2
UltraSPARC-III 拡張機能付きの SPARC-V9 ISA 用のコンパイルを行います

UltraSPARC アーキテクチャー + VIS (Visual Instruction Set) version 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。

sparcvis3
SPARC VIS version 3 の SPARC-V9 ISA 用にコンパイルします。

SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0、積和演算 (FMA) 命令、および VIS (Visual Instruction Set) version 3.0 を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。

sparcfmaf
SPARC-V9 ISA の sparcfmaf バージョン用のコンパイルを行います

SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0 を含む UltraSPARC-III 拡張機能、および浮動小数点積和演算用の SPARC64 VI 拡張機能の命令をコンパイラが使用できるようになります。

コンパイラが自動的に積和演算命令を使用する機会を見つけられるようにするには、-xarch=sparcfmaf および -fma=fused と最適化レベルを組み合わせて使用する必要があります。

sparcima
sparcima 版の SPARC-V9 ISA 用にコンパイルします。コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令を使用できるようにします。
v9
-m64 -xarch=sparc と同義です。 64 ビットのメモリーモデルを取得するために -xarch=v9 を使用している従来のメイクファイルおよびスクリプトでは、-m64 のみを使用する必要があります。
v9a
-m64 -xarch=sparcvis と同義です。旧バージョンとの互換を提供します。
v9b
-m64 -xarch=sparcvis2 と同義です。旧バージョンとの互換を提供します。

表 3-15 に、x86 プラットフォーム上で使用する各 -xarch キーワードについて詳細を説明します。x86 で -xarch が指定されなかった場合のデフォルトは generic です (または —m64 が指定された場合は generic64)。

表 3-15 x86 プラットフォーム上の -xarch の値

-xarch=
意味 (x86)
386
命令セットを Intel 386/486 アーキテクチャーに限定します。
pentium_pro
命令セットを Pentium Pro アーキテクチャーに制限します。
pentium_proa
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット Pentium Pro アーキテクチャーに追加します。
sse
pentium_pro に SSE 命令セットを追加します(次を参照)。
ssea
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE アーキテクチャーに追加します。
sse2
pentium_pro に SSE2 命令セットを追加します (次を参照)。
sse2a
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE2 アーキテクチャーに追加します。
sse3
SSE2 命令セットに SSE3 命令セットを追加します。
amd64
Solaris プラットフォームでは、-m64 -xarch=sse2 と同義です。 64 ビットのメモリーモデルを取得するために -xarch=amd64 を使用している従来のメイクファイルおよびスクリプトでは、-m64 を使用する必要があります。
amd64a
Solaris プラットフォームでは、—m64 —xarch=sse2a と同義です。
sse3a
AMD 拡張命令 (3DNow! など) をSSE3 命令セットに追加します。
ssse3
SSE3 命令セットに SSSE3 命令を追加します。
sse4_1
SSSE3 命令セットに SSE4.1 命令を追加します。
sse4_2
SSE4.1 命令セットに SSE4.2 命令を追加します。
amdsse4a
AMD 命令セットに SSE4a 命令を追加します。
avx
Intel Advanced Vector Extensions 命令セットを使用します。
aes
Intel Advanced Encryption Standard 命令セットを追加します。ソースコードが .il インラインコード、_asm 文、または AES 命令を使用するアセンブラコードを含むか、AES 組み込み関数を参照することがない限り、-xarch=aes が指定されたときにコンパイラは AES 命令を自動的に生成しないことに注意してください。

3.4.104.1 x86/x64 プラットフォームでの特別な注意

x86 Solaris プラットフォームでコンパイルを行う場合は、次の点が重要です。

3.4.105 –xassume_control[ =keywords]

ASSUME プラグマを制御するパラメータを設定します。

このフラグを使用して、コンパイラがソースコード内の ASSUME プラグマを処理する方法を制御します。

プログラマは ASSUME プラグマを使用することによって、コンパイラがより良い最適化を得るために使用できる特殊な情報を表明することができます。これらの表明は、確率を指定することができます。確率が 0 または 1 の場合は確実 (certain) とされ、それ以外の場合は不確実 (non-certain) とみなされます。

また、可能性または確実性を指定して、次に DO ループのトリップカウント、または分岐が起こることを表明することもできます。

f95 コンパイラが認識する ASSUME プラグマの説明については、「2.3.1.8 ASSUME 指令」を参照してください。

-xassume_control オプションの keywords には、1 つのサブオプションキーワードまたはコンマで区切られたキーワードのリストを指定できます。認識されるキーワードサブオプションは、次のとおりです。

optimize
ASSUME プラグマで指定される表明は、プログラムの最適化に影響を与えます。
check
コンパイラは確実とマークされたすべての表明の正確さを検査するコードを生成し、表明が違反している場合は実行時メッセージを出力します。プログラムは fatal が指定されていなければ、処理を続行します。
fatal
check とともに使用すると、確実とマークされている表明が違反を起こすとプログラムは終了します。
retrospective[:d]
d パラメータはオプションの許容値で、1 未満の正の実数定数を指定する必要があります。デフォルトは「.1」です。retrospective を指定すると、すべての表明について真と偽をカウントするコードをコンパイルします。値が許容値 d を超えると、プログラム終了時に一覧が出力されます。
%none
すべての ASSUME プラグマが無視されます。

コンパイラのデフォルトは次のとおりです。

-xassume_control=optimize

これは、コンパイラが ASSUME プラグマを認識し、最適化に影響を与えますが、検査は行わないという意味です。

パラメータを指定しない場合、-xassume_control は次と同義です。

-xassume_control=check,fatal

この場合、コンパイラは certain とマークされたすべての ASSUME プラグマを受け付け、検査しますが、最適化には影響を与えません。表明が無効の場合、プログラムは終了します。

3.4.106 -xautopar

-autopar と同義です。

3.4.107 –xbinopt={prepare | off}

(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 です。

3.4.108 –xcache=c

オプティマイザ用のキャッシュ特性を定義します

このオプションは、オプティマイザが使用できるキャッシュ特性を指定します。特別なキャッシュ特性が必ず使用されるわけではありません。

このオプションは、-xtarget オプションを展開した機能の一部です。-xtarget オプションで暗黙に指定された -xcache 値の指定を変更する場合に、このオプションを単独で使用します。

表 3-16 -xcache の値

意味
generic
どのプロセッサでもパフォーマンスが著しく低下することがないように、キャッシュ特性を定義します。これはデフォルト値です。
native
ホストプラットフォームで良好なパフォーマンスを得るためのキャッシュ特性を定義します。
s1/l1 /a1[/t1 ]
レベル 1 のキャッシュ特性を定義します。
s1/l1 /a1[/t1 ]:s2/ l2/a2[ /t2]
レベル 1 と 2 のキャッシュ特性を定義します。
s1/l1 /a1[/t1 ]:s2/ l2/a2[ /t2]:s3 /l3/ a3[/t3]
レベル 1、2、3 のキャッシュ特性を定義します。

si/li /ai/ti フィールドは次のように定義されます。

si

レベル i のデータキャッシュのサイズ (キロバイト単位)

li

レベル i のデータキャッシュのラインサイズ (バイト単位)

ai

レベル i のデータキャッシュの結合特性

ti

レベル i でキャッシュを共有するハードウェアスレッドの数 (省略可能)

例: -xcache=16/32/4:1024/32/1 では、次の内容を指定します。

レベル 1 のキャッシュ: 16K バイト、32 バイト行サイズ、4 面結合

レベル 2 のキャッシュ: 1024K バイト、32 バイト行サイズ、ダイレクトマップ結合

3.4.109 –xcheck= keyword

実行時の特別な検査を生成します。

キーワードには次のいずれかを指定します。

keyword
機能
stkovf
副プログラムのエントリのスタックオーバーフローを実行時に検査します。スタックオーバーフローが検出されると、SIGSEGV セグメント例外が発生します
no%stkovf
スタックオーバーフローの実行時の検査を無効にします
init_local
局所変数の特定の初期化を実行します。

コンパイラは局所変数を、代入される前にプログラムが使用すると算術例外を起こす可能性がある値に初期化します。ALLOCATE 文によって割り当てられたメモリーも同じように初期化されます。

モジュール変数、STATIC ローカル変数と SAVE ローカル変数、および COMMON ブロックの変数は初期化されません。

詳細は、『C ユーザーズガイド』を参照してください。

no%init_local
局所変数の初期化を無効にします。これはデフォルト値です。
%all
実行時のすべての検査機能を有効にします。
%none
実行時のすべての検査機能を無効にします。

スタックオーバーフローは、特に、スタックに大きな配列が割り当てられるマルチスレッドアプリケーションで、近傍のスレッドスタックのデータを警告なしに破壊する可能性があります。スタックオーバーフローの可能性がある場合は、-xcheck=stkovf を使用してすべてのルーチンをコンパイルします。ただし、このフラグを使用してコンパイルしても、このフラグを使用せずにコンパイルしたルーチンでスタックオーバーフローが起こる可能性があるので、すべてのスタックオーバーフローの状況が検出されるわけではありません。

3.4.110 –xchip= c

オプティマイザ用のターゲットプロセッサを指定します。

このオプションは、処理対象となるプロセッサを指定することによって、タイミング特性を指定します。

このオプションは単独で使用できますが、-xtarget オプションを展開した機能の一部です。-xtarget オプションで暗黙に指定された -xchip 値の指定を変更する場合に、このオプションを使用します。

-xchip=c は次のものに影響を与えます。

次の表に、-xchip の有効なプロセッサ名の値をまとめてあります。

表 3-17 -xchip でよく使われる SPARC プロセッサ名

-xchip=
最適化の対象
generic
ほとんどの SPARC プロセッサこれがデフォルトです。
native
このホストプラットフォーム
sparc64vi
SPARC64 VI プロセッサ
sparc64vii
SPARC64 VII プロセッサ
sparc64viiplus
SPARC64 VII+ プロセッサ
ultra
UltraSPARC プロセッサ
ultra2
UltraSPARC II プロセッサ
ultra2e
UltraSPARC IIe プロセッサ
ultra2i
UltraSPARC IIi プロセッサ
ultra3
UltraSPARC III プロセッサ
ultra3cu
UltraSPARC IIIcu プロセッサ
ultra3i
UltraSPARC IIIi プロセッサ
ultra4
UltraSPARC IV プロセッサ
ultra4plus
UltraSPARC IV+ プロセッサ
ultraT1
UltraSPARC T1 プロセッサ
ultraT2
UltraSPARC T2 プロセッサ
ultraT2plus
UltraSPARC T2+ プロセッサ
ultraT3
UltraSPARC T3 プロセッサ
T3
SPARC T3 プロセッサ
T4
SPARC T4 プロセッサ

x86 プラットフォーム: -xchip 値は、 pentiumpentium_propentium3pentium4genericopteroncore2、 penryn、 nehalem、 amdfam10、 sandybridgewestmere、 および native のいずれかです。

3.4.111 –xcode= keyword

(SPARC) SPARC プラットフォームのコードアドレス空間を指定します。

keyword の値は次のとおりです。

keyword
機能
abs32
32 ビットの絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**32 バイトに制限されます。次の 32 ビットのプラットフォームでのデフォルトです。
abs44
44 ビットの絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**44 バイトに制限されます。次の 64 ビットのプラットフォームだけで使用できます。
abs64
64 ビットの絶対アドレスを生成します。次の 64 ビットのプラットフォームだけで使用できます。
pic13
位置独立コード (スモールモデル) を生成します。-pic と同義です。32 ビットのプラットフォームでは 2**11 の、64 ビットのプラットフォームでは 2**10 の固有の外部シンボルを引用できます。
pic32
位置独立コード (ラージモデル) を生成します。-PIC と同義です。32 ビットのプラットフォームでは 2**30 の、64 ビットのプラットフォームでは 2**29 の固有の外部シンボルを引用できます。

-xcode=keyword を明示的に指定しなかった場合のデフォルトは、次のとおりです。

32 ビットのプラットフォームの場合は、–xcode=abs32です。64 ビットのプラットフォームの場合は、–xcode=abs44 です。

3.4.111.1 位置独立コード

実行時のパフォーマンスを向上するために動的共有ライブラリを作成するときには、-xcode=pic13 または -xcode=pic32 を使用します。

動的実行可能ファイルのコードは、通常、メモリーの固定アドレスに結び付けられ、位置独立コードは、プロセスのどのようなアドレス空間でもロードすることができます。

位置独立コードを使用する場合は、大域オフセットテーブルを使用した直接的なリファレンスとして、再配置可能なリファレンスが作成されます。頻繁にアクセスされる共有オブジェクトの項目は、-xcode=pic13 または -xcode=pic32 を使用してコンパイルすると、位置独立コード以外のコードによって行われる多数の再配置が必要なくなるという利点があります。

大域オフセットテーブルのサイズは、8K バイトに制限されます。

-xcode={pic13|pic32} には、次のようなパフォーマンス上の影響があります。

こうした影響があるとしても、-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 または pic32 (または -pic または -PIC) オプションを使用してコンパイルしてください。Oracle Solaris の『リンカーとライブラリ』を参照してください。

3.4.112 –xcommonchk[ ={yes|no}]

共通ブロック不一致の実行時検査を行います

このオプションは、TASK COMMON や並列化を使用しているプログラムで共通ブロックに不一致がないかデバッグ検査を行います。『Fortran プログラミングガイド』の「並列化」の章で TASK COMMON 指令に関する説明を参照してください。

デフォルトは -xcommonchk=no です。共通ブロック不一致の実行時検査を行うとパフォーマンスが低下するので、デフォルトではこのオプションは無効になっています。-xcommonchk=yes はプログラム開発とデバッグのときだけ使用し、製品版のプログラムには使用しないでください。

-xcommonchk=yes でコンパイルすると実行時検査が行われます。1 つのソースプログラム単位で正規の共通ブロックとして宣言されている共通ブロックが TASK COMMON 指令の中で指定されていると、プログラムは停止し、不一致を示すエラーメッセージが出力されます。値を指定しない場合、-xcommonchk-xcommonchk=yes と同等です。

3.4.113 –xdebugformat={ dwarf|stabs}

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) コマンドを使用します。

3.4.114 -xdepend

-depend と同義です。

3.4.115 -xF

パフォーマンスアナライザにより、関数レベルの並べ替えを行います。

コンパイラ、パフォーマンスアナライザ、およびリンカーを使用して、コアイメージで関数 (副プログラム) の並べ替えを再度実行できます。-xF オプションでコンパイルすると、アナライザが実行されます。これにより、マップファイルを作成して、関数がどのように使用されるかに応じて、メモリー中の関数の順序を並べ替えることができます。そのあと、実行可能ファイルを構築するリンクにおいて、-Mmapfile リンカーオプションを使って、そのマップを使用するように指定することができます。これによって、実行可能ファイルの関数が別々のセクションに配置されます 。f95 —M path オプションも、リンカーに通常ファイルを渡します。f95 —Mpath オプションの説明を参照してください。

メモリー中の副プログラムの並べ替えは、アプリケーションのテキストページフォルト時間がアプリケーションの実行時間に占める割合が大きい場合にのみ役に立ちます。その他の場合の並べ替えでは、アプリケーションの全体的なパフォーマンスは改善されない場合があります。アナライザについての詳細は、『プログラムのパフォーマンス解析』を参照しください。

3.4.116 -xfilebyteorder= options

リトルエンディアン式プラットフォームとビッグエンディアン式プラットフォーム間のファイルの共有をサポートします。

このフラグは、書式なし入出力ファイル内のデータのバイト順序とバイト列を特定します。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 は、コンパイルしているプロセッサプラットフォームが使用しているのと同じバイト順序、バイト列の「ネイティブ」ファイルを表します。次は、「ネイティブ」とみなされます。

プラットフォーム
「ネイティブ」に相当するフラグ
32 ビット SPARC
big8
64 ビット SPARC
big16
32 ビット x86
little4
64 ビット x86
little16

spec には、コンマ区切りのリストで次を指定します。

%all

unit

filename

%all は、SCRATCH として開かれるか、-xfilebyteorder フラグで明示的に指定する以外のすべてのファイルと、その他の論理ユニットを表します。%all は、1 回だけ指定できます。

unit は、プログラムによって開かれた特定の Fortran ユニット番号を表します。

filename は、プログラムによって開かれた特定の Fortran ファイル名を表します。

3.4.116.1 次に例を示します。

-xfilebyteorder=little4:1,2,afile.in,big8:9,bfile.out,12
-xfilebyteorder=little8:%all,big16:20

3.4.116.2 備考:

このオプションは、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 レコード全体を使った入出力操作は行えません。

3.4.117 –xhasc[ ={yes|no}]

ホレリス定数を実際の引数リストの文字列として扱います。

-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 プログラムの移植を支援するために提供されています。

3.4.118 –xhelp=flags

コンパイラのオプションフラグを一覧表示します。-help と同義です。

3.4.119 –xhwcprof[={enable | disable}]

(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 パフォーマンスアナライザ』マニュアルを参照してください。

3.4.120 –xia[={ widestneed|strict}]

(Solaris) 区間演算処理を有効化し、適切な浮動小数点環境を設定します。

指定しない場合のデフォルトは、-xia=widestneed です。

区間演算計算についての Fortran 拡張機能の詳細は、『区画演算プログラミングリファレンス』を参照してください。「3.4.123 -xinterval[ ={widestneed|strict| no}]」も参照してください。

-xia フラグは、次のように展開されるマクロです。

-xia または -xia=widestneed
-xinterval=widestneed -ftrap=%none -fns=no -fsimple=0
-xia=strict
-xinterval=strict -ftrap=%none -fns=no -fsimple=0

3.4.121 –xinline= list

-inline と同義です。

3.4.122 –xinstrument=[%no]datarace

スレッドアナライザで分析するためにプログラムをコンパイルして計測するには、このオプションを指定します。

スレッドアナライザについての詳細は、tha(1) を参照してください。

このオプションを使用してコンパイルすることにより、パフォーマンスアナライザを使用して collect -r races オプションを付けて計測されるプログラムを実行し、データ競合検出実験を作成できます。計測されたコードをスタンドアロンで実行できますが、低速で実行されます。

この機能を無効にするには、-xinstrument=no%datarace と指定します。これはデフォルト値です。

-xinstrument には、引数を 1 つ指定する必要があります。

コンパイルとリンクを別々に行う場合は、両方の手順で -xinstrument=datarace を指定してください。

このオプションは、プリプロセッサトークン __THA_NOTIFY を定義します。#ifdef __THA_NOTIFY を指定して、libtha(3) ルーチンへの呼び出しを保護することができます。

このオプションでは、-g も設定します。

3.4.123 –xinterval[ ={widestneed|strict| no}]

(Solaris) 区間演算処理を有効化します。

オプションの値には、nowidestneed、または strict のいずれかを指定します。指定しない場合のデフォルトは、widestneed です。

no
区間演算処理を有効にしません。
widestneed
モードが混在した式に含まれる非間隔変数および定数を、式の中でもっとも広い間隔のデータ型に変換します。
strict
型や長さが混在した間隔式の使用を禁止します。間隔型および長さの変換はすべて明示的に行わなければなりません。

区間演算計算についての Fortran 拡張機能の詳細は、『Fortran 95 区画演算プログラミングリファレンス』を参照してください。「3.4.120 -xia[={ widestneed|strict}]」も参照してください。

3.4.124 –xipo[ ={0|1|2}]

相互手続きの最適化を実行します。

内部手続き解析パスを呼び出すことにより、プログラム全体の最適化を実行します。-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.ftwo.f、および three.f の間、および main.ffour.f の間で相互手続きの最適化が実行されますが、main.f または four.f と、mylib.a のルーチンの間では相互手続きの最適化が実行されません。最初のコンパイルは未定義のシンボルに関する警告を生成する場合がありますが、相互手続きの最適化は、コンパイル手順でありしかもリンク手順であるために実行されます。

-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 でコンパイルした場合に不正な結果になる可能性があります。

3.4.125 –xipo_archive[ ={none|readonly| writeback}]

(SPARC) ファイル相互の最適化でアーカイブ ((.a) ライブラリを取り込むことを可能にします。

値には、次のいずれかを指定します。

none
アーカイブファイルを処理しません。コンパイラは、-xipo を使用してコンパイルされたオブジェクトファイル、およびリンク時にアーカイブライブラリから抽出されたオブジェクトファイルに対して、モジュール相互のインライン化または最適化を適用しません。これを適用するには、-xipo と、-xipo_archive=readonly または -xipo_archive=writeback のいずれかをリンク時に指定する必要があります。
readonly
実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。

-xipo_archive=readonly オプションによって、リンク時に指定されたアーカイブライブラリのオブジェクトファイルに対する、モジュール相互のインライン化および内部手続きデータフロー解析が有効になります。ただし、モジュール間のインライン化によってほかのモジュールに挿入されたコード以外のアーカイブライブラリのコードに対する、モジュール間の最適化は有効になりません。

アーカイブライブラリ内のコードにモジュール相互の最適化を適用するには、-xipo_archive=writeback を指定する必要があります。これを行うと、コードが抽出されたアーカイブライブラリの内容が変更されることがあります。

writeback
実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。コンパイル中に最適化されたライブラリに含まれるオブジェクトファイルはすべて、その最適化されたバージョンに置き換えられます。

アーカイブライブラリの共通セットを使用する並列リンクでは、最適化されるアーカイブライブラリの独自のコピーを、各リンクでリンク前に作成する必要があります。

-xipo_archive の値が指定されていない場合、コンパイラは -xipo_archive=none に設定します。

3.4.126 –xivdep[ =p]

!DIR$ IVDEP 指令の解釈を無効または設定します。

IVDEP 指令は、ループ内で検出された一部またはすべての配列参照のループがもたらす依存関係を無視し、特にほかの方法では実行できないマイクロベクトル化、配布、ソフトウェアパイプラインなどのさまざまなループの最適化を実行するように、コンパイラに指示します。これは、依存関係が重要ではない、または依存関係が実際に発生しないことをユーザーが把握している状況で使用されます。

!DIR$ IVDEP 指令の解釈は、-xivdep オプションの値に応じて異なります。p の次の値は、次のように解釈されます。

loop — 推測されるループがもたらすベクトル依存関係を無視します。
loop_any — すべてのループがもたらすベクトル依存関係を無視します。
back — 推測される後方へのループがもたらすベクトル依存関係を無視します。
back_any — すべての後方へのループがもたらすベクトル依存関係を無視します。
none — 依存関係を無視しません (IVDEP 指令を無効にします)。

これらの解釈は、ほかのベンダーの IVDEP 指令の解釈と互換性があります。

—xivdep が指定されていない場合、および引数を使用せずに —xivdep が指定されている場合のデフォルトはどちらも —xivdep=loop です。これは、!DIR$ IVDEP 指令がデフォルトで有効であることを示します。

詳細は、「2.3.3 IVDEP 指令」を参照してください。

3.4.127 –xjobs= n

複数のプロセッサを使用してコンパイルします。

コンパイラが処理を行うために生成するプロセスの数を設定するには、-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

3.4.128 –xkeepframe[ =[%all,%none,name, no%name]]

指定した機能 (name) のスタック関連の最適化を禁止します。

%all - すべてのコードのスタック関連の最適化を禁止します。

%none - すべてのコードのスタック関連の最適化を許可します。

このオプションは累積的で、コマンド行で複数回指定できます。たとえば、—xkeepframe=%all —xkeepframe=no%func1 は、func1 を除くすべての関数についてスタックフレームを維持するべきであることを示しています。また、—xkeepframe—xregs=frameptr を上書きします。たとえば、—xkeepframe=%all —xregs=frameptr は、すべての関数についてスタックを維持するべきだが、—xregs=frameptr の最適化は無視されることを示しています。

このオプションがコマンド行で指定されていないと、コンパイラはデフォルトの -xkeepframe=%none を使用します。このオプションが値なしで指定されると、コンパイラは -xkeepframe=%all を使用します。

3.4.129 -xknown_lib=library_list

既知のライブラリの呼び出しを認識します。

指定された場合は、既知のライブラリの参照をイントリンシクスとして扱い、ユーザー定義のバージョンを無視します。これによって、コンパイラは、ライブラリに関する情報に基づき、ライブラリルーチンの呼び出しを最適化します。

library_list には、現時点では blasblas1blas2blas3、および intrinsics に対する、コンマで区切られたキーワードのリストを指定します。コンパイラは次の BLAS1、BLAS2、および BLAS3 ライブラリルーチンを認識し、Sun のパフォーマンスライブラリの実装に適するように自由に最適化します。コンパイラは、これらのライブラリルーチンのユーザー指定バージョンを無視し、Sun Performance Library 中の BLAS ルーチンを使用するか、このルーチンをインライン化します。

Sun Performance Library にリンクするには —library=sunperf オプションが必要です。

-xknown_lib=
機能
blas1
コンパイラは次の BLAS1 ライブラリルーチンを認識します。

caxpy ccopy cdotc cdotu crotg cscal csrot csscal cswap dasum daxpy dcopy ddot drot drotg drotm drotmg dscal dsdot dswap dnrm2 dzasum dznrm2 icamax idamax isamax izamax sasum saxpy scasum scnrm2 scopy sdot sdsdot snrm2 srot srotg srotm srotmg sscal sswap zaxpy zcopy zdotc zdotu zdrot zdscal zrotg zscal zswap

blas2
コンパイラは次の BLAS3 ライブラリルーチンを認識します。

cgemv cgerc cgeru ctrmv ctrsv dgemv dger dsymv dsyr dsyr2 dtrmv dtrsv sgemv sger ssymv ssyr ssyr2 strmv strsv zgemv zgerc zgeru ztrmv ztrsv

blas3
コンパイラは次の BLAS3 ライブラリルーチンを認識します。

cgemm csymm csyr2k csyrk ctrmm ctrsm dgemm dsymm dsyr2k dsyrk dtrmm dtrsm sgemm ssymm ssyr2k ssyrk strmm strsm zgemm zsymm zsyr2k zsyrk ztrmm ztrsm

blas
すべての BLAS ルーチンを選択します。-xknown_lib=blas1,blas2,blas3 と同義です。
intrinsics
コンパイラは、Fortran 組み込みの明示的な EXTERNAL 宣言を無視します。このため、ユーザー定義組み込み関数ルーチンも無視されます。組み込み関数の名前のリストは、『Fortran ライブラリ・リファレンス』を参照してください。

3.4.130 –xl

(廃止) この旧バージョンの f77 オプションはサポートされていません。現在の Fortran コンパイラの同等オプションとして次を使用してください。-f77=%all,no%backslash -vax=$all,no%debug

3.4.131 -xlang=f77

(SPARC)旧バージョンの f77 コンパイラで作成されたオブジェクトと互換性のある実行時ライブラリを伴うリンクを作成します。

f95 -xlang=f77 は、f77compat ライブラリを伴うリンクを暗黙に定義し、f95 オブジェクトファイルと FORTRAN 77 オブジェクトファイルのリンクを容易にします。このフラグを使用してコンパイルすることによって、適切な実行環境が保証されます。

f95 および f77 のコンパイル済みオブジェクトを単一の実行可能ファイルにリンクする際に、f95 -xlang=f77 を使用します。

-xlang を付けたコンパイルでは、次のことに注意してください。

3.4.132 –xld

(廃止) この (f77) オプションはサポートされていません。現在の Fortran コンパイラの同等オプションとして次を使用してください。-f77=%all,no%backslash -vax=$all,no%debug

3.4.133 -xlibmil

-libmil と同義です。

3.4.134 -xlibmopt

最適化された数学ルーチンを使用します

速度の最適化のために選択された数学ルーチンを使用します。このオプションによって通常は高速なコードが生成されます。結果が若干異なる場合がありますが、このときは普通は最終ビットが違っています。このライブラリオプションをコマンド行に指定する順序は重要ではありません。

3.4.135 –xlic_lib=sunperf

廃止。Sun Performance Library とリンクするには —library=sunperf を使用します。

3.4.136 –xlinkopt[ ={1|2|0}]

(SPARC) 再配置可能なオブジェクトファイルのリンク時の最適化を実行します。

ポストオプティマイザは、リンク時にバイナリオブジェクトコードに対して高度なパフォーマンス最適化を多数実行します。オプションの値には、実行する最適化のレベルを 0、1、2 のいずれかで設定します。

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 フラグを指定してコンパイルすると、デバッグ情報が取り込まれるため、実行可能ファイルのサイズが増えます。

3.4.137 –xloopinfo

-loopinfo と同義です。

3.4.138 –xmaxopt[ =n]

最適化プラグマを有効にして、最大最適化レベルを設定します。

n には 1 ~ 5 の値を指定でき、それぞれ最適化レベル -O1 ~ -O5 に対応しています。指定しない場合、コンパイラは 5 を使用します。

このオプションを指定すると、!$PRAGMA SUN OPT=n 指令がソース入力に表示されている場合に有効になります。このオプションを指定しないと、コンパイラはこれらの指令行を注釈として解釈します。「2.3.1.5 OPT 指令」を参照してください。

このプラグマ指令が -xmaxopt フラグの最大レベルを超える最適化レベルで指定されている場合は、コンパイラは -xmaxopt で設定したレベルを使用します。

3.4.139 –xmemalign[ =<a><b>]

(SPARC) メモリー境界整列の最大値の想定と、境界整列不正データへアクセスした時の動作を指定します。

コンパイル時に境界整列を決定できるメモリーアクセスの場合、コンパイラは、そのデータ境界整列に適したロード/ストア命令のシーケンスを生成します。

境界整列がコンパイル時に決定できないメモリーアクセスの場合、コンパイラは、境界整列を想定して、必要なロード/ストア命令のシーケンスを生成します。

-xmemalign フラグを使用すると、このようなあいまいな状況の場合にコンパイラが想定するデータの最大メモリー境界整列を指定することができます。整列不正データへのメモリーアクセスが行われた場合の実行時エラーの動作も指定します。

指定する値は、2 種類です。すなわち、数値の境界整列値 <a> と、英数字の動作フラグ <b> です。

境界整列値 <a> に指定できる値は、次のとおりです。

1

最大で 1 バイトの境界整列を想定します。

2

最大で 2 バイトの境界整列を想定します。

4

最大で 4 バイトの境界整列を想定します。

8

最大で 8 バイトの境界整列を想定します。

16

最大で 16 バイトの境界整列を想定します。

不正境界整列データにアクセスした場合のエラーの動作を表す <b> に指定できる値は、次のとおりです。

i

アクセスを解釈し、実行を継続します。

s

SIGBUS という信号を発生させます。

f

64 ビットのプラットフォームでは、4 バイト以下の境界整列にだけ SIGBUS 信号を発生させます。それ以外ではアクセスを解釈して実行を継続します。その他のプラットフォームでは、fi と等価です。

-xmemalign を指定しない場合のコンパイル時のデフォルト値は、次のようになります。

値をまったく指定しない場合の -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}]」を参照してください。

3.4.140 –xmodel=[ small | kernel | medium]

(x86) Solaris x64 プラットフォームで共有オブジェクトのデータアドレスモデルを指定します。

-xmodel オプションを使用すると、コンパイラで Oracle Solaris x64 プラットフォーム用の 64 ビット共有オブジェクトを作成できます。このオプションは、そのようなオブジェクトのコンパイル時にのみ指定してください。

このオプションは、64 ビットに対応した x86 プラットフォーム ("x64") で -m64 が指定されている場合にのみ有効です。

small

このオプションは、実行されるコードの仮想アドレスがリンク時にわかっていて、すべてのシンボルが 0 ~ 231 - 224 - 1 の範囲の仮想アドレスに配置されることがわかっているスモールモデルのコードを生成します。

kernel

すべてのシンボルが 264 - 231 ~ 264 - 224 の範囲で定義されるカーネルモデルのコードを生成します。

medium

データセクションへのシンボリック参照の範囲に関する前提がないミディアムモデルのコードを生成します。テキストセクションのサイズとアドレスは、スモールコードモデルの場合と同じように制限されます。静的データのサイズが大きいアプリケーションでは、—m64 を指定してコンパイルする際に —xmodel=medium の指定が必要な場合があります。

-xmodel を指定しない場合、コンパイラは -xmodel=small とみなします。引数を指定せずに-xmodel を指定すると、エラーになります。

この範囲内でオブジェクトにアクセスすることが確実であれば、必ずしもすべてのルーチンをこのオプションでコンパイルする必要はありません。

3.4.141 -xnolib

-nolib と同義です。

3.4.142 -xnolibmil

-nolibmil と同義です。

3.4.143 -xnolibmopt

高速数学ライブラリを使用しません。

最適化された数学ライブラリとのリンクを無効にする場合に -fast と組み合わせて使用します。

f95 -fast -xnolibmopt …

3.4.144 –xOn

-On と同義です。

3.4.145 –xopenmp[={ parallel|noopt|none}]

Fortran の OpenMP Version 3.1 の指令で明示的な並列化を有効にします。

フラグには、次のキーワードサブオプションを使用できます。

parallel
  • OpenMP プラグマの認識を有効にし、そのプラグマに基づいてプログラムが並列化されます。

  • -xopenmp=parallel の最小限の最適化レベルは -xO3 です。コンパイラは、必要に応じて最適化のレベルを低いレベルから -xO3 に上げ、警告を出力します。

  • プリプロセッサトークン _OPENMP を定義します。

  • -stackvar を自動的に呼び出します。

noopt
  • OpenMP プラグマの認識を有効にし、そのプラグマに基づいてプログラムが並列化されます。

  • 最適化のレベルが -xO3 より低い場合でも、コンパイラは最適化のレベルを上げません。最適化レベルを -xO2 -xopenmp=noopt のように明示的に -xO3 よりも低く設定すると、エラーが表示されます。-xopenmp=noopt で最適化レベルを指定しなかった場合、OpenMP プラグマが認識され、その結果プログラムが並列化されますが、最適化は行われません。

  • プリプロセッサトークン _OPENMP を定義します。

  • -stackvar を自動的に呼び出します。

none

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 指令を含むライブラリをコンパイルする場合、特に重要です。

3.4.146 –xpad

-pad と同義です。

3.4.147 –xpagesize= size

スタックとヒープ用に優先ページサイズを設定します。

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 のマニュアルページを参照してください。

3.4.148 –xpagesize_heap= size

ヒープ用に優先ページサイズを設定します。

size の値は、-xpagesize の説明と同じです。

詳細は、-xpagesize を参照してください。

3.4.149 -xpagesize_stack= size

(SPARC) スタック用に優先ページサイズを設定します。

size の値は、-xpagesize の説明と同じです。

詳細は、-xpagesize を参照してください。

3.4.150 –xpec[ ={yes|no}]

PEC (Portable Executable Code) バイナリを生成します。

このオプションは、オブジェクトファイルおよびバイナリ内にプログラム中間表現を配置します。このバイナリは、あとで調整およびトラブルシューティングに使用できます。

-xpec を使用して構築したバイナリは、-xpec を使用しないで構築したバイナリの通常 5 ~ 10 倍の大きさになります。デフォルトは -xpec=no です。

引数がない場合、-xpec-xpec=yes と同義です。

3.4.151 –xpg

-pg と同義です。

3.4.152 –xpp={ fpp|cpp}

ソースファイルプリプロセッサを選択します。

デフォルトは -xpp=fpp です。

コンパイラは fpp(1) を使用して、.F.F95、または .F03 のソースファイルの前処理を行います。このプリプロセッサは Fortran 用に適しています。旧バージョンでは、標準の C プリプロセッサ cpp が使用されていました。cpp を選択するには、-xpp=cpp と指定します。

3.4.153 –xprefetch[ =a[,a]]

先読みをサポートするアーキテクチャーで先読み命令を有効にします。

Fortran PREFETCH 指令の詳細は、「2.3.1.7 PREFETCH 指令」 を参照してください。

a には次のいずれかを指定します。

auto

先読み命令の自動生成を有効にします。

no%auto

先読み命令の自動生成を無効にします。

explicit

明示的な先読みマクロを有効にします。

no%explicit

明示的な先読みマクロを無効にします。

latx:factor

(SPARC) 指定の係数により、コンパイラの先読みからロード、および先読みからストアまでの応答時間を調整します。係数には必ず正の浮動小数点または整数を指定します。

大型の SPARC マルチプロセッサで集約的なコードを実行する場合、-xprefetch=latx:factor を使用すると役立つことがあります。このオプションは、指定の係数により、先読みからロードまたはストアまでのデフォルトの応答時間を調整するようにコード生成プログラムに指示します。

先読みの応答時間とは、先読み命令を実行してから先読みされたデータがキャッシュで利用可能となるまでのハードウェアの遅延のことです。コンパイラは、先読み命令と先読みされたデータを使用するロードまたはストア命令の距離を決定する際に先読み応答時間の値を想定します。


注 - 先読みからロードまでのデフォルト応答時間は、先読みからストアまでのデフォルト応答時間と同じでない場合があります。


コンパイラは、幅広いマシンとアプリケーションで最適なパフォーマンスを得られるように先読み機構を調整します。しかし、コンパイラの調整作業が必ずしも最適であるとはかぎりません。メモリーに負担のかかるアプリケーション、特に大型のマルチプロセッサでの実行を意図したアプリケーションの場合、先読みの応答時間の値を引き上げることにより、パフォーマンスを向上できます。この値を引き上げるには、1 よりも大きい係数を使用します。.5 と 2.0 の間の値は、おそらく最高のパフォーマンスを提供します。

データセットが全体的に外部キャッシュに常駐しているアプリケーションの場合、先読みの応答時間の値を引き下げることにより、パフォーマンスを向上できます。値を引き下げるには、1 よりも小さい係数を使用します。

-xprefetch=latx:factor オプションを使用するには、1.0 に近い係数の値から始め、アプリケーションに対してパフォーマンステストを実施します。そのあと、テストの結果に応じて係数を増減し、パフォーマンステストを再実行します。係数の調整を継続し、最適なパフォーマンスに到達するまでパフォーマンステストを実行します。係数を小刻みに増減すると、しばらくはパフォーマンスに変化がなく、突然変化し、再び平常に戻ります。

yes

-xprefetch=yes-xprefetch=auto,explicit と同義です。

no

-xprefetch=no-xprefetch=no%auto,no%explicit と同義です。

-xprefetch-xprefetch=auto、および -xprefetch=yes を指定すると、コンパイラは生成したコードに自由に先読み命令を挿入します。その結果、先読みをサポートするアーキテクチャーでパフォーマンスが向上します。

3.4.153.1 デフォルト

-xprefetch を指定しないと、-xprefetch=auto,explicit が使用されます。

-xprefetch だけを指定すると、-xprefetch=auto,explicit が使用されます。

-xprefetch または -xprefetch=yes などで自動先読みを有効にしても、応答時間係数を指定しないと、-xprefetch=latx:1.0 が使用されます。

3.4.153.2 相互作用

-xprefetch=explicit を指定すると、コンパイラは次の指令を認識します。

!$PRAGMA SUN_PREFETCH_READ_ONCE (name )
!$PRAGMA SUN_PREFETCH_READ_MANY (name )
!$PRAGMA SUN_PREFETCH_WRITE_ONCE (name )
!$PRAGMA SUN_PREFETCH_WRITE_MANY (name )

-xchip 設定は、想定した応答時間、つまり latx:factor 設定の結果に影響します。

latx:factor サブオプションは、SPARC プロセッサで自動先読み (auto) が実行可能な場合のみ有効です。

3.4.153.3 警告

明示的な先読みは、測定値によってサポートされた特殊な環境でのみ使用すべきです。

コンパイラは、広範囲なマシンやアプリケーション間で最適なパフォーマンスを得るために先読み機構を調整しますが、-xprefetch=latx:factor は、パフォーマンステストで明らかに利点があることが確認された場合にかぎり使用してください。使用先読み応答時間は、リリースごとに変わる可能性があります。したがって、別のリリースに切り替えたら、その都度応答時間係数の影響を再テストすることを推奨します。

3.4.154 -xprefetch_auto_type=indirect_array_access

間接アクセスされるデータ配列に対して間接先読み命令を生成します。

直接メモリーアクセスに対して先読み命令が生成されるのと同じ方法で、-xprefetch_level={1|2|3} オプションが指示するループに対して間接先読み命令を生成します。接頭辞 no% を付けると、この宣言を無効にできます。

デフォルトは -xprefetch_auto_type=no%indirect_array_access です。

このオプションを使用するには、-xprefetch=auto および最適化レベル -xO3 以上が必須です。

-xdepend などのオプションは、メモリー別名のあいまいさを排除する情報の生成に役立つため、間接先読み候補の計算の積極性に影響し、このため、自動的な間接先読みの挿入が促進されることがあります。

3.4.155 –xprefetch_level={ 1|2|3}

先読み命令の自動生成をコントロールします。

このオプションは、次の設定でコンパイルしたときのみ有効です。

-xprefetch_level を指定しない場合の -xprefetch=auto のデフォルトは、レベル 2 です。

先読みレベル 2 は、レベル 1 よりも多くの先読み命令の機会を生成します。先読みレベル 3 は、レベル 2 よりも多くの先読み命令を生成します。

先読みレベル 2 および 3 は、旧バージョンの SPARC または x86 プラットフォームでは無効な場合があります。

3.4.156 –xprofile= p

プロファイルのデータを収集したり、プロファイルを使用して最適化したりします。

p には、collect[ :profdir]、use[ :profdir]、または tcov[ :profdir] を指定する必要があります。

このオプションを指定すると、実行頻度のデータが収集されて実行中に保存されます。このデータを以降の実行で使用すると、パフォーマンスを向上させることができます。プロファイルの収集は、マルチスレッド対応のアプリケーションにとって安全です。すなわち、独自のマルチタスク (-mt) を実行するプログラムをプロファイリングすることで、正確な結果が得られます。このオプションは、最適化レベルを -xO2 かそれ以上に指定するときにのみ有効になります。コンパイルとリンクを別々の手順で実行する場合は、リンク手順とコンパイル手順の両方で同じ -xprofile オプションを指定する必要があります。

collect[: profdir]

実行頻度のデータを集めて保存します。のちに -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 では、profileprofdir に追加されません。プログラムを複数回実行すると、実行頻度データは profdir.profile ディレクトリに蓄積されていくので、以前の実行頻度データは失われません。

別々の手順でコンパイルしてリンクする場合は、-xprofile=collect を指定してコンパイルしたオブジェクトファイルは、リンクでも必ず -xprofile=collect を指定してください。

use[: profdir]

—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[: profdir]

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 が作成されて、実行時プロファイルデータの保存に使用されます。

3.4.157 –xprofile_ircache[ =path]

(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

大きなプログラムでは、中間データが保存されるため、使用段階のコンパイル時間を大幅に向上させることができます。ただし、データを保存するために必要なディスク容量が増大します。

3.4.158 –xprofile_pathmap= collect_prefix:use_prefix

(SPARC) プロファイルデータファイル用のパスマッピングを設定します

-xprofile_pathmap オプションは -xprofile=use オプションとともに使用します。

コンパイラが -xprofile=use でコンパイルされたオブジェクトファイルのプロファイルデータを見つけられず、次の点に該当する場合は、-xprofile_pathmap を使用します。

collect-prefix は、オブジェクトファイルが -xprofile=collect でコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。

use-prefix は、オブジェクトファイルが -xprofile=use を指定してコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。

-xprofile_pathmap の複数のインスタンスを指定すると、コンパイラは指定した順序でインスタンスを処理します。-xprofile_pathmap のインスタンスで指定された各 use-prefix は、一致する use-prefix が識別されるか、最後に指定された use-prefix がオブジェクトファイルのパス名と一致しないことが確認されるまで、オブジェクトファイルのパス名と比較されます。

3.4.159 -xrecursive

RECURSIVE 属性をもたないルーチンが自分自身を再帰的に呼び出せるようにします。

通常、RECURSIVE 属性によって定義された副プログラムのみが再帰的に自分自身を呼び出すことができます。

-xrecursive を使用してコンパイルすると、RECURSIVE 属性で定義されていない副プログラムも、再帰的に自分自身を呼び出すことができます。ただし、RECURSIVE で定義されたサブルーチンとは異なり、このフラグを使用しても、デフォルトで局所変数がスタックに割り当てられることはありません。副プログラムの再帰的な呼び出しごとに異なる局所変数を持つ場合は、-stackvar を使用してコンパイルし、局所変数をスタックに設定します。

-xO2 より上の最適化レベルで間接的な再帰 (ルーチン A がルーチン B を呼び出し、そのあとにルーチン B がルーチン A を呼び出す) を実行すると、得られる結果に一貫性がない場合があります。-xrecursive フラグを指定してコンパイルすると、-xO2 より上の最適化レベルであっても、間接的な再帰を実行した場合の正確さが保証されます。

-xrecursive を使用してコンパイルすると、パフォーマンスが低下する可能性があります。

3.4.160 –xreduction

-reduction と同義です。

3.4.161 –xregs= r

生成されたコードのレジスタの使用法を指定します。

r には、applfloat、frameptr サブオプションのいずれか 1 つ以上をコンマで区切って指定します。

サブオプションの前に no% を付けるとそのサブオプションは無効になります。

—xregs サブオプションは、特定のハードウェアプラットフォームでしか使用できません。

例: -xregs=appl,no%float

表 3-18 -xregs サブオプション

意味
appl
(SPARC) コンパイラがアプリケーションレジスタをスクラッチレジスタとして使用してコードを生成することを許可します。アプリケーションレジスタは次のとおりです。

g2、g3、g4 ( 32 ビットプラットフォーム)

g2、g3 (64 ビットプラットフォーム)

すべてのシステムソフトウェアおよびライブラリは、-xregs=no%appl を指定してコンパイルすることをお勧めします。システムソフトウェア (共有ライブラリを含む) は、アプリケーション用のレジスタの値を保持する必要があります。これらの値は、コンパイルシステムによって制御されるもので、アプリケーション全体で整合性が確保されている必要があります。

SPARC ABI では、これらのレジスタはアプリケーションレジスタと記述されています。これらのレジスタを使用すると必要なロードおよびストア命令が少なくてすむため、パフォーマンスが向上します。ただし、アセンブリコードで記述された古いライブラリプログラムとの間で衝突が起きることがあります。

float
(SPARC) コンパイラが浮動小数点レジスタを整数値用のスクラッチレジスタとして使用してコードを生成することを許可します。浮動小数点値を使用する場合は、このオプションとは関係なくこれらのレジスタを使用します。浮動小数点レジスタに対するすべての参照をコードから排除する場合は、-xregs=no%float を使用するとともに、決して浮動小数点型をコードで使わないようにする必要があります。
frameptr
(x86) フレームポインタレジスタ (IA32 の場合 %ebp、AMD64 の場合 %rbp) を汎用レジスタとして使用することを許可します。

デフォルトは -xregs=no%frameptr です。

-xregs=framptr を使用すると、コンパイラは浮動小数点レジスタを自由に使用できるので、プログラムのパフォーマンスが向上します。ただし、この結果としてデバッガおよびパフォーマンス測定ツールの一部の機能が制限される場合があります。スタックトレース、デバッガ、およびパフォーマンスアナライザは、—xregs=frameptr を使用してコンパイルされた機能についてレポートできません。

C、Fortran、C++ が混在しているコードで、C または Fortran 関数から直接または間接的に呼び出された C++ 関数が例外をスローする可能性がある場合、このコードは —xregs=frameptr でコンパイルできません。このような言語が混在するソースコードを —fast でコンパイルする場合は、コマンド行の —fast オプションのあとに —xregs=no%frameptr を追加します。

64 ビットのプラットフォームで使用できる多くのレジスタでは、—xregs=frameptr でコンパイルすると、64 ビットコードよりも 32 ビットコードのパフォーマンスが向上する可能性が高くなります。

-pg も指定されている場合、コンパイラは -xregs=frameptr を無視し、警告を表示します。また、-xkeepframe-xregs=frameptr を上書きします。

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 に含まれている点にも注意してください。

3.4.162 –xs

オブジェクトファイル (.o) がなくても dbx によってデバッグを実行できるようにします。

-xs を指定すると、すべてのデバッグ情報が実行可能ファイルにコピーされます。実行可能ファイルを別のディレクトリに移動した場合でも、オブジェクトファイル (.o) を無視してそのまま dbx を使用することができます。このオプションは、.o ファイルを維持できない場合に使用します。

-xs を付けずに実行可能ファイルを移動する場合は、ソースファイルとオブジェクトファイル (.o) の両方を移動するか、あるいは dbx の pathmap コマンドか use コマンドのいずれかでパスを設定する必要があります。

3.4.163 -xsafe=mem

(SPARC) コンパイラは、メモリー保護の違反が発生していないことを想定できます。

このオプションを使用する場合、コンパイラはメモリーに関するトラップが発生しないことを前提とします。SPARC V9 プラットフォーム上で投機的なロード命令を使用することができます。

このオプションは、最適化レベルの -xO5 と、次のいずれかの値の -xarch を組み合わせた場合にだけ有効です。m32m64 の両方で sparcsparcvis-sparcvis2、または -sparcvis3


注意

注意 - アドレスの位置合わせが合わない、またはセグメンテーション侵害などの違反が発生した場合は違反のないロードはトラップを引き起こさないので、このオプションはこのような違反が起こる可能性のないプログラムでしか使用しないでください。ほとんどのプログラムではメモリーに関するトラップは起こらないので、大多数のプログラムでこのオプションを安全に使用できます。例外条件を扱うためにメモリーに関するトラップに明示的に依存するプログラムで、このオプションを使用しないでください。


3.4.164 –xspace

コードのサイズが増大するような最適化は行いません。

例: コードのサイズが増大する場合は、ループの展開や並列化は行いません。

3.4.165 -xtarget=t

命令セットと最適化の対象とするプラットフォームを指定します。

t には nativenative64genericgeneric64platform-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 指定の展開と異なる場合があることに注意してください。

3.4.165.1 一般的なプラットフォームとネイティブプラットフォーム

native

ホストプラットフォーム (32 ビット) で、パフォーマンスを最適化します。

—m32 —xarch=native —xchip=native —xcache=native に展開します。

native64

廃止。代わりに、—xtarget=native —m64 を使用してください。

generic

たいていの 32 ビットプラットフォームで最高のパフォーマンスが得られるようにします。

これがデフォルトで、次のように展開します。-m32 -xarch=generic -xchip=generic -xcache=generic

generic64

廃止。代わりに -xtarget=generic -m64 を使用してください。

platform-name

指定したプラットフォームで、最高のパフォーマンスが得られるようにします。次に一覧で表示します。

3.4.165.2 SPARC プラットフォーム

次の表は、コンパイラが認識できる、一般に使用されているシステムプラットフォーム名の一覧です。

表 3-19 一般に使用されている -xtarget システムプラットフォームの展開

-xtarget= platform-name
-xarch
-xchip
-xcache
sparc64vi
sparcfmaf
sparc64vi
128/64/2:5120/64/10
sparc64vii
sparcima
sparc64vii
64/64/2:5120/256/10
sparc64viiplus
sparcima
sparc64viiplus
64/64/2:11264/256/11
ultra
sparcvis
ultra
16/32/1:512/64/1
ultra1/140
sparcvis
ultra
16/32/1:512/64/1
ultra1/170
sparcvis
ultra
16/32/1:512/64/1
ultra1/200
sparcvis
ultra
16/32/1:512/64/1
ultra2
sparcvis
ultra2
16/32/1:512/64/1
ultra2/1170
sparcvis
ultra
16/32/1:512/64/1
ultra2/1200
sparcvis
ultra
16/32/1:1024/64/1
ultra2/1300
sparcvis
ultra2
16/32/1:2048/64/1
ultra2/2170
sparcvis
ultra
16/32/1:512/64/1
ultra2/2200
sparcvis
ultra
16/32/1:1024/64/1
ultra2/2300
sparcvis
ultra2
16/32/1:2048/64/1
ultra2e
sparcvis
ultra2e
16/32/1:256/64/4
ultra2i
sparcvis
ultra2i
16/32/1:512/64/1
ultra3
sparcvis2
ultra3
64/32/4:8192/512/1
ultra3cu
sparcvis2
ultra3cu
64/32/4:8192/512/2
ultra3i
sparcvis2
ultra3i
64/32/4:1024/64/4
ultra4
sparcvis2
ultra4
64/32/4:8192/128/2
ultra4plus
sparcvis2
ultra4plus
64/32/4/1:2048/64/4/2:32768/64/4/2
ultraT1
sparc
ultraT1
8/16/4/4:3072/64/12/32
ultraT2
sparcvis2
ultraT2
8/16/4:4096/64/16
ultraT2plus
sparcvis2
ultraT2plus
8/16/4:4096/64/16
ultraT3
sparcvis3
ultraT3
8/16/4:6144/64/24
T3
sparcvis3
T3
8/16/4:6144/64/24
T4
sparc4
T4
16/32/4:128/32/8:4096/64/16

64 ビット対応のプラットフォームでの 64 ビット Solaris OS 向けのコンパイルは、-m64 フラグで指示します。-xtarget を指定する場合は、次に示すように -xtarget フラグのあとに -m64 を表示する必要があります。

-xtarget=ultra2 ... -m64

この指定がないと、デフォルトの 32 ビットメモリーモデルが使用されます。

3.4.165.3 x86 プラットフォーム

x86 システムの有効な -xtarget プラットフォーム名とその展開を、次の表に示します。

表 3-20 x86 プラットフォームでの -xtarget の値

-xtarget=
-xarch
-xchip
-xcache
opteron
sse2
opteron
64/64/2:1024/64/16
pentium
386
pentium
generic
pentium_pro
pentium_pro
pentium_pro
generic
pentium3
sse
pentium3
16/32/4:256/32/4
pentium4
sse2
pentium4
8/64/4:256/128/8
nehalem
sse4_2
nehalem
32/64/8:256/64/8: 8192/64/16
penryn
sse4_1
penryn
2/64/8:4096/64/16
woodcrest
ssse3
core2
32/64/8:4096/64/16
barcelona
amdsse4a
amdfam10
64/64/2:512/64/16
sandybridge
avx
sandybridge
32/64/8:256/64/8:8192/64/16
westmere
aes
westmere
32/64/8:256/64/8:12288/64/16

64 ビット対応の x86 プラットフォームでの 64 ビット Solaris OS 向けのコンパイルは、-m64 フラグで指示します。たとえば、-xtarget=opteron でのコンパイルは、必要でもなく、十分でもありません。-xtarget を指定する場合は、次に示すように -xtarget フラグのあとに -m64 オプションを表示する必要があります。

-xtarget=opteron -m64

この指定がないと、32 ビット x86 用のコンパイルに戻ります。

3.4.166 –xtime

-time と同義です。

3.4.167 -xtypemap= spec

デフォルトのデータサイズを指定します。

デフォルトのデータ型に対するバイトサイズを指定することができます。このオプションは、デフォルトのサイズの変数および定数に適用されます。

指定する文字列 spec には、次の全部またはいずれかをコンマで区切ったリストで指定します。

real:size,double: size,integer: size

各プラットフォームで使用できる組み合わせは次のとおりです。

例:

デフォルトの REAL および DOUBLE を 8 バイトにマップします。

このオプションは REAL XYZ (64 ビットの XYZ になる) のように明示的にバイトサイズを指定しないで宣言されたすべての変数に適用されます。単精度の REAL 定数はすべて REAL*8 に変換されます。

INTEGER および LOGICAL は同じように扱われ、COMPLEX は 2 つの REAL としてマップされます。また、DOUBLE COMPLEXDOUBLE がマップされる方法で扱われます。

3.4.168 –xunroll= n

-unroll=n と同義です。

3.4.169 -xvector[= a]

ベクタライブラリ関数の呼び出しの自動生成や、SIMD (Single Instruction Multiple Data) をサポートする x86 プロセッサ上で SIMD 命令の生成ができます。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。

-xvector オプションを指定するには、最適化レベルが -xO3 かそれ以上に設定されていることが必要です。最適化レベルが指定されていない場合や —xO3 よりも低い場合はコンパイルは続行されず、メッセージが表示されます。

a についての可能な値は、次の表に一覧で示します。no% 接頭辞は、関連するサブオプションを無効にします。

表 3-21 -xvector サブオプション

意味
[no%]lib
(Solaris のみ) コンパイラは可能な場合はループ内の数学ライブラリへの呼び出しを、同等のベクトル数学ルーチンへの単一の呼び出しに変換できます。大きなループカウントを持つループでは、これによりパフォーマンスが向上します。このオプションを無効にするには no%lib を使用します。
[no%]simd
(x86 のみ) ネイティブ x86 SSE SIMD 命令を使用して特定のループのパフォーマンスを向上させるようコンパイラに指示します。ストリーミング拡張機能は、x86 で最適化レベルが 3 かそれ以上に設定されている場合にデフォルトで使用されます。このオプションを無効にするには no%simd を使用します。

コンパイラは、ストリーミング拡張機能がターゲットのアーキテクチャーに存在する場合、つまりターゲットの ISA が SSE2 以上である場合にのみ SIMD を使用します。たとえば、最新のプラットフォームで -xtarget=woodcrest、—xarch=generic64、-xarch=sse2、-xarch=sse3、または -fast を指定して使用できます。ターゲットの ISA にストリーミング拡張機能がない場合、このサブオプションは無効です。

%none
このオプションを完全に無効にします。
yes
このオプションは非推奨です。代わりに、-xvector=lib を指定します。
no
このオプションは非推奨です。代わりに、-xvector=%none を指定します。

デフォルトは、x86 では -xvector=simd で、SPARC プラットフォームでは -xvector=%none です。サブオプションなしで -xvector を指定すると、コンパイラは x86 Solaris では -xvector=simd,lib、SPARC Solaris では -xvector=lib、Linux プラットフォームでは -xvector=simd と想定します。

コンパイラは、リンク時に libmvec ライブラリを取り込みます。

コンパイルとリンクを別々のコマンドで実行する場合は、リンク時の CC コマンドに必ず -xvector を使用してください。

3.4.170 –ztext

再配置を伴わない純粋なライブラリだけを生成します。

-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 を指定した場合に構築が失敗するということは、ライブラリ中に共有不可能な成分があることを示します。ただし、この場合でもその他の成分は共有できるはずですが、パフォーマンスが最高でない可能性もあります。