Sun Studio 12: Fortran ユーザーズガイド

第 3 章 コンパイラオプション

この章では、f95 コンパイラのコマンド行オプションについて説明します。

3.1 コマンド構文

コンパイラのコマンド行の構文は次のとおりです。


f95 [options] list_of_files  additional_options

角括弧 ([ ]) の中の項目は省略可能なパラメータを示します。角括弧自体はコマンドの一部ではありません。options には、先頭にハイフン (-) を付けたオプションキーワードを指定します。オプションによっては、リスト中の次の項目を引数として取るものがあります。list_of_files には、ソース、オブジェクトまたはライブラリのファイル名を空白で区切って複数指定することができます。また、オプションによっては、ソースファイルリストよりもあとに続けて指定しなければならないものがあります (たとえば、 -B-l、および -L)。 これらのオプションには、そのオプション用のファイルリストを指定してもかまいません。

3.2 オプションの構文

コンパイラオプションの一般的な書式を次に示します。

表 3–1 オプションの構文

構文の形式 

例 

-flag

-g

-flagvalue

-Dnostep

-flag=value

-xunroll=4

-flag value

-o outfile

次の表記規則に従って、オプションを説明しています。

表 3–2 オプションの表記規則

表記 

意味 

例: テキスト/インスタンス 

[ ] 

角括弧は、省略可能な引数を表します。 

-O[n]

-O4, -O

{ } 

中括弧は、必須の引数を表します。 

-d{y|n}

-dy

「パイプ」または「バー」と呼ばれる記号は、その中から 1 つだけを選択可能な複数の引数を区切ります。

-B{dynamic|static}

-Bstatic

コロンは、コンマと同様に、引数を区切る場合に使用することもあります。 

-Rdir[:dir]

-R/local/libs:/U/a

… 

省略記号は、連続するものの一部が省略されていることを示します。 

-xinline=f1[,…fn]

-xinline=alpha,dos

括弧、縦棒、省略符号は、オプションを記述するために使用している記号で、オプション自体の一部ではありません。

オプションの一般的な規則を次に示します。

3.3 オプションのまとめ

この節では、各コンパイラオプションを機能別に分類し、概略を説明します。詳細は、次の詳細欄に示すページを参照してください。

SPARC および x64/x86 プラットフォーム両方ですべてのオプションを使用できるわけではないことに注意してください。使用可能かどうかについては、詳細オプションリファレンスの節で確認してください。

次の表に、f95 のコンパイラオプションを機能別にまとめます。この表には、廃止されたり使用されなくなったりしたオプションフラグは含まれていません。フラグによっては、複数の使用目的があるため、複数の個所に記載されているものがあります。

表 3–3 機能別コンパイラオプション

機能 

オプションフラグ 

コンパイルモード

 

コンパイルのみ。 実行可能ファイルを生成しません。 

-c

 

ドライバが作成するコマンドを表示するが、コンパイルは行われません。 

-dryrun

 

FORTRAN 77 拡張子および互換性をサポートします。 

-f77

 

コンパイルされる .mod モジュールファイルを記述するためのパスを指定します。

-moddir=path

 

書き込むオブジェクト、ライブラリ、実行可能ファイルの名前を指定します。 

-o filename

 

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

-S

 

実行可能プログラムからシンボルテーブルを除外します。 

-s

 

エラーメッセージ以外のコンパイラメッセージを出力しません。 

-silent

 

一時ファイルのディレクトリへのパスを定義します。 

-temp=path

 

各コンパイルフェーズの経過時間を示します。 

-time

 

コンパイラおよびそのフェーズのバージョン番号を示します。 

-V

 

冗長メッセージを表示します。 

-v

 

標準外の別名を付ける状況を指定します。 

-xalias=list

 

マルチプロセッサによるコンパイル 

-xjobs=n

コンパイルされるコード

 

外部名の末尾に下線を追加/抑制します。 

-ext_names=x

 

インライン化するユーザー関数を指定します。 

-inline=list

 

コンパイル位置独立コードを指定します。 

-KPIC/-kpic

 

特定の数学ライブラリルーチンをインライン化します。 

-libmil

 

STOP で整数のステータス値をシェルに返します。 

-stop_status[=yn]

 

コードアドレス空間を指定します。 

-xcode=x

 

先読み命令を有効にします。 

-xprefetch[=x]

 

オプションのレジスタを指定します。 

-xregs=x

 

デフォルトのデータマッピングを指定します。 

-xtypemap=x

データの境界整列

 

COMMON ブロック内のデータの境界整列を指定します。 

-aligncommon[=n]

 

強制的に COMMON ブロックデータの境界整列を行い、マルチワードのフェッチ/ストアを可能にします。 

-dalign

 

全データを 8 バイト境界に強制的に整列させます。 

-dbl_align_all

 

COMMON ブロックデータを 8 バイト境界に整列させます。 

-f

 

メモリーの境界整列と動作を指定します。 

-xmemalign[=ab]

デバッグ

 

実行時に添字の範囲検査を有効にします。 

-C

 

dbx を使用するデバッグのためにコンパイルします。

-g

 

ソースブラウザを使用するブラウズのためにコンパイルします。 

-sb, -sbfast

 

未宣言変数の検査を行います。 

-u

 

C$PRAGMA ASSUME 表明をチェックします。

-xassume_control=check

 

実行時のスタックオーバーフローを確認します。 

-xcheck=stkovf

 

実行時の taskcommon の整合性検査を有効にします。 

-xcommonchk

 

パフォーマンスアナライザのためにコンパイルします。 

-xF

 

相互参照リストを作成します。 

-Xlistx

 

オブジェクトファイルを使用せずにデバッグ機能を有効にします。 

-xs

診断

 

非標準の拡張機能を報告します。 

-ansi

 

特定のエラーメッセージの出力を抑制します。 

-erroff=

 

エラーメッセージとともにエラータグ名を表示します。 

-errtags

 

コンパイラオプションの要約を表示します。 

-flags, -help

 

コンパイラおよびその構成要素のバージョン番号を示します。 

-V

 

冗長メッセージを表示します。 

-v

 

並列化メッセージを冗長表示します。 

-vpara

 

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

-wn

 

コンパイラの README ファイルを表示します。 

-xhelp=readme

ライセンス

 

ライセンスサーバー情報を表示します。 

-xlicinfo

リンクおよびライブラリ

 

動的/静的ライブラリを許可します/要求します。 

-Bx

 

動的/静的なライブラリのみのリンクを許可します。 

-dy, -dn

 

動的 (共有オブジェクト) ライブラリを作成します。 

-G

 

動的ライブラリの名前を指定します。 

-hname

 

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

-Lpath

 

libname.a または libname.so というライブラリをリンクします。

-lname

 

実行時ライブラリの検索パスを実行可能プログラムに組み込みます。 

-Rpath

 

インクリメンタルリンカー ild を使用不可にします。

-xildoff

 

最適化数学ライブラリをリンクします。 

-xlibmopt

 

Sun のパフォーマンスライブラリをリンクします。 

-xlic_lib=sunperf

 

リンクエディタのオプションを指定します。 

-zx

 

再配置のない閉じたライブラリを生成します。 

-ztext

数値および浮動小数点

 

非標準の浮動小数点の設定を使用します。 

-fnonstd

 

SPARC 非標準浮動小数点を選択します。 

-fns

 

入力中に実行時浮動小数点オーバーフロー検査を有効にします。 

-fpover

 

IEEE 浮動小数点丸めモードを選択します。 

-fpround=r

 

浮動小数点最適化レベルを選択します。 

-fsimple=n

 

浮動小数点トラップモードを選択します。 

-ftrap=t

 

書式付き入出力のための丸め方法を指定します。 

-iorounding=mode

 

単精度定数を倍精度に変換します。 

-r8const

 

区間演算を有効にし、適切な浮動小数点環境を設定します (-xinterval を含む)。

-xia[=e]

 

区間演算機能を有効にします。 

-xinterval[=e]

最適化とパフォーマンス

 

ループを解析して、データ依存関係を調べます。 

-depend

 

オプションを一括で指定して最適化します。 

-fast

 

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

-On

 

効率的なキャッシュ使用のためにデータレイアウトをパディングします。 

-pad[=p]

 

局所変数をメモリースタックに割り当てます。 

-stackvar

 

ループ展開を有効にします。 

-unroll[=m]

 

ソースファイル間での最適化を有効にします。 

-xcrossfile[=n]

 

内部手続きの最適化パスを呼び出します。 

-xipo[=n]

 

#pragma OPT に最高レベルの最適化を設定します。

-xmaxopt[=n]

 

コンパイル後の最適化用にコンパイルします。 

-xbinopt=prepare

 

コンパイラが生成する先読み命令を有効にするか、または調整します。 

-xprefetch=list

 

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

-xprefetch_level=n

 

パフォーマンスプロファイルデータの生成または使用を有効にします。 

-xprofile=p

 

メモリーベースのトラップが発生しないであろうと表明します。 

-xsafe=mem

 

コードサイズが増加する場合は、最適化を行いません。 

-xspace

 

ベクトルライブラリ関数の呼び出しを自動的に作成します。 

-xvector[=yn]

並列化

 

DO ループの自動並列化を有効にします。 

-autopar

 

ループの並列化情報を表示します。 

-loopinfo

 

マルチスレッド用にプログラミングされたコードをコンパイルします。 

-mt

 

