XL Fortran for AIX V8.1.1

ユーザーズ・ガイド


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 コンポーネントが /usr/lpp/xlf/bin ディレクトリーにインストールされています。アップグレードした製品をテストして誰でも使用できるようにするために、システム管理者は /home/jim ディレクトリー下に最新のインストール・イメージを復元して、次のようなコマンドでテストします。

xlf95 -tc -B/home/jim/usr/lpp/xlf/bin/ test_suite.f

アップグレードが受け入れ基準を満たしたら、システム管理者は /usr/lpp/xlf/bin の以前のレベルにインストールします。

関連情報

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

-b64 オプション

構文

-b64

AIX オペレーティング・システムは、libc.alibm.a の両方で、 64 ビット共用オブジェクト・ファイルを提供しています。 64 ビット・モードでは、-b64 リンカー・オプションを使用して、 64 ビット・オブジェクトをバインドするよう ld に指示することができます。

関連情報

64 ビット環境の詳細については、第 6 章, 64 ビット環境での XL Fortran の使用を参照してください。 -b64 の詳細については、「AIX General Programming Concepts 」を参照してください。

-bdynamic、-bshared、-bstatic オプション

構文

-bdynamic | -bshared | -bstatic

これらのオプションは、-l オプションの処理と、共用オブジェクトの処理方法を制御するのに使用するトグルです。

オプション -bdynamic とオプション -bshared は同義です。

-bstatic が有効になっていると、共用オブジェクトは出力ファイルに静的にリンクされます。 -bdynamic が有効になっていると、共用オブジェクトは動的にリンクされます。

-brtl-bdynamic または -bshared と組み合わせて使用すると、-l オプションで指定されたライブラリーの検索は、サフィックス .so または .a によって行われます。検索する個々のディレクトリーでは、サフィックス .so を持つファイルが検索されます。 このファイルが見つからない場合は、サフィックス .a を持つファイルが検索されます。どちらのファイルも見つからない場合は、次のディレクトリーで検索が継続されます。

規則

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

これらのオプションは入力位置に意味があり、コマンド行でオプションの後で指定されたすべてのファイルに影響を与えます。

表 14 は、これらのオプションが -brtl および -bnortl と組み合わされた場合に、ファイル・サフィックスの検索にどのような影響を与えるかを要約したものです。

表 14. 新しいリンカー・オプションの相互作用

  位置に意味あり
-bdynamic
-bshared (デフォルト)
-bstatic
グローバルな影響 -brtl .so
.a
.a
-bnortl (デフォルト) .a .a

xlf95 f.f -brtl -bshared -lmylib

この場合、リンカーは、探索パスにある個々のディレクトリー内で連続的に、どちらかが見つかるまで、まずライブラリー libmylib.so を検索し、次にライブラリー libmylib.a を検索します。

xlf95_r f.f -bdynamic -llib1 -bstatic -llib2 -brtl

この場合、リンカーは、(前の例のように) 個々のディレクトリー内でまずライブラリー liblib1.so を検索し、次にライブラリー liblib1.a を検索し、最初のライブラリー指定を基準にします。ただし、同じライブラリー内でリンカーが同時に検索するのは、 liblib2.a だけです。

関連情報

これらのオプションの詳細については、「AIX General Programming Concepts 」を参照してください。 -brtl オプションも参照してください。

-bhalt オプション

構文

-bhalt:error_level

リンカー (ld) コマンドが停止する前に許可されている最大エラー・レベルを指定します。構成ファイルに指定されているとおり、デフォルト値は 4 です。 error_level 変数で指定されている値よりも大きいエラー戻り値をリンカー・コマンドが持っていると、リンクは停止します。

規則

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

-bloadmap オプション

構文

-bloadmap:name

リンカー・アクションおよびメッセージのログが name というファイルに保管されるように要求します。リンクの問題を診断する一助として、ログを使用することができます。たとえば、ログには、-qextchk オプションによって検出されたタイプの不一致に関する情報が含まれています。

規則

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

-bmaxdata、-bmaxstack オプション

構文

-bmaxdata:bytes
-bmaxstack:bytes

プログラムのデータ・セグメントおよびスタック・セグメント用に予約する空間の最大量を、これらの領域のサイズが制約されているプログラムに対して指定します。

背景情報

データ・セグメントは、特にプログラムが使用するヒープ領域を占めます。

プログラムが非常に大きな配列を静的または動的に割り振る場合は、プログラムをリンクするときに -bmaxdata を指定してください。その結果作成された実行可能プログラムは大きなデータ・モデルを使用し、単一セグメントよりも大きなデータ領域 (最大 2 GB まで) を持つことができます。許容される値については、「AIX コマンド・リファレンス 」で ld の資料を参照してください。コンパイラーはコンパイル中に一時配列を作成することがあるので、これを予想して -bmaxdata コンパイラー・オプションの値を定義しておくと役立ちます。

プログラムが大量の自動データを持っていたり、プログラムのスタック・サイズのソフト制限を超える場合は、プログラムをリンクするときに -bmaxstack を指定して、最大で 256 MB (32 ビット・モード) まで、またはシステム・リソースによって決められている限界 (64 ビット・モード) までのソフト制限を定義してください。ただし、各メインプログラムまたはサブプログラムは、インスタンス当たり 256 MB までに制限されることに注意してください。

引き数

サイズは、10 進値、8 進値 (プレフィックスとして 0 を付ける) または 16 進値 (プレフィックスとして 0x を付ける) として指定することができます。

規則

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

xlf95 -O3 -qhot -bmaxdata:0x20000000 huge_data_model.f
xlf95 -O3 -qhot -bmaxstack:2000000 lots_of_automatic_data.f

関連情報

大きな AIX プログラムの作成に関係のある問題の説明は、「AIX General Programming Concepts 」の『Large Program Support Overview (大きなプログラムのサポートの概要)』の項を参照してください。

-brtl オプション

構文

-brtl | -bnortl

ライブラリー (-l オプションで指定する) の検出に使用するアルゴリズムを決定します。

背景情報

-brtl を指定すると、実行時リンクが使用可能になります。

-bdynamic または -bshared と組み合わせて使用すると、-l オプションで指定されたライブラリーの検索は、サフィックス .so または .a によって行われます。検索する個々のディレクトリーでは、サフィックス .so を持つファイルが検索されます。このファイルが見つからない場合は、サフィックス .a を持つファイルが検索されます。どちらのファイルも見つからない場合は、次のディレクトリーで検索が継続されます。 表 14 は、これらのオプションを組み合わせた場合に、検索されるファイル・サフィックスがどのように影響を受けるかを示したものです。

規則

これらのオプションは ld コマンドに直接渡され、 XL Fortran によって処理されることはありません。これらのオプションのうち最後に指定されたものだけが使用されます。これらのオプションにはグローバルな効果があります。コマンド行のどこにあるかに関係なく、コマンド全体が影響を受けます。

xlf95 -brtl f.f -lmylib
xlf95_r -bnortl f.f -bdynamic -llib1 -bstatic -llib2

最後の例の終わりに -brtl を追加すると、その前にある -bnortl はオーバーライドされます。

関連情報

これらのオプションの詳細については、「AIX General Programming Concepts 」を参照してください。 -bdynamic、-bshared、-bstatic オプションも参照してください。

-bshared オプション

関連情報

-bdynamic、-bshared、-bstatic オプションを参照してください。

-bstatic オプション

関連情報

-bdynamic、-bshared、-bstatic オプションを参照してください。

-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/xlf.cfg) は、インストール時に作成されます。デフォルトのスタンザは、コンパイラーを呼び出すために使用するコマンドの名前 (xlf90xlf90_rxlf90_r7xlf95xlf95_rxlf95_r7xlfxlf_rxlf_r7f77、または fort77) に応じて異なります。

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

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

制限

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

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

関連情報

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

-g オプション

構文

-g
DBG | NODBG

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

関連情報

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

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

関連情報

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

-k オプション

構文

-k
FREE(F90)

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

該当する製品レベル

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

関連情報

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

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

-L オプション

構文

-Ldir

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

規則

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

関連情報

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

-l オプション

構文

-lkey

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

規則

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

関連情報

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

-N オプション

構文

-NSbytes
SPILLSIZE(bytes)

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

