XL Fortran コンパイラー・オプションの詳細記述

以下のアルファベット順のオプション・リストには、 これらのオプションを効率的に使用するのに必要な全情報が記載されています。

構文情報の読み方

-# オプション

構文

-#

個々のコンポーネントを実際には実行せずに、コンパイルの進行に関する情報を生成します。

規則

このオプションは、さまざまなコンパイル・ステップのためにコンパイラーがコマンドを実行するポイントで、 これらのアクションを実際には実行しないで、 システム呼び出しと、渡すシステム引き数リストのシミュレーションを表示します。

このオプションの出力を調べると、特定のコンパイルに関して、 次の事項を迅速かつ確実に判別することができます。

ソース・コードのコンパイルのオーバーヘッドを回避して、 .lst ファイルなどの既存のファイルの上書きも回避します。 (make コマンドに精通している方々にとっては、これは make -n に似ています。)

-qipa とともにこのオプションを指定する場合、 コンパイラーは IPA リンク・ステップの後にリンカー情報を表示しないことにご注意ください。 これは、コンパイラーが IPA を実際に呼び出していないためです。

関連情報

-v オプション-V オプションは、同じ出力を 作成しますが、コンパイルも実行します。

-1 オプション

構文

-1
ONETRIP | NOONETRIP

DO ステートメントが実行される場合、 反復回数が 0 であったとしても、コンパイルされたプログラム内の個々の DO ループを最低 1 回実行します。 このオプションを指定すると、FORTRAN 66 との互換性を保つことができます。 デフォルトは、その後の Fortran 標準の動作に従うことで、この標準では反復回数が 0 の場合は DO ループは実行されません。

制限

このオプションは FORALL ステートメントや FORALL 構文、あるいは 配列コンストラクターによる DO ループには影響しません。

関連情報

-qonetrip は、-1 の長い形式です。

-B オプション

構文

-Bprefix

コンパイル中に使用する実行可能ファイル (コンパイラー、リンカーなど) の代替パス名を決定します。これは -t オプションと組み合わせて使用することができ、 これらのコンポーネントのどれが -B の影響を受けるかを決定します。

引き数

prefix は、代替の実行可能ファイルが常駐しているディレクトリーの名前です。 これは / (斜線) で終わっていなければなりません。

規則

個々のコンポーネントの完全なパス名を形成するために、 ドライバー・プログラムは標準プログラム名に prefix を追加します。 1 つまたは複数の -tmnemonic オプションを組み込むことによっても、 このオプションの影響を受けるコンポーネントを制限することができます。

これらのコマンドのデフォルト・パス名を構成ファイルに指定することもできます。

このオプションを使用すると、コンポーネントの一部または全部の XL Fortran コンポーネントの複数レベルを保持したり、 アップグレードされたコンポーネントを永続的にインストールする前に、試してみることができます。 複数レベルの XL Fortran を使用可能にしておく場合は、 適切な -B オプションおよび -t オプションを構成ファイルのスタンザに入れてから、-F オプションを使って、 使用するスタンザを選択する必要があります。

この例では、初期レベルの XL Fortran コンポーネントが /opt/ibmcmp/xlf/8.1/exe ディレクトリーにインストールされています。 アップグレードした製品をテストして誰でも使用できるようにするために、 システム管理者は /home/jim ディレクトリー下に最新のインストール・イメージを復元して、 次のようなコマンドでテストします。

/home/jim/xlf/9.1/bin/xlf95 -tchIbdz -B/home/jim/xlf/9.1/exe/ test_suite.f

アップグレードが受け入れ基準を満たしたら、システム・アドミニストレーターは /opt/ibmcmp/xlf/9.1 の以前のレベルにインストールします。

関連情報

-t オプション-F オプション構成ファイルのカスタマイズ、および 2 つのレベルの XL Fortran の実行を参照してください。

-C オプション

構文

-C
CHECK | NOCHECK

配列エレメント、配列セクション、文字サブストリングなどへの個々の参照が正しいかどうかをチェックします。

規則

コンパイル時に、参照が境界外に及ぶことをコンパイラーが判別できる場合は、 報告されるエラーの重大度が、このオプションの指定時に S (重大) に上がります。

実行時に、参照が境界外に及ぶと、プログラムは SIGTRAP シグナルを発生させます。 デフォルトでは、このシグナルはプログラムを停止させて、コア・ダンプを作成します。 これは予想通りの動作であり、コンパイラー製品に欠陥があることを示すものではありません。

実行時検査を行うと実行速度が遅くなることがあるので、 個々のプログラムにとって重要な要因は何か (パフォーマンスへの影響、 または、エラーが検出されない場合に間違った結果が出る可能性など) をユーザー側で判別する必要があります。 このオプションを使用するのは、プログラムのテスト中またはデバッグ中のみにする (パフォーマンスがより重要な場合) か、 あるいは、プロダクション・バージョンをコンパイルするときだけ (安全性がより重要な場合) にしてください。

関連情報

-C オプションは、-qhot オプションによって行われる最適化をいくらか抑止します。 コードのデバッグが完了した後に -C オプションを除去し、 -qhot オプションを追加すれば、 より徹底的な最適化を実行することができます。

文字サブストリング式の有効な境界は、-qzerosize オプションの設定によって異なります。 -qzerosize オプションを参照してください。

-qsigtrap オプションおよび 例外ハンドラーのインストールには、SIGTRAP シグナルを検出してプログラムを終了させずに回復する方法が記述されています。

-qcheck は、-C の長い形式です。

-c オプション

構文

-c

完成したオブジェクト・ファイルを、リンク・エディットのために ld コマンドに送りません。 このオプションを指定すると、出力は個々のソース・ファイルの .o ファイルになります。

-c と組み合わせて -o オプションを使用すると、.o ファイルの代わりに別の名前が 選択されます。 この場合、一度にコンパイルできるソース・ファイルは 1 つだけです。

関連情報

-o オプションを参照してください。

-D オプション

構文

-D
DLINES | NODLINES

コンパイラーが桁 1 に D を持つ固定ソース形式行をコンパイルするか、コメントとして扱うかを指定します。

-D を指定すると、桁 1 に D がある固定ソース形式行がコンパイルされます。 デフォルトの動作は、これらの行をコメント行と見なして処理します。 これらは通常、オン、オフにする必要のあるデバッグ・コードの部分に使用されます。

関連情報

-qdlines-D の長い形式です。

-d オプション

構文

-d

cpp によって生成されるプリプロセス後のソース・ファイルを、削除せずに保持します。

規則

このオプションによって生成されるファイルには、元のソース・ファイルの名前から派生した Ffilename.f という形式の名前が付きます。

関連情報

C プリプロセッサーによる Fortran ファイルの引き渡しを参照してください。

-F オプション

構文

-Fconfig_file | -Fconfig_file:stanza | -F:stanza

代替構成ファイルを指定するか、その構成ファイル内で使用するスタンザを指定します (またはその両方を指定します)。

構成ファイルは、さまざまな種類のデフォルト、たとえば特定のコンパイル・ステップのためのオプション、 コンパイラーが必要とするさまざまなファイルの位置を指定します。 デフォルトの構成ファイル (/etc/opt/ibmcmp/xlf/9.1/xlf.cfg) は、インストール時に作成されます。 デフォルトのスタンザは、コンパイラーを呼び出すために使用するコマンドの名前 (xlf90xlf90_rxlf95xlf95_rxlfxlf_rf77、または fort77) によって異なります。

複雑なコンパイル・スクリプトを書かずにコンパイラーの基本機能をカスタマイズできる簡単な別の方法は、 /etc/opt/ibmcmp/xlf/9.1/xlf.cfg に新しいスタンザを追加して、個々のスタンザに異なる名前と異なるセットのデフォルト・コンパイラー・オプションを 指定することです。 多数の分散したコンパイル・スクリプトや makefile よりも、一か所に集めた単一ファイルの方が維持しやすいことが わかります。

適切な -F オプションを指定してコンパイラーを実行することにより、使用するオプションのセットを 選択することができます。 完全な最適化のために 1 セットのオプションを持ち、完全なエラー・チェックなどのためにもう 1 セットの オプションを持つことなどができます。

制限

新しいコンパイラーのリリースがインストールされるたびにデフォルトの構成ファイルが置き換えられるので、 新しいスタンザや新しいコンパイラー・オプションを確実に保管するようにしてください。

 # Use stanza debug in default xlf.cfg.
   xlf95 -F:debug t.f
 
# Use stanza xlf95 in /home/fred/xlf.cfg.
   xlf95 -F/home/fred/xlf.cfg t.f
 
# Use stanza myxlf in /home/fred/xlf.cfg.
   xlf95 -F/home/fred/xlf.cfg:myxlf t.f

関連情報

構成ファイルのカスタマイズでは、構成ファイルの内容と、-F オプションを 使用せずにファイル内の別のスタンザを選択する方法が説明されています。

-g オプション

構文

-g
DBG | NODBG

シンボリック・デバッガーで使用するデバッグ情報を生成します。

関連情報

Fortran 90 または Fortran 95 プログラムのデバッグおよび シンボリック・デバッガー・サポートを参照してください。

-qdbg-g の長い形式です。

-I オプション

構文

-Idir

インクルード・ファイルおよび .mod ファイルの検索パスにディレクトリーを追加します。 XL Fortran が cpp を呼び出す場合、このオプションを指定しておくと、#include ファイルの 検索パスにディレクトリーが追加されます。 コンパイラーは、インクルード・ファイルおよび .mod ファイルのデフォルト・ディレクトリーを検査する前に、 検索パス内の個々のディレクトリーを検査します。 インクルード・ファイルの場合は、INCLUDE 行のファイル名が絶対パスで示されていない場合にのみ、 このパスが使用されます。 #include ファイルの -I オプションについての詳細は、cpp の 資料を参照してください。

引き数

dir は有効なパス名 (たとえば /home/dir/tmp./subdir など) で なければなりません。

規則

検索を行う前に、コンパイラーは dir/ を追加して、ファイル名 と連結します。 複数の -I オプションがコマンド行に指定されると、ファイルはコマンド行上の dir 名の順序で検索されます。

-I オプションで指定した任意のパスを検索した後、以下のディレクトリーが次のような 順序で検索されます。

  1. 現行ディレクトリー (ここでコンパイラーが実行されます)
  2. ソース・ファイルがあるディレクトリー (上記の 1 と違う場合)
  3. /usr/include.

また、コンパイラーは、コンパイラーとともに出荷されるインクルード・ファイルおよび .mod ファイルが入っている /opt/ibmcmp/xlf/9.1/include も検索します。

関連情報

-qmoddir オプションは、モジュールを含んでいるファイルをコンパイルするときに .mod ファイルを特定のディレクトリーに置きます。

-k オプション

構文

-k
FREE(F90)

プログラムが自由ソース形式になることを指定します。

該当する製品レベル

このオプションの意味は、XL Fortran バージョン 2 とは異なっています。 -k の前の動作を実行するには、代わりに -qfree=ibm オプションを使用してください。

関連情報

-qfree オプションおよび「XL Fortran ランゲージ・リファレンス」の『自由ソース形式』を参照してください。

このオプションは -qfree=f90 の短い形式です。

-L オプション

構文

-Ldir

指定されたディレクトリーの -l オプションで指定されたライブラリーを調べます。 デフォルト・ライブラリー以外のライブラリーを /opt/ibmcmp/xlf/9.1/lib または /opt/ibmcmp/xlf/9.1/lib64 で使用する場合は、その他のライブラリーの位置を指し示す 1 つまたは複数の -L オプションを 指定することができます。 また、ライブラリーの検索パスのために LD_LIBRARY_PATH および LD_RUN_PATH 環境変数を 指定することもできます。

規則

このオプションは ld コマンドに直接渡され、XL Fortran によって処理されることはありません。

関連情報

リンクを制御するオプションおよび XL Fortran プログラムのリンクを参照してください。

-l オプション

構文

-lkey

指定されたライブラリー・ファイルを検索します (key はライブラリー libkey.so

または libkey.a を選択します)。

規則

このオプションは ld コマンドに直接渡され、XL Fortran によって処理されることはありません。

関連情報

リンクを制御するオプションおよび XL Fortran プログラムのリンクを参照してください。

-N オプション

構文

-NSbytes
SPILLSIZE(bytes)

内部プログラムのストレージ域のサイズを指定します。

規則

レジスターに保持する変数の数が多過ぎて、 プログラムがレジスターの内容用の一時ストレージを必要とする場合に備えて、 個々のサブプログラムに確保するスタック空間のバイト数を定義します。

デフォルト

デフォルト時には、個々のサブプログラムのスタックには、512 バイトの予備空間が確保されます。

このオプションが必要な場合は、 コンパイル時メッセージでその旨をユーザーに通知します。

関連情報

-qspillsize-NS の長い形式です。

-O オプション

構文

-O[level]
OPTimize[(level)] | NOOPTimize

コンパイル中にコードを最適化するかどうかを指定し、最適化する場合はそのレベルも指定します。

引き数

指定しない場合
ほぼすべての最適化が使用不可になります。 これは、-O0 または -qnoopt を指定するのと同じです。

-O
XL Fortran の各リリースで、-O は、コンパイル速度と 実行時のパフォーマンスの最良のトレードオフを 表す最適化のレベルを使用可能にします。 特定のレベルの最適化が必要な場合は、適切な数値を指定してください。 現在、-O-O2 と同等です。

-O0
ほぼすべての最適化が使用不可になります。 このオプションは、-qnoopt と同じです。

-O1
将来の利用に備えて予約されています。 この形式は、現在は最適化を行わず、無視されます。 過去のリリースでは、-O オプションと -1 オプションの組み合わせと解釈されていました。 この組み合わせは、意図しない結果が生じる場合があります。

-O2
コンパイルに必要な時間やストレージを過度に増やすことなく、改善されたパフォーマンスを提供することを 意図した一連の最適化を行います。

-O3
メモリーとコンパイル時間を大量に使用してさらに最適化を行います。 その結果、-qstrict を指定していない場合は、プログラムのセマンティクスが わずかに変更される場合があります。 コンパイル時にリソースに制限が加わっても、実行時の速度の向上の方を重視したいときに、この最適化を使用してください。

また、このレベルの最適化は -qfloat オプションの設定にも影響を与え、デフォルト時には fltint オプションと rsqrt サブオプションをオンにして、-qmaxmem=-1 を 設定します。

-O4
積極的にソース・プログラムを最適化しますが、生成コードの改善のためにコンパイル時間が余分にかかります。 このオプションは、コンパイル時、またはリンク時に指定することができます。 このオプションをリンク時に指定すると、少なくともメインプログラムを含んでいるファイルのコンパイル時にも 指定しない限り、効果はありません。

-O4 は、次のオプションを暗黙指定します。

-qarch-qtune-qcache の「auto」設定は、 実行環境がコンパイル環境と同じであることを暗黙指定することに注意してください。

このオプションは「最後のオプションが選択される」という競合解決規則に従っており、そのため -O4 によって変更されるオプションを後から変更できます。 -O4 -qarch=com を 指定すると、積極的に内部手順の最適化を行えるだけでなく、コードの移植性を保持することもできます。

-O5
-O4 オプションの機能をすべて使用できるだけでなく、 -qipa=level=2 オプションの機能も使用できます。
注:
-O2-qsmp=omp による高い最適化を 組み合わせると、プロシージャー間分析 (IPA) を含む、追加の 最適化アルゴリズムが呼び出されます。 IPA 最適化は、コンパイラーが追加の fmadd 命令を生成できるようにします。

最適化したアプリケーションと最適化していないアプリケーションで同じ 浮動小数点の正確度を得るには、-qfloat=nomaf コンパイラー・オプションを指定しなければなりません。 -qfloat=nomaf を指定した後でも、依然として浮動小数点の正確度に 差がある場合は、-qstrict コンパイラー・オプションを使用すると、 最適化が原因で浮動小数点のセマンティクスで行われる変更を制御できます。

制限

普通は、コンパイルとリンク・ステップの両方に同じ最適化レベルを使用します。 -O4 あるいは -O5 最適化レベルを使用して最良の実行時パフォーマンスを得るには、 こうすることが重要です。 -O5 レベルの場合、すべてのループ変換 (-qhot オプションを介して指定したように) は、 リンク・ステップで行われます。

最適化のレベルを高くすることで、パフォーマンスがさらに改善される場合と、されない場合があります。 これは、分析を加えてさらに最適化の機会を見い出せるかどうかによって決まります。

-O3 以上の最適化レベルでは、プログラムの動作を変更することがあり、その結果、通常は起こらない 例外が起こる可能性があります。 -qstrict オプションを使用すると、潜在的な変更や例外が起こるのをなくすことができます。

@PROCESS ステートメントで -O オプションを使用する場合は、 最適化レベル 0、2、または 3 のみを使用できます。

最適化とともにコンパイルを行うと、時間とマシン・リソースが他のコンパイルよりも必要になる場合があります。

コンパイラーがプログラムを最適化すればするほど、 プログラムをシンボリック・デバッガーでデバッグするのが難しくなります。

関連情報

-qstrict オプションには、プログラムのセマンティクスを変える場合のある -O3 の影響を取り去る方法が示されています。

-qipa オプション-qhot オプション-qpdf オプションは、一部のプログラムについて、パフォーマンスを向上させる可能性がある追加の最適化をオンにします。

XL Fortran プログラムの最適化には、コンパイラーが使用する最適化技法の技術的な詳細と、 ご使用のコードから最高のパフォーマンスを得るために行う方法が説明されています。

-qOPTimize-O の長い形式です。

-o オプション

構文

-o name

出力オブジェクト・ソース・ファイル、実行可能ソース・ファイル、アセンブラー・ソース・ファイルなどの名前を 指定します。

オブジェクト・ファイルの名前を選択するには、 このオプションを -c オプションと組み合わせて 使用してください。アセンブラー・ソース・ファイルの場合は、 これを -S オプションと組み合わせて使用してください。

デフォルト

実行可能ファイルのデフォルト名は、a.out です。 オブジェクト・ソース・ ファイルまたはアセンブラー・ソース・ファイルのデフォルト名は ソース・ファイルと同じですが、 拡張子.o または .s が付きます。

規則

オプション -c また は -S が指定されている場合を除き、-o オプション は XL Fortran で処理されないで、ld c コマンドに直接渡されます。

xlf95 t.f                    # Produces "a.out"
xlf95 -c t.f                 # Produces "t.o"
xlf95 -o test_program t.f    # Produces "test_program"
xlf95 -S -o t2.s t.f         # Produces "t2.s"

-p オプション

構文

-p[g]

プロファイル用のオブジェクト・ファイルをセットアップします。

-p または -pg はプロファイル用のプログラムを用意します。 プログラムを実行すると、プロファイル情報を使用する gmon.out ファイルが作成されます。 これで、gprof コマンドを使用して実行時プロファイルを作成することができます。

規則

プロファイルのために、コンパイラーは個々のルーチンが呼び出される回数をカウントするモニター・コードを作成します。 コンパイラーは、個々のサブプログラムの始動ルーチンを、 開始時にモニター・サブルーチンを呼び出すルーチンと置き換えます。 プログラムが正常に終了すると、記録された情報が gmon.out ファイルに書き込まれます。


$ xlf95 -pg needs_tuning.f
$ a.out
$ gprof
 .
 .
 .
 
detailed and verbose profiling data
 .
 .
 .
 

関連情報

プロファイルと、 gprof コマンドについて詳しくは、 このコマンドの man ページを 参照してください。

-Q オプション

構文

-Q+names | -Q-names | -Q | -Q!

Fortran 90 または Fortran 95 プロシージャーをインライン化するかどうか、および/または、インライン化しなければ ならないかインライン化してはならない特定のプロシージャーの名前を指定します。 names はプロシージャー名をコロンで区切ったリストです。

規則

デフォルトでは、-Q は内部プロシージャーまたはモジュール・プロシージャーにのみ影響します。 別の有効範囲のプロシージャーへの呼び出しに対するインライン展開をオンにするには、-qipa オプションも使用する必要があります。

引き数

リストなしの -Q オプションは、インライン化される呼び出し数の制限、および結果としての コード・サイズの増加量に従って、適切なすべてのプロシージャーをインライン化します。 +names は、インライン化するプロシージャー名をコロンで区切って指定し、それぞれの プロシージャーに対する限界値を上げます。 -names は、インライン化しないプロシージャー名をコロンで区切って指定します。 これらのオプションを複数指定して、どのプロシージャーが最もインライン化されやすいかを厳密に制御することが できます。

-Q! オプションは、インライン化をオフにします。

プロシージャーは非常に小さくない限り、基本的な -Q オプションによっては インライン化されません。 (正確なカットオフを判別するのは難しいが、通常はわずか数行のソース・ステートメントほど。) -Q+ によって命名されたプロシージャーは、最大では約 20 倍大きくでき、依然としてインライン化できます。

制限

-Q を使用してインライン化を有効にするには、少なくとも -02 の最適化レベルを指定する必要があります。

プロシージャーに対してインライン化を指定した場合、 以下の @PROCESS コンパイラー・ディレクティブである、ALIASALIGNATTRCOMPACTDBGEXTCHKEXTNAMEFLOATFLTTRAPHALTIEEELISTMAXMEMOBJECTOPTIMIZEPHSINFOSPILLSIZESTRICT、および XREF は、 ファイル内の最初のコンパイル単位の前にある場合にのみ有効になります。

xlf95  -O -Q many_small_subprogs.f   # Compiler decides what to inline.
xlf95  -O -Q+bigfunc:hugefunc test.f # Inline even though these are big.
xlf95  -O -Q -Q-only_once pi.f       # Inline except for this one procedure.

関連情報

-qipa オプションおよび サブプログラム呼び出しの最適化を参照してください。

-q32 オプション

関連情報

-q32 オプションを参照してください。

-q64 オプション

関連情報

-q64 オプションを参照してください。

-qalias オプション

構文

-qalias={[no]aryovrlp | [no]intptr | [no]pteovrlp | [no]std}...
ALIAS( {[NO]ARYOVRLP | [NO]INTPTR | [NO]PTEOVRLP | [NO]STD}... )

ある種の別名付けが、プログラムに含まれているかどうかを示します。 コンパイラーは、同じストレージ・ロケーションにさまざまな名前が別名として付けられている可能性がある場合、 最適化の有効範囲を制限します。 考慮しなければならない別名付けの方法に ついては、XL Fortran プログラムの最適化を参照してください。

引き数

aryovrlp | noaryovrlp
コンパイル単位にストレージ関連配列間の配列割り当てが含まれているかどうかを示します。 含まれていない場合は、noaryovrlp を指定してパフォーマンスを改善します。

intptr | nointptr
コンパイル単位に整数 POINTER ステートメントが含まれているかどうかを示します。 含まれている場合、INTPTR を指定してください。

pteovrlp | nopteovrlp
pointee 変数でないデータ・オブジェクトを参照するために pointee 変数を使用できるかどうか、 または 2 つの pointee 変数が同じストレージ・ロケーションを参照できるかどうかを示します。 使用できない場合は、 NOPTEOVRLP を指定します。

std | nostd
コンパイル単位に非標準別名付け (以下を参照) が含まれているかどうかを示します。 含まれている場合、nostd を指定してください。

規則

ストレージ内の項目が複数の名前で参照できる場合は、別名が存在します。 Fortran 90 および Fortran 95 標準では、別名付けを許可する型と許可しない型があります。 以下の状況のように非標準の別名付けが存在すると、XL Fortran コンパイラーが実行する非常に複雑な最適化によって、 好ましくない結果が生じる可能性があります。

該当する製品レベル

-qipa オプションが導入されても、-qalias は必要です。

aryovrlp/noaryovrlp/pteovrlp の例

-qalias=nopteovrlp を使って以下のサブルーチンをコンパイルすると、 さらに効率のよいコードをコンパイラーが生成できる場合があります。 整数ポインター (ptr1 および ptr2) が、動的に割り振られたメモリーだけを指しているため、 -qalias=nopteovrlp を使ってこのサブルーチンをコンパイルすることができます。

  subroutine sub(arg)
      real arg
      pointer(ptr1, pte1)
      pointer(ptr2, pte2)
      real pte1, pte2
 
      ptr1 = malloc(%val(4))
      ptr2 = malloc(%val(4))
      pte1 = arg*arg
      pte2 = int(sqrt(arg))
      arg = pte1 + pte2
      call free(%val(ptr1))
      call free(%val(ptr2))
  end subroutine

コンパイル単位内のほとんどの配列の割り当てが、オーバーラップしない配列に関与しており、 少数の割り当てがストレージ関連配列に関与している場合、 オーバーラップした割り当てを追加ステップでコーディングすれば NOARYOVRLP サブオプションを安全に 使うことができます。

@PROCESS ALIAS(NOARYOVRLP)
! The assertion that no array assignments involve overlapping
! arrays allows the assignment to be done without creating a
! temporary array.
      program test
        real(8) a(100)
        integer :: j=1, k=50, m=51, n=100
 
        a(1:50) = 0.0d0
        a(51:100) = 1.0d0
 
        ! Timing loop to achieve accurate timing results
        do i = 1, 1000000
           a(j:k) = a(m:n)    ! Here is the array assignment
        end do
 
        print *, a
      end program

Fortran では、J または K が更新される場合は別名付けは許可されず、検出されないままで あると、予測不能な結果が起きることがあります。

! We cannot assert that this unit is free
! of array-assignment aliasing because of the assignments below.
      subroutine sub1
      integer a(10), b(10)
      equivalence (a, b(3))
      a = b          ! a and b overlap.
      a = a(10:1:-1) ! The elements of a are reversed.
      end subroutine
 
! When the overlapping assignment is recoded to explicitly use a
! temporary array, the array-assignment aliasing is removed.
! Although ALIAS(NOARYOVRLP) does not speed up this assignment,
! subsequent assignments of non-overlapping arrays in this unit
! are optimized.
@PROCESS ALIAS(NOARYOVRLP)
      subroutine sub2
      integer a(10), b(10), t(10)
      equivalence (a, b(3))
      t = b; a = t
      t = a(10:1:-1); a = t
      end subroutine

SUB1 が呼び出される場合は、JK の間に別名が存在します。 JK は、ストレージ内の同じ項目を参照します。

       CALL SUB1(I,I)
       ...
       SUBROUTINE SUB1(J,K)

以下の例では、別名が存在する可能性があることを -qalias=nostd が示さない限り、 プログラムは 6 の代わりに 5 を J に保管します。

       INTEGER BIG(1000)
       INTEGER SMALL(10)
       COMMON // BIG
       EQUIVALENCE(BIG,SMALL)
       ...
       BIG(500) = 5
       SMALL (I) = 6   ! Where I has the value 500
       J = BIG(500)

制限