OpenMT API 指令を受け付け、適切な環境を設定します。 

-xopenmp[=keyword]

 

自動並列化でループ内の縮約操作を認識します。 

-reduction

 

並列化メッセージを冗長表示します。 

-vpara

ソースコード

 

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

-Dname[=val]

 

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

-Uname

 

拡張 (132 文字) ソース行を受け入れます。 

-e

 

.F.F90、および .F95 のファイルにプリプロセッサを適用するが、コンパイルは行いません。

-F

 

固定書式の Fortran 95 ソースを受け付けます。 

-fixed

 

すべてのソースファイルを fpp プリプロセッサで先行処理します。

-fpp

 

自由形式の Fortran 95 ソースを受け付けます。 

-free

 

ファイル検索パスにディレクトリを追加します。 

-Ipath

 

モジュール検索パスにディレクトリを追加します。 

-Mpath

 

大文字と小文字を区別します。 

-U

 

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

-xhasc={yes|no}

 

使用するプリプロセッサ (cpp または fpp) を選択します。

-xpp[={fpp|cpp}]

 

再帰的な副プログラム呼び出しを許可します。 

-xrecursive

ターゲットプラットフォーム

 

32 または 64 ビットのメモリーモデルを指定します。 

-m32 | —m64

 

オプティマイザにターゲットのプラットフォームを指定します。 

-xarch=a

 

オプティマイザにターゲットのキャッシュプロパティーを指定します。 

-xcache=a

 

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

-xchip=a

 

オプティマイザにターゲットのプラットフォームを指定します。 

-xtarget=a

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

コンパイラには、オプションのコマンド行パラメータによって選択できる機能が数多くあります。次の表に、頻繁に利用するオプションをまとめてあります。

表 3–4 頻繁に利用するオプション

処理 

オプション 

デバッグ - 大域的にプログラムを検査し、ルーチン間での引数、共通ブロックなどの整合性を調べます。 

-Xlist

デバッグ - dbx およびデバッグ機能を使用するための追加のシンボルテーブル情報を生成します。

-g

パフォーマンス - 実行速度の速い実行可能ファイルを作成します。 

-O[n]

パフォーマンス - 事前に定義されている一連のオプションを使用して、ネイティブプラットフォームのコンパイルと実行時間を改善します。 

-fast

動的 (-Bdynamic) または静的 (-Bstatic) ライブラリとリンクします。

-Bx

コンパイルのみ - リンクを行わず、ソースファイルごとに .o ファイルを作成します。

-c

出力ファイル - 実行可能な出力ファイルの名前を a.out ではなく nm に指定します。

-o nm

ソースコード - 固定形式 Fortran ソースコードをコンパイルします。 

-fixed

3.3.2 マクロフラグ

マクロフラグによっては、別のフラグの組み合わせに展開されるマクロもあります。これらのマクロフラグは、ある機能を選択するために、通常一緒に表示されるオプションを簡単に指定できるように提供されるものです。

表 3–5 マクロオプションフラグ

オプションフラグ 

展開 

-dalign

-xmemalign=8s -aligncommon=16

-f

-aligncommon=16

-fast

現在の展開内容の詳細は、—fast を参照してください。

-fnonstd

-fns -ftrap=common

-xia=widestneed

-xinterval=widestneed -ftrap=%none -fns=no -fsimple=0

-xia=strict

-xinterval=strict -ftrap=%none -fns=no -fsimple=0

-xtarget

-xarch=a -xcache=b -xchip=c

コマンド行でマクロフラグのあとに別のオプションを設定すると、このマクロの展開内容は上書きまたは追加されます。

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

コンパイラの初期リリース、および Fortran の一部旧機能との下位互換のためのオプションを示します。

表 3–6 下位互換性オプション

作用 

オプション 

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

-copyargs

呼び出し引数リストにおいてホレリス定数を文字または型なしとして扱います。 

-xhasc[={yes|no}]

FORTRAN 77 拡張子および規則をサポートします。 

-f77

非標準の算術演算 - 非標準の算術演算を使用可能にします。 

-fnonstd

ホストシステムに合わせて最適化を行います。 

-native

DO ループ - 少なくとも 1 回は DO ループを実行します。

-onetrip

従来の別名を付ける状況を許可します。 

-xalias=keywords

移植性のある Fortran 95 プログラムを作成する際には、これらのオプションフラグは使用しないでください。

3.3.4 旧オプションフラグ

次のオプションは廃止されています。 使用しないでください。将来のコンパイラでは、これらのオプションは削除される予定です。

表 3–7 旧 f95 オプション

オプションフラグ 

同等なオプションフラグ 

-a

-xprofile=tcov

-cg89

-xtarget=ss2

-cg92

-xtarget=ss1000

-explicitpar

OpenMP 並列化を使用してください。Sun/Cray 並列化は非推奨です。 

-mp

OpenMP 並列化を使用してください。Sun/Cray 並列化は非推奨です。 

-native

-xtarget=native 

-noqueue

ライセンスのキューイング。現在は必要ありません。 

-p

プロファイリング。-pg またはパフォーマンスアナライザを使用してください。

-pic

-xcode=pic13

-PIC

-xcode=pic32

-sb

現在は必要ありません。 

-sbfast

現在は必要ありません。 

-silent

現在は必要ありません。 

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

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

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

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

3.4.1 -a

(廃止) tcov を使用する。旧式の基本ブロックごとのプロファイリングを行います。

tcov を使用する旧式の基本ブロックごとのプロファイルを行います。新しいプロファイリング方法については、-xprofile=tcov を参照してください。 詳細は、tcov(1) マニュアルページを参照してください。

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

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

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


注 –

標準の数値連続型 とは、SEQUENCE 文 1 つとデフォルトの要素データ型 (KIND= または * size のどちらも付かない INTEGERREALDOUBLEPRECISIONCOMPLEX) からなる構造型です。REAL*8 などのほかのすべての型は非標準の型になります。


たとえば、-aligncommon=4 と指定すると、4 バイト以上の自然整列サイズを保つ全データ要素が、4 バイト境界に整列します。

このオプションは、指定のサイズより小さい自然整列サイズを保つデータに影響しません。

-aligncommon を指定しないと、共通ブロック内のデータおよび数値連続型のデータは、多くても 4 バイト境界に整列されます。

値を指定せずに -aligncommon だけを指定すると、デフォルトの 1 が仮定され、共通ブロックおよび数値連続型の要素は、すべて 1 バイト境界に整列されます。要素間のパディングは行われません。

-aligncommon=16 は、64 ビットが有効ではないプラットフォームにおいて -aligncommon=8 に戻ります。

3.4.3 -ansi

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

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

3.4.4 -arg=local

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

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

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

3.4.5 -autopar

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

マルチプロセッサで並列処理の対象に適するループを探し、そのループを並列化します。内部反復データに依存するループを解析し、ループを再構築します。最適化レベルが -O3 以上に設定されていない場合は、自動的に -O3 に設定されます。

-autopar などの並列化オプションを使用している場合は、-stackvar オプションも指定します。-autopar を使用している場合は、-stackvar オプションを使用した方がパフォーマンスが改善される場合があります。これは、オプティマイザが並列化する機会をより多く検出できるようになるためです。メインスレッドおよびスレーブスレッドのスタックサイズを設定する方法については、-stackvar オプションの説明を参照してください。

プログラム中に libthread スレッドライブラリへの明示的な呼び出しがある場合は、-autopar は使用しないでください。「3.4.60 -mtの注釈を参照してください。

-autopar オプションは、シングルプロセッサのシステムには適していません。シングルプロセッサのシステムでこのオプションを付けてコンパイルを行うと、通常は実行速度が低下します。

並列化されたプログラムをマルチスレッド環境で実行するには、実行前に PARALLEL (または OMP_NUM_THREADS) 環境変数を設定しなければなりません。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。一般的に、PARALLEL 変数または OMP_NUM_THREADS 変数には、ターゲットプラットフォーム上の利用可能な仮想プロセッサ数を設定します。この数は、Solaris の psrinfo(1) コマンドを使用して調べることができます。

-autopar を使用してコンパイルとリンクを一度に行う場合、マルチスレッド処理ライブラリとスレッド対応の Fortran 実行時ライブラリが自動的にリンクされます。-autopar を使用してコンパイルとリンクを別々に行う場合は、適切なライブラリにリンクするために、-autopar を使用してリンクを行う必要があります。

-reduction オプションは、-autopar オプションと組み合わせて使用することもできます。

並列化についての詳細は、『Fortran プログラミングガイド』を参照してください。明示的にユーザーが制御して並列化を行う場合は、OpenMP 指令および —xopenmp オプションを使用します。

3.4.6 -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.solibc.so も含まれます (libm.alibc.a は提供されていない)。つまり、64 ビットの Solaris 環境で -Bstatic-dn を指定するとリンクエラーが発生する場合があります。このような場合、アプリケーションを動的ライブラリとリンクさせる必要があります。

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

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

3.4.7 -C

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

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

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

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

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

3.4.8 -c

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

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

3.4.9 -cg89

(廃止、SPARC) 一般的な SPARC アーキテクチャー用にコンパイルを行います。

このオプションは -xtarget=ss2 と同義で、-xarch=v7 -xchip=old -xcache=64/32/1 をマクロ化したものです。

3.4.10 -cg92

(廃止、SPARC) SPARC V8 アーキテクチャー用にコンパイルを行います。