規則

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

デフォルト

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

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

関連情報

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

-O オプション

構文

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

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

引き数

指定しない場合
作成されたコードに対して最適化を行いません。

-O
XL Fortran の各リリースに対して、-O はコンパイル・スピードとランタイムのパフォーマンスの最良の組み合わせであると思われる最適化のレベルを使用可能にします。特定のレベルの最適化が必要な場合は、適切な数値を指定してください。現在、-O-O2 と同等です。

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

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

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

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

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

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

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

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

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

  -O4 -qarch=com

-O5
-O4 オプションの機能をすべて使用できるだけでなく、 -qipa=level=2 オプションの機能も使用できます。

制限

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

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

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

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

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

関連情報

-qessl オプション では ESSL ルーチンを使用することができます。

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

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

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

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

-o オプション

構文

-o name

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

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

デフォルト

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

規則

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

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{v|k}[!]

選択された最適化プリプロセッサーを呼び出します。 ! を追加することにより、コンパイル・ステップでプリプロセスを行うことはなくなります。

次のプリプロセッサー・オプションのいずれか 1 つだけをコマンド行に指定できます。

-Pk は、KAP プリプロセッサーを呼び出します。
-Pv は、VAST-2 プリプロセッサーを呼び出します。

次の例は、妥当な量の最適化を実行するプリプロセッサー・オプションのセットを示しています。

xlf95 test.f -Pk -Wp,-r=3 -O  # Reasonable set of KAP options
xlf95 test.f -Pv -Wp,-ew -O   # Reasonable set of VAST-2 options

次の例は、プリプロセス済みの出力をファイルに保管する方法を示して、プリプロセッサーがどのような変換を行ったかを見ることができるようにします。

# Produces KAP preprocessor output file Ploops.f
  xlf95 -Pk! -Wp,-f loops.f
 
# Produces VAST preprocessor output file Ploops.f
  xlf95 -Pv! -Wp,-o loops.f
注:
プリプロセッサーは XL Fortran の一部として組み込まれてはいないので、この例を動作させるには、プリプロセッサーを別途購入する必要があります。

関連情報

その他の種類の (条件付きコンパイルおよびマクロ展開用の) プリプロセスについては、C プリプロセッサーによる Fortran ファイルの引き渡しを参照してください。

-p オプション

構文

-p[g]

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

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

-pg-p に似ていますが、より詳細な統計を作成します。 -pg でコンパイルしたプログラムを実行すると、 gmon.out ファイルが作成されます。このファイルは、実行時プロファイルを作成するために、 gprof コマンドとともに使用します。

規則

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


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

関連情報

プロファイルと、prof および| gprof コマンドについて詳しくは、「AIX コマンド・リファレンス 」を参照してください。

-Q オプション

構文

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

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

規則

デフォルトでは、呼び出し元と呼び出される側が両方とも同じソース・ファイルにあるか、INCLUDE ディレクティブによって接続されたファイルのセットにある場合のみ、 -Q がプロシージャーに影響を与えます。別のソース・ファイルのプロシージャーへの呼び出しに対するインライン展開をオンにするには、-qipa オプションも使用してください。

引き数

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

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

制限

-Q のインライン化を有効にするには、最低でもレベル 2 の -O を指定する必要があります。

ファイルに対してインライン化が指定されると、以下の @PROCESS コンパイラー・ディレクティブが有効になるのは、ファイル内の最初のコンパイル単位の前にある場合だけです。 ALIASALIGNATTRCOMPACTDBGEXTCHKEXTNAMEFLOATFLTTRAPHALTIEEELISTMAXMEMOBJECTOPTIMIZEPHSINFOSPILLSIZESTRICTXREF

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

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

引き数

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

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

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

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

規則

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

該当する製品レベル

-qxflag=xalias は廃止され、-qalias=nostd オプションに代わっています。

-qipa オプションを使用しても、-qalias は必要です。

Examples of 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 が更新される場合は別名付けは許可されず、検出されないままであると、予測不能な結果が起きることがあります。 -qalias=nostd が指定されている場合は、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_rxlf90_r7xlf95xlf95_r、および xlf95_r7 コマンドは、プログラムに標準的な別名だけが入っている (-qalias=aryovrlp:pteovrlp:std:nointptr) と想定しますが、xlf_rxlf_r7xlf、および f77 コマンドは、XL Fortran バージョン 2 との互換性を保持するために、整数 POINTER が存在する可能性がある (-qalias=aryovrlp:pteovrlp:std:intptr) と想定します。

-qalign オプション

構文

-qalign={[no]4k|struct={natural|packed|port}}
ALIGN({[NO]4K|STRUCT{(natural)|(packed)|(port)}})

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

引き数

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

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

論理ボリューム I/O とデータ・ストライピングによるスループットの向上で説明されている I/O の技法を使用する場合は、必ず -qalign=4k を使用する必要があります。

関連情報

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

-qarch オプション

構文

-qarch=architecture

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

引き数

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

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

com
コンパイラーが生成した実行可能ファイルは、POWER または PowerPC ハードウェア・プラットフォームのいずれでも実行できます。というのは、このファイルには、すべてのマシンに共通の命令のみが入っているためです。この選択は、-q32 を指定した場合にデフォルト になります。

-q64 オプションと -qarch=com オプションを同時に指定した場合、ターゲット・プラットフォームは 64 ビットになります。命令セットは、すべての 64 ビット・マシンに共通の命令に制限されます。詳細については、第 6 章, 64 ビット環境での XL Fortran の使用を参照してください。 -qfloat オプションの rndsngl サブオプションは自動的にオンにされます。オフにはできません。この場合に、PowerPC システムではパフォーマンスが向上しますが、 -qarch=com-q32 でコンパイルすると結果がやや異なる場合があります。

p2sc
実行可能ファイルは、任意の POWER2 Super チップ・ハードウェア・プラットフォーム上で実行できます。 POWER2 Super チップは -qarch=pwr2 グループに属しています。

pwr2s
実行可能ファイルは、POWER2 チップがインプリメントされた任意のデスクトップ・マシン上で実行できます。このアーキテクチャーは、-qarch=pwr2 グループに属しています。

ppc
実行可能ファイルは、RS64I、 RS64II、 RS64III、601、 603、 604、 POWER3、|POWER4、および将来の PowerPC チップをベースにしたプラットフォームを含む任意の PowerPC ハードウェア・プラットフォームで稼動させることできます。コンパイラー・オプション -q64 を指定する場合、ターゲット・プラットフォームは 64 ビットの PowerPC になります。 命令セットは、すべての 64 ビット PowerPC マシンに共通のものに制限されます。詳細については、第 6 章, 64 ビット環境での XL Fortran の使用を参照してください。この選択は、-q64 を指定した場合にデフォルトになります。

-qfloat オプションの rndsngl サブオプションは自動的にオンにされます。オフにはできません。 |

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

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

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

rs64a
実行可能ファイルは、任意の RS64I マシン上で実行できます。詳細については、-qarch=rs64a オプションを参照してください。

rs64b
実行可能ファイルは、任意の RS64II マシン上で実行できます。詳細については、-qarch=rs64b オプションを参照してください。

rs64c
実行可能ファイルは、任意の RS64III マシン上で実行できます。詳細については、-qarch=rs64c Optionを参照してください。

601
実行可能ファイルは、任意の PowerPC 601(R) ハードウェア・プラットフォーム上で実行できます。PowerPC 601 プロセッサーには他の PowerPC に存在していない命令がインプリメントされているため、プログラムは他の PowerPC プロセッサーでは動かないことがあります。 -qfloat オプションの rndsngl サブオプションは自動的にオンにされます。オフにはできません。

603
実行可能ファイルは、任意の PowerPC 603(R) ハードウェア・プラットフォーム上で実行できます。PowerPC 603 プロセッサーには他の PowerPC に存在していない命令 (オプションの PowerPC グラフィックス命令など) がインプリメントされているため、プログラムは他の PowerPC プロセッサーでは動かないことがあります。 -qfloat オプションの rndsngl サブオプションは自動的にオンにされます。オフにはできません。