このオプションはいくつかの変数の最適化を禁止しているので、それを使用するとパフォーマンスが低下します。

ある非標準または整数 POINTER 別名付けが含まれているプログラムは、正しい -qalias 設定で コンパイルしないと、誤った結果を作成する場合があります。 xlf90xlf90_rxlf95xlf95_rf90、 および f95 コマンドは、プログラムに標準的な 別名 (-qalias=aryovrlp:pteovrlp:std:nointptr) のみが入っているものと 想定しますが、xlf_rxlf、 および f77/fort77 コマンドは整数 POINTER が 存在する可能性がある (-qalias=aryovrlp:pteovrlp:std:intptr) ものと想定します。

-qalign オプション

構文

-qalign={[no]4k|struct={suboption}|bindc={suboption}}
ALIGN({[NO]4K|STRUCT{(suboption)}|BINDC{(suboption)}})

誤って位置合わせされたデータによるパフォーマンス問題を回避する、 ストレージ内でのデータ・オブジェクトの位置合わせを指定します。 [no]4kbindc、 および struct オプションを一緒に指定することができ、 しかも互いに排他的ではありません。 [no]4k オプションは、 基本的には論理ボリューム I/O とディスク・ストライピングの組み合わせに 有効です。

デフォルト

デフォルト設定は -qalign= no4k:struct=natural:bindc=linuxppc です。

引き数

[no]4K
データ・ストライプ I/O でパフォーマンスを向上させるため、 大きなデータ・オブジェクトをページ (4 KB) 境界へ位置合わせするかどうかを指定します。 オブジェクトはオブジェクト・ファイル内でどのように表されるかによって影響を受けます。 影響を受けるオブジェクトは、大きさが 4 KB 以上で静的ストレージまたは bss ストレージにある配列と構造体、 それに、8 KB 以上の CSECT (通常は COMMON ブロック) です。 大きな COMMON ブロック、配列が入っている等価グループ、 構造体は、ページ境界に位置合わせされるため、配列の位置合わせはそれを含んでいるオブジェクト内の配列の位置によって異なります。 非シーケンス派生型の構造体の中では、 コンパイラーは埋め込みを追加して大きな配列をページ境界に位置合わせします。

bindc={suboption}
BIND(C) 属性を持つ XL Fortran 派生型の位置合わせと埋め込みが、対応する XL C 位置合わせオプションを使用してコンパイルされる C 構文型と互換性を持つことを指定します 。互換性のある位置合わせオプションは次のとおりです。
XL Fortran オプション
対応する
XL C オプション
-qalign=bindc=bit_packed -qalign=bit_packed
-qalign=bindc=linuxppc -qalign=linuxppc

struct={suboption}
struct オプションは、レコード構造体を使用して、宣言された派生型のオブジェクトあるいは配列の保管方法と 埋め込みをそれらのコンポーネント間で使用するかどうかを指定します。 すべてのプログラム単位は、-qalign=struct オプションと同じ設定を使用してコンパイルする必要があります。 使用できるサブオプションは、以下の 3 つです。

packed
packed サブオプションを struct オプションで指定すると、 派生型のオブジェクトは、%FILL コンポーネントで表される任意の埋め込みを除いて、コンポーネント間で 埋め込みを行わずに保管されます。ストレージ形式は、標準派生型宣言を使用して宣言されていた 派生型を持つシーケンス構造体の結果と同じです。

natural
natural サブオプションを struct オプションで指定すると、派生型のオブジェクトは、 その他にストレージの関連付けを要求していなければ、自然の位置合わせ境界で保管されるコンポーネントを 十分埋め込んで保管されます。 下の表の左側の列にあるオブジェクト・タイプの自然の位置合わせ境界は、テーブルの右側の列にある対応する項目の バイト数の倍数を示しています。


自然の位置合わせ (バイトの倍数)
INTEGER(1), LOGICAL(1), BYTE, CHARACTER 1
INTEGER(2), LOGICAL(2) 2
INTEGER(4), LOGICAL(4), REAL(4) 4
INTEGER(8), LOGICAL(8), REAL(8), COMPLEX(4) 8
REAL(16), COMPLEX(8), COMPLEX(16) 16
派生 そのコンポーネントの最大位置合わせ

natural サブオプションを struct オプションで指定すると、 派生型の配列はその他にストレージの関連付けを要求していないなら、自然の位置合わせ境界で 各エレメントの各コンポーネントが保管されるように保管されます。

port

port サブオプションを struct オプションで指定すると、

  • ストレージ埋め込みは、上記の natural サブオプションで説明したのと同じになります。 ただし、型 complex の位置合わせが、同じ種類の型 real のコンポーネントの位置あわせと同じ場合を 除きます。
  • 直後に共用体が続くオブジェクトの埋め込みは、その共用体内の各マップで、最初のマップ・コンポーネントの 始めに挿入されます。

制限

port サブオプションは AUTOMATIC 属性を持つ配列または構造体、 あるいは動的に割り振られる配列には影響を及ぼしません。 このオプションは非シーケンス派生型のレイアウトを変更する場合があるので、 不定様式ファイルを使用してそのようなオブジェクトを読み書きするプログラムをコンパイルする場合は、 すべてのソース・ファイルについてこのオプションには同じ設定を使用してください。

関連情報

配列が AUTOMATIC 属性を持つかどうか、また、 そのために -qalign=4k によって影響を受けないかどうかは、 -qattr オプションのリストで AUTOMATIC キーワードまたは CONTROLLED AUTOMATIC キーワードを探せば知ることができます。このリストには、データ・オブジェクトのオフセットも示されています。

-qarch オプション

構文

-qarch=architecture

コンパイラーが生成する命令を制御します。 デフォルトを変更すると、 パフォーマンスを向上させることができますが、 特定のマシンでしか実行できないコードが生成される可能性があります。

一般に、-qarch オプションを指定すると、コンパイルで特定のアーキテクチャーをターゲットにすることができます。 特定の -qarch 設定では、コンパイラーは特定の一致する -qtune 設定にデフォルト指定されて、さらにパフォーマンスを向上させることができます。 その結果生成されるコードはほかのアーキテクチャーでは稼動しない可能性がありますが、選択した アーキテクチャーには最高のパフォーマンスを提供します。 複数のアーキテクチャーで実行可能なコードを生成するには、 アーキテクチャーのグループをサポートする -qarch サブオプション (comppc、 または ppc64 など) を指定します。 これにより、すべてのサポートされているアーキテクチャー、PowerPC、または 64 ビット PowerPC アーキテクチャー上でそれぞれコードを生成します。 -qarch サブオプションをグループ引き数とともに指定すると、-qtuneauto として 指定するか、またはそのグループ内の特定アーキテクチャーを指定することができます。 -qtune=auto の場合、コンパイラーは、-qarch サブオプションで指定されたグループ内の すべてのアーキテクチャー上で稼動するコードを生成しますが、コンパイルに使用したマシンのアーキテクチャー上で 最高のパフォーマンスが得られる命令シーケンスを選択します。 代わりに、特定アーキテクチャーをパフォーマンス・チューニングのターゲットとすることもできます。

引き数

注:
Y-HPC の場合、アーキテクチャーに対して有効な選択項目は -qarch=auto および -qarch=ppc970 です。 デフォルトは -qarch=ppc970 です。

Y-HPC 以外の場合、選択項目は 次のとおりです。

auto
コンパイルを実行しているマシンの特定のアーキテクチャーを自動的に検出します。 実行環境はコンパイル環境と同じであると見なされます。

com
コンパイラーが生成した実行可能ファイルは、すべてのマシンに共通の 命令のみが入っているため、コンパイラーが サポートするどのハードウェア・プラットフォームでも実行できます。 この選択は、デフォルトと同じ -qarch=ppc64grsq になります。

-q64 オプションと -qarch=com オプションを 同時に指定した場合、ターゲット・プラットフォームは 64 ビットになり、-qarch オプションは サイレントに ppc64grsq にアップグレードされます。 命令セットは、すべての 64 ビット・マシンに共通の命令に制限されます。 詳細については、64 ビット環境での XL Fortran の使用を 参照してください。

ppc
実行可能ファイルは、 RS64II、RS64III、 POWER3、POWER4、POWER5、PowerPC 970、および将来の PowerPC チップをベースにしたプラットフォームを含む、任意の PowerPC ハードウェア・プラットフォームで 稼動させることできます。 コンパイラー・オプション -q64 を指定する場合、ターゲット・プラットフォームは 64 ビットの PowerPC になり、コンパイラーはサイレントに -qarch 設定を ppc64grsq に アップグレードします。 詳細については、64 ビット環境での XL Fortran の使用を参照してください。

ppcgr
32 ビット・モードでは、PowerPC ハードウェア・プラットフォーム用のオプションのグラフィック命令を 含む可能性のあるオブジェクト・コードを生成します。

64 ビット・モードでは、64 ビット PowerPC プラットフォームでは実行されるが 32 ビットのみのプラットフォームでは 実行されない、オプションのグラフィックス命令を含むオブジェクト・コードを 生成し、-qarch オプションはサイレントに -qarch=ppc64grsq にアップグレードされます。

ppc64
実行可能ファイルは、任意の 64 ビット PowerPC ハードウェア・プラットフォーム上で実行できます。 このサブオプションは、32 ビット・モードでのコンパイル時に選択できますが、 その結果のオブジェクト・コードには、64 ビット・モードを サポートしない PowerPC プラットフォームで実行したときには 認識されないか、または動作が異なる命令が含まれる可能性があります。

ppc64gr
実行可能ファイルは、オプションのグラフィック命令をサポートする任意の 64 ビット PowerPC ハードウェア・プラットフォーム上で実行できます。

ppc64grsq
実行可能ファイルは、オプションのグラフィック命令および 平方根命令をサポートする任意の 64 ビット PowerPC ハードウェア・プラットフォーム上で 実行できます。 これはデフォルト・オプションです。

rs64b
実行可能ファイルは、任意の RS64II マシン上で実行できます。

rs64c
実行可能ファイルは、任意の RS64III マシン上で実行できます。

pwr3
実行可能ファイルは、任意の POWER3、POWER4、POWER5、または PowerPC 970 ハードウェア・プラットフォーム上で実行できます。 前のリリースでは、pwr3 設定は、POWER3 および POWER4 の プロセッサー・グループをターゲットにするために使用されました。 コンパイル・ターゲットをより一般的なプロセッサー・グループにするには、ppc64grsq 設定を使用して、POWER3、POWER4、POWER5、または PowerPC 970 プロセッサー・グループを含めます。 これらのプラットフォーム用の実行可能ファイルはほかの PowerPC システム上で使用できない命令を含んでいる場合があると、それらのシステムとの互換性がなくなることが あります。

pwr4
実行可能ファイルは、任意の POWER4、POWER5、 または PowerPC 970 ハードウェア・プラットフォーム上で実行できます。 -qarch=pwr4 を使用すると、以前の PowerPC インプリメンテーションでは稼動しない 2 進のものになります。

pwr5
実行可能ファイルは、任意の POWER5 ハードウェア・ プラットフォーム上で実行できます。

ppc970
実行可能ファイルは、任意の PowerPC 970 ハードウェア・プラットフォーム上で 実行できます。
注:
-qarch 設定は、-qtune 設定に対して許可される選択値とデフォルトを決定します。 -qarch および -qtune を使用して、プログラムを特定マシンで実行することができます。

プログラムを特定マシン上でのみ稼動させたい場合は、-qarch オプションを使用して、該当するアーキテクチャーに特定の コードを生成するようにコンパイラーに指示することができます。 これにより、コンパイラーは、マシン特定の命令を活用してパフォーマンスを向上させることができます。 -qarch オプションは、特定のチップ・モデルを指定する引き数を提供します。 たとえば、-qarch=pwr3 を指定して、プログラムが POWER3 ハードウェア・プラットフォームで実行されるように指定することができます。

所定のアプリケーション・プログラムに対しては、それぞれのソース・ファイルを コンパイルするときに必ず同じ -qarch 設定を指定してください。

さらに、-qcache および -qhot オプションの ようなその他のパフォーマンス関連オプションを使用して、特定のマシンを対象とした プログラムのパフォーマンスを向上させることができます。

以下の指針を使用して、このオプションを使用するかどうかを決定する一助としてください。

その他の考慮事項

PowerPC 命令セットには、特定のハードウェア・プラットフォームにインプリメントされる 2 つのオプショナル 命令グループが入っていますが、これらは必須ではありません。 この 2 つのグループとは、グラフィックス命令グループと sqrt 命令グループです。 特定の -qarch オプションを指定してコンパイルされるコード (そのすべては特定の PowerPC マシンを参照する) は、 同じ命令グループがある、任意の同等な PowerPC マシン上で実行されます。 以下の表では、さまざまな PowerPC マシンに組み込まれる命令グループを示します。


表 12. PowerPC プラットフォームの命令グループ

プロセッサー グラフィックス・グループ sqrt グループ 64 ビット
ppc なし なし なし
ppcgr あり なし なし
ppc64 なし なし あり
ppc64gr あり なし あり
ppc64grsq あり あり あり
rs64b あり あり あり
rs64c あり あり あり
pwr3 あり あり あり
pwr4 あり あり あり
pwr5 あり あり あり
ppc970 あり あり あり

関連情報

特定アーキテクチャーのためのコンパイル方法-qtune オプション、および -qcache オプションを参照してください。

-qassert オプション

構文

-qassert={deps | nodeps | itercnt=n}

最適化を微調整するのに役立つファイルの特性に関する情報を指定します。

引き数

nodeps
ループ送り依存性がないことを指定します。

itercnt
不明ループの反復カウント値を指定します。

関連情報

このようなアサーションを使用する際の背景情報および指示については、 ループ変換用のコスト・モデルを参照してください。 また、「XL Fortran ランゲージ・リファレンス」で ASSERT ディレクティブの 説明も参照してください。

-qattr オプション

構文

-qattr[=full] | -qnoattr
ATTR[(FULL)] | NOATTR

属性の属性コンポーネントおよびリストの相互参照セクションを作成するかどうかを指定します。

引き数

-qattr だけを指定すると、使用される識別子だけが報告されます。 -qattr=full が指定されると、参照されてもされなくても、すべての識別子が報告されます。

-qattr=full の後に -qattr が指定されると、完全な属性リストが依然として作成されます。

属性リストを使用して、正しく指定されていない属性が起こす問題のデバッグを支援することができます。 あるいは、新しいコードを書いている際に各オブジェクトの属性の覚え書きとして使用することもできます。

関連情報

リストとメッセージを制御するオプションおよび 属性および相互参照セクションを参照してください。

-qautodbl オプション

構文

-qautodbl=setting
AUTODBL(setting)

互換性の利点

単精度浮動小数点計算を倍精度へ自動的に変換する方法、 そして倍精度計算を拡張精度へ自動的に変換する方法を提供します。

ストレージの関係が重要で、XL Fortran のデフォルトとは異なっている場合に、コードを移植する際にこの オプションを使用すると便利なことがわかります。 たとえば、IBM VS FORTRAN コンパイラー用に書かれたプログラムは、そのコンパイラーの同等のオプションを 使用することができます。

サブオプション

-qautodbl サブオプションを使用して、プロモートまたは埋め込みが行われるオブジェクト間、 あるいはプロモートまたは埋め込みが行われないオブジェクト間のストレージの関係を保持するための 別の方法を選択します。

使用できる設定は次のとおりです。

none
ストレージを共用しているオブジェクトのプロモートまたは埋め込みを行いません。 この設定はデフォルトです。

dbl4
単精度の浮動小数点オブジェクト (サイズは 4 バイト)、または同様なオブジェクトから構成されている 浮動小数点オブジェクト (たとえば COMPLEX または配列オブジェクト) をプロモートします。

このサブオプションは、リンク中に libxlfpmt4.a ライブラリーを必要とします。

dbl8
倍精度の浮動小数点オブジェクト (サイズは 8 バイト)、または同様なオブジェクトから構成されている 浮動小数点オブジェクトをプロモートします。

このサブオプションは、リンク中に libxlfpmt8.a ライブラリーを必要とします。

dbl
dbl4 が実行するプロモーションと dbl8 が実行するプロモーションを結合します。

このサブオプションは、リンク中に libxlfpmt4.a および libxlfpmt8.a ライブラリーを必要とします。

dblpad4
dbl4 と同じプロモーションを実行し、ストレージをプロモートしたオブジェクトと共用できる場合は、 他の型のオブジェクト (CHARACTER は除く) の埋め込みも行います。

このサブオプションは、リンク中に libxlfpmt4.a および libxlfpad.a ライブラリーを必要とします。

dblpad8
dbl8 と同じプロモーションを実行し、ストレージをプロモートしたオブジェクトと共用できる場合は、 他の型のオブジェクト (CHARACTER は除く) の埋め込みも行います。

このサブオプションは、リンク中に libxlfpmt8.a および libxlfpad.a ライブラリーを必要とします。

dblpad
dbl4dbl8 が行ったプロモーションを結合し、ストレージをプロモートした オブジェクトと共用できる場合は、他の型のオブジェクト (CHARACTER は除く) の埋め込みも行います。

このサブオプションは、リンク中に libxlfpmt4.alibxlfpmt8.a および libxlfpad.a ライブラリーを必要とします。

リンク

リンク中に適切な -qautodbl オプションが指定されると、プログラムは必要なエクストラ・ライブラリーと 自動的にリンクされます。 自動的にリンクされない場合は、手操作でリンクする必要があります。

使用法

dbl4 または dblpad4 を使用することにより、REAL(8) オブジェクトを REAL(16) オブジェクトに変換せずに、REAL(4) のサイズを増やすことができます。 REAL(16) は、計算処理の点で、REAL(8) ほど効率がよくありません。

-qautodbl オプションは、プロモートされる引き数を持つ組み込み機能への呼び出しを処理します。 必要な場合は、正しい高精度の組み込み関数が代わりに使用されます。 たとえば、単精度項目がプロモートされている場合は、プログラム内で SIN を呼び出すと、それが 自動的に DSIN への呼び出しになります。

制限

関連情報

プロモーション、埋め込み、ストレージ/値の関係に関する背景情報を得たり、ソースの例を参照するには、 -qautodbl のプロモーションと埋め込みの実行の詳細を参照してください。

-qrealsize オプションには、-qautodbl のように機能しますが、デフォルトの kind 型の項目にのみ 影響を与え、埋め込みはまったく行わない、別のオプションについて説明してあります。 -qrealsize および -qautodbl オプションの両方を指定する場合、-qautodbl だけが 有効になります。 また、-qautodbl は、-qdpc オプションを オーバーライドします。

-qbigdata オプション

構文

-qbigdata | -qnobigdata
 

32 ビット・モードでは、初期化されたデータの 16 MB を超えるプログラム (gcc 制限) および 共用ライブラリーの呼び出しルーチン (like open、close、printf など) 用に、このコンパイラー・オプションを使用します。

-qcache オプション

構文

-qcache=
{
   assoc=number |
   auto |
   cost=cycles |
   level=level |
   line=bytes |
   size=Kbytes |
   type={C|c|D|d|I|i}
}[:...]

特定の実行マシンに対して、キャッシュ構成を指定します。 コンパイラーはこの情報を使用して、 特に、データ・キャッシュに適合するデータ量に限定して処理するように構造化 (あるいはブロック化) 可能なループ演算の場合に、 プログラムのパフォーマンスを調整します。

プログラムの実行場所となるシステムの種類が明確で、かつこのシステムの命令/データ・キャッシュの構成が、 デフォルトの構成 (-qtune 設定による) とは異なる場合は、キャッシュの特性を正確に指定することにより、 コンパイラーは、特定のキャッシュ関連最適化によって得られる利点をさらに正確に算出できるようになります。

-qcache オプションを有効にするには、level サブオプションと type サブオプションを 組み込み、最低でもレベル 2 の -O を指定する必要があります。

指針

サブオプション

assoc=number
キャッシュのセット連想度を指定します。

0
直接マップされるキャッシュ

1
完全に連想のキャッシュ

n > 1
n 方式のセット連想キャッシュ

auto
コンパイルを実行しているマシンの特定のキャッシュ構成を自動的に検出します。 実行環境はコンパイル環境と同じであると見なされます。

cost=cycles
余分なキャッシュを脱落させる最適化を実行するかどうかをコンパイラーが判別できるように、 キャッシュ・ミスの結果生じるパフォーマンス・ペナルティーを指定します。

level=level
どのレベルのキャッシュが影響を受けるかを指定します。

1
基本キャッシュ

2
マシンがレベル 2 のキャッシュを持っていない場合は、 レベル 2 のキャッシュ、またはテーブル・ルックアサイド・バッファー (TLB)

3
レベル 2 のキャッシュを持っているマシンでは TLB

他のレベルも使用できますが、現在のところ未定義です。システムに複数のレベルのキャッシュがある場合は、 別の -qcache オプションを使用して各レベルを説明してください。

line=bytes
キャッシュの行サイズを指定します。

size=Kbytes
このキャッシュの合計サイズを指定します。

type={C|c|D|d|I|i}
設定が適用されるキャッシュのタイプを指定します。

制限

キャッシュ構成に対して誤った値を指定したり、 構成の異なるマシン上でプログラムを実行した場合は、 プログラムの実行速度は遅くなりますが、正しく機能します。 キャッシュ・サイズの正確な値がわからない場合は、無難な推定値を使用してください。

現在、-qcache オプションが効果を持つのは、-qhot オプションも指定された場合だけです。

システムが、命令用とデータ・レベル 1 の結合キャッシュを持ち、 キャッシュが双方向連結で、 サイズが 8 KB で、64 バイトのキャッシュ・ラインを持つ場合にシステムのパフォーマンスを調整するには、次のようにします。

  xlf95 -O3 -qhot -qcache=type=c:level=1:size=8:line=64:assoc=2 file.f

2 つのレベルのデータ・キャッシュを持つシステムのパフォーマンスを調整するには、次のように -qcache オプションを 2 つ使用します。

  xlf95 -O3 -qhot -qcache=type=D:level=1:size=256:line=256:assoc=4 ¥
        -qcache=type=D:level=2:size=512:line=256:assoc=2 file.f

2 つのタイプのキャッシュを持つシステムのパフォーマンスを調整する場合も、次のように -qcache オプションを 2 つ使用します。

  xlf95 -O3 -qhot -qcache=type=D:level=1:size=256:line=256:assoc=4 ¥
        -qcache=type=I:level=1:size=512:line=256:assoc=2 file.f

関連情報

-qtune オプション-qarch オプション、および -qhot オプションを参照してください。

-qcclines オプション

構文

-qcclines | -qnocclines
CCLINES |  NOCCLINES

コンパイラーが条件付きコンパイル行を、固定ソース形式および F90 自由ソース形式で認識するかどうかを 決定します。 IBM 自由ソース形式はサポートされていません。

デフォルト

デフォルトは -qsmp=omp オプションをオンにした場合は -qcclines です。 オフにした場合、デフォルトは -qnocclines です。

関連情報

XL Fortran ランゲージ・リファレンス」の言語エレメントの節の『条件付きコンパイル』を参照してください。

-qcheck オプション

構文

-qcheck | -qnocheck
CHECK | NOCHECK

-qcheck は、-C オプションの長い形式です。

-qci オプション

構文

-qci=numbers
CI(numbers)

処理する INCLUDE 行の識別番号 (1 から 255) を指定します。 INCLUDE 行の終わりに数字が入っている場合は、 -qci オプションでその番号が指定されている場合のみ、そのファイルが含まれます。 認識される識別番号のセットは、-qci オプションのすべてのオカレンスに対して指定されているすべての識別番号のユニオンです。

このオプションを使用すると、一種の条件付きコンパイルができます。 あまり使用しないコード (たとえば WRITE ステートメントのデバッグ、 追加のエラー・チェック・コード、XLF 固有のコード) を別のファイルに入れて、 それらを処理するかどうかを個々のコンパイルに対して決定することができるからです。

REAL X /1.0/
INCLUDE 'print_all_variables.f' 1
X = 2.5
INCLUDE 'print_all_variables.f' 1
INCLUDE 'test_value_of_x.f' 2
END

この例では、-qci オプションを指定しないでコンパイルすると、 単に X が宣言されて、それに値が割り当てられます。 -qci=1 を指定してコンパイルすると、 インクルード・ファイルの 2 つのインスタンスが含まれ、 -qci=1:2 を指定してコンパイルすると、 両方のインクルード・ファイルが含まれます。

制限

INCLUDE 行の任意の数字は広く行き渡っている Fortran 機能ではないので、 それを使用すると、プログラムの移植性が制限される場合があります。

関連情報

XL Fortran ランゲージ・リファレンス」の INCLUDE ディレクティブについての節を参照してください。

-qcompact オプション

構文

-qcompact | -qnocompact
COMPACT | NOCOMPACT

コード・サイズを大きくする最適化を抑制します。

デフォルトでは、ループ・アンロールおよび配列ベクトル化など、 パフォーマンスの改善のために最適化プログラムが使用する手法によって、 プログラムが大きくなってしまう場合があります。 ストレージが限られているシステムの場合は、-qcompact を使用して、 発生する拡張を少なくすることができます。 プログラムに多数のループや配列言語構文がある場合、-qcompact オプションを使用すると、アプリケーション全体のパフォーマンスに影響が出ます。 このオプションの使用を、最適化による影響が 出ないプログラム部分だけに制限することができます。

規則

-qcompact を有効にしても、その他の最適化オプションは 依然として機能しています。 コード・サイズは、最適化中に自動的に行われるコードの複製を制限することで 縮小されます。

-qcr オプション

構文

-qcr | -qnocr
 

コンパイラーが CR (復帰) 文字をどのように解釈するかを制御することができます。 デフォルトでは、CR (16 進値 X'0d') または LF (16 進値 X'0a') 文字、あるいは CRLF (16 進値 X'0d0a') の組み合わせは、ソース・ファイルでの行の終了を示します。 これにより、Mac OS または DOS/Windows のエディターを使用して作成したコードをコンパイルできます。

-qnocr を指定した場合、コンパイラーは LF 文字のみを行の終了文字として認識します。 CR 文字を行の終了以外の目的に使用する場合は、-qnocr を指定しなければなりません。

-qctyplss オプション

構文

-qctyplss[(=[no]arg)] | -qnoctyplss
CTYPLSS[([NO]ARG)]| NOCTYPLSS
 

型が指定されていない定数を使用できる場合に、必ず文字定数式が許可されるかどうかを指定します。 他のプラットフォームからプログラムを移植するとき、 この言語拡張機能が必要となる場合があります。

引き数

arg | noarg
-qctyplss の動作を保存するサブオプション。 さらに arg は、実際の引き数として使用されるホレリス定数が、実際の引き数を整数として扱われることを 指定します。