このオプションは -xtarget=ss1000 と同義で、-xarch=v8 -xchip=super -xcache=16/32/4:1024/32/1 をマクロ化したものです。

3.4.11 -copyargs

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

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

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

3.4.12 -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 つの下線に注意)。

コンパイラが作成した定義を表示するには、冗長メッセージオプション (-v) を付けてコンパイルします。

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

#ifdef _ _sparc

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

3.4.13 -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.2 -aligncommon[ ={1|2|4| 8|16}]」を参照してください。

3.4.14 -dbl_align_all[ ={yes|no}]

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

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

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

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

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

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

3.4.15 -depend[ ={yes|no}]

データ依存についてループを解析し、ループを再構築します。

依存解析は、-depend または -depend=yes によって使用可能になります。この解析は、-depend=no によって使用不可になります。これがコンパイラのデフォルト値です。

このオプションを指定すると、最適化レベルが指定されていない場合、または O3 未満の場合は、自動的に最適化レベルが O3 に設定されます。-depend は、-fast-autopar、および -parallel オプションでも行われます。最適化レベル -O3 以上を指定した場合も、-depend が自動的に追加されます。『 Fortran プログラミングガイド』を参照してください。

3.4.16 -dn

動的ライブラリを使用不可能にします。「3.4.18 -d{ y|n}を参照してください。

3.4.17 -dryrun

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

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

3.4.18 -d{ y|n}

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

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

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

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

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

3.4.19 -e

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

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

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

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

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

例:

f95 -erroff=WDECL_LOCAL_NOTUSED ink.f

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

3.4.21 -errtags[ ={yes|no}]

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

-errtags=yes を付けると、コンパイラの内部エラータグ名が警告メッセージとともに表示されます。-errtags だけの場合は -errtags=yes と同じです。

デフォルトでは、タグは表示されません (-errtags=no)。


demo% f95 -errtags ink.f
ink.f:
 MAIN:
"ink.f", 11 行目: 警告: 局所変数「i」が使用されていません (WDECL_LOCAL_NOTUSED)  

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

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

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

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

3.4.23 -explicitpar

(廃止、SPARC) Sun または Cray の指令で明示的に示されたループを並列化します。


注 –

このオプションを使用すると、従来の Sun または Cray の並列化指令が有効になります。これらの指令および並列化モデルは推奨されず、サポートされません。推奨され、サポートされる並列化モデルは OpenMP API です。Sun/Cray 指令から OpenMP への変換についての詳細は、-xopenmp オプションおよび『OpenMP API ユーザーズガイド』を参照してください。


コンパイラは、並列で実行すると、正確な結果が生成されないようなデータの依存が DO ループ中にある場合でも、並列コードを生成します。明示的な並列化を行う場合は、ループを正しく分析してデータ依存の問題がないことを確認してから、並列化の指令を使用してください。

並列化は、マルチプロセッサシステムのみに適用されます。

このオプションを使用すると、Sun、Cray、またはこの両方の明示的な並列化指令が有効になります。並列化指令の直前にある DO ループには、スレッド化されたコードが生成されます。

OpenMP 明示的並列化指令を有効にするには、-explicitpar を使用しないでください。この代わりに -openmp を使用してください (「3.4.155 -xopenmp[={ parallel|noopt|none}]」を参照)。

-explicitpar は、すでに libthread ライブラリへの呼び出しによって、独自にマルチスレッド処理を行なったプログラムをコンパイルする場合には使用できません。

並列化されたプログラムをマルチスレッド環境で実行するには、実行前に PARALLEL (または OMP_NUM_THREADS) 環境変数を設定しておく必要があります。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。 一般的に、PARALLEL 変数または OMP_NUM_THREADS 変数には、ターゲットプラットフォーム上の利用可能な仮想プロセッサ数を設定します。psrinfo(1) を参照してください。

-explicitpar を使用してコンパイルとリンクを一度に行う場合、マルチスレッド処理ライブラリとスレッド対応の Fortran 実行時ライブラリが自動的にリンクされます。-explicitpar を使用してコンパイルとリンクを分けて行う場合は、リンクにも -explicitpar を指定する必要があります。

-explicitpar などの並列化オプションを使用する場合にパフォーマンスを改善するには、-stackvar オプションも指定してください。

有効な並列化指令の形式は -mp オプション (「3.4.59 -mp={%none|sun|cray}」を参照) を使用して選択します。-explicitpar のデフォルトは Sun 指令です。Cray 指令を有効にするには、-explicitpar -mp=cray を使用してください。

最適化レベルが -O3 以上に設定されていない場合は、自動的に -O3 に設定されます。

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

3.4.24 -ext_names= e

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

e には plain または underscores のいずれかを指定します。デフォルトは underscores です。

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

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

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

3.4.25 -F

ソースファイルプリプロセッサを起動します。 ただしコンパイルは行いません。

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

例:

f95 -F source.F

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

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

3.4.26 -f

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

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

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


注 –

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


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

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

3.4.27 -f77[=list]

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

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

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 95 のトラップモードが変更されず、-ftrap=common になります。Fortran 95 と FORTRAN 77 は、演算例外トラップの動作が異なります。FORTRAN 77 コンパイラは、演算例外が発生したあとでも実行を継続することができます。-f77 によるコンパイルでも、プログラムはプログラム終了時に ieee_retrospective を呼び出して、演算例外が発生した場合はそれらの例外をすべて報告します。コマンド行の -f77 オプションフラグのあとに -ftrap=%none を指定すると、元の FORTRAN 77 の動作を真似することができます。

f77 の互換性および FORTRAN 77 から Fortran 95 への移行の詳細は、「4.12 言語の混在」を参照してください。

間違った結果を生じさせる可能性がある標準外のプログラミングの問題を処理する方法については、-xalias フラグも参照してください。

3.4.28 -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 ###
          ###     コマンド行ファイルおよびオプション (展開済み):
          ### -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.29 -fixed

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

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

3.4.30 -flags

-help と同義です。

3.4.31 -fma={none| fused}

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

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

3.4.32 -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.33 -fns[ ={yes| no}]

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

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

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

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

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

表 3–8 非正規数 REAL と DOUBLE

データ型 

範囲 

REAL

0.0 < |x| < 1.17549435e-38 

DOUBLE PRECISION

0.0 < |x| < 2.22507385072014e-308 

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

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

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

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

-fns オプションを有効にするには、主プログラム全体にこのオプションを付けてコンパイルします。

3.4.34 -fpover[ ={yes|no}]

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

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

3.4.35 -fpp

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

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

3.4.36 -fprecision={single|double|extended}

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

x86 で、浮動小数点精度モードを singledoubleextended のいずれかに設定します。

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

このオプションは、x86 システム上でのみ、かつ、主プログラムをコンパイルするときに使用する場合にのみ有効です。

3.4.37 -free

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

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

3.4.38 -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.39 -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.40 -fstore

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

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

3.4.41 -ftrap= t

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

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

%all, %none, common, [no%]invalid, [no%]overflow, [no%]underflow, [no%]division, [no%]inexact.

-ftrap=common は、-ftrap=invalid,overflow,underflow,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.42 -G

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

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

3.4.43 -g

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

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

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

-g とともに指定した、ほかのオプションの機能の一部が制限される場合があります。詳細は、dbx のマニュアルを参照してください。

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

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

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

3.4.44 -hname

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

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

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

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

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

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

3.4.45 -help

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

「3.4.131 -xhelp={ readme|flags}」を参照してください。

3.4.46 -Ipath

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

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

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

例: /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.47 -i8

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

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

3.4.48 -inline=[ %auto][[,][no%] f1,…[no%]fn]

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

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

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

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

例: ルーチン 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.49 -iorounding[ ={compatible|processor-defined}]

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

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

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

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

3.4.50 -Kpic

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

3.4.51 -KPIC

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

3.4.52 -Lpath

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

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

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

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

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

3.4.55 -loopinfo

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

-autopar オプションで並列化されたループとそうでないループを示します。

-loopinfo により、標準エラーに次のメッセージリストが出力されます。


demo% f95 -c -fast -autopar -loopinfo shalow.f
...
"shalow.f", 172 行目: 並列化されます、逐次版が生成されました
"shalow.f", 173 行目: 並列化されません、利得なし
"shalow.f", 181 行目: 並列化されます、融合
"shalow.f", 182 行目: 並列化されません、利得なし
...
...etc

3.4.56 -Mpath

MODULE ディレクトリ、アーカイブ、またはファイルを指定します。

現在のコンパイルで参照されている Fortran 95 モジュールの検索で、指定されたパスが調べられます。現在のディレクトリのほかに、このパスが調べられます。

path には、ディレクトリ、.a アーカイブファイル (プリコンパイル済みモジュールファイルの場合)、または .mod プリコンパイル済みモジュールファイルを指定できます。コンパイラは、ファイルの内容を検査してファイルの種類を判定します。

.a アーカイブファイルは、 -M オプションフラグで、モジュールが検索されることが明示的に指定される必要があります。デフォルトでは、コンパイラはアーカイブファイルを検索しません。

USE 文にある MODULE 名と同じ名前の .mod ファイルのみが検索されます。たとえば USE ME 文があると、コンパイラは me.mod モジュールファイルのみ検索します。