604
実行可能ファイルは、任意の PowerPC 604(R) ハードウェア・プラットフォーム上で実行できます。 PowerPC 604 プロセッサーには他の PowerPC インプリメンテーションに存在していない命令 (オプションの PowerPC グラフィックス命令など) がインプリメントされているため、プログラムは他の PowerPC プロセッサーでは動かないことがあります。 -qfloat オプションの rndsngl サブオプションは自動的にオンにされます。オフにはできません。

pwr
実行可能ファイルは、任意の POWER または POWER2 ハードウェア・プラットフォーム上で実行できます。これらのプラットフォーム用の実行可能ファイルは、PowerPC システム上で使用できない命令を含んでいる場合があると、それらの新しいシステムとの互換性がなくなったり、脱落している命令がソフトウェア・トラップによってエミュレートされ、速度が遅くなることがあります。

pwr2
実行可能ファイルは、任意の POWER2 ハードウェア・プラットフォーム上で実行できます。これらのプラットフォーム用の実行可能ファイルは POWER システムと PowerPC システム (POWER3 を含む) 上では使用できない命令を含んでいることがあり、それらのシステムとの互換性がなくなることがあります。

pwrxpwr2 の同義語ですが、pwr2 を使用することをお勧めします。

pwr3
実行可能ファイルは、任意の POWER3 ハードウェア・プラットフォーム上で実行できます。これらのプラットフォーム用の実行可能ファイルは POWER、POWER2、またはほかの PowerPC システム上で使用できない命令を含んでいる場合があると、それらのシステムとの互換性がなくなることがあります。

pwr4
実行可能ファイルは、任意の POWER4 ハードウェア・プラットフォーム上で稼動できます。 -qarch=pwr4 を使用すると、以前の PowerPC インプリメンテーションでは稼動しない 2 進のものになります。
注:
-qarch 設定は、-qtune 設定に対して許可される選択値とデフォルトを決定します。 -qarch および -qtune を使用して、プログラムを特定マシンで実行することができます。

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

所定のアプリケーション・プログラムに対しては、それぞれのソース・ファイルをコンパイルするときに必ず同じ -qarch 設定を指定してください。互換性のない -qarch 設定でコンパイルされたオブジェクト・ファイルをリンカーとローダーで検出することができますが、それは、信頼性がありません。

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

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

その他の考慮事項

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


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

プロセッサー グラフィックス・グループ sqrt グループ 64 ビット
601 いいえ いいえ いいえ
603 はい いいえ いいえ
604 はい いいえ いいえ
rs64a いいえ いいえ はい
rs64b はい はい はい
rs64c はい はい はい
pwr3 はい はい はい
pwr4 はい はい はい

-qarch=pwr3 オプションを使ってコードをコンパイルすると、このコードは RS64B プラットフォームでは実行されますが、命令グループが異なるため、RS64A プラットフォームでは |実行されない可能性があります。同様に、-qarch=603 オプションを使ってコンパイルされたコードは、POWER3 マシンでは実行されますが、RS64A マシンでは|実行されない可能性があります。

関連情報

POWER4、POWER3、 POWER2、 あるいは PowerPC システムでのコンパイル-qtune オプション、および -qcache オプションを参照してください。

-qassert オプション

構文

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

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

引き数

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

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

関連情報

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

-qattr オプション

構文

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

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

引き数

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

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

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

関連情報

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

-qautodbl オプション

構文