規則

-qctyplss を指定すると、文字定数式はホレリス定数であるかのように扱われ、したがって論理式および 演算式で使用することができます。

制限

例 1 : 次の例では、コンパイラー・オプション -qctyplss を指定すると、文字定数式を使用することができます。

@PROCESS CTYPLSS
      INTEGER I,J
      INTEGER, PARAMETER :: K(1) = (/97/)
      CHARACTER, PARAMETER :: C(1) = (/'A'/)
 
      I = 4HABCD          ! Hollerith constant
      J = 'ABCD'          ! I and J have the same bit representation
 
! These calls are to routines in other languages.
      CALL SUB(%VAL('A')) ! Equivalent to CALL SUB(97)
      CALL SUB(%VAL(1HA)) ! Equivalent to CALL SUB(1627389952)"
 
! These statements are not allowed because of the constant-array
! restriction.
!     I = C // C
!     I = C(1)
!     I = CHAR(K(1))
      END

例 2: 次の例では、変数 J は、参照用に渡されます。 サブオプション arg は、ホレリス定数が実整数引き数であるかのように渡されることを指定します。

@PROCESS CTYPLSS(ARG)
      INTEGER :: J
 
      J = 3HIBM
! These calls are to routines in other languages.
      CALL SUB(J)
      CALL SUB(3HIBM)   ! The Hollerith constant is passed as if
                        ! it were an integer actual argument
 

関連情報

XL Fortran ランゲージ・リファレンス」の『ホレリス定数』と、参照または値による引き数の引き渡しを 参照してください。

-qdbg オプション

構文

-qdbg | -qnodbg
DBG | NODBG

-qdbg-g オプションの長い形式です。

-qddim オプション

構文

-qddim | -qnoddim
DDIM | NODDIM

配列が参照されるたびに、pointee 配列の境界が再評価されること を指定し、pointee 配列用の境界式に対する制約事項をいくつか除去します。

規則

デフォルト時には、pointee 配列のみが変数名を含む次元宣言子を持つことができ (その配列が サブプログラム内にある場合)、次元宣言子の変数は仮引き数、共通ブロックのメンバー、使用関連付けまたは ホスト関連付けでなければなりません。 次元のサイズは、サブプログラムに対する入り口で計算され、サブプログラムの実行中は一定の状態に保たれます。

-qddim オプションでは、次のとおりです。

@PROCESS DDIM
INTEGER PTE, N, ARRAY(10)
POINTER (P, PTE(N))
DO I=1, 10
   ARRAY(I)=I
END DO
N = 5
P = LOC(ARRAY(2))
PRINT *, PTE   ! Print elements 2 through 6.
N = 7          ! Increase the size.
PRINT *, PTE   ! Print elements 2 through 8.
END

-qdirective オプション

構文

-qdirective[=directive_list] | -qnodirective[=directive_list]
DIRECTIVE[(directive_list)] | NODIRECTIVE[(directive_list)]

トリガー定数として知られる文字列を指定します。 これらの文字列は、コメント行をコンパイラーのコメント・ディレクティブとして識別します。

背景情報

コンパイラーのコメント・ディレクティブは、Fortran ステートメントではない行ですが、コンパイラーがそのように認識し、それに従って動作します。 最大限の柔軟性を持たせるようにするため、将来の XL Fortran コンパイラーに付属する可能性がある新しい ディレクティブは、コメント行に含められます。 これにより、他のコンパイラーがそれらのディレクティブを認識しなければ、移植性の問題を避けられます。

デフォルト

コンパイラーは、デフォルト時にはトリガー定数 IBM* を認識します。 -qsmp の指定には暗黙的に -qdirective=smp¥$:¥$omp:ibmp が 含まれており、デフォルトで、トリガー定数 SMP$$OMP、および IBMP もオンに なります。 -qsmp=omp を指定する場合、コンパイラーはその時点までに指定したすべてのトリガー定数を無視し、 $OMP トリガー定数だけを認識します。 -qthreaded の指定には暗黙的に -qdirective=ibmt が含まれており、 デフォルト時にはトリガー定数 IBMT もオンになります。

引き数

directive_list を持たない -qnodirective オプションは、 以前に指定したディレクティブ識別子をすべてオフにします。 directive_list を持っている場合は、選択された識別子だけをオフにします。

directive_list を持たない -qdirective は以前の -qnodirective によってオフにされている場合でも、 デフォルトのトリガー定数 IBM* をオンにします。

! This program is written in Fortran free source form.
PROGRAM DIRECTV
INTEGER A, B, C, D, E, F
A = 1 ! Begin in free source form.
B = 2
!OLDSTYLE SOURCEFORM(FIXED)
! Switch to fixed source form for this include file.
      INCLUDE 'set_c_and_d.inc'
!IBM* SOURCEFORM(FREE)
! Switch back to free source form.
E = 5
F = 6
END

この例の場合は、-qdirective=oldstyle オプションを指定してコンパイルし、INCLUDE 行の 前の SOURCEFORM ディレクティブをコンパイラーが必ず認識するようにします。 インクルード・ファイル行を処理すると、SOURCEFORM(FREE) ステートメントの後は、プログラムは自由形式ソースに戻ります。

関連情報

XL Fortran ランゲージ・リファレンス」の SOURCEFORM ディレクティブについての節を参照してください。

誤ったトリガー定数を使用すると、警告メッセージまたはエラー・メッセージ、あるいはその両方が生成されることがあります。 適切な関連するトリガー定数については、「XL Fortran ランゲージ・リファレンス」の『ディレクティブ』の 節にある特定のディレクティブ・ステートメントを確認してください。

-qdirectstorage オプション

構文

-qdirectstorage | -qnodirectstorage
 

指定のコンパイル単位がライトスルー使用可能またはキャッシュ使用禁止のストレージを参照できることを コンパイラーに通知します。

このオプションは慎重に使用してください。 メモリーとキャッシュ・ブロックの作業に精通し、最適なパフォーマンスを得るためにアプリケーションを チューニングすることができるプログラマーを対象としています。 すべての PowerPC のキャッシュ編成のインプリメンテーションでプログラムが正しく実行されるためには、 プログラマーは、命令キャッシュとデータ・キャッシュが別々に存在することを想定し、その別個の キャッシュ・モデルに対してプログラムを作成する必要があります。

注:
-qdirectstorage オプションを CACHE_ZERO ディレクティブとともに使用すると、プログラムに障害が生じるか、または間違った結果が生成される可能性があります。

-qdlines オプション

構文

-qdlines | -qnodlines
DLINES | NODLINES

-qdlines-D オプションの長い形式です。

-qdpc オプション

構文

-qdpc[=e] | -qnodpc
DPC[(E)] | NODPC

実定数を DOUBLE PRECISION 変数に割り当てるときに、 最大の精度を得られるように実定数の精度を高めます。 他のプラットフォームからプログラムを移植するとき、 この言語拡張機能が必要となる場合があります。

規則

-qdpc を指定すると、すべての基本実定数 (たとえば 1.1) が倍精度定数として処理されます。 コンパイラーは、これを指定しないと DOUBLE PRECISION 変数への割り当て中に失われてしまう精度を 持つ数字を保存します。 -qdpc=e を指定すると、指数 e を持つ定数も含め、すべての単精度定数が倍精度定数として 処理されます。

このオプションは、kind 型付きパラメーターが指定されている定数には影響を与えません。

@process nodpc
        subroutine nodpc
        real x
        double precision y
        data x /1.000000000001/  ! The trailing digit is lost
        data y /1.000000000001/  ! The trailing digit is lost
 
        print *, x, y, x .eq. y  ! So x is considered equal to y
        end
 
@process dpc
        subroutine dpc
        real x
        double precision y
        data x /1.000000000001/  ! The trailing digit is lost
        data y /1.000000000001/  ! The trailing digit is preserved
 
        print *, x, y, x .eq. y  ! So x and y are considered different
        end
 
        program testdpc
        call nodpc
        call dpc
        end

コンパイルされると、このプログラムは次のように印刷して、

   1.000000000       1.00000000000000000     T
   1.000000000       1.00000000000100009     F

-qdpc によって余分な精度が保持されていることを示します。

関連情報

-qautodbl オプション-qrealsize オプションは、さらに汎用的なオプションで、-qdpc が実行することも実行できます。 これらのオプションのいずれかが指定されている場合は、-qdpc は効力を持ちません。

-qenablevmx オプション

構文

-qenablevmx | -qnoenablevmx

コンパイラーに対して、VMX (Vector Multimedia eXtension) 命令を生成するように指示します。 -qhot=simd および -qarch=ppc970 の各コンパイラー・オプションも指定する必要があります。

関連情報

-qarch オプション および -qhot オプション を参照してください。

-qescape オプション

構文

-qescape | -qnoescape
ESCAPE | NOESCAPE

文字ストリング、ホレリス定数、H 編集記述子、ストリング編集記述子で、 円記号がどのように扱われるかを指定します。 円記号は、エスケープ文字または円記号文字として扱うことができます。 他のプラットフォームからプログラムを移植するとき、 この言語拡張機能が必要となる場合があります。

デフォルト

デフォルト時には、円記号はこれらのコンテキスト内のエスケープ文字であると解釈されます。 -qnoescape を指定した場合、円記号は円記号文字として扱われます。

デフォルト設定は、次のようなことを行う場合に便利です。

変更されないままで渡される円記号文字に依存するコードを書いたり移植したりする場合は、-qnoescape を指定して、特殊な解釈が行われないようにします。 また、デフォルト設定下の単一の円記号文字を表すのに、¥¥ を書くこともできます。


$ # Demonstrate how backslashes can affect the output
$ cat escape.f
       PRINT *,'a¥bcde¥fg'
       END
$ xlf95 escape.f
** _main === End of Compilation 1 ===
1501-510  Compilation successful for file escape.f.
$ a.out
cde
    g
$ xlf95 -qnoescape escape.f
** _main === End of Compilation 1 ===
1501-510  Compilation successful for file escape.f.
 $ a.out
  a¥bcde¥fg

デフォルト設定 -qescape による最初のコンパイルで、バックスペース文字として ¥b が印刷され、用紙送り文字として ¥f が印刷されます。 -qnoescape オプションを指定すると、他の文字と同じように円記号が印刷されます。

関連情報

XL Fortran が認識するエスケープ・シーケンスのリストは、表 20 に記載されています。

-qessl オプション

構文

-qessl | -qnoessl

Fortran 90 組み込みプロシージャーの代わりに科学技術計算サブルーチン・ライブラリー (ESSL) ルーチンを使用することが できます。

ESSL は、サブルーチンの集まりで、各種科学技術計算アプリケーション用に幅広い数学関数を提供します。 これらのサブルーチンでは、特定のアーキテクチャーでパフォーマンス調整が行われます。 Fortran 90 組み込みプロシージャーの中には ESSL と類似のものがあります。 これらの Fortran 90 組み込みプロシージャーを ESSL とリンクするとパフォーマンスが向上します。 この場合、Fortran 90 組み込みプロシージャーのインターフェースを保持することができ、 ESSL を使用してパフォーマンスを向上させる追加の利点を得ることができます。

規則

-lessl でリンクするときは、ESSL シリアル・ライブラリーを使用します。 -lesslsmp でリンクするときは、ESSL SMP ライブラリーを使用します。

-qessl でコードをコンパイルするときは常に、-lessl または -lesslsmp を使用する必要があります。 ESSL は、V4.1.1 以降が推奨されます。 ライブラリーは、32 ビット環境と 64 ビット環境をサポートします。

また、libessl.so および libesslsmp.solibxlf90_r.so に依存しているため、リンク時に デフォルトとして libxlf90_r.so を使用する xlf_rxlf90_r、または xlf95_r で コンパイルします。 また、リンク時に直接リンカーまたは他のコマンドを使用する場合は、リンク・コマンド行で -lxlf90_r を指定する こともできます。

次の MATMUL 関数呼び出しでは、-qessl を使用可能にすると、ESSL ルーチンを使用することができます。

 real a(10,10), b(10,10), c(10,10)
   c=MATMUL(a,b)
 

関連情報

ESSL ライブラリーは、XL Fortran コンパイラーと一緒に出荷されることはありません。 これらのライブラリーについて詳しくは、次の URL を参照してください。 http://publib.boulder.ibm.com/clresctr/windows/public/esslbooks.html

-qextern オプション

構文

-qextern=names

ユーザー作成のプロシージャーを、XL Fortran 組み込み機能の代わりに 呼び出せるようにします。names はプロシージャー名をコロンで区切ったリストです。 プロシージャー名は、コンパイル中の個々の コンパイル単位の EXTERNAL ステートメント内にあるかのように扱われます。 プロシージャー名が XL Fortran 組み込みプロシージャーと競合する場合は、 このオプションを使用して組み込みプロシージャーの代わりに ソース・コード内のプロシージャーを呼び出します。

引き数

プロシージャー名をコロンで区切ってください。

該当する製品レベル

Fortran 90 および Fortran 95 は組み込み関数およびサブルーチンを多数持っているので、 FORTRAN 77 プログラムではこのオプションが必要なかった場合でも、 このオプションを使用しなければならない場合があります。

       subroutine matmul(res, aa, bb, ext)
         implicit none
         integer ext, i, j, k
         real aa(ext, ext), bb(ext, ext), res(ext, ext), temp
         do i = 1, ext
           do j = 1, ext
             temp = 0
             do k = 1, ext
               temp = temp + aa(i, k) * bb(k, j)
             end do
             res(i, j) = temp
           end do
         end do
       end subroutine
 
       implicit none
       integer i, j, irand
       integer, parameter :: ext = 100
       real ma(ext, ext), mb(ext, ext), res(ext, ext)
 
       do i = 1, ext
         do j = 1, ext
           ma(i, j) = float(irand())
           mb(i, j) = float(irand())
         end do
       end do
 
       call matmul(res, ma, mb, ext)
       end
 

オプションを指定しないでこのプログラムを コンパイルすると、MATMUL への 呼び出しが実際には組み込みサブルーチンを呼び出していて、 プログラムに定義されているサブルーチンを呼び出さないため、コンパイルが失敗します。 -qextern=matmul を 指定してコンパイルを行うと、プログラムを正しくコンパイルして実行することができます。

-qextname オプション

構文

-qextname[=name1[:name2...]] | -qnoextname
EXTNAME[(name1: name2:...)] | NOEXTNAME

すべてのグローバル・エンティティーの名前に下線を追加します (これが混合言語プログラムに 対する規則であるシステムの場合、システムからプログラムを移植するのに役立ちます)。 -qextname=name1[:name2...] を使用して、特定の グローバル・エンティティーを識別します。 名前付きエンティティーのリストの場合、それぞれの名前をコロンで区切ってください。

メインプログラムの名前は影響を受けません。

-qextname オプションは、XL Fortran に混合言語プログラムを変更しないで移植する一助となります。 このオプションを使用して以下が原因となって発生する命名の問題を回避します。

制限

プログラムのすべてのソース・ファイルは、 必須モジュール・ファイルのソース・ファイルも含め、 同じ -qextname 設定でコンパイルする必要があります。

xlfutility モジュールを使用してサービスおよびユーティリティー・サブプログラムが 正しく宣言されていることを確認する場合は、-qextname を指定してコンパイルする際に名前を xlfutility_extname に変更する必要があります。

コンパイル単位内に参照される複数のサービスおよびユーティリティー・サブプログラムがある場合、 名前が指定されていない -qextnamexlfutility_extname モジュールを使用すると、 プロシージャー宣言検査が正しく機能しない可能性があります。

@PROCESS EXTNAME
        SUBROUTINE STORE_DATA
        CALL FLUSH(10)  ! Using EXTNAME, we can drop the final underscore.
        END SUBROUTINE
@PROCESS(EXTNAME(sub1))
program main
  external :: sub1, sub2
  call sub1()               ! An underscore is added.
  call sub2()               ! No underscore is added.
end program
 

関連情報

このオプションは、他のオプションに指定された名前にも影響を与えます。 したがって、コマンド行上の名前に下線を入れる必要はありません。 影響を受けるオプションは、-qextern オプション-Q オプション、および -qsigtrap オプションです。

-qfixed オプション

構文

-qfixed[=right_margin]
FIXED[(right_margin)]

入力ソース・プログラムが固定ソース形式になっていることを示し、任意で行の最大長を指定します。

FREE ディレクティブ または FIXED @PROCESS ディレクティブを使用してコンパイル単位の形式を切り換えたり、 SOURCEFORM コメント・ディレクティブを使用して (コンパイル単位内部でも) ファイルの残りの形式を切り換えることはできますが、 コンパイラーの実行時に指定されたソース形式は、すべての入力ファイルに適用されます。

他のシステムのソース・コードの場合、 デフォルトよりも大きい右マージンを指定しなければならない場合もあります。 このオプションを使用すれば、 最大右マージン 132 を指定することができます。

デフォルト

-qfixed=72 は、 xlfxlf_rf77、および fort77 コマンドのデフォルトです。 -qfree=f90 は、 f90f95xlf90xlf90_rxlf95、および xlf95_r コマンドのデフォルトです。

関連情報

-qfree オプションを参照してください。

このソース形式の正確な仕様については、「XL Fortran ランゲージ・リファレンス」の 『固定ソース形式』を参照してください。

-qflag オプション

構文

-qflag=dvzlisting_severity:terminal_severity
FLAG(listing_severity,terminal_severity)

listing_severityterminal_severity の両方を指定する必要があります。

診断メッセージを指定されたレベルまたはそれ以上のレベルに限定します。listing_severity またはそれ以上の重大度を持つメッセージだけがリスト・ファイルに書き込まれます。 terminal_severity またはそれ以上の重大度を持つメッセージだけが端末装置に書き込まれます。 -w は、-qflag=e:e の短い形式です。

引き数

重大度レベル (最低から最高) は次のとおりです。

i
通知メッセージ。 知る必要のある情報を説明しますが、 通常、ユーザー側にはアクションを要求しません。

l
言語レベル・メッセージ (-qlanglvl オプション下で作成されたメッセージなど)。 移植不可能な言語構文を示します。

w
警告メッセージ。 ユーザー側のアクションを要求するエラー条件を示しますが、 依然として正しいプログラムです。

e
エラー・メッセージ。 ユーザー側にプログラムを訂正するアクションを要求するエラー条件を示しますが、 結果プログラムは依然として実行可能な場合があります。

s
重大エラー・メッセージ。 ユーザー側にプログラムを訂正するアクションを要求するエラー条件を示し、 エラー位置に達すると結果プログラムに障害が起きます。 -qhalt 設定値を変更して、 この種のエラーの発生時にコンパイラーがオブジェクト・ファイルを生成するようにする必要があります。

u
回復不能エラー・メッセージ。 コンパイラーが続行できなくなるエラー条件を示します。 プログラムのコンパイルを行う前に、 ユーザー側のアクションが必要です。

q
メッセージなし。 定義済みのエラー条件では生成されることがない重大度レベル。 これを指定すると、回復不能エラーが検出されても、コンパイラーはメッセージを表示しません。

-qflag オプションは、 指定された -qlanglvl-qsaa などのオプションをオーバーライドします。

デフォルト

このオプションのデフォルトは i:i です。 そのため、重要な通知メッセージを見逃すことはありません。

関連情報

-qlanglvl オプションおよび XL Fortran エラー・メッセージに関する情報を参照してください。

-qfloat オプション

構文

-qfloat=options
FLOAT(options)

浮動小数点計算のスピードを上げて精度を改善するための、別の方法を選択します。

このオプションは、複数の個別のオプションに代わるものです。 これは、-qfold-qmaf、または新規コード用の関連オプションの代わりに使用する必要があります。

-qfloat 設定を変更する場合は、その前に XL Fortran 浮動小数点処理に記述されている事柄と IEEE 標準を 熟知しておかなければなりません。

デフォルト

デフォルト設定では、 サブオプション nocomplexgccnofltintfoldnohsfltmafnonansnorrmnorsqrt、 および nostrictnmaf を使用します。 以下に示すように、このデフォルトを変更するオプションもいくつかあります。

個々のサブオプションのデフォルト設定は、明示的に変更されない限り有効です。 例えば、-qfloat=nofold を選択すると、nohsflt、または 関連オプションの設定は影響を受けません。

引き数

使用可能なサブオプションにはそれぞれ、 foldnofold のような肯定の形式と否定の形式があります。 否定の形式は肯定の形式の反対です。

サブオプションは以下のとおりです。

complexgcc | nocomplexgcc
複素数を渡すとき、または戻すときに、Linux 規則を使用します。 このオプションによって、gcc コンパイル・コードとの互換性が保持されます。

fltint | nofltint
ライブラリー関数の呼び出しではなく、コードのインライン・シーケンスを使用することによって浮動小数点と 整数との間の変換をスピードアップします。

ライブラリー関数 (-qfloat=fltint が指定されていない場合、または別のオプションによって示されて いない場合、デフォルトで呼び出される) は、整数の表現可能範囲外の浮動小数点値をチェックし、範囲外の 浮動小数点値が渡された場合は、最小または最大の表現可能整数を戻します。

Fortran 言語では、整数の表現可能範囲外の浮動小数点値をチェックする必要がありません。 効率を向上させるために、-qfloat=fltint によって使用されるインライン・シーケンスはこの チェックを行いません。 範囲外の値が渡された場合、インライン・シーケンスは未定義の結果を生成します。

このサブオプションは、デフォルトではオフになりますが、-O3 の最適化レベルでは、-qstrict も 指定されている場合を除いてオンになります。

fold | nofold
コンパイル時に浮動小数点の定数式を評価します。 これは、実行時に評価する場合とは多少異なる結果を出す場合があります。 nofold が指定されていても、コンパイラーは常に仕様ステートメント内の定数式を評価します。

hsflt | nohsflt
単精度式の丸めを防止して、浮動小数点部を除数の逆数を掛ける乗算と置き換えることによって、 計算をスピードアップします。 また、浮動小数点と整数間の変換に対して、fltint サブオプションと同じ手法を使用します。
注:
浮動小数点計算で特性が分っている場合は、複素数の除算および浮動小数点の変換を行うアプリケーションで -qfloat=hsflt を使用します。 特に、浮動小数点結果はすべて、単精度表示の定義範囲内になければなりません。 他のアプリケーション・プログラムをコンパイルするときにこのオプションを使用すると、予期しない結果が起きても 警告を出さない場合があります。 慎重に使用してください。 詳細については、-qfloat=hsflt オプションの技術情報を参照してください。

maf | nomaf
適切な場所で乗加算命令を使用することにより、浮動小数点計算をより速く正確に行います。 考えられる欠点は、コンパイル時に実行した、または他のタイプのコンピューターで実行した同様の計算の 結果とまったく同じにはならない場合があることです。また、 負のゼロが生成される可能性があります。

nans | nonans
-qflttrap=invalid:enable オプションを使用してシグナル NaN (非数値) 値を 含む例外条件の検出および処理を行うことを可能にします。 シグナル NaN 値は、他の浮動小数点演算からは出てこないため、このサブオプションは、プログラムがこの値を 明示的に作成する場合にのみ使用してください。

rrm | norrm
実行時に丸めモードがデフォルト (最も近い値に丸める) にならなければならないコンパイラーの最適化を オフにします。 いずれかの手段、たとえば fpsets プロシージャーを呼び出すことによって、プログラムが丸めモードを 変更する場合のみ、このオプションを使用してください。 それ以外の場合にこのオプションを使用すると、プログラムが誤った結果を算出する場合があります。

rsqrt | norsqrt
平方根の結果で割る除算を、平方根の逆数を掛ける乗算と置き換えることによって、一部の計算を スピードアップします。

このサブオプションは、デフォルトではオフになりますが、-O3 を指定すると、-qstrict も 指定されている場合を除いてオンになります。

strictnmaf | nostrictnmaf
負の MAF 命令を導入するために使用する浮動小数点変換をオフにします。 それの変換は値ゼロの符号を保存することができないからです。 デフォルトでは、コンパイラーはこのタイプの変換を使用可能にします。

セマンティクスを厳密にするには、-qstrict-qfloat=strictnmaf を両方とも指定します。

-qflttrap オプション

構文

-qflttrap[=suboptions] | -qnoflttrap
FLTTRAP[(suboptions)] | NOFLTTRAP

実行時に検出する浮動小数点演算例外条件のタイプを決定します。 該当する例外が発生すると、 プログラムは SIGFPE シグナルを受信します。

引き数

ENable
例外で SIGFPE シグナルが生成されるように、メインプログラム内での 指定された例外のチェックをオンにします。 ソース・コードを変更しないで例外トラッピングをオンにしたい場合は、このサブオプションを指定する必要があります。

IMPrecise
指定された例外のチェックをサブプログラムの入り口と出口のみで行います。 このサブオプションを指定すると、パフォーマンスは改善されますが、例外の正確なスポットが見つけにくくなる ことがあります。

INEXact
例外チェックが使用可能な場合は、浮動小数点の不正確さを検出してトラップします。 浮動小数点計算では不正確な結果はよくあることなので、この種の例外を常にオンにしておく必要はありません。

INValid
例外チェックが使用可能な場合は、浮動小数点無効操作を検出してトラップします。

NANQ
すべての静止非数値 (NaNQ) およびシグナル非数値 (NaNS) を検出およびトラップします。 トラッピング・コードは、enable または imprecise サブオプションの指定にかかわらず 生成されます。 このサブオプションは、無効演算によって作成されなかったものを含め、浮動小数点命令によって処理または 生成されたすべての NaN 値を検出します。 このオプションは、パフォーマンスに影響を与える可能性があります。

OVerflow
例外チェックが使用可能な場合は、浮動小数点オーバーフローを検出してトラップします。

UNDerflow
例外チェックが使用可能な場合は、浮動小数点アンダーフローを検出してトラップします。

ZEROdivide
例外チェックが使用可能な場合は、浮動小数点ゼロ割り算を検出してトラップします。

デフォルト

サブオプションなしの -qflttrap オプションは -qflttrap=ov:und:zero:inv:inex と同等ですが、 このデフォルトには enable が含まれていません。 このため、fpsets または類似のサブルーチンが ソースに既存している場合のみ、有効になる可能性があります。 サブオプションを使ったり、 使わなかったりして -qflttrap を複数回指定すると、 サブオプションなしの -qflttrap は無視されます。

次のプログラムをコンパイルします。

        REAL X, Y, Z
        DATA X /5.0/, Y /0.0/
        Z = X / Y
        PRINT	*, Z
        END

次のコマンドを使用します。

xlf95 -qflttrap=zerodivide:enable -qsigtrap divide_by_zero.f

除算が実行されると、プログラムは停止します。