検索時には、モジュールファイルの書き込み先のディレクトリが優先されます。これは、-moddir コンパイラオプションか MODDIR 環境変数で制御します。どちらも指定されていない場合は、現在のディレクトリがデフォルトの書き込み先ディレクトリになります。両方とも指定されている場合、-moddir フラグで指定されているパスが書き込み先ディレクトリになります。

これは、-M フラグのみが指定されている場合は、-M フラグに指定されているすべてのオブジェクトの前に現在のディレクトリでモジュール検索が行われることを意味します。以前のリリースの動作をエミュレートするには、次を使用します。

-moddir=empty-dir -Mdir -M

ここで empty-dir は空のディレクトリへのパスです。

-M とパスの間に空白文字を入れてもかまいません。たとえば、-M /home/siri/PK15/Modules のようにします。

Solaris で、アーカイブやモジュールファイル以外の通常ファイルをパスに指定した場合は、コンパイラは ld オプションをリンカーに渡し、リンカーマップファイルとしてファイルを処理します。これは C および C++ コンパイラと同様の便利な機能です。

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

3.4.57 -m32 | -m64

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

32 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m32 を使用します。64 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m64 を使用します。

ILP32 メモリーモデル (32 ビット int、long、ポインタデータ型) は、64 ビットに対応していないすべての Solaris プラットフォームおよび Linux プラットフォームのデフォルト値です。LP64 メモリーモデル (64 ビット long、ポインタデータ型) は、64 ビット対応の Linux プラットフォームのデフォルト値です。-m64 は、LP64 モデルが使用可能なプラットフォームでのみ許可されます。

-m32 でコンパイルされたオブジェクトファイルまたはライブラリは、-m64 でコンパイルされたオブジェクトファイルまたはライブラリとリンクできません。

-m64 を使用して大容量の静的データを持つアプリケーションをコンパイルする場合は、-xmodel=medium も必要な場合があります。

一部の Linux プラットフォームは、ミディアムモデルをサポートしていません。

旧バージョンのコンパイラでは、-xarch で命令セットを選択することで、メモリーモデルの ILP32 または LP64 が暗黙に指定されていました。Sun Studio 12 コンパイラでは、このようなことはありません。ほとんどのプラットフォームでは、64 ビットオブジェクトを作成するのに、コマンド行に -m64 を追加するだけです。

Solaris では、-m32 がデフォルト値です。64 ビットプログラムをサポートしている Linux システムでは、-m64 -xarch=sse2 がデフォルト値です。

3.4.58 -moddir= path

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

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

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

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

3.4.59 -mp={%none|sun|cray}

Sun または Cray の並列化指令を選択します。


注 –

Sun および Cray の並列化指令は非推奨になりました。代わりに、OpenMP 並列化 API を使用します。アプリケーションを OpenMP に移行する方法については、『OpenMP API ユーザーズガイド』を参照してください。


-explicitpar を指定した場合のデフォルトは -mp=%none になります。

-explicitpar を指定した場合のデフォルトは -mp=sun になります。

-mp=sun

Sun 形式の指令 (接頭辞が C$PAR または !$PAR) を受け付けます。

-mp=cray

Cray 形式の指令 (接頭辞が CMIC$ または !MIC$) を受け付けます。

-mp=%none

全並列化指令を無視します。 

並列化を有効にするには、-explicitpar (または -parallel) を指定する必要があります。正確さを期すには、-stackvar も指定します。

-explicitpar -stackvar -mp=cray

OpenMP の並列化用にコンパイルするには、-xopenmp フラグを使用します。「3.4.155 -xopenmp[={ parallel|noopt|none}]」を参照してください。

しかし、Sun 指令と Cray 指令は、同じコンパイル単位内で同時に使用することはできません。

Sun および Cray 並列化指令の概要は、表 C–1 を参照してください。詳細は、『Fortran プログラミングガイド』を参照してください。

3.4.60 -mt

スレッド環境で使用しても安全なライブラリへのリンクを要求します。

ユーザーが独自に低レベルのスレッド管理を行う場合 (たとえば、libthread ライブラリを呼び出す場合) は、-mt を使用してコンパイルすると、衝突を防ぐことができます。

libthread ライブラリを呼び出すマルチスレッド C コードと Fortran を併用する場合は、-mt を使用します。Solaris の『マルチスレッドのプログラミング』も参照してください。

-autopar-explicitpar、または -parallel のオプションを使用すると、自動的に -mt の機能が有効になります。

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

3.4.61 -native

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

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

3.4.62 -noautopar

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

3.4.63 -nodepend

(SPARC) コマンド行で先に指定された -depend を取り消します。

3.4.64 -noexplicitpar

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

3.4.65 -nofstore

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

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

3.4.66 -nolib

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

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

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

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


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

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

3.4.67 -nolibmil

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

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


demo% f95 -fast -nolibmil …

3.4.68 -noreduction

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

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

3.4.69 -norunpath

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

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

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

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

3.4.70 -O[n]

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

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

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

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

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

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

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

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

3.4.71 -O

-O3 と同義です。

3.4.72 -O1

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

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

3.4.73 -O2

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

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

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

3.4.74 -O3

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

通常、-O2-O1 を使用した場合よりも生成される実行可能ファイルのサイズが大きくなります。

3.4.75 -O4

同一ファイル内にあるルーチンを自動的にインライン化します。

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

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

3.4.76 -O5

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

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

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

3.4.77 -o name

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

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

3.4.78 -onetrip

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

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

3.4.79 -openmp

-xopenmp と同義です。

3.4.80 -p

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

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

3.4.81 -pad[=p]

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

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

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

local

隣接する局所変数の間にパディングを追加挿入します。

common

共通ブロック変数の間にパディングを追加挿入します。 

%none

パディングを追加挿入しません (コンパイラのデフォルト)。 

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

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

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

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

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

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

3.4.82 -parallel

(廃止SPARC)-autopar-explicitpar-depend で並列化します。


注 –

このオプションには、従来の Sun および Cray の並列化指令を有効にする -explicitpar が含まれます。これらの指令は推奨されず、サポートされません。Sun Studio コンパイラで推奨され、サポートされる並列化モデルは OpenMP API です。従来の Sun/Cray 指令を OpenMP に移行する方法の詳細は、『Sun Studio OpenMP API ユーザーズガイド』を参照してください。


並列化するループの選択は、コンパイラによって自動的に、またユーザーの明示的な指令によって行われます。最適化レベルが -O3 よりも低い場合は、自動的に -O3 に設定されます。「3.4.23 -explicitparも参照してください。

パフォーマンスを改善するため、-autopar などの並列化オプションを使用する場合、-stackvar オプションも指定してください。

デフォルトでは、Sun 形式の並列化指令が有効です。Cray 形式の並列化指令を選択する場合は、-mp=cray を使用します (注: OpenMP 並列化の場合は、-parallel ではなく、-xopenmp を使用する)。

独自のスレッド管理を行なっている場合には、-parallel を使用しないでください。「3.4.60 -mtを参照してください。

-parallel のような並列化オプションは、マルチプロセッサシステムで実行するための実行可能プログラムを生成することを前提としています。シングルプロセッサシステムで並列化を行うと、通常はパフォーマンスが低下します。

並列化されたプログラムをマルチスレッド環境で実行するには、実行前に PARALLEL (または OMP_NUM_THREADS) 環境変数を設定しておく必要があります。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。 一般的に、PARALLEL 変数または OMP_NUM_THREADS 変数には、ターゲットプラットフォーム上の利用可能な仮想プロセッサ数を設定します (psrinfo(1) を参照)。

-parallel を使用してコンパイルとリンクを一度に行う場合、マルチスレッド処理ライブラリとスレッド対応の Fortran 実行時ライブラリが自動的にリンクされます。-parallel を使用してコンパイルとリンクを分けて行う場合は、リンクにも-parallel を指定する必要があります。

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

3.4.83 -pg

gprof プロファイラを使用するプロファイル用にコンパイルします。

-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 の実行時サポートは、スレッドに対して安全ではありません。そのため、マルチスレッドプログラムのコンパイルには使用しないでください。マルチスレッドを使用するプログラムをこれらのオプションを付けてコンパイルすると、実行時に、不正な結果やセグメント例外が発生する可能性があります。

コンパイルとリンクを分けて行う場合、-pg を付けてコンパイルしたときはリンクでも必ず -pg を付けてください。

3.4.84 -pic

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

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

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

3.4.85 -PIC

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

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

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

3.4.86 -Qoption pr ls

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

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

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

3.4.87 -qp

-p と同義です。

3.4.88 -R ls

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

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

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

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

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

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

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

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

3.4.89 -r8const

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

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

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

3.4.90 -reduction

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

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

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

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

例: -reduction オプションを付けた自動並列化処理


demo% f95 -parallel -reduction any.f

3.4.91 -S

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

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

3.4.92 -s

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

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

3.4.93 -sb

(廃止) ソースコードブラウザ用のテーブル情報を生成します。


注 –

-sb は、コンパイラが fpp または cpp プリプロセッサを経由して自動的に渡すソースファイル (すなわち、拡張子が .F.F90.F95、または .F03 のファイル) 上で使用することはできません。また、-F オプションとともに使用することもできません。


3.4.94 -sbfast

(廃止) ソースコードブラウザ用のテーブル情報のみを生成します。

ソースコードブラウザ用のテーブル情報のみを生成します。アセンブルやリンクは行わず、オブジェクトファイルも作成しません。


注 –