-qautodbl=setting
AUTODBL(setting

互換性の利点

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

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

パフォーマンス上の利点

POWER および POWER2 の浮動小数点ユニットは、高速の REAL(8) 算術演算を使用して REAL(4) 計算を内部的に実行しますが、多くの場合、これらの計算では、REAL(8) または DOUBLE PRECISION であるデータ・エンティティーを全面的に使用して行った方が効率的です。これらの計算値が REAL または REAL(4) データ・エンティティーを使用してコード化されると、中間計算は IEEE 倍精度で行われても、REAL(4)-REAL(8)-REAL(4) 変換で余分な精度と範囲が落ちてしまい、パフォーマンスの低下を招きます。

サブオプション

-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 だけが有効になります。

ld コマンドを使用した 32 ビット非 SMP オブジェクト・ファイルのリンクには、-qautodbl でコンパイルされたオブジェクト・ファイルと追加のライブラリーを手操作でリンクする方法が説明されています。

-qcache オプション

構文

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

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

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

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

指針

サブオプション

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 for AIX ランゲージ・リファレンス 」で『言語エレメント 』の章の「条件付きコンパイル 」を参照してください。

-qcharlen オプション

構文

-qcharlen=length
CHARLEN(length)

これは廃止されたオプションです。依然として受け入れますが、無効です。文字定数の最大長は 32 767 バイト (32 KB) です。また文字変数の最大長は 32 ビット・モードで 268 435 456 バイト (256 MB) です。また文字変数の最大長は 64 ビット・モードで 2**40 バイトです。この限界は常に有効で、長いストリングを含むプログラムに移植性の問題が生じるのを防ぐのに十分な大きさとなっています。

-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 for AIX ランゲージ・リファレンス 」の INCLUDE ディレクティブについての節を参照してください。

-qcompact オプション

構文

-qcompact | -qnocompact
COMPACT | NOCOMPACT

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

デフォルトでは、パフォーマンスを改善するために最適化プログラムが使用する手法のために、プログラムが大きくなってしまう場合があります。ストレージが限られているシステムの場合は、-qcompact を使用して、発生する拡張を少なくすることができます。

規則

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

-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 for AIX ランゲージ・リファレンス 」の『ホレリス定数』および 参照または値による引き数の引き渡しを参照してください。

-qdbg オプション

構文

-qdbg | -qnodbg
DBG | NODBG

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

-qddim オプション

構文

-qddim | -qnoddim
DDIM | NODDIM

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

規則

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

-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 ステートメントではない行ですが、コンパイラーが認識し動作させる行のことです。たとえば @PROCESS ディレクティブのように、コンパイラーが常に認識するディレクティブもあります。最大限の柔軟性を持たせるようにするため、将来の XL Fortran コンパイラーに付属する可能性がある新しいディレクティブは、注釈行に含められます。これにより、他のコンパイラーがそれらのディレクティブを認識しなければ、移植性の問題を避けられます。

デフォルト

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

引き数

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

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

@PROCESS FREE
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 that has not
! been converted yet.
      INCLUDE 'set_c_and_d.inc'
!IBM* SOURCEFORM(FREE)
E = 5 ! Back to free source form.
F = 6
END

この例の場合は、-qdirective=oldstyle オプションを指定してコンパイルし、INCLUDE 行の前の SOURCEFORM ディレクティブをコンパイラーが必ず認識するようにします。自由ソース形式を使用するためにインクルード・ファイルを変換した後は、-qnodirective オプションを指定してコンパイルすることができ、SOURCEFORM(FIXED) ディレクティブは無視されます。

関連情報

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

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

-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 は効力を持ちません。

-qdpcl オプション

構文

-qdpcl | -qnodpcl
DPCL | NODPCL

実行可能ファイルの構造を見るときに、動的プローブ・クラス・ライブラリー (DPCL) に基づくツールが使用することのできるシンボルを生成します。

-qdpcl オプションを指定すると、コンパイラーはプログラム内でコードのブロックを定義するためのシンボルを発行します。その後、DPCL インターフェースを使用するツールを使って、このオプションを指定してコンパイルしたオブジェクト・ファイル用に、メモリー使用状況などのパフォーマンス情報を調べることができます。

制限

-qdpcl を指定するときには、-g オプションも指定する必要があります。

-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 が認識するエスケープ・シーケンスのリストは、表 25 に記載されています。

-qessl オプション

構文

-qessl | -qnoessl

Fortran 90 組み込みプロシージャーの代わりに ESSL ルーチンを使用することができます。

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

規則

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

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

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

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

関連情報

ESSL ライブラリーは、XL Fortran コンパイラーと一緒に出荷されることはありません。これら 2 つのライブラリーの詳細については、「Engineering and Scientific Subroutine Library for AIX Guide and Reference 」を参照してください。

-qextchk オプション

構文

-qextchk | -qnoextchk
EXTCHK | NOEXTCHK

共通ブロック、プロシージャー定義、プロシージャー参照、モジュール・データのタイプ・チェック情報を設定します。リンカーは後でこの情報を使用して、コンパイル単位間の不一致を検出できます。

規則

コンパイル時に、-qextchk はプロシージャー定義、参照、モジュール・データの整合性を検査します。

-qextchk はリンク時に、タイプ、形状、引き渡しモード、クラスなどの点で実引き数が対応する仮引き数と一致するかどうか、また、共通ブロックの宣言とモジュールの宣言に整合性があるかどうかを検査します。

-qextern オプション

構文

-qextern=names

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

引き数

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

該当する製品レベル

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

      SUBROUTINE GETENV(VAR)
         CHARACTER(10) VAR
         PRINT *,VAR
      END
 
      CALL GETENV('USER')
      END

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

-qextname オプション

構文

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

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

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

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

-qextname が解決する命名の問題のインスタンスを数個しかプログラムが持っていない場合は、 ld コマンドの -brename オプションを使用して、新しい名前を選択した方がよい場合もあります。

制限

プログラムのすべてのソース・ファイルは、必須モジュール・ファイルのソース・ファイルも含め、同じ -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 オプションです。

-qfdpr オプション

構文

  -qfdpr | -qnofdpr

AIX フィードバック指定プログラム再構築 (fdpr) パフォーマンス調整ユーティリティーが、生成される実行可能ファイルを最適化する際に必要とする情報をオブジェクト・ファイルに提供します。

制限

fdpr パフォーマンス調整ユーティリティーには独自の制限がいくつかあるため、このユーティリティーを使用しても、どのプログラムの実行時間も必ず短縮されるとは限りません。また、オリジナル・プログラムとまったく同じ結果が得られる実行可能プログラムが必ず生成されるとも限りません。

-qfdpr コンパイラー・オプションを使用した場合、リオーダーされるオブジェクト・ファイルは、このフラグを付けて作成されたオブジェクト・ファイルだけです。そのため、-qfdpr を使用する場合には、プログラム内のすべてのオブジェクト・ファイルにこのオプションを使用するべきです。 -qfdpr コンパイラー・オプションを使用した場合、静的リンクを作成してもパフォーマンスは向上しません。

ある実行可能プログラムに組み込まれたオブジェクトのうち、その一部にだけ -qfdpr を使用してしまうと、 fdpr は、fdpr を付けて作成されたオブジェクトに対してだけしか最適化を実行しません。このことは、-qfdpr を使用してコンパイルされたプログラムでは、fdpr を使用してもあまり効果は上がらないことを意味します。 (ライブラリー・コードは、-qfdpr を使用してコンパイルされないため) ライブラリー・コードは最適化されないからです。

fdpr コマンドで実行する最適化は、-qpdf オプションで実行する最適化と似たものです。

関連情報

詳細については、fdpr について説明しているページと「AIX コマンド・リファレンス 」を参照してください。

-qfixed オプション

構文

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

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

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

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

デフォルト

-qfixed=72 は、xlfxlf_rxlf_r7fort77、および f77 コマンドのデフォルトです。 -qfree=f90xlf90xlf90_rxlf90_r7xlf95xlf95_r、および xlf95_r7 コマンド用のデフォルトです。

関連情報

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

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

-qflag オプション

構文

-qflag=listing_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 設定を変更する場合には、その前に 第 7 章, XL Fortran 浮動小数点処理に記述されている事柄と IEEE 標準を熟知しておかなければなりません。

デフォルト

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

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

引き数

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

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

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

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

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

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

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

hsflt | nohsflt
単精度式の丸めを防止して、浮動小数点部を除数の逆数を掛ける乗算と置き換えることによって、計算をスピードアップします。また、浮動小数点と整数間の変換に対して、fltint サブオプションと同じ手法を使用します。

注:

  1. このサブオプションは、浮動小数点計算が既知の特性を持っている特定のアプリケーションのためのものです。特に、浮動小数点結果はすべて、単精度表示の定義範囲内になければなりません。他のアプリケーション・プログラムをコンパイルするときにこのオプションを使用すると、誤った結果が起きても警告を出さない場合があります。詳細については、-qfloat=hsflt オプションの技術情報を参照してください。

hssngl | nohssngl
結果が REAL(4) メモリー位置に格納される場合のみ単精度式を丸めることによって、 hsflt よりも安全な方法で計算をスピードアップします。

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

nans | nonans
シグナル NaN 値 (NaNS) に関係のある演算を検出します (実行時)。その結果、-qflttrap=invalid:enable を使用して、シグナル NaNS に関係のある例外条件を処理することができます。 NaNS 値は、他の浮動小数点演算からは出てこないため、このサブオプションは、プログラムがこの値を明示的に作成する場合にのみ使用してください。

rndsngl | norndsngl
式全体が評価されるまで待つのではなく、個々の単精度 (REAL(4)) 演算の結果を単精度に丸めます。他のタイプのコンピューターで同様の計算を行った場合の結果と整合性をとるために、スピードを犠牲にします。

PowerPC 浮動小数点ユニットの機能のために、この設定は、任意の -qarch PowerPC サブオプションでコンパイルしたプログラムには常に有効です。 -q64-qarch=com を同時に指定する場合、rndsngl サブオプションもオンになります。

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

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

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

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

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

-qflttrap オプション

構文

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

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

引き数

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

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

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

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

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

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

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

デフォルト

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

制限

AIX バージョン 4.3.3 以降では、無効な IEEE SQRT 演算を含むプログラムをコンパイルし、その後そのプログラムを実行するときに -qflttrap=inv:en を使用する場合、 PowerPC マシンでは予定の SIGTRAP シグナルが発生しなかったり、 POWER マシン上ではまったく発生しないことがあります。

この問題が修正されるのは、AIX バージョン 4.3.3 およびそれ以降のレベルのオペレーティング・システムだけです。 次のコマンドを指定します。

     export SQRT_EXCEPTION=3.1

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

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

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

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

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

zerodivide サブオプションは、ガードすべき例外のタイプを識別します。 enable サブオプションは、例外が発生すると SIGTRAP シグナルを出します。 -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=72xlfxlf_rxlf_r7、および f77/fort77 コマンド用のデフォルトです。-qfree=f90xlf90xlf90_rxlf90_r7xlf95xlf95_r、および xlf95_r7 コマンド用のデフォルトです。

関連情報

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

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

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

IBM 自由ソース形式は、IBM VS FORTRAN コンパイラーの自由形式と同等で、System/370(TM) プラットフォームからのプログラムの移植を支援するためのものです。この形式については、「XL Fortran for AIX ランゲージ・リファレンス 」の「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
$ xldb 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

最適化実行時にループおよび配列言語に高位変換を実行するかどうか、また配列次元とデータ・オブジェクトに埋め込みを行いキャッシュ・ミスを避けるかどうかを決定します。

キャッシュ・アーキテクチャーをインプリメントしたことが原因となって、 2 の累乗となっている配列次元がキャッシュの使用効率を低下させる場合があります。オプションの arraypad サブオプションを使用すれば、コンパイラーは配列処理ループの効率を高められそうな配列次元を増やすことができます。 2 の累乗となっている複数の次元 (特に第 1 次元) を持った大きな配列がある場合や、キャッシュ・ミスやページ不在が原因で配列処理プログラムの実行速度が落ちる場合には、 -qhot=arraypad の指定を考慮してください。

-qhot を有効にするには、最低でもレベル 2 の -O を指定する必要があります。コンパイラーでは -O2 を想定しています。

引き数

arraypad
効果的と思われる場合には、選択した数がどの程度であれ、コンパイラーは配列を埋め込みます。すべての配列を必ずしも埋め込む必要はありません。また、異なる配列を埋め込むこともできますが、各配列の数が一致していなくてもかまいません。

arraypad=n
コンパイラーはコードにすべての配列を埋め込みます。埋め込み数は、正の整数値でなければなりません。各配列は、エレメントの整数値で埋め込まれます。

n は整数値であるため、埋め込み値には配列エレメントの最大サイズを倍数にしたものを使用するようお勧めします。通常は 4、8、16 などを使用します。

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

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

arraypad オプションと arraypad=n オプションの両方で、プログラム変更または等価のチェックは行われません。埋め込みが行われる場合、コンパイル済みプログラムが予測不能な結果を生成することがあります。

デフォルト

制限

-C オプションは、変換をオフにします。

以下の例では、-qhot=vector オプションをオンにしますが、コンパイラーがコードを処理する前に、そのオプションをオフにします。

xlf95 -qhot=vector t.f -qhot=novector

関連情報

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

-qhsflt オプション

構文

-qhsflt | -qnohsflt
HSFLT | NOHSFLT

これは廃止されたオプションです。-qfloat オプションhsflt サブオプションおよび nohsflt サブオプションに置き換えられました。

関連情報

このオプションの目的と制限については、浮動小数点パフォーマンスの最大化および -qfloat=hsflt オプションの技術情報を参照してください。

-qhssngl オプション

構文

-qhssngl | -qnohssngl
HSSNGL | NOHSSNGL

これは廃止されたオプションです。-qfloat オプションhssngl サブオプションおよび nohssngl サブオプションに置き換えられました。

-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 for AIX ランゲージ・リファレンス 」の『ポインター・アソシエーション』を参照してください。

-qinitauto オプション

構文

-qinitauto[=hex_value] | -qnoinitauto

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

hex_value をゼロに設定すると、自動変数はすべて使用前にクリアされます。プログラムの中には、変数はゼロに初期設定され、それらの変数が存在しないと機能しないと想定したり、プログラムが最適化されなければ機能し、最適化されると障害が発生すると想定するプログラムもあります。一般に、変数をすべてゼロ・バイトに設定すれば、そのような実行時エラーは回避されます。

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

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

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

引き数

デフォルト

制限

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

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

次のオプションを指定してコードをコンパイルする場合、 hex_value が 3 桁以上になったら、コンパイラーはワード初期設定を実行します。

-qinitauto=0cf

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

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

関連情報

-qflttrap オプション、および「XL Fortran for AIX ランゲージ・リファレンス 」の 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 は、以下のようなデータ・エンティティーに適用されます。

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

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

制限

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

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

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

@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 for AIX ランゲージ・リファレンス 」の 『タイプ・パラメーターおよび指定子』を参照してください。

-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 を指定してコンパイルしないプログラムの部分に関して、何を前提事項にするかを示すサブオプションを指定します。

    コンパイル中に、コンパイラーは .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
-Q オプションがインライン展開の程度を決定するために使用する限界サイズを変更します。呼び出し側のプロシージャーの限界サイズは、この確立された「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 つのシリアル・スレッドを稼動するのと同じです。

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

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

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

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

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

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

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

該当する製品レベル

このオプションは XL Fortran バージョン 3 の -qipa オプションと類似していますが、まったく同じではありません。すでに -qipa オプションが入っている makefile がある場合は、新規のサブオプションを使用するよう必要に応じて修正してください。

規則

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

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

表 16. 正規表現の構文

説明
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

背景情報

プロシージャーは、通常、着信パラメーターを入り口点のスタックに格納します。しかし、-O を指定してコードをコンパイルすれば、格納されているパラメーターのうち、その後プロシージャーで使用する予定のないものを最適化プログラムによって取り除ける場合があります。

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

-qlanglvl オプション

構文

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

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

規則

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

引き数

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

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

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

90ext
extended と同等のサブオプションを廃止します。

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

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

extended
言語レベルのチェックを効率的にオフにして、完全な Fortran 95 言語標準とすべての拡張機能を受け入れます。

デフォルト

デフォルトは -qlanglvl=extended です。 XL Fortran バージョン 6.1 以前は、デフォルトは -qlanglvl=90ext でした。 90ext サブオプションは、Fortran 90 言語標準の全機能と、拡張機能 (現在 Fortran 95 標準は含む) を受け入れるものであり、 extended と同等の働きをします。しかし、90ext サブオプションは廃止されているため、将来の問題を回避するには、できるだけ早く 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 実行時オプションは、コンパイル時にチェックできない実行時拡張機能を見つけるのに役立ちます。

-qlargepage オプション

構文

-qlargepage | -qnolargepage

ラージ・ページ・メモリー環境で実行するように設計されているプログラムが、 POWER4 およびより早いベース・システムで提供される大きな 16 MB ページを活用できるようにコンパイラーに指示します。 -qlargepage をラージ・ページ環境用に設計されたプログラムに使用すると、パフォーマンスが向上する可能性があります。ラージ・ページ・サポートを使用するための詳細については、「AIX パフォーマンス・マネージメント・ガイド 」を参照してください。

注:
AIX 5.1 を使用している場合、非常に多くのプログラムが同時にラージ・ページをアクセスしようとすると、パフォーマンスが低下する恐れがあります。また、ハードウェア要件に合わない -qlargepage を使用しようとする場合、パフォーマンスが低下する可能性があります。 このオプションは個別に使用してください。

-qlargepage コンパイラー・オプションは、最適化プログラムをオンにする最適化レベルを指定したときだけ効果があります。最適化レベルを上げるほど効果が上がります。

-qlibansi オプション

関連情報

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

-qlibessl オプション

関連情報

-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

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

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

規則

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

関連情報

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

-qlm オプション

構文

-qlm | -qnolm
LM | NOLM

ライセンス管理制御システム (LM) を使用可能にしたり、使用不能にしたりします。 -qnolm オプションを指定しない場合、LM はデフォルトで使用可能になります。

デフォルトで LM を使用不能にしたい場合は、プログラムのコンパイル時にコマンド行で -qnolm コンパイラー・オプションを使用するか、構成ファイル (xlf.cfg) 内にこのオプションを入れてください。

関連情報

コンパイラーの使用状況の追跡を参照してください。

-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 オプションおよび 第 8 章, XL Fortran プログラムの最適化を参照してください。

-qmbcs オプション

構文

-qmbcs | -qnombcs
MBCS | NOMBCS

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

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

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

規則

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

制限

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

-qmixed オプション

構文

-qmixed | -qnomixed
MIXED | NOMIXED

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

-qmoddir オプション

構文

-qmoddir=directory

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

デフォルト

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

関連情報

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

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

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

-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 組み込み関数を使用して渡された引き数にもそうでない引き数にも影響を及ぼしますが、|値によって組み込み関数を使用して渡された引き数には影響を及ぼしません。このオプションは、I/O ステートメントの中の文字式に影響を与えません。

このオプションを指定する場合と指定しない場合の 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 オプションを使用してください。

規則

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

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

背景情報

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

制限

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

# 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 出力ファイル、および 条件付き分岐の最適化を参照してください。

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

resetpdf [pathname] pathname ディレクトリー、または pathname が指定されていない場合は PDFDIR ディレクトリー、あるいは PDFDIR が設定されていない場合は現行ディレクトリーに入っているすべてのプロファイル情報をゼロに設定します (しかしデータ・ファイルは除去されません)。

アプリケーションに変更を加えて一部のファイルを再コンパイルした場合、それらのファイルのプロファイル情報は自動的にリセットされます。変更によってプログラムの流れが変わった可能性があるためです。重要な変更を加えた場合、再コンパイルされなかったプログラム部分の実行カウントがその変更によって変わる可能性があるときは、変更後に resetpdf を実行してアプリケーション全体のプロファイル情報をリセットしてください。

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

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

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

-qphsinfo オプション

構文

-qphsinfo | -qnophsinfo
PHSINFO | NOPHSINFO

各コンパイラー・フェーズのタイミング情報が端末に表示されるかどうかを決定します。

関連情報

コンパイラー・フェーズを参照してください。 | |

|-qpic オプション

|構文

|-qpic[=suboptions]

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

|引き数 |

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

|デフォルトは -qpic=small です。

|-qpic=large を指定すると、 |-bbigtocld コマンドに渡した場合と同じ効果があります。 |

-qport オプション

構文

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

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

引き数

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

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

|sce | nosce
|このオプションを指定すると、コンパイラーは、選択された論理式でショート・サーキット評価を |実行できます。

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

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

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

関連情報

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

-qposition オプション

構文

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

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

規則

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

該当する製品レベル

appendunknown サブオプションは XL Fortran バージョン 2 append サブオプションと同じですが、紛らわしさを避けるために、appendunknown の方を使用するようお勧めします。

-qposition=appendold:appendunknown は、 XL Fortran バージョン 1 および初期のバージョン 2 の動作との互換性を提供します。 -qposition=appendold は、 XL Fortran バージョン 2.3 の動作との互換性を提供します。

|次の例では、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 for AIX ランゲージ・リファレンス 」の OPEN ステートメントについての節を参照してください。 |

|-qprefetch オプション

|構文

|-qprefetch | -qnoprefetch

|プリフェッチ命令を自動的に挿入するようにコンパイラーに指示します。

|関連情報

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

-qqcount オプション

構文

-qqcount | -qnoqcount
QCOUNT | NOQCOUNT

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

規則

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

関連情報

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

-qrealsize オプション

構文

-qrealsize=バイト
REALSIZE(バイト)

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

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

規則

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

引き数

バイト に使用できる値は次のとおりです。

結果

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

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 for AIX ランゲージ・リファレンス 」の『タイプ・パラメーターおよび指定子』では、 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_rxlf_r7f77 、あるいは 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

関連情報

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

-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 プログラムの動作を再現しなければならない場合があります。 xlf_rxlf_r7xlff77、および fort77 コマンドは、前の動作を保持するために、 /etc/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 for AIX ランゲージ・リファレンス 」の『変数のストレージ・クラス』を参照してください。

-qsclk オプション

構文

-qsclk[=centi | micro]

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

関連情報

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

-qsmallstack オプション

構文

-qsmallstack | -qnosmallstack
 

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

-qsigtrap オプション

構文

-qsigtrap[=trap_handler]

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

引き数

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

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

関連情報

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

-qsmp オプション

構文

-qsmp[=suboptions]
-qnosmp

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

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

引き数

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

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

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

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

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

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

opt | noopt
-qsmp=noopt サブオプションを指定すると、コンパイラーは、コードを並列化するのに必要な最少の最適化量を実行します。これは、デフォルトで -qsmp-O2 オプションを使用可能にし、幾つかの変数をレジスターに移動してデバッガーでアクセス不能にする結果になるので、デバッグに役立ちます。しかし、-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 for AIX ランゲージ・リファレンス 」の『ディレクティブ』という章を参照してください。

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...
これは次のものと同じです。
     xlf90 -qsmp=noopt...
   

例 2

     xlf90 -qsmp=noopt -O3 -qsmp...
これは次のものと同じです。
     xlf90 -qsmp -O3...
   

例 3

     xlf90 -qsmp=noopt -O3 -qhot -qsmp -O2...
これは次のものと同じです。
     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_rxlf_r7f77|または 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-qhot、および -qipa オプションで行われた最適化によって Fortran 90 または Fortran 95 プログラムのセマンティクスが変更されないことを保証します。

デフォルト

デフォルトの場合、-O3-qhot、および -qipa の最適化では、コードを再調整して結果と例外が、最適化されていないプログラムのものとは異なるようにします。

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

規則

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

関連情報

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

-qstrictieeemod オプション

構文

-qstrictieeemod | -qnostrictieeemod
STRICTIEEEMOD | NOSTRICTIEEEMOD

ieee_arithmetic および ieee_exceptions 組み込みモジュール用の Fortran 2000 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 for AIX ランゲージ・リファレンス 」にある『OpenMP 実行環境ルーチンおよびロック・ルーチン 』の章を参照してください。

-qtbtable オプション

構文

-qtbtable={none | small | full}

オブジェクト・ファイル内のトレースバック情報のデバッグ量を制限し、プログラムのサイズを小さくします。

このオプションを使用して、プログラムを小さくすることができます。その代わりデバッグは難しくなります。実動ステージに到達しているときにできるだけコンパクトなプログラムを作成したい場合は、 -qtbtable=none を指定することができます。そうでない場合は、通常のデフォルトが適用されます。この場合、-g を指定してコンパイルされたコードや -O を指定しないでコンパイルされたコードにはトレースバックの全情報が入り (-qtbtable=full)、 -O を指定してコンパイルされたコードにはそれよりも小さなトレースバック情報が入ります (-qtbtable=small)。

引き数

none
オブジェクト・コードにはトレースバック情報がまったく入りません。デバッガーや他のコード検査ツールが実行時にプログラムのスタックをアンワインドできないので、プログラムをデバッグすることはできません。実行時例外のためにプログラムが停止する場合は、例外の発生場所を説明しません。
small
オブジェクト・コードにはトレースバック情報が入りますが、プロシージャーの名前やプロシージャー・パラメーターの情報は入りません。プログラムのデバッグは可能ですが、必須でない情報の中にはデバッガーが利用不能なものがあります。実行時例外のためにプログラムが停止する場合は、例外の発生場所を説明しますが、プロシージャー名ではなく機械アドレスを報告します。
full
オブジェクト・コードにはトレースバックの全情報が入ります。プログラムはデバッグ可能で、実行時例外のために停止する場合は、トレースバック・リストを作成します。これには、呼び出しチェーン内のプロシージャーすべての名前が入っています。

背景情報

多くの長いプロシージャー名 (モジュール・プロシージャー用に作成された内部名など) が入っているプログラムには、このオプションが非常に適しています。 Fortran プログラムよりも C++ プログラムに対する方が適用度が高い場合があります。

制限

AIX Performance Toolbox 内のパフォーマンス・ツール (tprof など) を使用するには、-qtbtable=full を指定して Fortran プログラムをコンパイルする必要があります。

関連情報

-g オプション-O オプション最適化したコードのデバッグ、および -qcompact オプションを参照してください。

-qthreaded オプション

構文

-qthreaded

コンパイラーがこのオプションを使用することにより、スレッド・セーフ・コードを生成する必要があるのはいつかを判断します。

-qthreaded オプションを指定しても、 -qnosave オプションも暗黙的に指定されるということはありません。 -qnosave オプションは、ユーザー・ローカル変数のデフォルト時自動ストレージ・クラスを指定するものです。通常、スレッド・セーフのコードを生成するには、両方のオプションを使用する必要があります。

デフォルト

-qthreaded は、xlf90_rxlf90_r7xlf95_rxlf95_r7xlf_r、および xlf_r7 コマンド用のデフォルトです。

-qthreaded オプションを指定すると -qdirective=ibmt が暗黙指定されますが、デフォルトでは trigger_constant IBMT が認識されます。

-qtune オプション

構文

-qtune=implementation

ハードウェア・アーキテクチャーの特定のインプリメンテーションに対する命令の選択、スケジューリング、その他のインプリメンテーションに依存するパフォーマンス拡張機能を調整します。

引き数

601
PowerPC 601 プロセッサー用に、最適化が調整されます。

603
PowerPC 603 プロセッサー用に、最適化が調整されます。

604
PowerPC 604 プロセッサー用に、最適化が調整されます。

auto
どのプロセッサー・タイプに属するコンパイル・マシンであるかを自動的に検出します。実行環境はコンパイル環境と同じであると見なされます。

pwr
POWER プロセッサー用に、最適化が調整されます。

p2sc
POWER2 スーパー・チップ用に、最適化が調整されます。

pwr2
POWER2 プロセッサー用に、最適化が調整されます。

pwrxpwr2 の同義語ですが、 pwr2 の方を使用するようお勧めします。

pwr3
POWER3 プロセッサー用に、最適化が調整されます。-qarch=pwr3 -qtune=pwr4 の組み合わせは、POWER3 および POWER4 プロセッサーの両方で稼動するが、 POWER4 プロセッサーでは調整されるコードを生成します。

pwr4
POWER4 プロセッサー用に、最適化が調整されます。

pwr2s
POWER2 アーキテクチャーのデスクトップ処理系用に最適化を調整します。この処理系は、他の POWER2 処理系よりプロセッサー・メモリー間におけるバスの幅が狭くなっています。クワッド・ワード命令 (これらの命令は、そのようなマシン上では他の POWER2 マシン上より処理が遅くなります) は、バスの競合を減らすために強調解除されます。つまり、それらの命令が少なくなるか、まったくなくなります。

rs64a
RS64I プロセッサー用に、最適化が調整されます。詳細については、 -qtune=rs64a オプションを参照してください。

rs64b
RS64II プロセッサー用に、最適化が調整されます。詳細については、 -qtune=rs64b オプションを参照してください。

rs64c
RS64III プロセッサー用に、最適化が調整されます。詳細については、 -qtune=rs64c Optionを参照してください。
64 ビット・ユーザーの方へ

-qtune オプションおよび 64 ビット環境に特有の情報については、 -qtune=rs64a オプション-qtune=rs64b オプション、および -qtune=rs64c Optionを参照してください。

プログラムを複数のアーキテクチャーで稼動させるけれど、特定のアーキテクチャーで調整したい場合は、 -qarch および -qtune オプションを組み合わせて使用することができます。これらのオプションは、基本的には 浮動小数点中心のプログラムに有効です。

キャッシュ・サイズおよびパイプラインなどのハードウェア・フィーチャーを最大限に活用するように、生成されたマシン命令を配置 (スケジューリング) することによって、 -qtune オプションはパフォーマンスを改善することができます。このオプションは、-O オプションと組み合わせて使用した場合にのみ効果があります。

-qtune 設定を変更すると、その結果作成される実行可能ファイルのパフォーマンスに影響する場合がありますが、実行可能ファイルが特定のハードウェア・プラットフォーム上で正しく実行できるかどうかには、まったく影響を与えません。

-qtune を指定しないと、設定は -qarch オプションによって決定されます。
|

-qarch 設定 許可されている -qtune 設定 デフォルトの -qtune 設定
com (-q32 を指定す
る場合)
pwr、pwr2/pwrx、pwr3、pwr4、pwr2s、 p2sc、rs64a、rs64b、rs64c、601、603、 604 pwr2 (-q32 を指定す
る場合)
pwr pwr、pwr2/pwrx、pwr2s、p2sc、601 pwr2
pwr2/pwrx pwr2/pwrx、p2sc、pwr2s pwr2/pwrx
pwr3 pwr3、pwr4、auto pwr3
pwr4 pwr4、auto pwr4
ppc rs64a、rs64b、rs64c、601、603、604、pwr3、pwr4、auto pwr3 (-q64 を指定
する場合)

604 (-q32 を指定
する場合)
ppc64 rs64b、rs64c、pwr3、pwr4、auto pwr3
p2sc p2sc p2sc
pwr2s pwr2s pwr2s
rs64a rs64a、auto rs64a
rs64b rs64b、auto rs64b
rs64c rs64c、auto rs64c
601 601 601
603 603 603
604 604 604

これで、-qtune サブオプションと互換性のあるマシン上でコンパイルしている限り、 -qarch=auto とともに -qtune サブオプションを指定できるようになりました。たとえば、-qarch=auto-qtune=pwr3 を指定する場合、POWER3 マシン上でコンパイルする必要があります。

制限

クワッド・ワード命令を減らすと他の POWER2 モデルでのパフォーマンスが低下する恐れがあるため、多数の異なる POWER2 モデルで実行する予定のプログラムには pwr2s サブオプションはお勧めできません。一連の異なる POWER2 モデルで実行する予定のプログラムでは、 -qtune の設定を pwr2 のまま残してください。

関連情報

-qarch オプション-qcache オプション、および POWER4、POWER3、 POWER2、 あるいは PowerPC システムでのコンパイルを参照してください。

-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 for AIX ランゲージ・リファレンス 」でループのアンロールの該当するディレクティブを参照してください。

ループおよび配列言語の最適化を参照してください。

-qunwind オプション

構文

-qunwind |-qnounwind
 UNWIND | NOUNWIND

プロシージャー呼び出し時、レジスターの揮発性を保存し、復元するデフォルトの処理を保持します。-qnounwind を指定すると、コンパイラーは、サブプログラムを再調整して、レジスターの揮発性の保存と復元を最小化します。

コードのセマンティクスが保持されている間は、保存と復元のデフォルト動作に依存する例外ハンドラーのようなアプリケーションは、未定義の結果を生成する可能性があります。 -qnounwind-g コンパイラー・オプションと結合して使用するときは、例外処理操作に関するデバッグ情報は、プログラム・スタックをアンワインドするとき不正確になる可能性があります。

-qwarn64 オプション

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

-qxflag=oldtab オプション

構文

-qxflag=oldtab
XFLAG(OLDTAB)

XL Fortran バージョン 1 との互換性を維持するために、桁 1 から 5 のタブを単一文字として解釈します (固定ソース形式のプログラムの場合)。

デフォルト

デフォルトでは、コンパイラーはソース行の桁 6 の後に 66 文字の有効文字を許可します。桁 1 から 5 のタブは、桁カウンターを桁 6 の後に移動する適切な数のブランクであると解釈されます。行番号またはその他のデータを桁 73 から 80 に含んでいる従来の Fortran の慣例に従っている方には、このデフォルトは便利です。

規則

-qxflag=oldtab オプションを指定しても、ソース・ステートメントは依然としてタブの直後に始まりますが、タブ文字は桁をカウントするための単一の文字として処理されます。この設定を使用すれば、最大 71 文字の入力を行うことができます。文字数はタブ文字が発生する場所によって異なります。

-qxflag=xalias オプション

構文

-qxflag=xalias
XFLAG(XALIAS)

廃止。代わりに -qalias=nostd が使用されています。代わりに、-qalias オプション を参照してください。

-qxlf77 オプション

構文

-qxlf77=settings
XLF77(settings)

変更された言語セマンティクスと I/O データ形式について、XL Fortran バージョン 1 および 2 からの言語との下位互換性を提供します。これらの変更のほとんどは、Fortran 90 標準で必要です。

デフォルト

デフォルトでは、コンパイラーはあらゆる場合に Fortran 95、Fortran 90、および最新バージョンのコンパイラーに適用される設定を使用します。したがって、デフォルトのサブオプションは、 blankpadnogedit77nointargnointxorleadzeronooldboznopersistentnosofteof です。ただし、これらのデフォルトは、新しいプログラムのコンパイルに使用しなければならない xlf95xlf95_rxlf95_r7xlf90xlf90_r、および xlf90_r7 コマンドのみによって使用されます。

XL Fortran バージョン 1 および 2 用に作成されたプログラムおよびデータとの最大限の互換性を得るために、xlfxlf_rxlf_r7f77、および fort77 コマンドは、このオプションについて反対の設定を使用します。

前のプログラムを変更しないでコンパイルして実行する場合のみ、適切な呼び出しコマンドを引き続き使用しても、このオプションを意識する必要はありません。このオプションについては、Fortran 90 または Fortran 95 で既存のソースまたはデータ・ファイルを使用し、xlf90xlf90_rxlf90_r7xlf95xlf95_r、または xlf95_r7 コマンドを使用する場合で、 XL Fortran バージョン 2 から動作またはデータ形式が変更されたために互換性がいくらか失われる場合にのみ必要です。最終的には、データ・ファイルを再作成したり、ソース・ファイルを変更して前のバージョンの動作への依存を除去することが可能である必要があります。

引き数

XL Fortran バージョン 2 の動作におけるさまざまな面を理解するために、以下のサブオプションから 1 つまたは複数に対してデフォルト以外の選択項目を選んでください。説明には、デフォルト以外の選択項目を指定した場合に生じる事柄が記載されています。

blankpad | noblankpad
内部ファイル、直接アクセス・ファイル、および|ストリーム・アクセス・ファイルには、 pad='no' と同等のデフォルト設定を使用します。この設定では、レコードが持っているよりも多くの文字を形式が必要とする場合にこのようなファイルからの読み取りを行うと、変換エラーが発生し、XL Fortran バージョン 2 の動作が再現されます。このサブオプションは、pad= 指定子を指定してオープンされた直接アクセス・ファイル |またはストリーム・アクセス・ファイルには影響を与えません。

softeof | nosofteof
ユニットが endfile レコードの後に位置付けられているときに、 READ 操作と WRITE 操作を実行できるようにします。ただし、その位置が ENDFILE ステートメントを実行した結果である場合は除きます。このサブオプションは、一部の既存プログラムが依存している旧バージョンの XL Fortran の FORTRAN 77 拡張機能を再作成します。

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
XL Fortran バージョン 2 との互換性を得るために、ENTRY ステートメントを持つサブプログラムの引き数のアドレスを静的ストレージに保管します。これはパフォーマンス向上のために変更された実施選択項目です。

関連情報

アップグレードの問題の回避または修正方法を参照してください。

-qxlf90 オプション

構文

-qxlf90={settings}
XLF90({settings})

言語上の理由で、XL Fortran バージョン 5 の言語および Fortran 90 標準との下位互換性を提供します。

デフォルト

-qxlf90 のデフォルトのサブオプションは、指定する呼び出しコマンドによって異なります。 xlf95xlf95_r、および xlf95_r7 コマンド の場合、デフォルトのサブオプションは signedzeroautodealloc です。他のすべての呼び出しコマンドでは、デフォルトは nosignedzeronoautodealloc です。

引き数

signedzero | nosignedzero
SIGN(A,B) 関数が符号付きの実数 0.0 を処理する方法を決定します。 XL Fortran バージョン 6.1 以前では、B=-0.0 のときに、SIGN(A,B) は |A| を戻しました。この動作は Fortran 90 標準に準拠したものでした。現在は、-qxlf90=signedzero コンパイラー・オプションを指定した場合、B=-0.0 のときに、SIGN(A,B) は -|A| を戻します。この動作は Fortran 95 標準に準拠するものであり、バイナリー浮動小数点演算のための IEEE 標準と整合しています。 REAL(16) データ型では、 XL Fortran はゼロを負のゼロとしては扱いません。

このサブオプションでは、以下の場合に負符号 (-) が印刷されるかどうかも決定します。

autodealloc | noautodealloc
SAVE または STATIC 属性のいずれかを指定せずにローカルに宣言された割り振り可能で、サブプログラムを終了するときに現在割り振り済みの状況にある割り振り可能なオブジェクトを、コンパイラーが割り振り解除するかどうかを決定します。この動作は、Fortran 95 標準に準拠していますが、バージョン 6.1 よりも前の XL Fortran には備わっていませんでした。ローカルに割り振り可能なオブジェクトすべてを明示的に割り振り解除していることが確実な場合、このサブオプションをオフにして、パフォーマンス低下の可能性を避けることができます。

次のプログラムを見てください。

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 for AIX ランゲージ・リファレンス 」の『組み込みプロシージャー』の章にある SIGN についての節と、『配列の概念 』の章を参照してください。

-qxlines オプション

構文

|-qxlines | -qnoxlines
|XLINES |  NOXLINES

桁 1 に X を持つ固定ソース形式行がコンパイルされるか、または注釈として扱われるかを指定します。このオプションは、条件付きコンパイル (デバッグ) 文字として、桁 1 に文字「d」を認識するのに似ています。 -qdlines オプションは、このコンパイラー・オプションが使用可能なとき、条件付きコンパイル文字として桁 1 に文字「x」を認識します。桁 1 の「x」は、ブランクとして解釈され、その行はソース・コードとして処理されます。

デフォルト

このオプションは、デフォルトで -qnoxlines に設定され、固定ソース形式で桁 1 に文字「x」がある行はコメント行として扱われます。 -qxlines オプションは、-qdlines から独立しているので、条件付きコンパイル文字として「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)
 
 