zerodivide サブオプションは、ガードすべき例外のタイプを識別します。 enable サブオプションは、例外が発生すると SIGFPE シグナルを出します。 -qsigtrap オプションは、シグナルがプログラムを停止すると、通知出力を出します。

関連情報

-qsigtrap オプションを参照してください。

どのような場合にどのような方法で -qflttrap オプションを使用するかについての詳細な説明は、 浮動小数点演算例外の検出とトラッピングを参照してください。 特に、このオプションを使用し始めたばかりのときは、これを参照してください。

-qfree オプション

構文

-qfree[={f90|ibm}]
FREE[({F90|IBM})]

ソース・コードが自由ソース形式になっていることを示します。 ibm サブオプションと f90 サブオプションは、それぞれ VS FORTRAN と Fortran 90 に対して 定義されている自由ソース形式との互換性を指定します。 Fortran 90 用に定義した自由ソース形式は、Fortran 95 にも適用されることに注意してください。

FREE ディレクティブ または FIXED @PROCESS ディレクティブを使用してコンパイル単位の形式を切り換えたり、 SOURCEFORM コメント・ディレクティブを使用して (コンパイル単位内部でも) ファイルの残りの形式を切り換えることはできますが、 コンパイラーの実行時に指定されたソース形式は、すべての入力ファイルに適用されます。

デフォルト

-qfree そのものは、Fortran 90 自由ソース形式を指定します。

-qfixed=72 は、 xlfxlf_rf77、および fort77 コマンドのデフォルトです。 -qfree=f90 は、 f90f95xlf90xlf90_rxlf95、および xlf95_r コマンドのデフォルトです。

関連情報

-qfixed オプションを参照してください。

-k-qfree=f90 と同等です。

Fortran 90 自由ソース形式については、「XL Fortran ランゲージ・リファレンス」の『自由ソース形式』で 説明されています。 この形式は、現在および将来 Fortran 90 および Fortran 95 機能をサポートするコンパイラーに最大の移植性を与えるために使用される形式です。

IBM 自由ソース形式は、IBM VS FORTRAN コンパイラーの自由形式と同等で、 z/OS(R) プラットフォームからの プログラムの移植を支援するためのものです。 この形式については、「XL Fortran ランゲージ・リファレンス」の 『IBM 自由ソース形式』に説明されています。

-qfullpath オプション

構文

-qfullpath | -qnofullpath

ソース・ファイルとインクルード・ファイルの完全なパス名、つまり絶対パス名は、 コンパイルされたオブジェクト・ファイルの中にデバッグ情報と一緒に記録されます (-g オプション)。

実行可能ファイルをデバッグの前に別のディレクトリーへ移動する必要がある場合、 または複数のバージョンのソース・ファイルがあってデバッガーが必ず元のソース・ファイルを使用するようにしたい場合は、 -qfullpath オプションを -g オプションと組み合わせて使用すると、 ソース・レベル・デバッガーは正しいソース・ファイルを見つけることができます。

デフォルト

デフォルトでは、コンパイラーは元のソース・ファイルの相対パス名をそれぞれの .o ファイルの中に記録します。 また、インクルード・ファイルの相対パス名が記録される場合もあります。

制限

-qfullpath-g オプションがなくても機能しますが、 -g オプションを一緒に指定しなかった場合はソース・レベルのデバッグはできません。

この例では実行可能ファイルは作成後に移動されますが、 デバッガーは元のソース・ファイルを引き続き見つけることができます。


$ xlf95 -g -qfullpath file1.f file2.f file3.f -o debug_version
...
$ mv debug_version $HOME/test_bucket
$ cd $HOME/test_bucket
$ gdb debug_version

関連情報

-g オプションを参照してください。

-qhalt オプション

構文

-qhalt=severity
HALT(severity)

コンパイル時メッセージの最大の重大度が、指定した重大度と等しいか、それを上回る場合、 オブジェクト・ファイル、実行可能ファイル、アセンブラー・ソース・ファイルを作成する前に動作を停止します。 severity (重大度) は、i (通知)、l (言語)、w (警告)、 e (エラー)、s (重大エラー)、u (回復不能エラー)、q (「停止しない」を示す重大度) のいずれかです。

引き数

重大度レベル (最低から最高) は次のとおりです。

i
通知メッセージ。 知る必要のある情報を説明しますが、 通常、ユーザー側にはアクションを要求しません。

l
言語レベル・メッセージ (-qlanglvl オプション下で作成されたメッセージなど)。 移植不可能な言語構文を示します。

w
警告メッセージ。 ユーザー側のアクションを要求するエラー条件を示しますが、 依然として正しいプログラムです。

e
エラー・メッセージ。 ユーザー側にプログラムを訂正するアクションを要求するエラー条件を示しますが、 結果プログラムは依然として実行可能な場合があります。

s
重大エラー・メッセージ。 ユーザー側にプログラムを訂正するアクションを要求するエラー条件を示し、 エラー位置に達すると結果プログラムに障害が起きます。 -qhalt 設定値を変更して、 この種のエラーの発生時にコンパイラーがオブジェクト・ファイルを生成するようにする必要があります。

u
回復不能エラー・メッセージ。 コンパイラーが続行できなくなるエラー条件を示します。 プログラムのコンパイルを行う前に、 ユーザー側のアクションが必要です。

q
メッセージなし。 定義済みのエラー条件では生成されることがない重大度レベル。 これを指定すると、回復不能エラーが検出されても、コンパイラーはメッセージを表示しません。

デフォルト

デフォルトは -qhalt=s です。 この場合コンパイラーはコンパイルが失敗してもオブジェクト・ファイルを生成しません。

制限

-qhalt オプションは -qobject オプションを、 そして -qnoobject オプションは -qhalt オプションをオーバーライドできます。

-qhot オプション

構文

-qhot[=suboptions] | -qnohot
HOT[=suboptions] | NOHOT

-qhot コンパイラー・オプションは、ループと配列言語を最適化するためのチューニングを助ける強力な代替手段です。 -qhot コンパイラー・オプションは、指定されたサブオプションに 関係なく、常にループの最適化を試行します。

-O および -qhot を使用するときに最適化レベル 2 以上を指定しないと、コンパイラーは -O2 を想定します。

ループ・アンロールの追加情報については、「XL Fortran ランゲージ・リファレンス」の 『ループ最適化のためのディレクティブ』の節を参照してください。

配列の埋め込み

XL Fortran では、2 の累乗である配列次元がキャッシュの使用効率の低下を招く可能性があります。 arraypad サブオプションを使用すると、コンパイラーは配列処理ループの効率を高められそうな配列次元を増やすことができます。これにより、配列処理プログラムを低下させるキャッシュ・ミスやページ不在を削減することができます。

ソースに 2 の累乗である次元を持つ大きな配列が含まれる場合は -qhot=arraypad を指定してください。 これは特に、最初の次元が 2 の累乗である場合に効果的です。

-C オプションは、いくつかの配列最適化をオフにします。

ベクトル化

-qhot コンパイラー・オプションは、simd および vector サブオプションをサポートします。 これらは、可能であれば演算を並列に実行することによって、 配列データの演算のためのソース・コードのループを最適化することができます。 どちらのサブオプションもパフォーマンスを 向上させることができますが、各サブオプションはそれぞれ特定のタイプの ベクトル化に最も適しています。

ショート・ベクトル化: -qhot=simd  simd サブオプションは、配列データを最適化して、ターゲット・アーキテクチャーで許可される場合、算術演算を並列に実行します。並列演算は、16 バイト・ベクトル・レジスターで行われます。 コンパイラーは、レジスター長を超えるベクトルを 16 バイト単位に分割して、最適化を促進します。 16 バイトの 1 つの単位には、次のいずれかの型のデータを含めることができます。

ショート・ベクトル化は、倍精度の浮動小数点算術演算をサポートせず、-qarch=ppc970 を指定する必要があります。通常は、 -qhot=simd 最適化をイメージ処理アプリケーションに適用するときに有利です。

ロング・ベクトル化: -qhot=vector  vector サブオプションは、配列データを最適化して、可能な場合は、算術演算を並列に実行します。 コンパイラーは、ベクトル・サイズの制限なしで標準レジスターを使用します。 単精度および倍精度の浮動小数点算術演算のサポートは、通常、大きな算術演算の要件 を持つアプリケーションに -qhot=vector を適用するときに有利です。

引き数

arraypad
コンパイラーは、キャッシュ使用効率が向上する可能性があるすべての配列を埋め込みます。 すべての配列を必ずしも埋め込む必要はなく、コンパイラーは異なる配列に異なる量を埋め込むことができます。

arraypad=n
コンパイラーはソース内の各配列を埋め込みます。埋め込み数は、正の整数値でなければなりません。 各配列は、エレメントの整数値で埋め込まれます。 整数値 n は、arraypad を有効に使用するために、最大配列エレメント・サイズの倍数でなければなりません。この値は通常、4、8、または 16 です。

arraypad および arraypad=n オプションを指定した場合、コンパイラーは再シェーピングまたはそれと同等のものをチェックしません。 埋め込みが行われる場合、プログラムが予測不能な結果を生成することがあります。

simd | nosimd
連続する配列エレメントに適用されるループ内の特定の操作を VMX (Vector Multimedia eXtension) 命令の呼び出しに変換します。 この呼び出しは、1 度に複数の結果を計算するため、 それぞれの結果を順番に計算するより処理は速くなります。

-qhot=nosimd を指定すると、コンパイラーはループと配列に対して最適化を実行しますが、特定のコードを VMX 命令への呼び出しに置き換えることはしません。

-qarch=ppc970 を指定する必要があります。

vector | novector
コンパイラーは、連続する配列エレメントに対してループで実行される特定の操作を、libxlopt.a ライブラリーに あるルーチンに対する呼び出しに変換します。 この呼び出しは、1 度に複数の結果を計算するため、 それぞれの結果を順番に計算するより処理は速くなります。

-qhot=novector を指定すると、コンパイラーはループと配列に対して最適化を実行しますが、特定の コードをベクトル・ライブラリー・ルーチンに対する呼び出しに置き換えることはしません。 -qhot=vector オプションは、プログラムの結果の精度に影響を及ぼす場合 がありますで、精度についての変更を受け入れられない場合は、-qhot=novector または -qstrict のいずれかを指定する必要があります。

関連情報

ループおよび配列言語の最適化には、実行される変換がリストされています。

-qieee オプション

構文

-qieee={Near | Minus | Plus | Zero}
IEEE({Near | Minus | Plus | Zero})

コンパイル時に定数浮動小数点式を評価するときにコンパイラーが使用する丸めモードを指定します。

引き数

選択項目は次のとおりです。

Near
最も近い値に丸めます。

Minus
マイナスの無限大方向に丸めます。

Plus
プラスの無限大方向に丸めます。

Zero
ゼロ方向に丸めます。

このオプションは、XL Fortran サブルーチン fpsets など実行時に丸めモードを変更する方法と組み合わせて使用することを想定しています。 このオプションは、コンパイル時の演算 (たとえば、 2.0/3.5 などのような定数式の計算) に使用される丸めモードを設定します。 コンパイル時の演算と実行時の演算に同じ丸めモードを指定することにより、 浮動小数点結果に矛盾が生じることを回避します。

注:
-O オプションも指定すると、 コンパイル時の算術計算はかなり長くなります。

実行時のデフォルト (最も近い値への丸め) モード以外に丸めモードを変更する場合は、 必ず -qfloat=rrm も指定して、デフォルトの丸めモードでのみ適用される最適化をオフにしてください。

関連情報

丸めモードの選択-O オプション、および -qfloat オプションを参照してください。

-qinit オプション

構文

-qinit=f90ptr
INIT(F90PTR)

ポインターの初期関連付け状況を関連付け解除にします。 これは、Fortran 90 以降だけでなく Fortran 95 にも当てはまることに注意してください。

このオプションを使用して、ポインターを定義する前に使用することによって生じた問題の発見および修正を 行うことができます。

関連情報

XL Fortran ランゲージ・リファレンス」の『ポインター関連付け』を参照してください。

-qinitauto オプション

構文

-qinitauto[=hex_value] | -qnoinitauto

hex_value の長さに応じて、自動変数用のストレージの個々のバイトまたはワード (4 バイト) を、特定の値に初期化します。 これにより、定義前に参照される変数を見つけることができます。たとえば、REAL 変数をシグナル NAN 値に 初期化するための -qinitauto オプションと、-qflttrap オプションの両方を使用することにより、実行時に初期化されていない REAL 変数を参照していないかどうかを識別することができます。

hex_value をゼロに設定すると、自動変数はすべて使用前にクリアされます。 プログラムの中には、変数がゼロに初期化され、ゼロに初期化されないと機能しない、と想定するものがあります。 また、最適化されなければ機能し、最適化されると障害が発生する、と想定するプログラムもあります。 一般に、変数をすべてゼロ・バイトに設定すれば、そのような実行時エラーは回避されます。実行時エラーを回避するためには、このオプションに依存するよりも、ゼロへのリセットを必要とする変数を見つけて プログラムにコードを挿入するほうが良い方法です。 このオプションを使用すると、一般に、必要以上のものをゼロにリセットするため、その結果プログラムが遅くなる ことがあります。

それらのエラーを見つけて修正するには、正しくない結果が常に再現されるようバイトの値をゼロ以外に設定します。 この方法は、デバッグ・ステートメントを追加したり、 シンボリック・デバッガーにプログラムをロードしてエラーを排除する場合に、特に価値があります。

hex_valueFF (255) に設定すると、「負の非数値」、 つまり - 静止 NAN の初期値が REAL 変数および COMPLEX 変数に与えられます。 これらの変数で演算を行っても、結果は静止 NAN 値に なり、初期化されていない変数が計算で使用されたことが明らかになります。

このオプションは、サブプログラム内に初期化されていない変数を含んでいるプログラムをデバッグするときに 役立ちます。 たとえば、シグナル NAN 値を使用して REAL 変数を初期化するときに使用できます。 繰り返したときに倍精度のシグナル NAN 値を持つ 8 桁の 16 進数を指定することにより、8 バイトの REAL 変数を倍精度の シグナル NAN 値に初期化することができます。 たとえば、7FBFFFFF のような数値を指定することができます。 これは、REAL(4) 変数に入れられると、単精度の シグナル NAN 値を持つことになります。 7FF7FFFF は、REAL(4) 変数に入れられると、単精度の 静止 NAN 値を持つことになります。 REAL(8) 変数に同じ数値を 2 回入れる (7FF7FFFF7FF7FFFF) と、 倍精度のシグナル NAN 値を持つようになります。

引き数

デフォルト

制限

次の例では、自動変数のワード初期化を実行する方法が示されています。

subroutine sub()
integer(4), automatic :: i4
character, automatic :: c
real(4), automatic :: r4
real(8), automatic :: r8
end subroutine

次のオプションを指定してコードをコンパイルする場合、hex_value が 2 桁より長くなったら、 コンパイラーはワード初期化を実行します。

-qinitauto=0cf

コンパイラーは、i4r4、および r8 変数の場合は、 hex_value にゼロを埋め込み、c 変数の場合は最初の 16 進数字を切り捨てることにより、 変数を初期化します。

変数
i4 000000CF
c CF
r4 000000CF
r8 000000CF000000CF

関連情報

-qflttrap オプション、および「XL Fortran ランゲージ・リファレンス」の AUTOMATIC ディレクティブについての節を参照してください。

-qintlog オプション

構文

-qintlog | -qnointlog
INTLOG | NOINTLOG

式およびステートメント内に整数と論理データ・エンティティーを混在させることができることを指定します。 整数オペランドで指定する論理演算子は、それらの整数に対してビット単位で操作し、整数演算子は 論理オペランドの内容を整数と見なします。

制限

次の演算では、論理変数を使用することができません。

INTEGER I, MASK, LOW_ORDER_BYTE, TWOS_COMPLEMENT
I = 32767
MASK = 255
! Find the low-order byte of an integer.
LOW_ORDER_BYTE = I .AND. MASK
! Find the twos complement of an integer.
TWOS_COMPLEMENT = .NOT. I
END

関連情報

組み込み関数 IANDIORIEOR、および NOT を使用して、ビット単位の 論理演算を行うこともできます。

-qintsize オプション

構文

-qintsize=バイト
INTSIZE(バイト)

デフォルトの INTEGER および LOGICAL データ・エンティティー (つまり、 長さまたは種類が指定されていないデータ・エンティティー) のサイズを設定します。

背景情報

指定されたサイズ 1 は、以下のようなデータ・エンティティーに適用されます。

byte で許可されているサイズは、以下のとおりです。

このオプションは、データのデフォルト・サイズが異なるシステムから、 プログラムを変更せずに移植できるようにするためのものです。 たとえば、16 ビットのマイクロプロセッサー用に書かれたプログラムには -qintsize=2 が必要で、 CRAY コンピューター用に書かれたプログラムには -qintsize=8 が必要です。 このオプションのデフォルト値 4 は、多くの 32 ビット・コンピューター用に書かれたコードに 適しています。-q64 コンパイラー・オプションを指定しても、-qintsize のデフォルト設定に影響は ないことに注意してください。

制限

このオプションは、データ・エンティティーのサイズを大きくするための一般的な方法として 機能させるためのものではありません。 用途は、他のシステム用に作成されたコードとの互換性を維持することに限定されています。

PARAMETER ステートメントを追加して、 引き数として渡す定数に明示的な長さを指定する必要がある場合があります。

次の例を見れば、変数、リテラル定数、組み込み関数、算術演算子、入出力操作が、変更された デフォルト整数サイズをどのように処理するかが理解できます。

@PROCESS INTSIZE(8)
      PROGRAM INTSIZETEST
      INTEGER I
      I = -9223372036854775807    ! I is big enough to hold this constant.
      J = ABS(I)                  ! So is implicit integer J.
      IF (I .NE. J) THEN
        PRINT *, I, '.NE.', J
      END IF
      END

次の例は、整数のデフォルト・サイズでのみ機能します。

      CALL SUB(17)
      END
 
      SUBROUTINE SUB(I)
      INTEGER(4) I                ! But INTSIZE may change "17"
                                  ! to INTEGER(2) or INTEGER(8).
      ...
      END

デフォルト値を変更する場合は、INTEGER(4) の代わりに INTEGER として I を宣言するか、 以下のように、実引き数に長さを指定する必要があります。

@PROCESS INTSIZE(8)
      INTEGER(4) X
      PARAMETER(X=17)
      CALL SUB(X)      ! Use a parameter with the right length, or
      CALL SUB(17_4)   ! use a constant with the right kind.
      END

関連情報

-qrealsize オプションおよび「XL Fortran ランゲージ・リファレンス」の 『型付きパラメーターおよび指定子』を参照してください。

-qipa オプション

構文

-qipa[=suboptions] | -qnoipa

プロシージャー間で詳細な分析 (プロシージャー間分析、つまり IPA) を行うことによって、-O 最適化を増大させます。

-qipa を指定するときには、-O-O2-O3-O4、または -O5 オプションも指定する必要があります。 (-O5 オプションを指定することは、-O4 オプションと -qipa=level=2 を指定する ことと同じです。) パフォーマンスをさらに 改善するために、-Q オプションを指定することもできます。-qipa は、最適化実行中、および単一プロシージャーから複数プロシージャー (おそらく別の ソース・ファイル内にある) へのインライン化実行中、そして、それらのリンク実行中に調べられる区域を 拡張します。

サブオプションを指定することによって、実行される最適化を微調整することができます。

このオプションを使用するために必要なステップは、次のとおりです。

  1. -qipa オプションを指定してコンパイルする前に、予備のパフォーマンス分析および調整を行います。 これが必要なのは、プロシージャー間分析はリンク時間を長引かせる 2 パス方式 (コンパイル時間とリンク時間のフェーズ) を使用するためです。 (noobject サブオプションを使用してこのオーバーヘッドを削減することができます。)
  2. アプリケーション全体またはできるだけ多くの部分で、コンパイル・ステップとリンク・ステップの両方に -qipa オプションを指定します。 -qipa を指定してコンパイルしないプログラムの部分に関して、何を前提事項にするかを示す サブオプションを指定します。 (アプリケーションに IBM XL C/C++ コンパイラーで コンパイルされた C または C++ コードが含まれている場合は、 リンク時にさらに最適化の機会をもたらすために -qipa オプションを 指定してコンパイルしなければなりません。)

    コンパイル中に、コンパイラーは .o ファイルにプロシージャー間分析情報を格納します。 リンク中に、-qipa オプションはアプリケーション全体の完全な最適化を再発生させます。

-# とともにこのオプションを指定する場合、コンパイラーは IPA リンク・ステップの後に リンカー情報を表示しないことにご注意ください。 これは、コンパイラーが IPA を実際に呼び出していないためです。

引き数

IPA は、コンパイル時間のフェーズで以下のサブオプションを使用します。

object | noobject
オブジェクト・ファイルに標準オブジェクト・コードを組み込むかどうかを指定します。 noobject サブオプションを指定すると、最初の IPA フェーズ中にオブジェクト・コードを生成しない ことにより、全体的なコンパイル時間は大きく短縮されます。 -Snoobject を同時に指定すると、 noobject は無視されることに注意してください。

コンパイルとリンクを同じステップで実行した場合で、 -S または リストされているオプションを指定しない場合、-qipa=noobject が暗黙指定されます。

プログラムに noobject サブオプションを使用して作成したオブジェクト・ファイルが含まれる場合、 -qipa を使用してプログラムをリンクする前に、入り口点 (実行可能プログラムの場合はメインプログラム、 ライブラリーの場合はエクスポートされたプロシージャー) を含むファイルがあれば -qipa オプションを 指定してコンパイルする必要があります。

IPA は、リンク時間のフェーズで以下のサブオプションを使用します。

exits=procedure_names
プロシージャーのリストを指定します。 それぞれのプロシージャーがプログラムを終了させることになります。 コンパイラーはこれらのプロシージャーの呼び出しを最適化する (たとえば、保管/復元手順の除去により) ことができます。 これらのコードがプログラムに戻ることはないからです。 これらのプロシージャーは、-qipa を指定してコンパイルされたプログラムの他の部分を呼び出してはいけません。

inline=inline-options
-qipa=inline= コマンドは、 以下に示すインライン・オプションのリスト (コロンで区切る) を取得できます。

inline=auto | noauto
プロシージャーを自動的にインライン化するかどうかを指定します。

inline=limit=number
inline=auto オプションが インライン展開の程度を決定するために使用する限界サイズを変更します。 呼び出し側のプロシージャーの限界サイズは、 この確立された「limit」よりも下である必要があります。 number には、生成されるコードのバイト数を最適化プログラムに見合った概算で入れます。 数字が大きいほど、コンパイラーはインライン化サブプログラムを大きくするか、インライン化サブプログラム呼び出しを 増やすか、またはその両方を行うことができます。 この引き数は、inline=auto がオンになっているときにのみ実施されます。

inline=procedure_names
インライン化を試行するプロシージャーのリストを指定します。

inline=threshold=number
インライン化するプロシージャーの限界サイズの上限を指定します。 number は、インライン・サブオプション「limit」で定義された値です。 この引き数は、「inline=auto」がオンになっているときにのみ実施されます。

注:
デフォルトでは、コンパイラーは、 inline= procedure_names サブオプションを使って指定したプロシージャーだけではなく、 すべてのプロシージャーのインライン化を試行します。 特定のプロシージャーだけをインライン化する場合は、 inline= procedure_names を指定してから、inline=noauto を指定してください。 (この順番でサブオプションを指定する必要があります。) たとえば、sub1 のプロシージャー以外のすべてのプロシージャーのインライン化をオフにするには、 -qipa=inline=sub1:inline=noauto と指定します。

isolated=procedure_names
-qipa を指定してコンパイルされていないプロシージャーのリストをコンマで区切って指定します。 「isolated」として指定されたプロシージャーや、呼び出しチェーン内のプロシージャーは、 グローバル変数を直接に参照することはできません。

level=level
実行されるプロシージャー間分析および最適化のレベルを決定します。
0
最小限のプロシージャー間分析と最適化のみを行います。
1
インライン化、限定された別名分析、限定された呼び出し側の調整をオンにします。
2
完全なプロシージャー間データ・フロー分析と完全な別名分析を行います。 -O5 を指定することは、-O4-qipa=level=2 を指定することと同じです。

デフォルト・レベルは 1 です。

list=[filename | short | long]

-qlist コンパイラー・オプションまたは -qipa=list コンパイラー・オプションによってオブジェクト・リストが要求されたイベントにおいて、 リンク・フェーズ中に出力リスト・ファイル名を指定することにより、 ユーザーが出力のタイプを指示できるようにします。 filename サブオプションを指定しなかった場合、デフォルト・ファイル名は「a.lst」になります。

short を指定した場合は、 オブジェクト・ファイル・マップ、ソース・ファイル・マップ、 グローバル・シンボル・マップのセクション が組み込まれます。long を指定した場合は、 オブジェクト解像度警告、オブジェクト参照マップ・セクション、 インライン報告書、区画マップ・セクションに加えて、 それに先行するセクションも表示されます。

-qipa オプションと -qlist オプションを同時に指定すると、IPA は a.lst ファイルを生成し、 既存の a.lst ファイルがあればそれらを上書きします。 a.f というソース・ファイルがあるとすると、IPA のリストにより、 通常のコンパイラー・リスト a.lst が上書きされます。代替のリスト・ファイル名を指定するときには、 list=filename サブオプションを使用できます。

lowfreq=procedure_names
通常のプログラムの実行過程でまれに呼び出されるようなプロシージャーのリストを指定します。 たとえば、初期化およびクリーンアップのためのプロシージャーは一度だけ呼び出されて、 デバッグ・プロシージャーは運用レベルのプログラムではまったく呼び出されないこともあります。 これらのプロシージャーへの呼び出しに対して行う最適化を少なくすることによって、 コンパイラーはプログラムの他の部分をより速くすることができます。

missing={unknown | safe | isolated | pure}
-qipa を指定してコンパイルされておらず、また unknownsafeisolated、または pure サブオプション内で明示的に名前付けされていないプロシージャーの、 プロシージャー間動作を指定します。 デフォルトでは unknown を想定します。 これにより、これらのプロシージャーの呼び出しに対するプロシージャー間最適化の量が大きく制限されます。

noinline=procedure_names
インライン化しないプロシージャーのリストを指定します。

partition={small | medium | large}
分析するプログラム内の領域サイズを指定します。 区画が大きいほど多くのプロシージャーを入れることができ、結果としてより優れたプロシージャー間分析を 行うことができますが、最適化するストレージがそれだけ多く必要になります。 ページングのためにコンパイル時間が長すぎる場合は、区画サイズを小さくしてください。

pdfname=[filename]