-sbfast は、コンパイラが fpp または cpp プリプロセッサを経由して自動的に渡すソースファイル (すなわち、拡張子が .F.F90.F95、または .F03 のファイル) 上で使用することはできません。また、-F オプションとともに使用することもできません。


3.4.95 -silent

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

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

3.4.96 -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         制限なし
filesize        制限なし
datasize        523256K バイト
stacksize       8192K バイト      <---
coredumpsize    制限なし
descriptors     64
memorysize      制限なし
demo%

例: メインスタックのサイズを 64M バイトに設定します。


demo% limit stacksize 65536

例: 各スレッドスタックのサイズを 8M バイトに設定します。


demo% setenv STACKSIZE 8192

各スレーブスレッドで使用されるスタックサイズは、 STACKSIZE 環境変数に値 (キロバイト単位) を指定することで設定できます。

% setenv STACKSIZE 8192

この例は、各スレーブスレッドのスタックサイズを 8M バイトに設定します。

STACKSIZE 環境変数は、接尾辞 BKM、または G の付いた数値も受け付けます。これらの接尾辞はそれぞれ、バイト、キロバイト、メガバイト、ギガバイトを表します。デフォルトはキロバイトです。

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

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

3.4.97 -stop_status[ ={yes|no}]

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

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

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

STOP 123

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

STOPstop string

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

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

3.4.98 -temp= dir

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

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

3.4.99 -time

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

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

3.4.100 -U

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

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

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

3.4.101 -Uname

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

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

3.4.102 -u

未宣言の変数に対してメッセージを出力します。

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

3.4.103 -unroll= n

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

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

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

3.4.104 -use= list

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

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

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

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

3.4.105 -V

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

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

前述の情報は、問題が発生した場合にご購入先に問い合わせるときに役立ちます。

3.4.106 -v

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

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

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

3.4.108 -vpara

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

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

例: 詳細な並列化に関する警告


demo% f95 -explicitpar -vpara any.f
any.f:
 MAIN any:
"any.f", 11 行目: 警告: ループには参照を無効にする並列化が含まれている
可能性があります

-xopenmp と OpenMP API 指令、または -explicitpar と従来の C$MIC DOALL 並列化指令とともに使用します。

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

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


注 –

Sun Studio のコンパイラは OpenMP API の並列化モデルをサポートします。そのため、C$MIC 並列化指令は推奨されません。OpenMP API への移行については、『OpenMP API ユーザーズガイド』を参照してください。


3.4.109 -w[n]

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

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

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

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

例: -w オプションを使用しても警告メッセージが出力される場合


demo% f95 -w -parallel any.f
f95: 警告: 並列化コードをサポートするために、最適化レベルが 0 から 3 に
変更されました
demo%

3.4.110 -Xlist[ x]

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

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


注 –

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


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


 demo% f95 -Xlist  fil.f

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

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

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

表 3–9 -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 プログラミングガイド』の「プログラムの解析とデバッグ」の章を参照してください。

3.4.111 -xa

-a と同義です。

3.4.112 -xalias[= keywords]

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

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

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

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

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

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

表 3–10 -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 95 の標準に準拠しているとみなされます。

no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer

別名付けの状況の例、および -xalias を使用した指定方法については、『Fortran プログラミングガイド』の移植に関する章を参照してください。

3.4.113 -xarch=isa

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

表 3–11 に、-xarch キーワード isa で受け付けられるアーキテクチャーを示します。

表 3–11 -xarch ISA キーワード

プラットフォーム 

有効な -xarch キーワード

SPARC 

genericgeneric64nativenative64sparcsparcvissparcvis2sparcfmafv9v9av9b

x86 

genericnative386pentium_prossesse2amd64pentium_proasseasse2aamd64asse3

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

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

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

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

このオプションを最適化で使用する場合は、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。不適切な選択を行うと、意図したターゲットプラットフォームでは実行できないバイナリプログラムが生成されます。

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

オプションの選択によっては、生成された実行可能プログラムのパフォーマンスが、初期のアーキテクチャーよりかなり劣ることがあります。また、4 倍精度 (REAL*16 および long double) の浮動小数点命令は、これらの命令セットアーキテクチャーの多くで使用できますが、コンパイラは、それらの命令を生成したコードでは、それらの命令を使用しません。

SPARC プラットフォームで -xarch が指定されなかった場合のデフォルトは、SPARC プラットフォームでは sparc、x86 プラットフォームでは 386 です。

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

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

-xarch=

意味 (SPARC) 

generic

たいていのプロセッサに共通の命令セットを使用したコンパイルを行います。

generic64

たいていの 64 ビットプラットフォーム用のコンパイルを行います。

(Solaris のみ) このオプションは -m64 -xarch=generic と同等で、旧バージョンとの互換を提供します。64 ビットコンパイルを指定する場合は、-xarch=generic64 ではなく -m64 を使用します。

native

このシステムで良好なパフォーマンスを得るためのコンパイルを行います

コンパイラは、コンパイルが実行されている現在のシステムプロセッサに適した設定を選択します。これは、-fast オプションのデフォルトです。

native64

このシステムの 64 ビットモードで良好なパフォーマンスを得るためのコンパイルを行います

(Solaris のみ) このオプションは -m64 -xarch=native と同等で、旧バージョンとの互換を提供します。

sparc

SPARC V9-ISA 用のコンパイルを行います。

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

sparcvis

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

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

sparcvis2

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

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

sparcfmaf

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

コンパイラは、SPARC-V9 命令セット + UltraSPARC 拡張機能 + Visual Instruction Set (VIS) version 1.0 + UltraSPARC-III 拡張機能 + Visual Instruction Set (VIS) version 2.0 + 浮動小数点積和演算用の SPARC64 VI 拡張機能の命令を使用できます。 

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

v9

-m64 -xarch=sparc と同義です。64 ビットのメモリーモデルを得るために -xarch=v9 を使用する従来のメイクファイルおよびスクリプトは、-m64 を使用するだけで済みます。

v9a

-m64 -xarch=sparcvis と同義です。旧バージョンとの互換を提供します。

v9b

-m64 -xarch=sparcvis2 と同義です。旧バージョンとの互換を提供します。

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

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

-xarch=

意味 (x86) 

generic

たいていの 32 ビット x86 プラットフォームで良好なパフォーマンスを得るために、コンパイルを行います。これはデフォルトで、-xarch=386 と同義です。

generic64

たいていの 64 ビット x86 プラットフォームで良好なパフォーマンスを得るために、コンパイルを行います。現在は、amd64 と解釈されます。

native

x86 アーキテクチャーで良好なパフォーマンスを得るために、コンパイルを行います。たいていの x86 プロセッサで良好なパフォーマンスを得るために、最良の命令セットを使用します。「最良な」命令セットの内容は、必要に応じて新しいリリースごとに調整される可能性があります。 

native64

64 ビット 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

-m64 -xarch=sse2 と同義です (Solaris のみ) 。64 ビットのメモリーモデルを得るために -xarch=amd64 を使用する従来のメイクファイルおよびスクリプトは 、-m64 を使用するだけで済みます。

amd64a

—m64 —xarch=sse2a と同義です (Solaris のみ)。

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

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

3.4.114 -xassume_control[ =keywords]

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

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

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

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

f95 コンパイラが認識する ASSUME プラグマの説明については、「2.3.1.9 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.115 -xautopar

-autopar と同義です。

3.4.116 -xbinopt={ prepare | off}

(SPARC) コンパイル後の最適化用にバイナリを準備します。

コンパイル済みのバイナリファイルは、あとで binopt(1) を使用して、最適化、変換、分析できます。このオプションは、実行可能ファイルまたは共有オブジェクトを構築するときに使用できます。また、有効にするには、最適化レベルを -O1 以上にする必要があります。

このオプションを使用して構築すると、バイナリファイルのサイズが約 5% 増加します。

コンパイルとリンクを個別に実行する場合、コンパイルとリンクの両方で -xbinopt を指定する必要があります。

アプリケーションのすべてのソースコードを -xbinopt でコンパイルしなかった場合でも、次のように、プログラムバイナリを構築する最後のリンク手順で -xbinopt フラグを使用します。


example% f95 -0 program -xbinopt=prepare a.o b.o c.f95

-xbinopt を使用してコンパイルしたコードだけが、binopt(1) で最適化できます。

デフォルトは -xbinopt=off です。

3.4.117 -xcache= c

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

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

si/li/ai/ti の定義は次のとおりです。

si レベル i のデータキャッシュのサイズ (キロバイト単位) li レベル i のデータキャッシュの行サイズ (バイト単位) ai レベル i のデータキャッシュの結合性 ti レベル i でキャッシュを共有するハードウェアスレッドの数 (省略可能)

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

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

表 3–14 -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 のキャッシュ特性を定義します。 

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

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

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

3.4.118 -xcg89

(SPARC/廃止) -cg89 と同義です。

3.4.119 -xcg92

(SPARC/廃止) -cg92 と同義です。

3.4.120 -xcheck=keyword

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

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

キーワード

機能 

stkovf

副プログラムのエントリのスタックオーバーフローを実行時に検査します。スタックオーバーフローが検出されると、 SIGSEGV セグメント例外が発生します (SPARC のみ)。

no%stkovf

スタックオーバーフローの実行時の検査を無効にします (SPARC のみ)。

init_local

局所変数の特定の初期化を実行します。

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

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

no%init_local

局所変数の初期化を無効にします。これはデフォルト値です。 

%all

実行時のすべての検査機能を有効にします。 