関連情報

-qdlines オプションと、「XL Fortran for AIX ランゲージ・リファレンス 」の『言語エレメント 』の章にある「条件付きコンパイル 」を参照してください。

-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_rxlf90_r7xlf95xlf95_r、および xlf95_r7 コマンドの場合は -qzerosize で、xlfxlf_rxlf_r7、および 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 つ以上の pFcdIahbz、または l を指定でき、それぞれ、最適化プリプロセッサー、C プリプロセッサー、コンパイラー、-S 逆アセンブラー、プロシージャー間分析 (IPA) ツール、ループ最適化プログラム、コード生成プログラム、|バインド・プログラム、およびリンカーに対応します。

規則

-t が指定されないと、プレフィックス -B がすべてのコンポーネントに適用されます。

|Component                -t              Standard Program Name
|                          Mnemonic
| 
|C preprocessor            F              cpp
|VAST-2 preprocessor       p              fpp
|KAP preprocessor          p              fppk
|compiler front end        c              xlfentry
|array language optimizer  h              xlfhot
|IPA/loop optimizer        I              ipa
|assembler                 a              as
|code generator            b              xlfcode
|linker                    l              ld
|-S disassembler           d              dis
|binder                    z              bolt

関連情報

-B オプション (この項には例も記載されています)。