PDF プロファイル情報を含むプロファイル・データ・ファイルの名前を指定します。 filename を指定しない場合は、デフォルト・ファイル名は、__pdf に なります。 プロファイルは現行作業ディレクトリーか、PDFDIR 環境変数が指名しているディレクトリーに置かれます。 これにより、プログラマーは、同時に複数の実行可能ファイルを同じ PDFDIR を使用して稼動することが できます。 こうすると、動的ライブラリーの PDF を使用したチューニングに特に有効です。 (チューニングの最適化についての詳細は、-qpdf オプションを参照してください。)

pure=procedure_names
-qipa を指定してコンパイルされていないプロシージャーのリストを指定します。 「pure」として指定したプロシージャーは、「isolated」および「safe」でなければなりません。 また、呼び出し元から見えるデータ・オブジェクトを潜在的に変更するよう定義されている副次作用があっては いけません。

safe=procedure_names
-qipa を指定してコンパイルされていないプロシージャーのリストを指定します。 「safe」として指定されているプロシージャーは、グローバル変数および仮引き数を修正する場合があります。 「safe」プロシージャーの呼び出しチェーン内からは、-qipa を指定してコンパイルされた プロシージャーへの呼び出しが行われない場合があります。

stdexits | nostdexits
特定の事前定義ルーチンが、exits サブオプションを指定している場合のように最適化可能で あることを指定します。 該当するプロシージャーは、abortexit_exit_assert です。

threads[=N] | nothreads
threads[=N] により、使用可能な数、あるいは N で指定した数の並列スレッドが稼動します。 N は正整数でなければなりません。 nothreads では、並列スレッドは稼動しません。 これは、1 つのシリアル・スレッドを稼動するのと同じです。

-qipa=threads を指定すると、IPA 最適化時間を削減することができます。 スレッド・サブオプションを指定すると、IPA 最適化プログラムは最適化処理の部分を並列スレッドで実行することができるため、 マルチプロセッサー・システム上でコンパイル・プロセスを高速化することができます。

unknown=procedure_names
-qipa を指定してコンパイルされていないプロシージャーのリストを指定します。 「unknown」として指定されたプロシージャーは、-qipa を指定してコンパイルされたプログラムの 他の部分の呼び出しを行い、グローバル変数と仮引き数を修正する場合があります。

isolatedmissingpuresafe、および unknown の主な 使用目的は、-qipa を指定してコンパイルしていないライブラリー・ルーチンへの呼び出しに対して、 最適化をどの程度安全に実行するかを指定することです。

以下のコンパイラー・オプションは、-qipa のリンク時間のフェーズに影響があります。

-qlibansi | -qnolibansi
ANSI C が定義したライブラリー関数の名前を持つ関数はすべてライブラリー関数と見なすことを指定します。

-qlibposix | -qnolibposix
IEEE 1003.1-2001 (POSIX) が 定義したライブラリー関数の名前を持つ関数はすべてシステム関数と見なすことを指定します。

-qthreaded
コンパイラーが、スレッド・セーフ・コードの生成を試行すると見なします。

規則

正規表現は、以下のサブオプションでサポートされています。

exits

inline

lowfreq

noinline

pure

safe

unknown

正規表現の構文規則について、以下に説明します。

表 13. 正規表現の構文

説明
string string で指定したすべての文字と突き合わせます。 たとえば、test は、testimonylatestintestine と突き合わせます。
^string 行の先頭に置かれている場合にのみ、 string によって指定されているパターンと突き合わせます。
string$ 行の末尾に置かれている場合にのみ、 string によって指定されているパターンと突き合わせます。
str.ing すべての文字と突き合わせます。 たとえば、t.sttesttasttZst、および t1st と突き合わせます。
string¥.$ 円記号 (¥) は、その文字を突き合わせるための特殊エスケープ文字に使用することができます。 たとえば、ピリオドで終了する行を検索する場合、 .$ という式では、最低でも 1 つの文字を含むすべての行が表示されます。 ピリオド (.) をエスケープするには、¥.$ と指定します。 .
[string] string で指定したすべての文字と突き合わせます。 たとえば、t[a-g123]sttast および test とは突き合わせますが、 t-st または tAst とは突き合わせません。
[^string] string で指定した文字とは突き合わせません。 たとえば、t[^a-zA-Z]stt1stt-st、および t,st とは突き合わせますが、 test または tYst とは突き合わせません。
string* string によって指定されたパターンの、ゼロ回以上のオカレンスと突き合わせます。 たとえば、te*st は、tsttest、 および teeeeeest と突き合わせます。
string+ string によって指定されたパターンの、1 回以上のオカレンスと突き合わせます。 たとえば、t(es)+t は、testtesest とは突き合わせますが、tt. との突き合わせは行いません。
string? string によって指定されたパターンの、ゼロ回以上のオカレンスと突き合わせます。 たとえば、te?st は、tst または test のいずれかと突き合わせます。
string{m,n} string によって指定されたパターンの m 回と n 回の間のオカレンスを突き合わせます。 たとえば、a{2}aa と、 また b{1,4}bbbbbb、 および bbbb とそれぞれ突き合わせます。
string1 | string2 string1 または string2 のいずれかによって指定されたパターンと突き合わせます。 たとえば、s | oso の両方の文字と突き合わせます。

関数名だけが考慮されるため、 正規表現は自動的に ^ および $ 文字で囲まれます。 たとえば、-qipa=noinline=^foo$-qipa=noinline=foo と同一です。 そのため、 -qipa=noinline=bar の場合、bar は決してインライン化されませんが、 bar1teebarbarrel はインライン化される可能性があります。

一連のファイルをプロシージャー間分析でコンパイルする方法を次に示します。

xlf95 -O -qipa f.f
xlf95 -c -O3 *.f -qipa=noobject
xlf95 -o product *.o -qipa -O

次の例では、パフォーマンスを向上させるために正規表現を使って、上で示したのと同じファイルと プロシージャー間分析とをリンクする方法を示します。 この例では、関数 user_abort はプログラムを終了し、その関数のルーチン user_trace1user_trace2、および user_trace3 はまれにしか呼び出されないものと 想定します。

xlf95 -o product *.o -qipa=exit=user_abort:lowfreq=user_trace[123] -O

関連情報

-O オプション-p オプション、および -Q オプションを参照してください。

-qkeepparm オプション

構文

-qkeepparm | -qnokeepparm

背景情報

プロシージャーは通常、着信パラメーターを入り口点のスタックに格納します。 ただし、最適化を行ってコンパイルすると、最適化プログラムは 必要であれば、スタックに対するストアを除去する可能性があります。

-qkeepparm コンパイラー・オプションを指定すると、最適化していてもそのパラメーターが スタックに保管されることが保証されます。 これは実行のパフォーマンスにマイナスの影響を与える可能性があります。 このオプションは、さらに、着信パラメーターの値をスタックにただ保存しておくことにより、デバッガーなどの ツールに送られる着信パラメーターの値を使用できるようにします。

-qlanglvl オプション

構文

-qlanglvl={suboption}
LANGLVL({suboption})

非準拠の検査を行う言語標準 (または標準のスーパーセットまたはサブセット) を決定します。 非準拠のソース・コード、 およびそのような非準拠を許可するオプションを識別します。

規則

コンパイラーは、言語レベルで許可されていない構文を指定していることを検出すると、重大度コード L のメッセージを送出します。

引き数

77std
ANSI FORTRAN 77 標準で指定されている言語を受け入れて、他はすべてエラーとして報告します。

90std
ISO Fortran 90 標準で指定されている言語を受け入れて、他はすべてエラーとして報告します。

90pure
廃止 Fortran 90 機能が使用されたことに対するエラーを報告する以外は、90std と同じです。

95std
ISO Fortran 95 標準で指定されている言語を受け入れて、他はすべてエラーとして報告します。

95pure
廃止 Fortran 95 機能が使用されたことに対するエラーを報告する以外は、 95std と同じです。

extended
言語レベルのチェックを効率的にオフにして、完全な Fortran 95 言語標準およびすべての拡張機能をコンパイラーが 受け入れるように指定します。

デフォルト

デフォルトは -qlanglvl=extended です。

制限

-qflag オプションは、このオプションをオーバーライドすることができます。

次の例では、Fortran 標準の組み合わせに準拠するソース・コードが示されています。

!----------------------------------------------------------
! in free source form
program tt
    integer :: a(100,100), b(100), i
    real :: x, y
    ...
    goto (10, 20, 30), i
10 continue
    pause 'waiting for input'
 
20 continue
    y= gamma(x)
 
30 continue
    b = maxloc(a, dim=1, mask=a .lt 0)
 
end program
!----------------------------------------------------------

次の図には、特定の -qlanglvl サブオプションがこのサンプル・プログラムに与える影響についての例が 示されています。


指定した -qlanglvl サブオプション 結果 理由
95pure PAUSE ステートメントにフラグを付ける 計算型 GOTO ステートメントにフラグを付ける GAMMA 組み込み関数にフラグを付ける Fortran 95 で削除された機能
Fortran 95 で廃止された機能
Fortran 95 に対する拡張機能
95std PAUSE ステートメントにフラグを付ける GAMMA 組み込み関数にフラグを付ける Fortran 95 で削除された機能
Fortran 95 に対する拡張機能
extended フラグを付けられるエラーはなし

関連情報

-qflag オプション-qhalt オプション、 および -qsaa オプションを参照してください。

実行時オプションの設定に記載されている langlvl 実行時オプションは、コンパイル時にチェックできない 実行時拡張機能を見つけるのに役立ちます。

-qlibansi オプション

関連情報

-qipa オプションを参照してください。

-qlibposix オプション

関連情報

-qipa オプションを参照してください。

-qlist オプション

構文

-qlist | -qnolist
LIST | NOLIST

リストのオブジェクト・セクションを作成するかどうかを指定します。

オブジェクト・リストを使用すると、生成コードのパフォーマンス特性の理解、および実行時の問題の診断に役立ちます。

-qipa オプションと -qlist オプションを同時に指定すると、IPA は a.lst ファイルを生成し、 既存の a.lst ファイルがあればそれらを上書きします。 a.f というソース・ファイルがあるとすると、IPA のリストにより、 通常のコンパイラー・リスト a.lst が上書きされます。これを回避するには、-qipalist=filename サブオプションを使用して、代わりの リストを生成してください。

関連情報

リストとメッセージを制御するオプションオブジェクト・セクション、および -S オプションを参照してください。

-qlistopt オプション

構文

-qlistopt | -qnolistopt
LISTOPT | NOLISTOPT

リスト・ファイル内のすべてのコンパイラー・オプションの設定を表示するか、 または、選択したオプションだけを表示するかを決定します。 これらの選択したオプションには、コマンド行またはディレクティブに 指定されているオプションと、常にリストにあるオプションが含まれます。

このオプション・リストは、デバッグ中に使用すると、コンパイラー・オプションの特定の組み合わせにおいて 問題が起きるかどうかをチェックすることができます。 また、パフォーマンス・テスト中に使用すると、特定のコンパイルに対して有効な最適化オプションを記録することが できます。

規則

リストに常に表示されるオプションは次のとおりです。

関連情報

リストとメッセージを制御するオプションおよび オプション・セクションを参照してください。

-qlog4 オプション

構文

-qlog4 | -qnolog4
LOG4 | NOLOG4

論理オペランドを持つ論理演算の結果が、LOGICAL(4) であるか、 それともオペランドの最大長を持つ LOGICAL であるかを指定します。

このオプションを使用すると、元々 IBM VS FORTRAN コンパイラー用に書かれたコードを移植することができます。

引き数

-qlog4 は常に結果を LOGICAL(4) にし、-qnolog4 は結果をオペランドの長さに 依存させます。

制限

論理値のデフォルト・サイズを変更するのに -qintsize を使用する場合、-qlog4 は無視されます。

-qmaxmem オプション

構文

-qmaxmem=Kbytes
MAXMEM(Kbytes)

コンパイラーが特定のメモリー集中の最適化を実行するときに、 割り振るメモリーの量を指定キロバイト数に制限します。 値 -1 を指定すれば、制限チェックは行わず、必要なだけメモリーを使って最適化を実行します。

デフォルト

-O2 最適化レベルでは、デフォルトの -qmaxmem 設定は 2048 KB です。 -O3 最適化レベルでは、デフォルトの設定は無制限 (-1) です。

規則

指定されたメモリーの容量が不十分で、 コンパイラーが特定の最適化を算出できない場合は、 コンパイラーがメッセージを発行し最適化の度合いが減ります。

このオプションは、 -O オプションと組み合わせた場合のみ効果があります。

-O2 を指定してコンパイルするときには、 コンパイル時メッセージが限界を上げるように指示する場合にその指示に従うだけで十分です。-O3 を指定してコンパイルするときには、 マシンの実行によりストレージが不足するためにコンパイルが停止する場合に、 限界の設定が必要な場合があります。 この場合は 2048 以上の値で開始し、 過大なストレージをコンパイルが要求し続けるときはこの値を減らします。

注:

  1. 最適化が減じられるということは、その結果作成されたプログラムの速度が遅くなることを必ずしも意味しません。 コンパイラーが、パフォーマンスを向上させる機会を際限なく探し続けてしまうということを意味するにすぎません。
  2. 限界を高くするということは、 その結果作成されたプログラムの速度が速くなることを必ずしも意味せず、 パフォーマンスを向上させる機会があれば、 その機会をコンパイラーが見つけやすくなるということを意味するにすぎません。
  3. 大きな限界を設定しても、ソース・ファイルをコンパイルするときに、 最適化の実行中にコンパイラーが大量のメモリーを使用する必要がない場合は、悪影響はありません。
  4. メモリー限界を上げる別の方法として、最も複雑な計算を、 その時点で完全に分析できるほど小さなプロシージャーに移動することができます。
  5. すべてのメモリー集約的コンパイル・ステージを制限できるわけではありません。
  6. -O2-O3 について行われる最適化のみを制限できます。 -O4 および -O5 最適化は制限できません。
  7. -O4 および -O5 最適化では、/tmp ディレクトリー内のファイルが 使用される可能性もあります。 これは、-qmaxmem 設定によって制限されません。
  8. いくつかの最適化は最大使用可能アドレス・スペースを超えた場合は、自動的にオフに なりますが、そのときに使用可能なページング・スペース (マシンの作業負荷によって異なります) を超えた 場合は、自動的にはオフになりません。

制限

コンパイルされるソース・ファイル、ソース・コード内のサブプログラムのサイズ、 マシン構成、システム上の作業負荷によっては、限界を高く設定し過ぎると、 ページング・スペースを使い果たしてしまう場合があります。 特に、値 -1 は、装備の充実したマシンでも、ストレージを使い果たす場合があります。

関連情報

-O オプションおよび XL Fortran プログラムの最適化を参照してください。

-qmbcs オプション

構文

-qmbcs | -qnombcs
MBCS | NOMBCS

文字リテラル定数、ホレリス定数、H 編集記述子、 文字列編集記述子にマルチバイト文字セット (MBCS) 文字または Unicode 文字を含めることができるかどうかをコンパイラーに示します。

このオプションは、日本語のようなマルチバイト言語でデータを処理しなければならないアプリケーションの ためのものです。

実行時にマルチバイト・データを正しく処理するには、コンパイル中と同じ値にロケールを 設定してください (LANG 環境変数を使用するか、または libc setlocale ルーチンへの 呼び出しを使用)。

規則

マルチバイト文字の個々のバイトは、1 桁としてカウントされます。

制限

Unicode データの読み書きを行うには、実行時にロケール値を UNIVERSAL に設定します。 ロケールが設定されていないと、Unicode が使用可能なアプリケーションとデータを交換できない場合があります。

-qminimaltoc オプション

構文

-qminimaltoc | -qnominimaltoc
 

このコンパイラー・オプションは、目次 (TOC) の生成を変更できます。 コンパイルを 64 ビット・モードで行った際、コンパイラーは各実行可能ファイルごとに作成します。 デフォルトでは、プログラム内の固有の自動でない変数参照ごとに、少なくとも 1 つの TOC エントリー をコンパイラーが割り当てます。 現在、8192 の TOC エントリーのみが使用可能で、重複エントリーは廃棄されません。 これは、プログラムが 8192 の TOC エントリーを超える場合、64 ビット・モードで大きなプログラムをリンクしている際に、 エラーが起きる原因になります。

-qminimaltoc を指定すると、コンパイラーが、各コンパイル単位ごとに、1 つの TOC エントリーのみ作成します。 このオプションの指定は、使用可能な TOC エントリーの使用を最小限にします。 しかし、この使用はパフォーマンスに影響します。-qminimaltoc オプション は、特に頻繁に実行されるコードを含むファイルでは、慎重に使用してください。

-qmixed オプション

構文

-qmixed | -qnomixed
MIXED | NOMIXED

これは、-U オプションの長い形式です。

-qmoddir オプション

構文

-qmoddir=directory

コンパイラーが書き込むモジュール・ファイル (.mod) の位置を指定します。

デフォルト

-qmoddir を指定しない場合、 .mod ファイルは現行ディレクトリーに置かれます。

モジュールを参照するファイルをコンパイルしているときに、 このディレクトリーから .mod ファイルを読むには、 -I オプションを使用してください。

関連情報

XL Fortran 出力ファイルを参照してください。

モジュールは Fortran 90 または 95 の機能であり、「XL Fortran ランゲージ・リファレンス」の『モジュール』の節で説明されています。

-qmodule オプション

構文

-qmodule=mangle81

コンパイラーが非組み込みモジュール・ファイルに対して XL Fortran バージョン 8.1 の命名規則を 使用するように指定します。

このオプションを使用すると、モジュールとバージョン 9.1 のコンパイラーに関連したオブジェクト・ファイルを生成して、 これらのオブジェクト・ファイルと、バージョン 8.1 以前のコンパイラーで コンパイルされた他のオブジェクト・ファイルをリンクすることができます。

関連情報

モジュールは Fortran 90 または 95 の機能であり、「XL Fortran ランゲージ・リファレンス」の『モジュール』の節で説明されています。

XL Fortran 外部名の規則 および リンク中の命名競合の回避 も参照してください。

-qnoprint オプション

構文

-qnoprint

他のリスト・オプションの設定とは関係なく、コンパイラーがリスト・ファイルを作成しないようにします。

コマンド行に -qnoprint を指定すれば、構成ファイルまたは @PROCESS ディレクティブに 他のリスト・オプションを入れることができ、リスト・ファイルが作成されるのを防止します。

規則

通常、リスト・ファイルは、-qattr-qlist-qlistopt-qphsinfo-qsource-qreport または -qxref のいずれかのオプションを指定すると作成されます。 -qnoprint は、名前を /dev/null (書き込まれたあらゆるデータを廃棄するデバイス) に変更して リスト・ファイルが作成されるのを防止します。

関連情報

リストとメッセージを制御するオプションを参照してください。

-qnullterm オプション

構文

-qnullterm | -qnonullterm
NULLTERM | NONULLTERM

仮引き数として渡される文字定数式に NULL 文字を付加することによって、 ストリングを C 関数に渡しやすくします。

このオプションを使用すると、個々のストリング引き数に NULL 文字を追加しなくても C 関数へストリングを 渡すことができます。

背景情報

このオプションの影響を受けるのは、基本文字定数、複数の文字定数を連結したもの、文字型の名前付き定数、 ホレリス定数、2 進、8 進、16 進の型なし定数から構成された引き数 (インターフェース・ブロックが使用可能な場合) か、 それらのオブジェクトから全体が構成されているすべての文字式です。 CHAR および ACHAR 組み込み関数からの結果値にも、組み込み関数への引き数が初期化式である 場合は NULL 文字が追加されます。

規則

このオプションは仮引き数の長さ (XL Fortran 呼び出し規則の一部として渡された追加の長さの引き数で定義された もの) を変更しません。

制限

このオプションは %REF 組み込み関数を使用して渡された引き数にもそうでない引き数にも 影響を及ぼしますが、値によって組み込み関数を使用して渡された引き数には影響を 及ぼしません。 このオプションは、入出力ステートメントの中の文字式に影響を与えません。

このオプションを指定する場合と指定しない場合の 2 つの例を、 同じ C 関数を使用して次に示します。

      @PROCESS NONULLTERM
      SUBROUTINE CALL_C_1
        CHARACTER*9, PARAMETER :: HOME = "/home/luc"
! Call the libc routine mkdir() to create some directories.
        CALL mkdir ("/home/luc/testfiles¥0", %val(448))