%none

実行時のすべての検査機能を無効にします。 

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

3.4.121 -xchip=c

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

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

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

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

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

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

-xchip= 

最適化の対象 

generic

ほとんどの SPARC プロセッサこれがデフォルトです。 

native

このホストプラットフォーム 

sparc64vi

SPARC64 VI プロセッサ 

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 プロセッサ 

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

3.4.122 -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.122.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) オプションを使用してコンパイルしてください。Solaris の『リンカーとライブラリ』を参照してください。

3.4.123 -xcommonchk[ ={yes|no}]

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

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

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

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

例: tc.f における TASKCOMMON 指令の欠如


demo% cat tc.f
                common /x/y(1000)
                do 1 i=1,1000
 1              y(i) = 1.
                call z(57.)
                end
demo% cat tz.f
                subroutine z(c)
                common /x/h(1000)
C$PAR TASKCOMMON X
C$PAR DOALL
                do 1 i=1,1000
1                       h(i) = c* h(i)
                return
                end
demo% f95 -c -O4 -parallel -xcommonchk tc.f
demo% f95 -c -O4 -parallel -xcommonchk tz.f
demo% f95 -o tc -O4 -parallel -xcommonchk tc.o tz.o
demo% tc
エラー (libmtsk): threadprivate/taskcommon の宣言の不一致
   x_: tc.f の 1 行目では threadprivate/taskcommon として宣言しません。
demo%

3.4.124 -xcrossfile[ ={1|0}]

最適化とソースファイル間のインライン化を有効にします。

通常、コンパイラが分析する範囲はコマンド行で指定した個別のファイルに限られます。たとえば、-O4 の自動インライン化は、単一のソースファイル中で定義され、引用される副プログラムに対してのみ行われます。

-xcrossfile を付けると、コンパイラは、コマンド行で指定されたすべてのファイルを、単一のソースファイルに連結されているかのように分析します。

-xcrossfile は、-O4 または -O5 と併用したときだけ有効です。

ファイル間のインライン化を行うと、ソースファイルの相互依存関係が生成されます。これは、通常は存在しません。-xcrossfile を指定してコンパイルしたファイルセット中のいずれかのファイルを変更した場合は、新しいコードが正しくインライン化されるように、全ファイルを再コンパイルする必要があります。「3.4.48 -inline=[ %auto][[,][no%] f1,…[no%]fn]」を参照してください。

デフォルトでは、コマンド行に -xcrossfile を指定しないので、-xcrossfile=0 となり、ファイル間の最適化は行われません。ファイル間の最適化を有効にするには、-xcrossfile (-xcrossfile=1 と同義) と指定します。

また、.s のアセンブラソースファイルは、ファイル間解析には関係しません。また、-S を指定したコンパイルでは、-xcrossfile フラグは無視されます。

3.4.125 -xdebugformat={ dwarf|stabs}

Sun 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.126 -xdepend

-depend と同義です。

3.4.127 -xexplicitpar

-explicitpar と同義です。

3.4.128 -xF

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

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

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

3.4.129 -xfilebyteorder= options

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

このフラグは、書式なし入出力ファイル内のデータのバイト順序とバイト列を特定します。options には、次のフラグを任意に組み合わせたものを指定しますが、少なくとも 1 つのフラグを指定する必要があります。

littlemax_align:spec

bigmax_align:spec

native:spec

max_align は、ターゲットプラットフォームの最大バイト列を宣言します。指定できる値は 1、2、4、8、16 です。境界整列は、C 言語の構造体との互換性を維持するため、プラットフォーム依存のバイト列を使用する Fortran VAX 構造体と Fortran 95 派生型に適用されます。

最大バイト列が 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.129.1 例:

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

3.4.129.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 実行可能ファイルが読み取ることはできません。これは、両者のデフォルトの倍精度データ型のサイズが異なるためです。

REAL*16 データを含む書式なしのファイルは、REAL*16 をサポートしていない x86 プラットフォームでは使用できません。

ネイティブ以外のファイルとして指定されたファイルに対して、UNION/MAP データオブジェクト全体を使った入出力操作を行うと、実行時入出力エラーになります。ネイティブ以外のファイルに対しては、MAP の個別メンバーを使った入出力操作のみ行うことができます。UNION/MAP を含む VAX レコード全体を使った入出力操作は行えません。

3.4.130 -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    <-- 7 であるべきです
demo% f95 -o has1 -xhasc=no hasc.f
demo% has1
 string length =   7  <--  s の長さを修正します

z への 4habcd の受け渡しは、-xhasc=no でコンパイルすることにより、正しく行われます。

このフラグは、従来の FORTRAN 77 プログラムの移植を支援するために提供されています。

3.4.131 -xhelp={ readme|flags}

要約したヘルプ情報を表示します。

-xhelp=readme

このコンパイラのリリースのオンライン README ファイルを表示します。

-xhelp=flags

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

3.4.132 -xhwcprof[={enable | disable}]

(SPARC) コンパイラのデータ空間プロファイリングのサポートを有効にします。

-xhwcprof を有効にすると、コンパイラは、プロファイル対象のロード命令およびストア命令と、それらが参照するデータ型および構造体メンバーをツールが関連付けるのに役立つ情報を、-g で生成されたシンボル情報と組み合わせて生成します。このオプションでは、プロファイルデータを命令空間ではなくターゲットのデータ空間と関連付け、命令プロファイリングだけでは簡単に得ることができない動作情報を確認できます。

指定した一連のオブジェクトファイルは、-xhwcprof を使用してコンパイルできます。ただし、このオプションがもっとも役立つのは、アプリケーション内のすべてのオブジェクトファイルに適用したときです。このオプションによって、アプリケーションのオブジェクトファイルに分散しているすべてのメモリー参照を識別したり、関連付けたりするカバレージが提供されます。

コンパイルとリンクを別々に行う場合は、-xhwcprof をリンク時にも使用してください。

-xhwcprof=enable または -xhwcprof=disable のインスタンスは、同じコマンド行にある以前の -xhwcprof のインスタンスをすべて無効にします。

-xhwcprof はデフォルトでは無効です。引数を指定せずに -xhwcprof と指定することは、-xhwcprof=enable と指定することと同じです。

-xhwcprof を使用する場合は最適化を有効にし、デバッグのデータ形式を dwarf (-xdebugformat=dwarf) に設定しておく必要があります。これは、この Sun Studio のリリースのデフォルトです。

-xhwcprof-g を組み合わせて使用すると、コンパイラに必要な一時ファイル記憶領域は、-xhwcprof-g を単独で指定することによって増える量の合計を超えて大きくなります。

次のコマンドは example.f をコンパイルし、ハードウェアカウンタによるプロファイリングのサポートを指定し、DWARF シンボルを使用してデータ型と構造体メンバーのシンボリック解析を指定します。


f95 -c -O -xhwcprof -g  example.f            

ハードウェアカウンタによるプロファイリングの詳細は、『Sun Studio Performance Analyzer』を参照してください。

3.4.133 -xia[={widestneed|strict}]

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

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

Fortran 95 で拡張された区間演算の詳細は、『Fortran 95 区画演算プログラミングリファレンス 』に記載されています。「3.4.136 -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.134 -xinline= list

-inline と同義です。

3.4.135 -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.136 -xinterval[ ={widestneed|strict| no}]

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

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

no

区間演算処理を有効にしません。 

widestneed

モードが混在した式に含まれる非間隔変数および定数を、式の中でもっとも広い間隔のデータ型に変換します。 

strict

型や長さが混在した間隔式の使用を禁止します。間隔型および長さの変換はすべて明示的に行わなければなりません。 

Fortran 95 で拡張された区間演算の詳細は、『Fortran 95 区間演算プログラミングリファレンス 』に記載されています。「3.4.133 -xia[={widestneed|strict}]」も参照してください。

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

内部手続きの最適化を実行します。

内部手続き解析パスを呼び出すことにより、プログラム全体の最適化を実行します。-xcrossfile と異なり、-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 を置き換えるケースを考えてみましょう。-xipo=2 を使ってコンパイルする場合、その独自のコードとリンクされる malloc() を参照する、あらゆるライブラリのあらゆる関数のコンパイルで -xipo=2 を使用する必要があるとともに、リンク手順でそれらのオブジェクトファイルが必要になります。しかしながら、システムライブラリでは、このことが不可能なことがあり、このため、独自のバージョンの malloc のコンパイルに -xipo=2 を使うべきではありません。

もう 1 つの例として、別々のソースファイルにある foo() および bar() という 2 つの外部呼び出しを含む共有ライブラリを構築するケースを考えてみましょう。bar() はその本体内で foo() を呼び出します。関数呼び出し foo() が実行時に異なるバージョンの foo() に置き換えられる可能性がある場合、foo() および bar() のソースファイルのコンパイルで -xipo=1-xipo=2 を使ってはいけません。foo()bar() 内にインライン化され、-xipo を付けてコンパイルした場合に不正な結果になる可能性があります。

3.4.138 -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.139 -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.140 -xknown_lib=library_list

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

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

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

-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

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

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 95 および FORTRAN 77 組み込みの明示的な EXTERNAL 宣言を無視します。このため、ユーザー定義組み込み関数ルーチンも無視されます。組み込み関数の名前のリストは、『Fortran ライブラリ・リファレンス』を参照してください。

3.4.141 -xlang=f77