-U オプション

構文

-U
MIXED | NOMIXED

コンパイラーが、名前内の文字の大文字と小文字を区別するようにします。

Fortran 名はデフォルト時にはすべて小文字であり、 C 言語およびその他の言語の名前は大文字と小文字が混在してもかまいません。混合言語プログラムを書く際にこのオプションを使用することができます。

規則

-U が指定される場合は、名前の大文字小文字の区別が重要です。たとえば、Abc という名前と ABC という名前は別々のオブジェクトを参照します。

このオプションは、コンパイル単位間の呼び出しを解決するのに使用されるリンク名を変更します。また、モジュールの名前に影響を与え、したがって、 .mod ファイルの名前にも影響を与えます。

デフォルト

デフォルト時には、すべての名前を小文字であるかのように解釈します。たとえば、AbcABC はどちらも abc であると解釈され、したがって、同じオブジェクトを参照します。

制限

-U が有効な場合は、組み込み関数の名前はすべて小文字でなければなりません。小文字でない場合は、コンパイラーはエラーなしに名前を受け入れることはできますが、それらを組み込み関数ではなく外部プロシージャーの名前であると判断します。

キーワードはすべて小文字でなければならないという XL Fortran バージョン 2 の要件は、適用されません。

関連情報

これは、-qmixed の短い形式です。 -qmixed オプションを参照してください。