! Call the libc routine unlink() to remove a file in the home directory.
        CALL unlink (HOME // "/.hushlogin" // CHAR(0))
      END SUBROUTINE
 
      @PROCESS NULLTERM
      SUBROUTINE CALL_C_2
        CHARACTER*9, PARAMETER :: HOME = "/home/luc"
! With the option, there is no need to worry about the trailing null
! for each string argument.
        CALL mkdir ("/home/luc/testfiles", %val(448))
        CALL unlink (HOME // "/.hushlogin")
      END SUBROUTINE
!

関連情報

言語間での文字型の引き渡しを参照してください。

-qobject オプション

構文

-qOBJect | -qNOOBJect
OBJect | NOOBJect

オブジェクト・ファイルを作成するか、または、ソース・ファイルの構文をチェックした直後に停止するかを指定します。

コンパイルに時間がかかる大きなプログラムをデバッグするときは、-qnoobject オプションを 使用するようお勧めします。 このオプションを使用すれば、コード作成のオーバーヘッドなしに、プログラムの構文をすばやくチェックすることが できます。 .lst ファイルは依然として作成されるので、デバッグを開始するための診断情報を得ることができます。

プログラム・エラーを修正した後に再びデフォルト (-qobject) に変更して、プログラムが正しく 機能するかをテストし、 正しく機能しない場合は、対話式デバッグのための -g オプションでコンパイルすることができます。

制限

-qhalt オプションは -qobject オプションを、 そして -qnoobject オプションは -qhalt オプションをオーバーライドできます。

関連情報

リストとメッセージを制御するオプションおよび オブジェクト・セクションを参照してください。

コンパイラー・フェーズには、 コンパイラー・フェーズに関する技術情報が記載されています。

-qonetrip オプション

構文

-qonetrip | -qnoonetrip
ONETRIP | NOONETRIP

これは、-1 オプションの長い形式です。

-qoptimize オプション

構文

-qOPTimize[=level] | -qNOOPTimize
OPTimize[(level)] | NOOPTimize

これは、-O オプションの長い形式です。

-qpdf オプション

構文

-qpdf{1|2}

プロファイル指示フィードバック (profile-directed feedback (PDF)) によって最適化を調整します。 その場合、条件付き分岐の近辺および頻繁に実行されるコード・セクション内の最適化が、サンプル・プログラムの実行結果を使用して改善されます。

PDF を使用する場合、次のステップに従ってください。

  1. -qpdf1 オプションを使用してプログラム内の一部または すべてのソース・ファイルをコンパイルします。 最適化のために、-O2 オプションか、 あるいは、-O3-O4-O5 オプションのいずれか (こちらの方が望ましい) を指定する必要があります。 ファイルのコンパイルに使用するコンパイラー・オプションには特に注意してください。 後で同じオプションを使用する必要が生じます。

    大きなアプリケーションでは、最適化から最も利益を得られる範囲のコードを集中的に作成します。 アプリケーションのコードすべてを -qpdf1 オプション付きでコンパイルする必要はありません。

  2. 一般的なデータ・セットを使用してプログラムをひととおり実行します。 プログラムは終了時にプロファイル情報を記録します。 さまざまなデータ・セットを使用してプログラムを何回も実行すると、 プロファイル情報が累積し、 分岐やコード・ブロックが実行される頻度の正確なカウントが得られます。
    重要:
    完成したプログラムを通常実行するときに使用されるデータを代表するようなデータを使用してください。
  3. 前と同じコンパイラー・オプションを使用し、 -qpdf1-qpdf2 に変更してプログラムを再リンクします。 -L-l などはリンカー・オプションであることに留意してください。 それらのオプションはこの時点で変更できます。 この 2 回目のコンパイルでは、 累積したプロファイル情報を使用して最適化を微調整できます。 結果として生成されたプログラムにはプロファイルのオーバーヘッドは含まれておらず、 フル・スピードで実行されます。

最善のパフォーマンスを得るため、PDF を使用する場合は (上記の例のように) あらゆるコンパイルに -O3-O4、または -O5 オプションを使用してください。 IBM XL C/C+ コンパイラーでコンパイルした C または C++ コードが アプリケーションに含まれている場合、これらのコンパイラーで使用可能な -qpdf1 および -qpdf2 オプションを指定して、 追加の PDF 最適化を実行することができます。 すべての Fortran および C/C++ コード上で -qpdf1/-qpdf2-qipa または -O5 オプションを組み合わせると (すなわち、IPA とリンクすると)、最適化に使用可能な最大 PDF 情報を もたらします。

規則

プロファイルは現行作業ディレクトリーか、PDFDIR 環境変数が設定されている場合はその変数が指定する ディレクトリーに置かれます。

コンパイルと実行で時間を無駄にしないために、PDFDIR 環境変数には必ず絶対パスを指定してください。 そうしなかった場合、アプリケーションを誤ったディレクトリーから実行し、アプリケーションがプロファイル・データ・ファイルを 見つけられないこともあります。 その場合、プログラムが正しく最適化されなかったり、セグメント化障害によって停止する可能性があります。 セグメント化障害は、PDFDIR 変数の値を変更し、PDF プロセスを完了する前にアプリケーションを実行した場合にも 起きることがあります。

背景情報

このオプションは、アプリケーション全体を 2 回コンパイルする必要があるので、他のデバッグと調整が済んだ後、 アプリケーションを実動させる前の最終ステップの 1 つとして使用されるよう設計されています。

制限

以下のコマンドは /opt/ibmcmp/xlf/9.1/bin ディレクトリーにあり、PDFDIR ディレクトリーの 管理に使用できます。

cleanpdf [pathname] pathname ディレクトリーから、または pathname が指定されていない場合は PDFDIR ディレクトリーから、すべてのプロファイル情報を削除します。 また、PDFDIR が設定されていない場合は、 現行ディレクトリーから削除します。

プログラムを変更して PDF プロセスを再度実行した場合、 プロファイル情報を除去すると、 実行時オーバーヘッドが低減されます。

このプログラムは、-qpdf2 でコンパイルした後か、 特定のアプリケーションについて PDF を済ませた後に実行してください。 cleanpdf を実行した後にアプリケーションで PDF を引き続き使用する場合は、 -qpdf1 を指定してすべてのファイルを再コンパイルする必要があります。

mergepdf 2 つ以上の入力 PDF レコードから単一の PDF レコードを生成します。 すべての PDF レコードは、同じ実行可能ファイルからのものでなければなりません。

mergepdf は、各 PDF レコード (すなわちファイル) をその「重み」に基づいて自動的に スケーリングします。 スケーリング比率は、それぞれの PDF レコードごとに指定することができるため、重要性の高い トレーニング・ランには、重要性の低いものよりも重みを大きくすることができます。 mergepdf の構文は次のとおりです。

mergepdf [-r1] record1 [-r2] record2 ... -outputrecname [-n] [-v]

上記の意味は次のとおりです。

-r
PDF レコードのスケーリング比率。 入力レコードに対して -r を指定しない場合、 デフォルトの比率は 1.0 で、外部スケーリングは適用されません。 スケーリング比率は、ゼロ以上でなければなりません。 また、浮動小数点数または整数でもかまいません。

record
PDF プロファイルが含まれている入力ファイル、またはディレクトリー。

-o output_recordname
mergepdf がマージ済みレコードを書き込む先の PDF 出力ディレクトリー名、またはファイル名。 ディレクトリーを指定する場合、ディレクトリーはコマンドを実行する前に存在していなければなりません。

-n
PDF レコードを正規化しません。 デフォルトでは、レコードは、-r でユーザー指定の比率を適用する前に、それぞれのプロファイルごとに 内部的に計算された比率に基づいて正規化されます。 -n を指定すると、PDF レコードは、ユーザー指定の比率 -r によってスケーリングされます。 -r を指定しない場合、PDF レコードはまったくスケーリングされません。

-v
冗長モードは、使用されている内部およびユーザー指定のスケーリング比率を表示します。
resetpdf [pathname] 上で説明した cleanpdf [pathname] と同じです。 このコマンドは、以前のバージョンとの互換性のために提供されています。
showpdf プログラム実行で実行されたすべてのプロシージャーの呼び出しおよびブロック・カウントを表示します。 このコマンドを使用するには、-qpdf1 および -qshowpdf コンパイラー・オプションを 両方とも指定して、まずアプリケーションをコンパイルする必要があります。

簡単な例を次に示します。

# Set the PDFDIR variable.
  export PDFDIR=$HOME/project_dir
# Compile all files with -qpdf1.
  xlf95 -qpdf1 -O3 file1.f file2.f file3.f
# Run with one set of input data.
  a.out <sample.data
# Recompile all files with -qpdf2.
  xlf95 -qpdf2 -O3 file1.f file2.f file3.f
# The program should now run faster than without PDF if
# the sample data is typical.

より複雑な例を次に示します。

# Set the PDFDIR variable.
  export PDFDIR=$HOME/project_dir
# Compile most of the files with -qpdf1.
  xlf95 -qpdf1 -O3 -c file1.f file2.f file3.f
# This file is not so important to optimize.
  xlf95 -c file4.f
# Non-PDF object files such as file4.o can be linked in.
  xlf95 -qpdf1 file1.o file2.o file3.o file4.o
# Run several times with different input data.
  a.out <polar_orbit.data
  a.out <elliptical_orbit.data
  a.out <geosynchronous_orbit.data
# Do not need to recompile the source of non-PDF object files (file4.f).
  xlf95 -qpdf2 -O3 file1.f file2.f file3.f
# Link all the object files into the final application.
  xlf95 file1.o file2.o file3.o file4.o

関連情報

XL Fortran 入力ファイルXL Fortran 出力ファイルプロファイル指示フィードバック (PDF) の使用、 および 条件付き分岐の最適化を参照してください。

-qphsinfo オプション

構文

-qphsinfo | -qnophsinfo
PHSINFO | NOPHSINFO

-qphsinfo コンパイラー・オプションは、各コンパイラー・フェーズの タイミング情報を端末に表示します。

出力は、各フェーズで number1/number2 の形式をとります。 ここで、number1 はコンパイラーが使用する CPU 時間、number2 はコンパイラー時間と CPU がシステム呼び出しの処理に要する時間の合計を表します。

3 つのコンパイル単位からなる app.f をコンパイルして、コンパイルの各フェーズに要する時間をレポートするには、次のように入力します。

xlf90 app.f  -qphsinfo

出力は以下のようなものになります。

FORTRAN phase 1 ftphas1      TIME =  0.000 / 0.000
** m_module   === End of Compilation 1 ===
FORTRAN phase 1 ftphas1      TIME =  0.000 / 0.000
** testassign   === End of Compilation 2 ===
FORTRAN phase 1 ftphas1      TIME =  0.000 / 0.010
** dataassign   === End of Compilation 3 ===
HOT       - Phase Ends;   0.000/  0.000
HOT       - Phase Ends;   0.000/  0.000
HOT       - Phase Ends;   0.000/  0.000
W-TRANS   - Phase Ends;   0.000/  0.010
OPTIMIZ   - Phase Ends;   0.000/  0.000
REGALLO   - Phase Ends;   0.000/  0.000
AS        - Phase Ends;   0.000/  0.000
W-TRANS   - Phase Ends;   0.000/  0.000
OPTIMIZ   - Phase Ends;   0.000/  0.000
REGALLO   - Phase Ends;   0.000/  0.000
AS        - Phase Ends;   0.000/  0.000
W-TRANS   - Phase Ends;   0.000/  0.000
OPTIMIZ   - Phase Ends;   0.000/  0.000
REGALLO   - Phase Ends;   0.000/  0.000
AS        - Phase Ends;   0.000/  0.000
1501-510  Compilation successful for file app.f.
 

各フェーズは、各コンパイル単位に対応して 3 回呼び出されます。FORTRAN はフロントエンド構文解析とセマンティック分析、 HOT はループ変換、W-TRANS は中間言語変換、OPTIMIZ は高水準最適化、REGALLO はレジスター割り振りと低水準最適化、および AS は最終アセンブリーを表します。

-qphsinfo を指定して、app.f-O4 最適化レベルで コンパイルします。

xlf90 myprogram.f  -qphsinfo -O4

出力結果は以下のようになります。

FORTRAN phase 1 ftphas1      TIME =  0.010 / 0.020
** m_module   === End of Compilation 1 ===
FORTRAN phase 1 ftphas1      TIME =  0.000 / 0.000
** testassign   === End of Compilation 2 ===
FORTRAN phase 1 ftphas1      TIME =  0.000 / 0.000
** dataassign   === End of Compilation 3 ===
HOT       - Phase Ends;   0.000/  0.000
HOT       - Phase Ends;   0.000/  0.000
HOT       - Phase Ends;   0.000/  0.000
IPA       - Phase Ends;   0.080/  0.100
1501-510  Compilation successful for file app.f.
IPA       - Phase Ends;   0.050/  0.070
W-TRANS   - Phase Ends;   0.010/  0.030
OPTIMIZ   - Phase Ends;   0.020/  0.020
REGALLO   - Phase Ends;   0.040/  0.040
AS        - Phase Ends;   0.000/  0.000

IPA (プロシージャー間分析) 最適化フェーズ中、プログラムの結果は 1 つのコンパイル単位になることに注意してください。 つまり、すべてのプロシージャーがインライン化されます。

関連情報

コンパイラー・フェーズ.

-qpic オプション

構文

-qpic[=small|large]| -qnopic (in 32-bit mode)
-qpic[=small|large]| -qnopic (in 64-bit mode)
 

-qpic コンパイラー・オプションは、共用ライブラリーで使用できる位置独立コード (PIC) を生成します。

引き数

small | large
small サブオプションは、グローバル・オフセット・テーブルの サイズが最大で 64K であると想定するようコンパイラーに指示します。 large サブオプションを使用すると、グローバル・オフセット・テーブルの サイズを 64K より大きくすることができます。 このサブオプションによって、より多くのアドレスをグローバル・オフセット・テーブルに 保管できます。 ただし、このサブオプションは、通常、small サブオプションが 生成するコードよりも大きいコードを生成します。

64 ビット・モードでは、-qpic=small がデフォルトです。

-qnopic
コンパイラーは位置独立コードを生成しません。

32 ビット・モードでは、-qnopic がデフォルトです。

関連情報

リンカー・オプションの詳細については、ld コマンドの man ページを参照してください。

-qport オプション

構文

-qport[=suboptions]| -qnoport
PORT[(suboptions)]| NOPORT

-qport コンパイラー・オプションは、他の Fortran 言語拡張機能を収容するためにいくつかのオプションを 提供して、XL Fortran にプログラムを移植するときの柔軟性を高めます。 特定のサブオプションは常に、他の -qport およびコンパイラー・オプションとは独立して機能します。

引き数

hexint | nohexint
このオプションを指定する場合、型のない 16 進定数ストリングは、INT 組み込み関数へ実引き数として 渡すとき、整数に変換されます。 INT へ実引き数として渡されない型のない 16 進定数ストリングは、影響を受けることはありません。

mod | nomod
このオプションを指定することにより、MOD 組み込み関数の既存の制約をなくし、 同じデータ型のパラメーターの 2 つの引き数は、別の種類の型付きパラメーターにすることができます。 その結果、その引き数は同じ型になりますが、より大きい種類の型付きパラメーター値を持ちます。

nullarg | nonullarg
外部または内部プロシージャーでこのオプションを指定すると、コンパイラーは 左括弧とコンマ、2 つのコンマ、またはコンマと右括弧によって区切られた空の引き数をヌル引き数として扱います。 このサブオプションは、引き数リストが空の場合は効果がありません。

空の引き数の例を次に示します。

call foo(,,z)
 
call foo(x,,z)
 
call foo(x,y,)

次のプログラムには、ヌル引き数が含まれます。
Fortran プログラム:

program nularg
real(4) res/0.0/
integer(4) rc
integer(4), external :: add
rc = add(%val(2), res, 3.14, 2.18,) ! The last argument is a
                                    ! null argument.
if (rc == 0) then
print *, "res = ", res
else
print *, "number of arguments is invalid."
endif
end program


C プログラム:

int add(int a, float *res, float *b, float *c, float *d)
{
   int ret = 0;
   if (a == 2)
     *res = *b + *c;
   else if (a == 3)
     *res = (*b + *c + *d);
   else
     ret = 1;
   return (ret);
}

sce | nosce
デフォルトでは、コンパイラーは、選択した論理式で XL Fortran の規則を使用して短絡回路評価を実行します。sce を指定すると、 コンパイラーは XL Fortran 以外の規則を使用できます。コンパイラーは、現行の 規則で許可されている場合のみ短絡回路評価を実行します。

typestmt | notypestmt
PRINT ステートメントと同様の方法で動作する TYPE ステートメントは、このオプションを指定するときは 常にサポートされます。

typlssarg | notyplssarg
定数が、関連する仮引き数の型が整数である組み込みプロシージャーに対する 実引き数である場合に、すべての型なし定数をデフォルト整数に変換します。 型が非整数である型なし実引き数に関連付けられている仮引き数は、 このオプションの影響を受けません。

このオプションを使用した場合、いくつかの組み込みプロシージャーの種類が 一致しないことがあります。 その種類を最も長い引き数の種類に変換するには、-qxlf77=intarg を指定してください。

関連情報

詳細については、「XL Fortran ランゲージ・リファレンス」の INT および MOD 組み込み関数に関する節を参照してください。

-qposition オプション

構文

-qposition={appendold | appendunknown} ...
POSITION({APPENDOLD | APPENDUNKNOWN} ...)

POSITION= 指定子を持たない OPEN ステートメントの後にデータが書き込まれ、 対応する STATUS= 値 (OLD または UNKNOWN) が指定されると、 ファイル・ポインターをファイルの終わりに置きます。

規則

最初の I/O 操作がファイル・ポインターを移動させ、その操作が WRITE ステートメントまたは PRINT ステートメントであると、位置は APPEND になります。 また、BACKSPACEENDFILEREADREWIND ステートメントであると、 位置は REWIND になります。

次の例では、POSITION= 指定子を指定せずに STATUS='old' を 指定する OPEN ステートメントは、POSITION='append' が指定されているかのように ファイルをオープンします。

xlf95 -qposition=appendold opens_old_files.f
 

次の例では、POSITION= 指定子を指定せずに STATUS='unknown' を 指定する OPEN ステートメントは、POSITION='append' が指定されているかのように ファイルをオープンします。

xlf95 -qposition=appendunknown opens_unknown_files.f
 

次の例では、POSITION= 指定子を指定せずに STATUS='old'STATUS='unknown' のいずれかを指定する OPEN ステートメントは、POSITION='append' が 指定されているかのようにファイルをオープンします。

xlf95 -qposition=appendold:appendunknown opens_many_files.f

関連情報

ファイルの位置決め、および「XL Fortran ランゲージ・リファレンス」の OPEN ステートメントについての節を参照してください。

-qprefetch オプション

構文

-qprefetch | -qnoprefetch

コードのパフォーマンスを向上させる機会がある場合に、プリフェッチ命令を自動的に 挿入するようにコンパイラーに指示します。

関連情報

プリフェッチ・ディレクティブについて詳しくは、 「XL Fortran ランゲージ・リファレンス」の『PREFETCH ディレクティブ』および 「The POWER4 Processor Introduction and Tuning Guide」を参照してください。 トリガー定数を使用してプリフェッチ・ディレクティブを選択的に制御するには、 -qdirective オプションを 参照してください。

-qqcount オプション

構文

-qqcount | -qnoqcount
QCOUNT | NOQCOUNT

拡張精度 Q 編集記述子 (Qw.d) だけではなく、 Q 文字カウント編集記述子 (Q) を受け入れます。-qnoqcount を使用すると、 すべての Q 編集記述子が拡張精度 Q 編集記述子として解釈されます。

規則

コンパイラーは、Q 編集記述子を構文によって拡張精度 Q 編集記述子または Q 文字カウント編集記述子であると 解釈して、どちらの記述子が指定されるかを判別できない場合に、警告を出します。

関連情報

XL Fortran ランゲージ・リファレンス」の『Q (文字カウント) 編集』を参照してください。

-qrealsize オプション

構文

-qrealsize=byte
REALSIZE(byte)

REALDOUBLE PRECISIONCOMPLEX、および DOUBLE COMPLEX 値のデフォルト・サイズを設定します。

このオプションは、他のシステム用に書かれたコードとの互換性を維持することを意図しています。 ある状況においては、-qautodbl の代替オプションとして便利なことがわかります。

規則

このオプションは定数、変数、派生型コンポーネント、および kind 型付きパラメーターが指定されていない 関数 (組み込み関数を含む) のサイズ 2 に影響を及ぼします。 REAL(4)COMPLEX*16 など、kind 型付きパラメーターまたは長さ (length) で宣言された オブジェクトは影響を受けません。

引き数

byte に使用できる値は次のとおりです。

結果

このオプションは、 影響を受けるオブジェクトのサイズを次のように判別します。

Data Object       REALSIZE(4) in Effect       REALSIZE(8) in Effect
-------------------------------------------------------------------
1.2               REAL(4)                      REAL(8)
1.2e0             REAL(4)                      REAL(8)
1.2d0             REAL(8)                      REAL(16)
1.2q0             REAL(16)                     REAL(16)
 
REAL              REAL(4)                      REAL(8)
DOUBLE PRECISION  REAL(8)                      REAL(16)
COMPLEX           COMPLEX(4)                   COMPLEX(8)
DOUBLE COMPLEX    COMPLEX(8)                   COMPLEX(16)

組み込み関数にも同様の規則が当てはまります。

このオプションは、データのデフォルト・サイズが異なるシステムから、プログラムを変更せずに移植できるように するためのものです。 たとえば、CRAY コンピューター用に書かれたプログラムには -qrealsize=8 が必要です。 このオプションのデフォルト値 4 は、多くの 32 ビット・コンピューター用に書かれたプログラムに適しています。

-qrealsize を 8 に設定すると、 -qdpc オプションの設定がオーバーライドされます。

この例には、-qrealsize の設定を変更すると代表的なエンティティーがどのように変形するかが示されています。

@PROCESS REALSIZE(8)
         REAL R                  ! treated as a real(8)
         REAL(8) R8              ! treated as a real(8)
         DOUBLE PRECISION DP     ! treated as a real(16)
         DOUBLE COMPLEX DC       ! treated as a complex(16)
         COMPLEX(4) C            ! treated as a complex(4)
         PRINT *,DSIN(DP)        ! treated as qsin(real(16))
! Note: we cannot get dsin(r8) because dsin is being treated as qsin.
         END

-qrealsize=8 を指定すると、以下のように DABS などの組み込み関数に影響を与えます。

INTRINSIC DABS        ! Argument and return type become REAL(16).
DOUBLE PRECISION DABS ! OK, because DOUBLE PRECISION = REAL(16)
                      ! with -qrealsize=8 in effect.
REAL(16) DABS         ! OK, the declaration agrees with the option setting.
REAL(8) DABS          ! The declaration does not agree with the option
                      ! setting and is ignored.

関連情報

-qintsize オプションは、整数と論理オブジェクトに影響を与える同様のオプションです。 -qautodbl オプション-qrealsize に関連していますが、これらのオプションは結合することはできません。 -qautodbl オプションが自動精度倍増、埋め込み (またはその両方) をオンにする と、-qrealsize オプションは効果がなくなります。

XL Fortran ランゲージ・リファレンス」の『型付きパラメーターおよび 指定子』では、kind 型付きパラメーターについて説明しています。

-qrecur オプション

構文

-qrecur | -qnorecur
RECUR | NORECUR

このオプションの使用はお勧めできません。 外部サブプログラムを再帰的に呼び出すことができるかどうかを指定します。新規プログラムの場合、RECURSIVE キーワード を使用すると、標準適応した方法で再帰的プロシージャーを使用することができます。 -qrecur オプションを指定すると、コンパイラーはすべてのプロシージャーが再帰的であると見なしてしまいます。 再帰的プロシージャーのコード生成の効率が落ちる可能性があります。RECURSIVE キーワードを使用すれば、どのプロシージャーを再帰的にするかを正確に指定することができます。

! The following RECUR recursive function:
 
        @process recur
        function factorial (n)
        integer factorial
        if (n .eq. 0) then
           factorial = 1
        else
           factorial = n * factorial (n-1)
        end if
        end function factorial
 
! can be rewritten to use F90/F95 RECURSIVE/RESULT features:
 
        recursive function factorial (n) result (res)
        integer res
        if (n .eq. 0) then
           res = 1
        else
           res = n * factorial (n-1)
        end if
        end function factorial

制限

xlfxlf_rf77、または fort77 コマンドを使用して再帰呼び出しを含むプログラムをコンパイルする場合は、-qnosave を指定して、 デフォルトのストレージ・クラスを自動的に作成します。

-qreport オプション

構文

-qreport[={smplist | hotlist}...]
-qnoreport
REPORT[({SMPLIST | HOTLIST}...)] NOREPORT

プログラムを並列化する方法とループを最適化する方法を示す 変換報告書を作成するかどうかを決定します。

smplist サブオプションを使用すると、低レベルの変換が調べられるため、 SMP プログラムのパフォーマンスをデバッグしたり調整したりできます。プログラムのデータ処理方法や、ループの自動並列化方法を知ることもできます。 リスト内のコメントは、変換後のプログラムが元のソース・コードにどのように対応しているかを示したり、 特定のループが並列化されなかった理由などを示したりします。

hotlist サブオプションを使用すると、 ループの変換過程を示す報告書を生成することができます。

引き数

smplist
プログラムの並列化過程を示す疑似 Fortran リストを作成します。 このリストが作成されるのは、 ループや他の最適化が実行される前です。 このリストの中には、修正すればより効率的にできるプログラムの箇所を示すメッセージも含められます。 この報告書が作成されるのは、-qsmp オプションが有効な場合だけです。

hotlist
ループの変換過程を示す疑似 Fortran リストを作成します。 このリストは、全ループのパフォーマンスを調整するのに役立ちます。 サブオプションを指定せずに -qreport を指定した場合は、 このサブオプションがデフォルトになっています。

また、-qsmp オプションが有効なときに -qreport=hotlist オプションが指定された場合は、SMP 実行時への呼び出し、 および並列構文のために作成されたプロシージャーへの呼び出しを示す疑似 Fortran リストが作成されます。

背景情報

変換リストはコンパイラー・リスト・ファイルの一部です。

制限

ループ変換 および自動並列処理 は、-O5 (または -qipa=level=2) 最適化レベルを使用して、リンク・ステップで行われます。 -qreport オプションは、リンク・ステップで、リスト・ファイルに報告書を生成します。

ループ変換リストを生成する場合は、 -qsmp オプションか -qhot オプションを必ず指定します。 並列変換リストまたは並列パフォーマンス・メッセージを生成する場合は、 -qsmp オプションを必ず指定します。

リストに示されるコードはコンパイル可能であるというわけではありません。 プログラムにこのコードを組み込んだり、 名前がリストに出ている内部ルーチンを明示的に呼び出したりしないでください。

並列の調整に使用できるリスト・ファイルを作成するには、次のようにします。

    xlf_r -qsmp -O3 -qhot -qreport=smplist needs_tuning.f

並列調整とループ・パフォーマンス調整の両方に使用できるリスト・ファイルを作成するには、次のようにします。

    xlf_r -qsmp -O3 -qhot -qreport=smplist:hotlist needs_tuning.f

ループのパフォーマンスの調整に だけ使用できるリスト・ファイルを作成するには、次のようにします。

    xlf95_r -O3 -qhot -qreport=hotlist needs_tuning.f

関連情報

-qpdf オプションを参照してください。

-qsaa オプション

構文

-qsaa | -qnosaa
SAA | NOSAA

SAA FORTRAN 言語定義に従っているかどうかをチェックします。 非準拠のソース・コード、 およびそのような非準拠を許可するオプションを識別します。

規則

これらの警告には、言語レベル関係の問題を示すプレフィックス (L) が付きます。

制限

-qflag オプションは、このオプションをオーバーライドすることができます。

関連情報

-qlanglvl オプションを使用して、コードが国際標準に従っているかどうかを調べます。

-qsave オプション

構文

-qsave[={all|defaultinit}] | -qnosave
SAVE[({all|defaultinit})] NOSAVE

これには、ローカル変数の デフォルト・ストレージ・クラスを指定します。

-qsave=all を指定する場合は、デフォルト・ストレージ・クラスは STATIC です。 -qnosave を指定する場合は、デフォルト・ストレージ・クラスは AUTOMATIC です。 -qsave=defaultinit を指定する場合は、デフォルト・ストレージ・クラスは、デフォルト初期化の指定が ある派生型の変数においては STATIC、その他の場合は AUTOMATIC です。 -qsave オプションのデフォルト・サブオプションは、all です。 2 つのサブオプションは相互に排他的です。

このオプションのデフォルトは、使用される起動によって異なります。 たとえば、-qsave を指定して、FORTRAN 77 プログラムの動作を再現しなければならない場合があります。 xlfxlf_rf77、および fort77 コマンドは、前の動作を保持するために、 /etc/opt/ibmcmp/xlf/9.1/xlf.cfg にデフォルト時オプションとしてリストされている -qsave を持っています。

以下には、派生データ型での -qsave オプションの影響を例示しています。

        PROGRAM P
          CALL SUB
          CALL SUB
        END PROGRAM P
 
        SUBROUTINE SUB
          LOGICAL, SAVE :: FIRST_TIME = .TRUE.
          STRUCTURE /S/
            INTEGER I/17/
          END STRUCTURE
          RECORD /S/ LOCAL_STRUCT
          INTEGER LOCAL_VAR
 
          IF (FIRST_TIME) THEN
            LOCAL_STRUCT.I = 13
            LOCAL_VAR = 19
            FIRST_TIME = .FALSE.
          ELSE
            ! Prints " 13" if compiled with -qsave or -qsave=all
            ! Prints " 13" if compiled with -qsave=defaultinit
            ! Prints " 17" if compiled with -qnosave
            PRINT *, LOCAL_STRUCT
            ! Prints " 19" if compiled with -qsave or -qsave=all
            ! Value of LOCAL_VAR is undefined otherwise
            PRINT *, LOCAL_VAR
          END IF
        END SUBROUTINE SUB

関連情報

-qrecur オプションでコンパイルされたマルチスレッド・アプリケーション およびサブプログラムには、通常、-qnosave オプションが必要です。

このオプションが変数のストレージ・クラスにどのような影響を与えるかについては、 「XL Fortran ランゲージ・リファレンス」の『変数のストレージ・クラス』を参照してください。

-qsaveopt オプション

構文

-qsaveopt | -qnosaveopt

ソース・ファイル、およびその他の情報のコンパイルに使用するコマンド行オプションを 該当するオブジェクト・ファイルに保管します。 コンパイルでは、このオプションを有効にするためのオブジェクト・ファイルを生成する必要があります。 各オブジェクトに複数のコンパイル単位が含まれている場合であっても、コマンド行オプションの 1 コピーだけが保管されます。

使用されているオプションをリストするには、オブジェクト・ファイルに strings -a コマンドを発行します。 以下がリストされます。

opt source_type invocation_used compilation_options

たとえば、オブジェクト・ファイルが t.o である場合、strings -a t.o コマンドは、 以下のような情報を生成します。

@(#) opt f /opt/ibmcmp/xlf/9.1/bin/xlf90 -qlist -qsaveopt t.f

ここで、f は Fortran として使用されたソースを識別し、 /opt/ibmcmp/xlf/9.1/bin/xlf90 は使用された呼び出しコマンドを示し、-qlist -qsaveopt はコンパイル・オプションを示します。

-qsclk オプション

構文

-qsclk[=centi | micro]

SYSTEM_CLOCK 組み込みプロシージャーがプログラム内で使用するレゾリューションを指定します。 デフォルトは、センチ秒レゾリューション (-qsclk=centi) です。 マイクロ秒レゾリューションを使用するには、-qsclk=micro を指定します。

関連情報

リアルタイム・クロックからの整数データの戻りに関する詳細については、「XL Fortran ランゲージ・リファレンス」の 『SYSTEM_CLOCK』を参照してください。

-qshowpdf オプション

構文

-qshowpdf | -qnoshowpdf

-qpdf1 とともに使用して、追加の呼び出しとブロック・ カウント・プロファイル情報を 実行可能ファイルに追加します。

-qpdf1 とともに指定すると、コンパイラーは、追加のプロファイル情報をコンパイル済みアプリケーションに 挿入して、アプリケーション内のすべてのプロシージャーに対する呼び出しおよびブロック・ カウントを収集します。 コンパイル済みアプリケーションを実行すると、呼び出しおよびブロック・ カウントを ._pdf ファイルに 記録します。

トレーニング・データを使用してアプリケーションを実行した後で、showpdf ユーティリティーを 使用して ._pdf ファイルの内容を検索することができます。 このユーティリティーについては、-qpdf オプションで説明します。

-qsigtrap オプション

構文

-qsigtrap[=trap_handler]

メインプログラムが入っているファイルをコンパイルするときに、このオプションは、指定された トラップ・ハンドラーをセットアップして SIGTRAP および SIGFPE 例外をキャッチします。 このオプションを使用すれば、プログラム内の SIGNAL または SIGFPE サブプログラムを呼び出さなくても、SIGTRAP シグナル用にハンドラーを インストールすることができます。

引き数

xl__trce トラップ・ハンドラーを使用可能にするには、 ハンドラー名なしで -qsigtrap を指定してください。 別のトラップ・ハンドラーを使用可能にするには、 -qsigtrap オプションでそのハンドラー名を指定してください。

別のハンドラーを指定する場合は、 それが入っているオブジェクト・モジュールが プログラムとリンクされていることを確認してください。

関連情報

考えられる例外の原因については、XL Fortran 実行時例外で説明されています。 浮動小数点演算例外の検出とトラッピングでは、浮動小数点計算の結果生じる例外を扱う多くの方法を説明しています。 例外ハンドラーのインストールには、XL Fortran で使用できる例外ハンドラーのリストが掲載されています。

-qsmallstack オプション

構文

-qsmallstack[=dynlenonheap]
 | -qnosmallstack
 

可能な限りコンパイラーがスタック使用を最小化するように指定します。

-qsmallstack=dynlenonheap サブオプションは、非定数の文字長または非定数の配列境界を持つ自動オブジェクトに 影響を与えます。 指定すると、自動変数はヒープ上に割り振られます。 このサブオプションを指定しないと、自動変数はスタック上に割り振られます。

-qsmp オプション

構文

-qsmp[=suboptions]
-qnosmp

コードを SMP システムに対応するようにして生成すべきかどうかを示します。 デフォルトでは、単一処理装置マシンを想定してコードを生成します。このオプションを指定した場合、 コンパイラーはトリガー定数 SMP$$OMP、 および IBMP にあるすべてのディレクティブを認識します (ただし omp サブオプションを指定した場合は認識されません)。

すべてのスレッド・セーフ・コンポーネントで自動的にリンクを 行うものは、xlf_rxlf90_r、および xlf95_r 呼び出しコマンドのみです。 xlfxlf90xlf95f77、および fort77 呼び出しコマンドと一緒に -qsmp オプションを使用することもできますが、 適切なコンポーネントにリンクさせるのはユーザー側の責任で行います。 -qsmp オプションを使ってプログラム内のソース・ファイルをコンパイルする場合、 ld コマンドを使ってリンクしないならば、 リンク時に -qsmp も一緒に指定する必要があります。

引き数

auto | noauto
このサブオプションは自動並列化を制御します。 デフォルトでは、明示的にコーディングされた DO ループだけでなく、 配列言語として使用するためにコンパイラーが生成したループも、コンパイラーは並列化しようとします。 サブオプション noauto が指定されている場合、 自動並列化はオフになり、所定のディレクティブによってマークされた構文だけが並列化の対象になります。 コンパイラーがサブオプション omp を検出し、 -qsmp または -qsmp=auto サブオプションがコマンド行で明示的に指定されていない場合、noauto サブオプションが暗黙指定されます。また、-qsmp=noopt-qsmp=noauto を暗黙指定することに注意してください。 自動並列化は -qsmp=noopt のもとでは行われません。 ユーザー指定の並列化のみが行われます。

nested_par | nonested_par
nested_par サブオプションを指定する場合、 コンパイラーは所定のネスト並列構文 (PARALLEL DOPARALLEL SECTIONS) は並列化します。 この場合の並列化の対象には、有効範囲単位内にあるネストされたループ構文だけでなく、他の並列構文から (直接 であれ間接であれ) 参照されるサブプログラム内の並列構文も含まれます。 デフォルトでは、コンパイラーはネストされた並列構文を続けます。 このオプションは、自動的に並列化されるループには効果がないことに注意してください。 この場合、多くても (有効範囲単位内にある) ループ・ネストに含まれる 1 ループしか並列化されません。

nested_par サブオプションを設定しても、 これは OpenMP Fortran API に従っているわけではないことに注意してください。このサブオプションを指定する場合、実行時ライブラリーは、 PARALLEL 構文を囲むのに使用したのと同じスレッドを、ネストされた PARALLEL DO および PARALLEL SECTIONS 構文にも使用します。

omp | noomp
-qsmp=omp を指定する場合、 コンパイラーは OpenMP Fortran API での準拠事項を実施します。 このオプションを指定すると、以下のような効果があります。

C プリプロセッサーの起動時に このオプションを指定すると、_OPENMP C プリプロセッサー・マクロも自動的に 値 200011 と一緒に定義されます。 これは、条件付きコンパイルをサポートするのに役立ちます。 このマクロは、C プリプロセッサーの呼び出し時にのみ定義されます。

詳細については、「XL Fortran ランゲージ・リファレンス」の言語エレメントの節の 『条件付きコンパイル』を参照してください。

opt | noopt
-qsmp=noopt サブオプションを指定すると、コンパイラーは、 コードの並列化に必要な最小の最適化量を実行します。 これは、デフォルトで -qsmp-O2 および -qhot オプションを 使用可能にし、いくつかの変数をレジスターに移動してデバッガーでアクセス不能にする結果になるので、 デバッグに役立ちます。 しかし、-qsmp=noopt および -g オプションを指定すると、これらの変数はまだデバッガーからは 使用できます。

rec_locks | norec_locks
このサブオプションは、 CRITICAL 構文と関連付けられている問題を避けるために、 再帰的ロックを使用するかどうかを指定します。 rec_locks サブオプションを指定すると、 スレッドは同じ名前を持つ別の CRITICAL 構文の動的範囲内から、 CRITICAL 構文を実行することができます。 norec_locks を指定すると、 こうした状況ではデッドロックが生じます。

デフォルトは、norec_locks または正規のロックです。

schedule=option
schedule サブオプションは、 以下に示されているサブオプションのいずれかをとることができます。

affinity[=n]
ループの反復は、最初に、CEILING(number_of_iterations / number_of_threads) 反復を 含む、number_of_threads 区画に分割されます。 各区画は最初はスレッドに割り当てられており、その後それぞれが n 反復を含むチャンクに 再分割されていきます。 n が指定されなかった場合は、 CEILING(number_of_iterations_left_in_partition / 2) ループ反復でチャンクが構成されます。

スレッドが解放されると、スレッドが最初に割り当てられた区画から次のチャンクを取ります。 その区画の中にチャンクが 1 つも無くなったら、最初に別のスレッドに割り当てられた区画から使用可能な 次のチャンクを探します。

スリープ状態のスレッドに最初から割り当てられていた区画の処理は、活動状態にある別の スレッドにより完了されます。

dynamic[=n]
ループの反復は、n 反復を含むチャンクに 1 つずつ分割されます。 n が指定されなかった場合は、CEILING (number_of_iterations / number_of_threads) 反復で チャンクが構成されます。

活動状態のスレッドがチャンクに割り当てられる仕方は、「先着順実行」の原則に基づいています。 残りの処理のチャンクは、すべての処理の割り当てが終了するまで、活動状態のスレッドに割り当てられていきます。

スリープ状態のスレッドに割り当てられた処理は、そのスレッドが使用可能にならない限り、活動状態の 別のスレッドに引き継がれます。

guided[=n]
ループの反復は、n ループ反復の最小チャンク・サイズに到達するまで、 より小さなチャンクへと漸進的に分割されていきます。 n が指定されなかった場合、 n のデフォルト値である 1 反復が適用されます。

最初のチャンクには CEILING(number_of_iterations / number_of_threads) 回の反復が含まれます。 次のチャンクには CEILING(number_of_iterations_left / number_of_threads) 回の反復が含まれます。 活動状態のスレッドがチャンクに割り当てられる仕方は、「先着順実行」の原則に基づいています。

runtime
チャンク入れのアルゴリズムを実行時に決定することを指定します。

static[=n]
ループの反復は、n 反復を含むチャンクに 1 つずつ分割されます。 各スレッドは、「ラウンドロビン」方式でチャンクに割り当てられます。 これをブロック巡回スケジューリング と言います。 n の値が 1 である場合は、必然的に、スケジューリング・タイプが巡回スケジューリング として参照されます。

n を指定しない場合、チャンクには CEILING (number_of_iterations / number_of_threads) 反復が入ります。 各スレッドは、これらのチャンクのいずれかに割り当てられます。 これをブロック・スケジューリング と言います。

スリープ状態のスレッドに処理が割り当てられている場合、 その処理を完了できるようにするため、 そのスレッドは活動状態にさせられます。

チャンク入れのアルゴリズムと SCHEDULE の詳細については、 「XL Fortran ランゲージ・リファレンス」の『ディレクティブ』という節を参照してください。

threshold=n
行われる自動ループ並列化の程度を制御します。 n の値は、ループに示されているレベル「work」に基づいて、 ループの並列化をどこまで許可するかの下限を示します。 現在、「work」の計算の大部分は、ループ内の反復数で占められています。 通常は、n に高い値を指定すればするほど、 並列化されるループの数は少なくなります。 このサブオプションが指定されなかった場合、 プログラムはデフォルト値 n=100 を使用します。

規則

制限

-qsmp=noopt サブオプションは、プログラムのパフォーマンスに影響することがあります。

-qsmp を指定してある状態では、 特定のサブオプションの前後に omp サブオプションを指定することはできません。 omp を使用してそれらのサブオプションを指定しようとする場合、 コンパイラーは警告メッセージを発行します。

auto
このサブオプションは自動並列化を制御しますが、 omp は自動並列化をオフにしてしまいます。

nested_par
nested_par サブオプションを設定しても、 これは OpenMP Fortran API に従っているわけではないことに注意してください。このサブオプションを指定する場合、実行時ライブラリーは、 PARALLEL 構文を囲むのに使用したのと同じスレッドを、ネストされた PARALLEL DO および PARALLEL SECTIONS 構文にも使用します。

rec_locks
このサブオプションは、OpenMP Fortran API との整合性のない CRITICAL 構文の動作を指定します。

schedule=affinity=n
類縁性スケジューリング・タイプは、OpenMP Fortran API 標準にはありません。

-qsmp=noopt サブオプションは、コマンド行上のどこにあっても、パフォーマンス最適化オプションを オーバーライドします (-qsmp の前に -qsmp=noopt が現れる場合以外は)。 次の例では、-qsmp=noopt の後にあるすべての最適化オプションが、通常の有効範囲と優先順位の規則に従って 処理されることを示します。

例 1

     xlf90 -qsmp=noopt -O3...
is equivalent to
     xlf90 -qsmp=noopt...
 

例 2

     xlf90 -qsmp=noopt -O3 -qsmp...
is equivalent to
     xlf90 -qsmp -O3...
 

例 3

     xlf90 -qsmp=noopt -O3 -qhot -qsmp -O2...
is equivalent to
     xlf90 -qsmp -qhot -O2...
 

次を指定すると、コンパイラーは $OMP ディレクティブ・トリガーと SMP$ ディレクティブ・トリガーの 両方を認識し、いずれかのトリガーで指定したディレクティブが OpenMP では許可されていない場合に警告を発行します。

-qsmp=omp -qdirective=SMP$

次を指定すると、noauto サブオプションが使用されます。 コンパイラーは警告メッセージを出し、auto サブオプションを無視します。

-qsmp=omp:auto

以下の例では、CRITICAL 構文が原因で生じるデッドロックを回避するために、 -qsmp=rec_locks を指定する必要があります。

   program t
     integer  i, a, b
 
     a = 0
     b = 0
!smp$ parallel do
     do i=1, 10
!smp$ critical
     a = a + 1
!smp$ critical
     b = b + 1
!smp$ end critical
!smp$ end critical
     enddo
   end

関連情報

xlfxlf_rf77、 または fort77 コマンドを -qsmp オプションと一緒に使用して プログラムをコンパイルする場合は、デフォルト・ストレージ・クラスを自動的に 作成するために -qnosave を指定し、スレッド・セーフ・コードを生成するよう コンパイラーに指示するために -qthreaded を指定します。

-qsource オプション

構文

-qsource | -qnosource
SOURCE | NOSOURCE

リストのソース・セクションを作成するかどうかを指定します。

コンパイラーが問題を検出すると、 このオプションは端末に個々のソース行を表示します。 これは、Fortran ソース・ファイルにおけるプログラム・エラーを診断するのに非常に役立ちます。

印刷したいプログラムのそれらのソース・コード部分を囲むソース・ファイル内の @PROCESS ディレクティブに SOURCE および NOSOURCE を使用することにより、 ソース・コードの一部を選択的に印刷することができます。 この場合に限り、@PROCESS ディレクティブはコンパイル単位の最初のステートメントの前にある必要はありません。

次の例では、 -qsource オプションでプログラムがコンパイルされた場合に、 誤った呼び出しが行われる時点がさらにはっきりと識別されます。

$ cat argument_mismatch.f
         subroutine mult(x,y)
         integer x,y
         print *,x*y
         end
 
         program wrong_args
         interface
                 subroutine mult(a,b)   ! Specify the interface for this
                         integer a,b    ! subroutine so that calls to it
                 end subroutine mult    ! can be checked.
         end interface
         real i,j
         i = 5.0
         j = 6.0
         call mult(i,j)
         end
 

$ xlf95 argument_mismatch.f
** mult   === End of Compilation 1 ===
"argument_mismatch.f", line 16.12: 1513-061 (S) Actual argument attributes
do not match those specified by an accessible explicit interface.
** wrong_args  === End of Compilation 2 ===
1501-511  Compilation failed for file argument_mismatch.f.
$ xlf95 -qsource argument_mismatch.f
** mult   === End of Compilation 1 ===
        16 |   call mult(i,j)
            ............a...
a - 1513-061 (S) Actual argument attributes do not match those specified by
an accessible explicit interface.
** wrong_args   === End of Compilation 2 ===
1501-511  Compilation failed for file argument_mismatch.f.

関連情報

リストとメッセージを制御するオプションおよび ソース・セクションを参照してください。

-qspillsize オプション

構文

-qspillsize=bytes
SPILLSIZE(bytes)

-qspillsize-NS の長い形式です。 -N オプションを参照してください。

-qstrict オプション

構文

-qstrict | -qnostrict
STRICT | NOSTRICT

デフォルトにより -O3-O4-O5-qhot、および -qipa オプションで行われた最適化と、オプショナルで -O2 オプションで 行われた最適化によって、プログラムのセマンティクスが変更されないようにします。

デフォルト

-O3-O4-O5-qhot、および -qipa の場合、 デフォルトは -qnostrict です。 -O2 の場合、デフォルトは -qstrict です。 このオプションは、-qnoopt の場合は無視されます。 -qnostrict では、最適化はコードを再調整して、結果または例外が、最適化されていない プログラムのものとは異なるようにします。

このオプションは、最適化されているプログラムでのプログラムの実行における変更が、 最適化されていないプログラムの場合とは異なった結果を発生させる状況を意図したオプションです。 IEEE 浮動小数点算術計算用のほとんど使用されない規則と関連があるので、 このような状況はめったに発生しません。

規則

-qnostrict が有効である場合は、-qstrict も指定されていない限り、以下の 最適化がオンになります。

関連情報

-O オプション-qhot オプション、および -qfloat オプションを参照してください。

-qstrictieeemod オプション

構文

-qstrictieeemod | -qnostrictieeemod
STRICTIEEEMOD | NOSTRICTIEEEMOD

ieee_arithmetic および ieee_exceptions 組み込みモジュール用のドラフト Fortran 2003 IEEE 演算規則をコンパイラーに順守させるかどうかを指定します。 -qstrictieeemod を指定すると、コンパイラーは、次の規則を順守します。

上記の規則はパフォーマンスに影響を与えるため、-qnostrictieeemod を指定すると、 浮動小数点状況を保存したり、復元したりする規則から解放されます。 これは関連するパフォーマンスの影響を防ぎます。

-qstrict_induction オプション

構文

-qSTRICT_INDUCtion | -qNOSTRICT_INDUCtion

コンパイラーが帰納 (ループ・カウンター) 変数の最適化を実行してしまわないようにします。 そのような最適化を実行した場合、帰納変数が関係した整数オーバーフローの動作が発生したときに アンセーフ になる可能性があります (プログラムのセマンティクスが変更される可能性があります)。

-qstrict_induction を指定すると性能低下の恐れがあるため、 どうしても必要な場合を除き、指定しないようにする必要があります。

以下の 2 つの例を見てください。

例 1

    integer(1) :: i, j                 ! Variable i can hold a
    j = 0                              ! maximum value of 127.
 
    do i = 1, 200                      ! Integer overflow occurs when 128th
      j = j + 1                        ! iteration of loop is attempted.
    enddo

例 2

    integer(1) :: i
    i = 1_1                            ! Variable i can hold a maximum
                                       ! value of 127.
100 continue
    if (i == -127) goto 200            ! Go to label 200 once decimal overflow
      i = i + 1_1                      ! occurs and i == -127.
      goto 100
200 continue
    print *, i
    end

-qstrict_induction オプションを指定してこれらの例をコンパイルすると、コンパイラーは帰納変数の 最適化を実行しませんが、コードのパフォーマンスに影響する可能性があります。 -qnostrict_induction オプションを指定してこれらの例をコンパイルすると、コンパイラーはプログラムの セマンティクスを変えることのある最適化を実行する可能性があります。

-qsuffix オプション

構文

-qsuffix=option=suffix

xlf.cfg ファイルの代わりに、コマンド行でソース・ファイルのサフィックスを指定します。 このオプションを使用すれば、makefile の名前をほんの少し修正するだけでファイルを使用でき、無駄な時間を 節約できるだけでなく、xlf.cfg ファイルの修正に関連した問題のリスクを削減できます。 どのファイル・タイプの場合にも、1 度に 1 つの設定だけがサポートされます。

引き数

f=suffix
ここで suffix は、 新しいソース・ファイルのサフィックス です。

o=suffix
ここで suffix は、 新しいオブジェクト・ファイルのサフィックス です。

s=suffix
ここで suffix は、 新しいアセンブラー・ソース・ファイルのサフィックス です。

cpp=suffix
ここで suffix は、 新しいプリプロセッサー・ソース・ファイルのサフィックス です。

規則

以下に例を示します。

     xlf a.f90 -qsuffix=f=f90:cpp=F90

これにより、以下の効果があります。

-qsuppress オプション

構文

-qsuppress[=nnnn-mmm[:nnnn-mmm ...] | cmpmsg]
-qnosuppress

引き数

nnnn-mmm[:nnnn-mmm ...]
特定のコンパイラー・メッセージ (nnnn-mmm) またはメッセージのリスト (nnnn-mmm[:nnnn-mmm ...]) の表示を抑止します。nnnn-mmm はメッセージ番号です。 メッセージのリストを抑止するには、それぞれのメッセージ番号をコロンで区切ってください。

cmpmsg
コンパイルの進行および正常終了を報告する情報メッセージを抑止します。

このサブオプションは、出力されるエラー・メッセージには影響しません。

背景情報

状況によっては、非常に多くのコンパイラー・メッセージがユーザーに送られてくることがあります。 多くの場合、これらのコンパイラー・メッセージには重要な情報が示されています。 しかし、そのようなメッセージの中には冗長なものや、まったく無視して問題がないものもあります。 コンパイル時に複数のエラーや警告メッセージが表示された場合は、どのメッセージに注意を払うべきか 非常に判断の難しい場合があります。 -qsuppress を使用すれば、無関係なメッセージを除去できます。

制限

@process nullterm
      i = 1; j = 2;
      call printf("i=%d¥n",%val(i));
      call printf("i=%d, j=%d¥n",%val(i),%val(j));
      end

このサンプル・プログラムをコンパイルすると、通常は次のような出力が得られます。

"t.f", line 4.36: 1513-029 (W) The number of arguments to "printf" differ
from the number of arguments in a previous reference.  You should use the
OPTIONAL attribute and an explicit interface to define a procedure with
optional arguments.
** _main   === End of Compilation 1 ===
1501-510  Compilation successful for file t.f.

-qsuppress=1513-029 を指定してプログラムをコンパイルした場合、出力は次のようになります。

** _main   === End of Compilation 1 ===
1501-510   Compilation successful for file t.f.

関連情報

その他のタイプのメッセージ表示抑止については、-qflag オプションを参照してください。

-qswapomp オプション

構文

-qswapomp | -qnoswapomp
SWAPOMP | NOSWAPOMP

コンパイラーが、XL Fortran プログラムにある OpenMP ルーチンを認識して置換するように指定します。

Fortran と C の OpenMP ルーチンには、別々のインターフェースがあります。 OpenMP ルーチンを使用する複数言語アプリケーションをサポートするには、コンパイラーは OpenMP ルーチン名を認識し、 そうしたルーチンの他のインプリメンテーションが存在しているかどうかにかかわらず、 そのルーチンを XL Fortran バージョンのルーチンに置換する必要があります。

コンパイラーは、-qnoswapomp オプションを指定すると、 OpenMP ルーチンの置換は実行しません。

制限

-qswapomp および -qnoswapomp オプションは、 プログラムに存在する OpenMP ルーチンを参照する Fortran サブプログラムだけに影響を与えます。

規則

次の例では、OpenMP ルーチンが INTERFACE ステートメントで宣言されます。

@PROCESS SWAPOMP
 
         INTERFACE
            FUNCTION OMP_GET_THREAD_NUM()
                INTEGER OMP_GET_THREAD_NUM
            END FUNCTION OMP_GET_THREAD_NUM
 
            FUNCTION OMP_GET_NUM_THREADS()
                INTEGER OMP_GET_NUM_THREADS
            END FUNCTION OMP_GET_NUM_THREADS
         END INTERFACE
 
         IAM = OMP_GET_THREAD_NUM()
         NP = OMP_GET_NUM_THREADS()
         PRINT *, IAM, NP
         END

関連情報

XL Fortran ランゲージ・リファレンス」にある『OpenMP 実行環境ルーチンおよびロック・ルーチン』の節を参照してください。

-qtbtable オプション

構文

-qtbtable={none | small | full}
注:
64 ビット環境にのみ適用されます。

オブジェクト・ファイル内のトレースバック情報のデバッグ量を制限し、プログラムのサイズを小さくします。

このオプションを使用して、プログラムを小さくすることができます。 その代わりデバッグは難しくなります。 実動ステージに到達しているときにできるだけコンパクトなプログラムを作成したい場合は、 -qtbtable=none を指定することができます。 そうでない場合は、通常のデフォルトが適用されます。 この場合、-g を指定してコンパイルされたコードや -O を指定しないでコンパイルされたコードには トレースバックの全情報が入り (-qtbtable=full)、 -O を指定してコンパイルされたコードにはそれよりも小さなトレースバック情報が入ります (-qtbtable=small)。

引き数

none
オブジェクト・コードにはトレースバック情報がまったく入りません。 デバッガーや他のコード検査ツールが実行時にプログラムのスタックをアンワインドできないので、プログラムを デバッグすることはできません。 実行時例外のためにプログラムが停止する場合は、例外の発生場所を説明しません。
small
オブジェクト・コードにはトレースバック情報が入りますが、プロシージャーの名前や プロシージャー・パラメーターの情報は入りません。 プログラムのデバッグは可能ですが、必須でない情報の中にはデバッガーが利用不能なものがあります。 実行時例外のためにプログラムが停止する場合は、例外の発生場所を説明しますが、プロシージャー名ではなく マシン・アドレスを報告します。
full
オブジェクト・コードにはトレースバックの全情報が入ります。 プログラムはデバッグ可能で、実行時例外のために停止する場合は、トレースバック・リストを作成します。 これには、呼び出しチェーン内のプロシージャーすべての名前が入っています。

背景情報

多くの長いプロシージャー名 (モジュール・プロシージャー用に作成された内部名など) が入っているプログラムには、 このオプションが非常に適しています。 Fortran プログラムよりも C++ プログラムに対する方が適用度が高い場合があります。

関連情報

-g オプション-O オプション最適化したコードのデバッグ、および -qcompact オプションを参照してください。

-qthreaded オプション

構文

-qthreaded

コンパイラーがこのオプションを使用することにより、 スレッド・セーフ・コードを生成する必要があるのはいつかを判断します。

-qthreaded オプションを指定しても、 -qnosave オプションも暗黙的に指定されるということはありません。 -qnosave オプションは、 ユーザー・ローカル変数のデフォルト時自動ストレージ・クラスを指定するものです。 通常、スレッド・セーフのコードを生成するには、両方のオプションを使用する必要があります。 これらのオプションを指定するだけでは、プログラムがスレッド・セーフになる保証はありません。 適切なロック機構もインプリメントする必要があります。

デフォルト

-qthreaded は、xlf90_rxlf95_r、および xlf_r コマンド用の デフォルトです。

-qthreaded オプションを指定すると -qdirective=ibmt が暗黙指定されますが、 デフォルトでは trigger_constant IBMT が認識されます。

-qtune オプション

構文

-qtune=implementation

ハードウェア・アーキテクチャーの特定のインプリメンテーションに対する命令の選択、 スケジューリング、その他のインプリメンテーションに依存するパフォーマンス拡張機能を調整します。 コンパイラーは、ターゲット・アーキテクチャーと 互換性のある -qtune 設定を使用します。 これは、-qarch-q32、および -q64 オプション によって制御されます。

プログラムを複数のアーキテクチャーで稼動させるけれど、特定のアーキテクチャーで調整したい場合は、 -qarch および -qtune オプションを組み合わせて使用することができます。 これらのオプションは、基本的には 浮動小数点中心のプログラムに有効です。

キャッシュ・サイズおよびパイプラインなどのハードウェア・フィーチャーを 最大限に活用するように、生成されたマシン命令を配置 (スケジューリング) することによって、-qtune オプションは パフォーマンスを改善することができます。 このオプションは、最適化を使用可能にするオプションと組み合わせて使用した場合にのみ 効果があります。

-qtune 設定を変更すると、その結果作成される実行可能ファイルの パフォーマンスに影響する場合がありますが、実行可能ファイルが特定のハードウェア・プラットフォーム上で 正しく実行できるかどうかには、まったく影響を与えません。

引き数

注:
Y-HPC の場合、インプリメンテーションに対して有効な選択項目は -qtune=auto および -qtune=ppc970 のみです。 デフォルトは -qtune=ppc970 です。

そうでない場合、選択項目は次のとおりです。

auto
どのプロセッサー・タイプに属するコンパイル・マシンであるかを自動的に検出します。 実行環境はコンパイル環境と同じであると見なされます。

rs64b
RS64II プロセッサー用に、最適化が調整されます。

rs64c
RS64III プロセッサー用に、最適化が調整されます。

pwr3
POWER3 プロセッサー用に、最適化が調整されます。

pwr4
POWER4 プロセッサー用に、最適化が調整されます。

pwr5
POWER5 プロセッサー用に、最適化が調整されます。

ppc970
PowerPC 970 プロセッサー用に最適化が調整されます。

-qtune を指定しないと、設定は -qarch オプションによって 決定されます。

-qarch 設定 許可されている -qtune 設定 デフォルトの -qtune 設定
ppc
-qarch=ppc64 エントリーで、受け入れ可能な -qtune 設定のリストを参照してください。 pwr4
ppcgr
-qarch=ppc64gr エントリーで、受け入れ可能な -qtune 設定のリストを参照してください。 pwr4
ppc64 rs64b、rs64c、pwr3、pwr4、pwr5、ppc970、 auto pwr4
ppc64gr rs64b、rs64c、pwr3、pwr4、pwr5、ppc970、 auto pwr4
ppc64grsq rs64b、rs64c、pwr3、pwr4、pwr5、ppc970、 auto pwr4
rs64b rs64b、auto rs64b
rs64c rs64c、auto rs64c
pwr3 pwr3、pwr4、pwr5、ppc970、auto pwr3
pwr4 pwr4、pwr5、ppc970、auto pwr4
pwr5 pwr5、auto pwr5
ppc970 ppc970、auto ppc970

これで、-qtune サブオプションと互換性のあるマシン上で コンパイルしている限り、-qarch=auto とともに -qtune サブオプションを指定できるように なりました。 たとえば、-qarch=auto-qtune=pwr5 を 指定する場合、POWER3、POWER4、または POWER5 マシン上でコンパイルする必要があります。

関連情報

-qarch オプション-qcache オプション、 および 特定アーキテクチャーのためのコンパイル方法を参照してください。

-qundef オプション

構文

-qundef | -qnoundef
UNDEF | NOUNDEF

-qundef は、-u オプションの長い形式です。

-qunroll オプション

構文

-qunroll[=auto | yes] | -qnounroll
 

DO ループ・アンロールをプログラム内で許可するかどうかを指定します。 アンロールは、外部および内部 DO ループで許可されます。

引き数

auto
コンパイラーは、基本ループ・アンロール (展開) を行います。 -qunroll をコマンド行で指定していない場合は、これがデフォルトです。

yes
コンパイラーは、-qunroll=auto を指定して実行されるより多くの、ループ・アンロールを 実行する機会を探します。 サブオプションを指定しないで -qunroll を指定することは、-qunroll=yes と同じです。 一般にこのサブオプションは、-qunroll=auto 処理より、コンパイル時間あるいはプログラム・サイズが 増える可能性がありますが、アプリケーションのパフォーマンスを向上させることもあります。

ループをアンロールすることに決定した場合、上記のサブオプションの 1 つを指定することが自動的に、 コンパイラーがその操作を実行することを保証するわけではありません。 パフォーマンス上の利点を考慮して、コンパイラーはプログラムにとってアンロールが有利かどうかを 判断します。 熟練したコンパイラー・ユーザーは、前もって有利かどうかを判断できるようであるべきです。

規則

STREAM_UNROLLUNROLL、 または UNROLL_AND_FUSE ディレクティブを特定のループに 指定していなければ、-qnounroll オプションはアンロールを禁止します。 これらのディレクティブは常に、コマンド行オプションをオーバーライドします。

次の例では、UNROLL(2) ディレクティブを使用して、コンパイラーにループの本体が複製可能で あることを示し、単一の反復で 2 度の反復作業を実行できるようにしています。 コンパイラーがループをアンロールすると、コンパイラーは 1000 回の繰り返しを 実行するのではなく、500 回だけ繰り返しを実行します。

 !IBM* UNROLL(2)
       DO I = 1, 1000
          A(I) = I
       END DO

コンパイラーが前のループ・アンロールを選択すると、コンパイラーはそのループを変換して、次の例と 本質的に同じになるようにします。

       DO I = 1, 1000, 2
          A(I) = I
          A(I+1) = I + 1
       END DO

関連情報

XL Fortran ランゲージ・リファレンス」でループ・アンロールの該当するディレクティブを参照してください。

ループおよび配列言語の最適化を参照してください。

-qunwind オプション

構文

-qunwind |-qnounwind
 UNWIND | NOUNWIND

プロシージャー呼び出し中に、コンパイラーが、揮発性レジスターの保存と復元のデフォルト動作を保持するように指定します。 -qnounwind を指定すると、コンパイラーは、サブプログラムを再調整して、 揮発性レジスターの保存と復元を最小化します。

コードのセマンティクスが保持されている間は、保存と復元のデフォルト動作に依存する例外ハンドラーのような アプリケーションは、未定義の結果を生成する可能性があります。 -qnounwind-g コンパイラー・オプションと結合して使用するときは、 例外処理操作に関するデバッグ情報は、プログラム・スタックをアンワインドするとき不正確になる可能性があります。

-qversion オプション

構文

-qversion | -qnoversion

呼び出しコンパイラーのバージョンとリリースを表示します。 コンパイラー・コマンドで、このオプションを単独で指定します。 たとえば、次のようになります。

xlf90 -qversion

-qwarn64 オプション

-qwarn64 オプションを参照してください。

-qxflag=dvz オプション

構文

-qxflag=dvz
 

-qxflag=dvz を指定すると、コンパイラーは、浮動小数点ゼロ除算演算を検出するコードを生成します。

このオプションは、最適化レベル -O 以上を指定した場合にのみ有効です。

このオプションをオンにした場合、除数がゼロのとき、追加のコードは外部ハンドラー関数 __xl_dzx を呼び出します。 この関数の戻り値は、除算の結果として使用されます。 ユーザーは、ゼロ除算演算を処理するための関数を指定する必要があります。 -qxflag=dvz を指定すると、単精度 (REAL*4) および倍精度 (REAL*8) 除算のみが処理されます。

関数のインターフェースは次のとおりです。

 real(8) function __xl_dzx(x, y, kind_type)
   real(8), value :: x, y
   integer, value :: kind_type
 end function
 

上記の意味は次のとおりです。

x
は被除数です。
y
は除数値です。
kind_type
x および y に関連付けられた実引き数のサイズを指定します。

ゼロと等しい kind_type 値は、x および y に関連付けられた実引き数が REAL(8) 型であることを示します。 1 と等しい kind_type 値は、x および y に関連付けられた実引き数が REAL(4) 型であることを示します。

除算は常に、ハンドラー・ルーチンが呼び出される前に実行されます。 すなわち、例外はハンドラー関数が呼び出される前に通知および処理されます。

関連情報

XL Fortran 浮動小数点処理-qflttrap オプション、および XL Fortran エラー・メッセージに関する情報を参照してください。

-qxflag=oldtab オプション

構文

-qxflag=oldtab
XFLAG(OLDTAB)

桁 1 から 5 のタブを単一文字として 解釈します (固定ソース形式のプログラムの場合)。

デフォルト

デフォルトでは、コンパイラーはソース行の桁 6 の後に 66 文字の有効文字を許可します。 桁 1 から 5 のタブは、桁カウンターを桁 6 の後に移動する適切な数のブランクであると解釈されます。 行番号またはその他のデータを桁 73 から 80 に含んでいる従来の Fortran の慣例に従っている方には、このデフォルトは便利です。

規則

-qxflag=oldtab オプションを指定しても、ソース・ステートメントは依然としてタブの直後に 始まりますが、タブ文字は桁をカウントするための単一の文字として処理されます。 この設定を使用すれば、最大 71 文字の入力を行うことができます。 文字数はタブ文字が発生する場所によって異なります。

-qxlf77 オプション

構文

-qxlf77=settings
XLF77(settings)

変更された言語セマンティクスと I/O データ形式について、 FORTRAN 77 との互換性を提供します。 これらの変更のほとんどは、Fortran 90 標準で必要です。

デフォルト

デフォルトでは、コンパイラーはあらゆる場合に Fortran 95、Fortran 90、および最新バージョンの コンパイラーに適用される設定を使用します。 したがって、デフォルトのサブオプションは、blankpadnogedit77nointargnointxorleadzeronooldboznopersistentnosofteof です。 ただし、これらのデフォルトは、新しいプログラムのコンパイルに 使用しなければならない xlf95xlf95_rxlf90xlf90_rf90、 および f95 コマンドのみによって使用されます。

前のプログラムを変更しないでコンパイルして実行する場合のみ、適切な呼び出しコマンドを引き続き 使用しても、このオプションを意識する必要はありません。 このオプションについては、Fortran 90 または Fortran 95 で既存のソース またはデータ・ファイルを使用し、xlf90xlf90_rxlf95xlf95_rf90、 または f95 コマンドを使用する場合で、動作またはデータ形式が 変更されたために一部の互換性が失われる場合にのみ必要です。 最終的には、古い動作への依存性を除去するために、データ・ファイルを 再作成するか、またはソース・ファイルを変更できなければなりません。

引き数

XL Fortran バージョン 2 の動作におけるさまざまな面を理解するために、以下の サブオプションから 1 つまたは複数に対してデフォルト以外の選択項目を選んでください。 説明には、デフォルト以外の選択項目を指定した場合に生じる事柄が記載されています。

blankpad | noblankpad
内部ファイル、直接アクセス・ファイル、およびストリーム・アクセス・ファイルには、 pad='no' と同等のデフォルト設定を使用します。 この設定では、レコードが持っているよりも多くの文字を形式が必要とする場合にこのようなファイルからの 読み取りを行うと、変換エラーが発生します。 このサブオプションは、pad= 指定子を指定してオープンされた直接アクセス・ファイル またはストリーム・アクセス・ファイルには影響を与えません。

gedit77 | nogedit77
G 編集記述子を持つ REAL オブジェクトの出力に FORTRAN 77 のセマンティクスを適用します。 形式化出力ステートメント内のリスト項目について、0 の表現が FORTRAN 77 と Fortran 90 では異なります (丸め方式も異なる)。 したがって、値と G 編集記述子の組み合わせによっては出力内容が異なります。

intarg | nointarg
組み込みプロシージャーのすべての整数引き数を最も長い引き数の種類に変換します (種類が異なる場合)。 Fortran 90 または 95 の規則の下では、最初の引き数の種類に基づいて結果タイプを判別する組み込み機能もあります (たとえば、 IBSET)。また、すべての引き数が同じ種類でなければならない組み込み関数もあります (たとえば、MIN および MAX)。

intxor | nointxor
.XOR. を論理バイナリー組み込み演算子として扱います。 これは、.EQV. および .NEQV. 演算子と同じ優先順位を持っていて、オペレーター・インターフェースで拡張することができます。 (.XOR. のセマンティクスは .NEQV. のセマンティクスと同じであるため、 .XOR. は Fortran 90 または Fortran 95 言語標準では使用されません。)

それ以外の場合、.XOR. 演算子は定義された 演算子としてのみ認識されます。組み込み演算はアクセス不能で、 優先順位は、演算子が単項コンテキストで使用されているか、 それともバイナリー・コンテキストで使用されているかによって異なります。

leadzero | noleadzero
DELFQ などの編集記述子を使用して、実際の 出力で先行ゼロを発生させます。

oldboz | nooldboz
BLANK= 指定子や BN または BZ 編集制御記述子とは無関係に、BOZ などの編集記述子によって読み取られたデータに対して、ブランクをゼロにします。 また、先行ゼロ、長すぎる出力の切り捨てを維持します。 これは、Fortran 90 または Fortran 95 標準の一部ではありません。

persistent | nopersistent
ENTRY ステートメントを 持つサブプログラムの引き数のアドレスを静的ストレージに保管します。 これはパフォーマンス向上のために変更された実施選択項目です。

softeof | nosofteof
ユニットが endfile レコードの後に位置付けられているときに、 READ 操作と WRITE 操作を実行できるようにします。 ただし、その位置が ENDFILE ステートメントを実行した結果である場合は除きます。 このサブオプションは、一部の既存プログラムが依存している旧バージョンの XL Fortran の FORTRAN 77 拡張機能を再現します。

-qxlf90 オプション

構文

-qxlf90={settings}
XLF90({settings})

Fortran 言語上の理由で、 Fortran 90 標準との 互換性を提供します。

デフォルト

-qxlf90 のデフォルトのサブオプションは、指定する呼び出しコマンドによって異なります。 xlf95 または xlf95_r コマンドの場合、デフォルトのサブオプションは signedzeroautodealloc です。 他のすべての呼び出しコマンドでは、デフォルトは nosignedzeronoautodealloc です。

引き数

signedzero | nosignedzero
SIGN(A,B) 関数が符号付きの実数 0.0 を処理する方法を決定します。 -qxlf90=signedzero コンパイラー・オプションを 指定した場合、B=-0.0 のときに、SIGN(A,B) は -|A| を戻します。 この動作は Fortran 95 標準に準拠するものであり、 バイナリー浮動小数点演算のための IEEE 標準と整合しています。 REAL(16) データ型では、 XL Fortran はゼロを負のゼロとしては扱わないことに注意してください。

このサブオプションでは、以下の場合に負符号 (-) が印刷されるかどうかも決定します。

autodealloc | noautodealloc
SAVE または STATIC 属性のいずれかを指定せずにローカルに宣言された 割り振り可能で、サブプログラムを終了するときに現在割り振り済みの状況にある割り振り可能な オブジェクトを、コンパイラーが割り振り解除するかどうかを決定します。 この動作は、Fortran 95 標準に準拠しています。 ローカルに割り振り可能なオブジェクトすべてを明示的に割り振り解除していることが確実な場合、 このサブオプションをオフにして、パフォーマンス低下の可能性を避けることができます。

次のプログラムを見てください。

PROGRAM TESTSIGN
REAL X, Y, Z
X=1.0
Y=-0.0
Z=SIGN(X,Y)
PRINT *,Z
END PROGRAM TESTSIGN

この例の出力は、呼び出しコマンドと、指定する -qxlf90 サブオプションによって 異なってきます。 たとえば、次のようになります。


呼び出しコマンド/xlf90 サブオプション 出力
xlf95 -1.0
xlf95 -qxlf90=signedzero -1.0
xlf95 -qxlf90=nosignedzero 1.0
xlf90 1.0
xlf 1.0

関連情報

XL Fortran ランゲージ・リファレンス」の『組み込みプロシージャー』 の節および『配列の概念』の節にある 『SIGN』の情報を参照してください。

-qxlines オプション

構文

-qxlines | -qnoxlines
XLINES |  NOXLINES

桁 1 に X を持つ固定ソース形式行がコンパイルされるか、コメントとして扱われるかを指定します。 このオプションは、条件付きコンパイル (デバッグ) 文字として、桁 1 に文字「d」を認識するのに似ています。 -D オプションは、このコンパイラー・オプションが使用可能なとき、条件付きコンパイル文字として 桁 1 に文字「x」を認識します。桁 1 の「x」は、ブランクとして解釈され、 その行はソース・コードとして処理されます。

デフォルト

このオプションは、デフォルトで -qnoxlines に設定され、固定ソース形式で桁 1 に文字「x」が ある行はコメント行として扱われます。 -qxlines オプションは、-D から独立しているので、条件付きコンパイル文字として 「d」を使用するのに適用するデバッグ行の規則は、条件付きコンパイル文字「x」にも適用します。 -qxlines コンパイラー・オプションは、固定ソース形式にのみ適用可能です。

条件付きコンパイル文字「x」および「d」は、固定ソース形式プログラムと継続されるソース行内で 混用することが可能です。 条件付きコンパイル行が、次の行に継続する場合は、すべての継続行には、桁 1 に「x」または「d」が 存在している必要があります。継続されるコンパイル・ステートメントの最初の行が、桁 1 の「x」または 「d」のいずれかで始まるデバッグ行ではない場合は、後続の継続行は、そのステートメントが構文的に正しい限り、 デバッグ行として指定されます。

OMP 条件付きコンパイル文字「!$」、「C$」、および「*$」は、固定ソース形式および継続される ソース行内の両方で、条件付き文字「x」および「d」と混用することができます。 OMP 条件付き文字の規則は、このインスタンスでまだ適用されます。

-qxlines の基本ケースの例は以下のとおりです。

      C2345678901234567890
             program p
             i=3 ; j=4 ; k=5
      X      print *,i,j
      X    +        ,k
             end program p
 
     <output>: 3 4 5     (if -qxlines is on)
               no output (if -qxlines is off)
 
 

この例では、条件付きコンパイル文字「x」および「d」は、最初の行の「x」と混用されています。

     C2345678901234567890
            program p
            i=3 ; j=4 ; k=5
     X      print *,i,
     D    +         j,
     X    +         k
            end program p
 
     <output>: 3 4 5 (if both -qxlines and -qdlines are on)
               3 5   (if only -qxlines is turned on)
 
 

ここでは、条件付きコンパイル文字「x」および「d」は、最初の行の「d」と混用されています。

     C2345678901234567890
            program p
            i=3 ; j=4 ; k=5
     D      print *,i,
     X    +         j,
     D    +         k
            end program p
 
     <output>: 3 4 5 (if both -qxlines and -qdlines are on)
               3 5   (if only -qdlines is turned on)
 
 

この例では、最初の行はデバッグ行ではありませんが、継続行は、桁 1 に「x」があるので、デバッグ行として 解釈されます。

     C2345678901234567890
            program p
            i=3 ; j=4 ; k=5
            print *,i
     X    +        ,j
     X    +        ,k
            end program p
 
     <output>: 3 4 5 (if -qxlines is on)
               3     (if -qxlines is off)
 
 

関連情報

-D オプションと、「XL Fortran ランゲージ・リファレンス」の 言語エレメントの節にある『条件付き コンパイル』を参照してください。

-qxref オプション

構文

-qxref[=full] | -qnoxref
XREF[(FULL)] | NOXREF

属性の相互参照コンポーネントおよびリストの相互参照セクションを作成するかどうかを決定します。

-qxref だけを指定すると、使用される識別子だけが報告されます。 -qxref=full を指定すると、使用されてもされなくても、プログラム内にあるすべての識別子に関する情報が リストに含まれます。

-qxref=full の後に -qxref が指定されても、完全な相互参照リストが依然として作成されます。

デバッグ中に相互参照リストを使用して、問題 (変数の定義前使用や変数名の誤入力など) を見つけることができます。

関連情報

リストとメッセージを制御するオプションおよび 属性および相互参照セクションを参照してください。

-qzerosize オプション

構文

-qzerosize | -qnozerosize
ZEROSIZE | NOZEROSIZE

サイズがゼロのストリングおよび配列の検査を行わせないことによって、 FORTRAN 77 プログラムと、一部の Fortran 90 および Fortran 95 プログラムのパフォーマンスを向上させます。

このようなオブジェクトを処理する可能性がある Fortran 90 および Fortran 95 プログラムの場合は、-qzerosize を 使用します。 サイズがゼロのオブジェクトを使用できない FORTRAN 77 プログラムや、それらを使用しない Fortran 90 および Fortran 95 プログラムの場合は、-qnozerosize でコンパイルすると、いくつかの配列演算または 文字ストリング演算のパフォーマンスを改善することができます。

デフォルト

デフォルト設定は、どのコマンドでコンパイラーを呼び出すかによって 異なります。xlf90xlf90_rxlf95xlf95_rf90、 および f95 コマンドの場合は -qzerosize で、xlfxlf_r、 および f77/fort77 コマンドの場合は -qnozerosize です (FORTRAN 77 との互換性のため)。

規則

-C オプションが実行する実行時検査は、-qzerosize が有効であると、時間が多少長く かかります。

-S オプション

構文

-S

個々の Fortran ソース・ファイルに対して同等のアセンブラー・ソースを示す 1 つまたは複数の .s ファイルを作成します。

規則

このオプションが指定されると、コンパイラーは、オブジェクト・ファイルまたは実行可能ファイルの代わりに、 出力ファイルとしてアセンブラー・ソース・ファイルを作成します。

制限

作成されたアセンブラー・ファイルには、-qipa オプションまたは -g オプションによって .o ファイルに入れられたすべてのデータが入っているわけではありません。

xlf95 -O3 -qhot -S test.f               # Produces test.s

関連情報

-o オプションを使用すれば、その結果作成されるアセンブラー・ソース・ファイルの名前を指定できます。

アセンブラー言語形式については、 「Assembler Language Reference」を参照してください。

-t オプション

構文

-tcomponents

-B オプションで指定されたプレフィックスを、指定されたコンポーネントに適用します。 components には、分離文字なしで 1 つ以上の aFchIbzl、または d を指定でき、それぞれアセンブラー、C プリプロセッサー、コンパイラー、配列言語最適化プログラム、プロシージャー間分析 (IPA) ツール/ループ最適化プログラム、コード生成プログラム、バインド・プログラム、リンカー、および -S 逆アセンブラーに対応します。

規則

-t が指定されないと、プレフィックス -B がすべてのコンポーネントに適用されます。

Component                -t              Standard Program Name
                          Mnemonic
 

assembler                 a              as
C preprocessor            F              cpp
compiler front end        c              xlfentry
array language optimizer  h              xlfhot
IPA/loop optimizer        I              ipa
code generator            b              xlfcode
binder                    z              bolt
linker                    l              ld
disassembler              d              dis

関連情報

-B オプション (この節には例も記載されています)。

-U オプション

構文

-U
MIXED | NOMIXED

コンパイラーが、名前内の文字の大文字と小文字を区別するようにします。

Fortran 名はデフォルト時にはすべて小文字であり、C 言語およびその他の言語の名前は大/小文字混合でもかまいません。 混合言語プログラムを書く際にこのオプションを使用することができます。

規則

-U が指定される場合は、名前の大文字と小文字の区別が重要です。 たとえば、Abc という名前と ABC という名前は別々のオブジェクトを参照します。

このオプションは、コンパイル単位間の呼び出しを解決するのに使用されるリンク名を変更します。 また、モジュールの名前に影響を与え、したがって、.mod ファイルの名前にも影響を与えます。

デフォルト

デフォルトでは、コンパイラーは、すべての名前を小文字であるかのように解釈します。 たとえば、AbcABC はどちらも abc であると解釈され、したがって同じ オブジェクトを参照します。

制限

-U が有効な場合は、組み込み機能の名前はすべて小文字でなければなりません。 小文字でない場合は、コンパイラーはエラーなしに名前を受け入れることはできますが、それらを 組み込み機能ではなく外部プロシージャーの名前であると判断します。

関連情報

これは、-qmixed の短い形式です。 -qmixed オプションを参照してください。

-u オプション

構文

-u
UNDEF | NOUNDEF

変数名の暗黙の型指定が許可されないことを指定します。 これには、暗黙のステートメントを許可する個々の有効範囲に含まれる IMPLICIT NONE ステートメントを 使用するときと同じ効果があります。

デフォルト

デフォルト時には、暗黙の型指定は許可されます。

関連情報

XL Fortran ランゲージ・リファレンス」の『IMPLICIT』を参照してください。

これは、-qundef の短い形式です。 -qundef オプションを参照してください。

-v オプション

構文

-v

コンパイルの進捗状況を生成します。

規則

コンパイラーがコマンドを実行してさまざまなコンパイル・ステップを実行するときに、このオプションは、 コンパイラーが呼び出すコマンドおよび、コンパイラーが渡すシステム引き数リストのシミュレーションを 表示します。

特定のコンパイルの関して、このオプションが生成する出力を調べると、次の事項を判別するのに役立ちます。

関連情報

-# オプション-v と似ていますが、実際にはどのコンパイル・ステップも実行しません。

-V オプション

構文

-V

表示から直接切り貼りによってコマンドを作成できるという点を除き、このオプションは -v と同じです。

-W オプション

構文

-Wcomponent,options

リストされたオプションを、コンパイル中に実行されるコンポーネントに渡します。component は、aFchIbzl、または d の 1 つで、 それぞれアセンブラー、C プリプロセッサー、コンパイラー、配列言語最適化プログラム、プロシージャー間分析 (IPA) ツール/ループ最適化プログラム、 コード生成プログラム、バインド・プログラム、リンカー、 および -S 逆アセンブラーに対応します。

Component                -W              Standard Program Name
                          Mnemonic
 

assembler                 a              as
C preprocessor            F              cpp
compiler front end        c              xlfentry
array language optimizer  h              xlfhot
IPA/loop optimizer        I              ipa
code generator            b              xlfcode
binder                    z              bolt
linker                    l              ld
disassembler              d              dis

-W オプションの後に続いているストリングでは、各オプションに対して分離文字としてコンマを使用し、スペースは入れないでください。次に例を示します。

-Wcomponent,option_1[option_2,...,option_n]

背景情報

このオプションの主な目的は、コンパイラー・オプションのシーケンスを作成して、最適化プリプロセッサーの 1 つに渡すことです。 また、ld コマンドにパラメーターを渡すことによって、リンク・エディット・ステップを微調整するのにも 使用できます。

デフォルト

ほとんどのオプションは、リンカーに渡す際に -W オプションを使用する必要はありません。 -q オプション以外の認識されないコマンド行オプションは、自動的にリンカーに渡されるからです。 -W (または構成ファイル内の ldopts スタンザ) が 絶対に必要なオプションは、コンパイラー・オプションと同じ文字を持つリンカー・オプション (たとえば -v または -S) だけです。

オプション・ストリング内のシェルに特有の文字を入れる必要がある場合は、その文字の前に円記号を 置いてください。

コマンド行オプションの「ld」または「as」コマンドへの引き渡しを参照してください。

-W オプションに指定されたストリングにリテラルのコンマを組み込むには、¥ を 使用することができます。

次の例では、¥ はリテラルのコンマを -WF ストリングに組み込みます が、4 つではなく、3 つの引き数が C プリプロセッサーに指定されます。

  $ xlf -qfree=f90  '-WF,-Dint1=1,-Dint2=2,-Dlist=3¥,4'  a.F
  $ cat a.F
  print *, int1
  print *, int2
  print *, list
  end
 

プログラムからの出力は以下のとおりです。

$ ./a.out
 1
 2
 3 4

-w オプション

構文

-w

-qflag オプションの同義語です。-qflag=e:e を設定して、 言語レベルのチェックによって生成されるメッセージだけではなく、 警告メッセージおよび通知メッセージも抑止します。

-y オプション

構文

-y{n | m | p | z}
IEEE(Near | Minus | Plus | Zero)

コンパイル時に定数浮動小数点式を評価するときにコンパイラーが使用する丸めモードを指定します。 これは -qieee オプションと同等です。

引き数

n
最も近い値に丸めます。

m
マイナスの無限大方向に丸めます。

p
プラスの無限大方向に丸めます。

z
ゼロ方向に丸めます。

関連情報

-O オプションおよび -qfloat オプションを参照してください。

-y-qieee オプションの短い形式です。


脚注:

1
Fortran 90 または 95 の用語では、 これらの値は kind 型付きパラメーター で参照されます。

2
Fortran 90 および 95 の用語では、これらの値は kind 型付きパラメーター と呼ばれています。
IBM Copyright 2003