(SPARC) 旧バージョンの f77 でコンパイルされた実行ライブラリとのリンクの準備をします。

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

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

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

3.4.142 -xlibmil

-libmil と同義です。

3.4.143 -xlibmopt

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

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

3.4.144 -xlic_lib=sunperf

Sun Performance Library とリンクします。

例:


f95 -o pgx -fast pgx.f -xlic_lib=sunperf

-l オプションと同様に、このオプションもコマンド行でソースファイルおよびオブジェクトファイルの名前をすべて並べたあとに指定します。

このオプションを使用して、Sun Performance Library とリンクさせる必要があります (『Sun Performance Library User’s Guide 』を参照)。

3.4.145 -xlicinfo

(廃止) コンパイラによって無視されますが、メッセージは出力されません。

3.4.146 -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.147 -xloopinfo

-loopinfo と同義です。

3.4.148 -xmaxopt[ =n]

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

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

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

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

3.4.149 -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 を使用してください。

-dalign オプションはマクロです。

-dalign-xmemalign=8s -aligncommon=16 のマクロです。

詳細は、「3.4.2 -aligncommon[ ={1|2|4| 8|16}]」を参照してください。

3.4.150 -xmodel=[ small | kernel | medium]

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

-xmodel オプションを使用すると、コンパイラで 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.151 -xnolib

-nolib と同義です。

3.4.152 -xnolibmil

-nolibmil と同義です。

3.4.153 -xnolibmopt

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

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

f95 -fast -xnolibmopt …

3.4.154 -xOn

-On と同義です。

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

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

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

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

  • -xopenmp=parallel での最低最適化レベルは -x03 です。コンパイラは、必要に応じて最適化のレベルを低いレベルから -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 ユーザーズガイド』を参照してください。

並列化されたプログラムをマルチスレッド環境で実行するには、実行前に PARALLEL (または OMP_NUM_THREADS) 環境変数を設定しておく必要があります。これは、プログラムが作成できる最大スレッド数を実行時システムに指示しています。デフォルトは 1 です。 一般的に、PARALLEL 変数または OMP_NUM_THREADS 変数には、ターゲットプラットフォーム上の利用可能な仮想プロセッサ数を設定します。

入れ子並列を有効にするには、OMP_NESTED 環境変数を TRUE に設定する必要があります。入れ子並列は、デフォルトでは無効です。入れ子並列についての詳細は、Sun Studio の『OpenMP API ユーザーズガイド』を参照してください。

OpenMP では、プリプロセッサ記号 _OPENMP の定義に 10 進数 YYYYMM を含める必要があります。ここで、YYYY と MM は、この実装がサポートする OpenMP Fortran API のバージョンの年と月を示します。現在の Sun Studio リリースでは、この値は OpenMP version 2.5 を表す 200525 です。

コンパイルとリンクを分けて行う場合は、リンク時にも -xopenmp を指定する必要があります。これは、OpenMP 指令を含むライブラリをコンパイルする場合、特に重要です。

3.4.156 -xpad

-pad と同義です。

3.4.157 -xpagesize= size

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

SPARC プラットフォームでは、size 値には次のいずれかを指定します。

8K 64K 512K 4M 32M 256M 2G 16G または default

x86 プラットフォームでは、size 値には次のいずれかを指定します。

4K 2M 4M または default

例: -xpagesize=4M

これらすべてのページサイズが、あらゆるプラットフォームでサポートされているわけではなく、アーキテクチャーと Solaris 環境に依存します。ページサイズは、ターゲットプラットフォーム上で Solaris オペレーティング環境に有効なページサイズを指定する必要があります。有効なページサイズは getpagesizes(3C) によって返される値です。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。Solaris オペレーティング環境では、ページサイズ要求に従うという保証はありません。

実行中のプログラムが要求したページサイズを受け取ったかどうかを判断するには、pmap(1) または meminfo(2) を使用します。

-xpagesize=default を指定すると、フラグは無視されます。size 値を指定しないで -xpagesize を指定することは、-xpagesize=default と同義です。

このオプションは、-xpagesize_heap=size-xpagesize_stack=size を組み合わせたマクロです。これら 2 つのオプションは -xpagesize と同じ次の引数を使用します。 8K64K512K4M 32M256M2G16Gdefault のいずれかです。両方に同じ値を設定するには -xpagesize=size を指定します。別々の値を指定するには個々に指定します。

このフラグを指定してコンパイルするのは、LD_PRELOAD 環境変数を同等のオプションで mpss.so.1 に設定するか、またはプログラムを実行する前に同等のオプションを指定して Solaris 9 コマンドの ppgsz(1) を実行するのと同じことです。詳細は、Solaris 9 マニュアルページを参照してください。

この機能は Solaris 7 および Solaris 8 オペレーティング環境では使用できません。このオプションを指定してコンパイルされたプログラムは、Solaris 7 および Solaris 8 オペレーティング環境ではリンクしません。

3.4.158 -xpagesize_heap= size

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

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

この機能は Solaris 7 および Solaris 8 オペレーティング環境では使用できません。詳細は、-xpagesize を参照してください。

3.4.159 -xpagesize_stack= size

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

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

この機能は Solaris 7 および Solaris 8 オペレーティング環境では使用できません。詳細は、-xpagesize を参照してください。

3.4.160 -xparallel

-parallel と同義です。

3.4.161 -xpg

-pg と同義です。

3.4.162 -xpp={ fpp|cpp}

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

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

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

3.4.163 -xprefetch[ =a[,a]]

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

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

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

auto

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

no%auto

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

explicit

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

no%explicit

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

latx:factor

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

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

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


注 –

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


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

-xprefetch が指定されていない場合、-xprefetch=no%auto,explicit とみなされます。

-xprefetch だけが指定されている場合、-xprefetch=auto,explicit とみなされます。

デフォルト no%auto は、-xprefetch に引数を指定しないか、または autoyes を引数にとる -xprefetch を使用して明示的に無効にするまで継続されます。たとえば、-xprefetch=explicit-xprefetch=explicit,no%auto と同義です。

デフォルト explicit は、引数に no%explicitno を指定して明示的に無効にするまで継続されます。たとえば、-xprefetch=auto-xprefetch=auto,explicit と同義です。

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

3.4.163.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.163.3 警告

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

コンパイラは幅広いマシンやアプリケーションで最適なパフォーマンスを得られるように先読み機構を調整しているため、パフォーマンステストで明確な利点のある場合に限り、-xprefetch=latx:factor を使用すべきです。デフォルトの先読み応答時間はリリースにより変更される場合があります。そのため、新しいリリースに切り替えるたびに、応答時間の係数によるパフォーマンスの影響をテストすることをお勧めします。

3.4.164 -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.165 -xprefetch_level={ 1|2|3}

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

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

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

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

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

3.4.166 -xprofile={ collect[:name]| use[:name]| tcov}

実行時のプロファイル用データを収集、またはそのデータを使用して最適化を行うか、基本ブロックのカバレージ分析を行います。

高い最適化レベルでのコンパイル (-xO5) が拡張されて、コンパイラには実行時パフォーマンスのフィードバックが提供されます。コンパイラが最良の最適化を実行するために必要なプロファイルフィードバックを生成するには、最初に -xprofile=collect を指定してコンパイルし、標準的なデータセットに対して実行可能ファイルを実行し、次に最高の最適化レベルと -xprofile=use を指定して再コンパイルします。

collect[: name]

あとで -xprofile=use オプションを使用してプログラムをコンパイルするときに、オプティマイザが使用する実行頻度データを収集し保存します。コンパイラは、文の実行頻度を測定するコードを生成します。

name には、解析対象の実行可能ファイル名を指定します。この名前の指定は省略することができます。name が指定されていない場合は、a.out が実行可能ファイル名とみなされます。

-xprofile=collect:name でコンパイルしたプログラムは、デフォルトでは、実行時に name .profile サブディレクトリを作成し、実行時フィードバック情報が保存されます。サブディレクトリのファイル feedback に実行時のプロファイルデータが書き込まれます。プログラムを複数回実行すると、実行頻度データは feedback ファイルに蓄積されていくので、以前の実行頻度データは失われません。

環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR を設定すると、-xprofile=collect でコンパイルされたプログラムが実行時のプロファイルデータを書き込むためのファイルおよびディレクトリを指定できます。これらの変数を設定すると、-xprofile=collect でコンパイルされたプログラムは、プロファイルデータを $SUN_PROFDATA_DIR/$SUN_PROFDATA に書き込みます。

これらの環境変数は、tcov で書き込まれたプロファイルデータファイルのパスと名前も指定します。tcov(1) マニュアルページを参照してください。

プロファイルの収集は「マルチスレッド (MT) 環境で安全」です。すなわち、-mt を指定してコンパイルし、マルチタスクライブラリを直接呼び出すことで独自のマルチタスクを実行するプログラムをプロファイル処理すると、正確な結果が得られます。

コンパイルとリンクを個別に実行する場合、コンパイルで -xprofile=collect を指定するときは、リンクでも指定する必要があります。

use[: nm]

最適化レベル -xO5 で計画的に最適化するために、実行頻度データを使用します。

collect:nm の場合と同じように nm には、実行可能ファイル名を指定します。名前の指定は省略することもできます。

-xprofile=collect オプションを付けてコンパイルしたときに生成され、プロファイルデータファイルに保存された実行頻度データを使用して、プログラムが最適化されます。