-u オプション

構文

-u
UNDEF | NOUNDEF

変数名の暗黙のタイプ指定が許可されないことを指定します。これには、暗黙のステートメントを許可する個々の有効範囲に含まれる IMPLICIT NONE ステートメントを使用するときと同じ効果があります。

デフォルト

デフォルト時には、暗黙のタイプ指定は許可されます。

関連情報

XL Fortran for AIX ランゲージ・リファレンス 」の「IMPLICIT 」を参照してください。

これは、-qundef の短い形式です。 -qundef オプションを参照してください。

-v オプション

構文

-v

コンパイルの進捗状況を生成します。

規則

コンパイラーがコマンドを実行してさまざまなコンパイル・ステップを実行するときに、このオプションは、コンパイラーが呼び出すコマンドおよび、コンパイラーが渡すシステム引き数リストのシミュレーションを表示します。

このオプションの出力を調べれば、特定のコンパイルに対して以下のことを判別する一助になります。

関連情報

-# オプション-v と似ていますが、実際にはどのコンパイル・ステップも実行しません。

-V オプション

構文

-V

ユーザーが表示から直接カット・アンド・ペーストによってコマンドを作成できるという点を除き、このオプションは -v と同じです。

-W オプション

構文

-Wcomponent,options

リストされたオプションを、コンパイル中に実行されるコンポーネントに渡します。component は、pFcdIaz、または l で、それぞれ 最適化プリプロセッサー、C プリプロセッサー、コンパイラー、-S 逆アセンブラー、プロシージャー間分析 (IPA) ツール、アセンブラー、|バインド・プログラム、およびリンカーに対応します。

-W オプションの後に続いているストリングでは、セパレーターとしてコンマを使用し、スペースは入れないでください。

背景情報

このオプションの主な目的は、コンパイラー・オプションのシーケンスを作成して、最適化プリプロセッサーの 1 つに渡すことです。また、ld コマンドにパラメーターを渡すことによって、リンク・エディット・ステップを微調整するのにも使用できます。

デフォルト

ほとんどのオプションは、リンカーに渡す際に -W オプションを使用する必要はありません。 -q オプション以外の認識されないコマンド行オプションは、自動的にリンカーに渡されるからです。 -W (または構成ファイル内の ldopts スタンザ) が絶対に必要なオプションは、コンパイラー・オプションと同じ文字を持つリンカー・オプション (たとえば、-v または -S) だけです。

オプション・ストリング内のシェルに特有の文字を入れる必要がある場合は、その文字の前にバックスラッシュを置いてください。

コマンド行オプションの「ld」または「as」コマンドへの引き渡しを参照してください。

-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 タイプ・パラメーター と呼ばれています。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]