ソースファイルおよびその他のコンパイルオプションは、feedback ファイルが生成されるプログラムをコンパイルしたときに使用したものを指定してください。-xprofile=collect:nm でコンパイルするときと、 -xprofile=use:nm で最適化コンパイルをするときのプログラム名 nm は同一のものを指定する必要があります。

収集 (collect) 段階と使用 (use) 段階の間のコンパイル速度を高める方法については、-xprofile_ircache も参照してください。

コンパイラがプロファイルデータファイルを検索するディレクトリを制御する方法については、-xprofile_pathmap も参照してください。

tcov

「新しい」形式の tcov を使った基本ブロックカバレージ解析です。最適化レベルは、-O2 以上を指定してください。

コード計測方法は -a と似ていますが、ソースファイルごとに .d ファイルは生成されません。最終的な実行可能ファイルに基づく名前のファイルが 1 つ生成されます。たとえば、実行可能ファイルが stuff である場合、stuff.profile/tcovd がデータファイルとなります。

tcov を実行するときに、新しい形式のデータを使用させるように -x オプションを渡す必要があります。-x オプションを指定しないと、tcov はデフォルトでは古い .d ファイルがあればそれをデータとして使用し、予測外の結果が生成されます。

-a とは異なり、TCOVDIR 環境変数はコンパイル時には影響しませんが、プログラムの実行時に使用され、プロファイルデータを置くサブディレクトリの位置が決まります。

詳細は、tcov(1) マニュアルページ、『Fortran プログラミングガイド』の「パフォーマンスプロファイリング」の章および『プログラムのパフォーマンス解析 』を参照してください。


注 –

tcov で作成されたレポートは、-O4 または -inline によって副プログラムがインライン化されている場合、信頼性がない可能性があります。インライン化されているルーチンへの呼び出しの範囲は記録されません。


3.4.167 -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.168 -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.169 -xrecursive

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

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

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

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

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

3.4.170 -xreduction

-reduction と同義です。

3.4.171 -xregs= r

レジスタの使用法を指定します

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

[no%]appl, [no%]float.

% は必須文字であることを示します。

例: -xregs=appl,no%float

サブオプションに接頭辞 no% を付けると、この機能は無効になります。

appl

(SPARC) コンパイラがアプリケーションレジスタをスクラッチレジスタとして使用して、コードを生成することを許可します。32 ビットのプロセッサには g2g3g4 レジスタがあります。64 ビットのプロセッサには g2g3 レジスタがあります。

float

(SPARC のみ) コンパイラが浮動小数点レジスタを整数値用のスクラッチレジスタとして使用することを許可します。このオプションは、コンパイラが浮動小数点値用に浮動小数点レジスタを使用することには影響しません。

no%float

浮動小数点レジスタを使用しません。このオプションを使用すると、 ソースプログラムには浮動小数点のコードが含まれなくなります。

frameptr

(x86 のみ) プログラムパフォーマンスを向上させるために、フレームポインタレジスタ (32 ビット x86 プロセッサの場合 %ebp、64 ビット x86 プロセッサの場合 %rbp) を未割り当ての呼び出し先保存レジスタとして使用することを許可します。コンパイル時に -xpg または -p も指定されていた場合、-xregs=frameptr は無視されます。

デフォルトは、SPARC プラットフォームの場合は -xregs=appl,float、x86 の場合は -xregs=appl,float,no%frameptr です。

アプリケーションにリンクする共有ライブラリ用のコードは、-xregs=no%appl,float を指定してコンパイルすることを強くお勧めします。少なくとも、リンクするアプリケーションでのレジスタ処理に問題がないように、共有ライブラリがアプリケーションレジスタを使用する方法を明示的に示す必要があります。

たとえば、大局的な方法で (重要なデータ構造体を示すためにレジスタを使用するなど) レジスタを使用するアプリケーションは、ライブラリと確実にリンクするため、-xregs=no%appl なしでコンパイルされたコードを含むライブラリがアプリケーションレジスタをどのように使用するかを正確に特定する必要があります。

3.4.172 -xs

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

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

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

3.4.173 -xsafe=mem

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

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

このオプションは、最適化レベル -O5 とともに使用した場合にのみ有効です。


注意 – 注意 –

アドレスの不正な整列やセグメンテーション違反などの障害発生時、障害のないロードがトラップを引き起こさないため、そうした障害の発生しないプログラムに対してのみこのオプションを使用すべきです。メモリーに関するトラップを引き起こすプログラムが少ないため、ほとんどのプログラムでこのオプションを安全に使用できます。例外条件を扱うためにメモリーに関するトラップに明示的に依存するプログラムで、このオプションを使用しないでください。


3.4.174 -xsb

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

3.4.175 -xsbfast

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

3.4.176 -xspace

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

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

3.4.177 -xtarget=t

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

t には nativenative64genericgeneric64platform-name のいずれかを指定します。

-xtarget オプションは、実際のプラットフォームで発生する、-xarch-xchip-xcache をまとめて指定することができます。-xtarget の意味は = のあとに指定した値を展開したものにあります。

対象となるハードウェア (コンピュータ) を正確にコンパイラに指定すると、パフォーマンスが向上するプログラムもあります。プログラムのパフォーマンスが重要な場合は、対象となるハードウェアを正確に指定してください。これは特に、新しい SPARC プロセッサ上でプログラムを実行する場合に当てはまります。ただし、ほとんどのプログラムおよびより旧式の SPARC プロセッサでは、パフォーマンス向上はごくわずかなので、generic の指定で十分です。

-xtarget の実際の展開値は、リリースによって異なる可能性があります。コンパイラが使用する展開値は、-dryrun フラグを使用して判断できます。


demo% f95 -dryrun -xtarget=ultra4plus
###     コマンド行ファイルおよびオプション (展開済み):
### -dryrun -xarch=v8plusa -xcache=64/32/4/1:2048/64/4/2:32768/64/4/2 -xchip=ultra4plus

特定の指定プラットフォームでの —xtarget 展開は、同じプラットフォームでの —xtarget=native 指定の展開とは異なる場合があります。

3.4.177.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.177.2 SPARC プラットフォーム

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

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

-xtarget= プラットフォーム名

-xarch 

-xchip 

-xcache 

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

sparcvis

ultra3

64/32/4:8192/512/1

ultra3cu

sparcvis

ultra3cu

64/32/4:8192/512/2

ultra3i

sparcvis

ultra3i

64/32/4:1024/64/4

ultra4

sparcvis

ultra4

64/32/4:8192/128/2

ultra4plus

sparcvis

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

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


-xtarget=ultra2   ...   -m64

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

3.4.177.3 x86 プラットフォーム

x86 システムで有効な -xtarget プラットフォーム名は次のとおりです。

genericnativepentiumpentium_propentium3pentium4opteron

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


-xtarget=opteron -m64

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

3.4.178 -xtime

-time と同義です。

3.4.179 -xtypemap= spec

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

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

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

real:サイズdouble:サイズinteger:サイズ

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

例:

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

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

INTEGERLOGICAL は等価として扱われます。また、COMPLEX は 2 つの REAL として扱われます。DOUBLE COMPLEXDOUBLE と同じようにマップされます。

3.4.180 -xunroll= n

-unroll=n と同義です。

3.4.181 -xvector[= [[ no%]lib, [no%] simd, %none] ]

ベクトルライブラリ関数を自動呼び出しします。

このオプションを使用する場合、-xvector を使用してコンパイルするときに、デフォルトの丸めモードである -fround=nearest でコンパイルする必要があります。

-xvector=lib が指定されると、可能な場合は、コンパイラはループ内の数学ライブラリへの呼び出しを、同等のベクトル数学ルーチンへの単一の呼び出しに変換します。その結果、ループカウントの大きいループのパフォーマンスが改善されます。この機能は、-xvector=no%lib で無効になります。

-xvector=simd を使用すると、コンパイラはネイティブ x86 SSE SIMD 命令を使用して特定のループのパフォーマンスを向上させます。ターゲットアーキテクチャーが SIMD 命令をサポートする場合にのみ、コンパイラはこのスイッチを受け入れることができます。たとえば、-xarch=sse2 -m64 または -xarch=generic64 を指定する必要があります。また、-xvector=simd を指定する場合は、-xO3 以上の最適化レベルと -xdepend を指定する必要もあります。この機能は、-xvector=no%simd で無効になります。

-xvector=simd-fsimple=2 の両方を指定すると、-xvector=simd だけを指定した場合よりもパフォーマンスが向上します。ただし、-fsimple=2 では浮動小数点演算の並べ替えが許可されるため、浮動小数点の結果がわずかに異なる場合があります。

デフォルトは -xvector=%none です。-xvector をサブオプションなしで指定した場合、コンパイラは -xvector=lib とみなします。

コンパイラは、ロード時に libmvec ライブラリを取り込みます。コンパイル時に -xvector=lib を指定した場合は、リンク時にも指定する必要があります。

このオプションは以前のインスタンスを上書きするため、-xvector=%none は、それ以前に指定した -xvector=lib よりも優先されます。

3.4.182 -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 を付けてコンパイルしても ld によってライブラリが構築されなかった場合は、-ztext を付けずにコンパイルし直すと ld によってライブラリが構築されます。-ztext を指定した場合に構築が失敗するということは、ライブラリ中に共有不可能な成分があることを示します。ただし、この場合でもその他の成分は共有できるはずですが、パフォーマンスが最高でない可能性もあります。