以下のオプションのアルファベット順リストには、 これらのオプションを効率的に使用するのに必要な全情報が記載されています。
構文情報の読み方
-#
個々のコンポーネントを実際には実行せずに、コンパイルの進行に関する情報を生成します。
このオプションは、さまざまなコンパイル・ステップのためにコンパイラーがコマンドを実行するポイントで、 これらのアクションを実際には実行しないで、 システム呼び出しと、渡すシステム引数リストのシミュレーションを表示します。
このオプションの出力を調べると、特定のコンパイルに関して、 次の事項を迅速かつ確実に判別することができます。
ソース・コードのコンパイルのオーバーヘッドを回避して、 .lst ファイルなどの既存のファイルの上書きも回避します。(ユーザーが make コマンドに精通している場合、 これは make -n に似ています。)
-qipa とともにこのオプションを指定する場合、 コンパイラーは IPA リンク・ステップの後にリンカー情報を表示しないことにご注意ください。 これは、コンパイラーが IPA を実際に呼び出していないためです。
-1
ONETRIP | NOONETRIP
DO 文が実行される場合、 反復回数が 0 であったとしても、コンパイル済みプログラム内の個々の DO ループを最低 1 回実行します。 このオプションを指定すると、FORTRAN 66 との互換性を保つことができます。 デフォルトは、その後の Fortran 標準の動作に従うことで、この標準では反復回数が 0 の場合は DO ループは実行されません。
このオプションは FORALL 文や FORALL 構文、あるいは 配列コンストラクターによる DO ループには影響しません。
-qonetrip は、-1 の長い形式です。
-Bprefix
コンパイル中に使用する実行可能ファイル (コンパイラー、リンカーなど) の代替パス名を決定します。これは -t オプションと組み合わせて使用することができ、 これらのコンポーネントのどれが -B の影響を受けるかを決定します。
prefix は、代替の実行可能ファイルが常駐しているディレクトリーの名前です。 これは / (斜線) で終わっていなければなりません。
個々のコンポーネントの完全なパス名を形成するために、 ドライバー・プログラムは標準プログラム名に prefix を追加します。 1 つ以上の -tmnemonic オプションを組み込むことによっても、 このオプションの影響を受けるコンポーネントを制限することができます。
これらのコマンドのデフォルト・パス名を構成ファイルに指定することもできます。
このオプションを使用すると、コンポーネントの一部または全部の XL Fortran コンポーネントの複数レベルを保持したり、 アップグレードされたコンポーネントを永続的にインストールする前に、試してみることができます。 複数レベルの XL Fortran を使用可能にしておく場合は、 適切な -B オプションおよび -t オプションを構成ファイルのスタンザに入れてから、-F オプションを使って、 使用するスタンザを選択する必要があります。
この例では、初期レベルの XL Fortran コンポーネントが /opt/ibmcmp/xlf/9.1/exe ディレクトリーにインストールされています。 アップグレードした製品をテストして誰でも使用できるようにするために、 システム管理者は /home/jim ディレクトリー下に最新のインストール・イメージを復元して、 次のようなコマンドでテストします。
/home/jim/xlf/10.1/bin/xlf95 -tchIbdz -B/home/jim/xlf/9.1/exe/ test_suite.f
アップグレードがいったん受け入れ基準を満たすと、システム管理者は それを /opt/ibmcmp/xlf/10.1 の 古いレベルにインストールします。
-t オプション、-F オプション、 構成ファイルのカスタマイズ、および 2 つのレベルの XL Fortran の実行を参照してください。
-C
CHECK | NOCHECK
配列エレメント、配列セクション、文字サブストリングなどへの個々の参照が正しいかどうかをチェックします。
コンパイル時に、参照が境界外に及ぶことをコンパイラーが判別できる場合は、 報告されるエラーの重大度が、このオプションの指定時に S (重大) に上がります。
実行時に、参照が境界外に及ぶと、プログラムは SIGTRAP シグナルを発生させます。 デフォルトでは、このシグナルはプログラムを停止させて、コア・ダンプを作成します。 これは予想通りの動作であり、コンパイラー製品に欠陥があることを示すものではありません。
実行時検査を行うと実行速度が遅くなることがあるので、 個々のプログラムにとって重要な要因は何か (パフォーマンスへの影響、 または、エラーが検出されない場合に間違った結果が出る可能性など) をユーザー側で判別する必要があります。 このオプションを使用するのは、プログラムのテスト中またはデバッグ中のみにする (パフォーマンスがより重要な場合) か、 あるいは、プロダクション・バージョンをコンパイルするときだけ (安全性がより重要な場合) にしてください。
-C オプションは、-qhot オプションによって行われる最適化をいくらか抑止します。 コードのデバッグが完了した後に -C オプションを除去し、 -qhot オプションを追加すれば、 より徹底的な最適化を実行することができます。
文字サブストリング式の有効な境界は、-qzerosize オプションの設定によって異なります。 -qzerosize オプションを参照してください。
-qsigtrap オプションおよび『例外ハンドラーのインストール』には、SIGTRAP シグナルを検出してプログラムを終了させずに回復する方法が記述されています。
-qcheck は、-C の長い形式です。
-c
完成したオブジェクト・ファイルを、リンク・エディットのために ld コマンドに送りません。 このオプションを指定すると、出力は個々のソース・ファイルの .o ファイルになります。
-c と組み合わせて -o オプションを使用すると、.o ファイルの代わりに別の名前が 選択されます。 この場合、一度にコンパイルできるソース・ファイルは 1 つだけです。
-o オプションを参照してください。
-D
DLINES | NODLINES
コンパイラーが桁 1 に D を持つ固定ソース形式行をコンパイルするか、コメントとして扱うかを指定します。
-D を指定すると、桁 1 に D がある固定ソース形式行がコンパイルされます。 デフォルトの動作は、これらの行をコメント行と見なして処理します。 これらは通常、オン、オフにする必要のあるデバッグ・コードの部分に使用されます。
C 形式の -D マクロ定義を C プリプロセッサー に受け渡す (たとえば、.F で終わるファイルをコンパイルする) ためには、-W オプションを使用します。たとえば、次のようになります。
-WF,-DDEFINE_THIS
-qdlines は -D の長い形式です。
-d
cpp によって生成されるプリプロセス後のソース・ファイルを、削除せずに保持します。
このオプションによって生成されるファイルには、元のソース・ファイルの名前から派生した Ffilename.f という形式の名前が付きます。
C プリプロセッサーによる Fortran ファイルの引き渡しを参照してください。
-F{config_file | config_file:stanza | :stanza}
代替構成ファイルを指定するか、その構成ファイル内で使用するスタンザを指定します (またはその両方を指定します)。
構成ファイルは、さまざまな種類のデフォルト、たとえば特定のコンパイル・ステップのためのオプション、 コンパイラーが必要とするさまざまなファイルの位置を指定します。 デフォルトの構成ファイル (/etc/opt/ibmcmp/xlf/10.1/xlf.cfg) は、 インストール時に作成されます。デフォルトのスタンザは、コンパイラーを呼び出すために使用するコマンドの名前 (xlf90、xlf90_r、xlf95、xlf95_r、xlf、xlf_r、f77、または fort77) によって異なります。
複雑なコンパイル・スクリプトを書く代替として、 コンパイラーの基本機能をカスタマイズできる簡単な方法は、 /etc/opt/ibmcmp/xlf/10.1/xlf.cfg に新しいスタンザを追加して、 個々のスタンザに異なる名前と異なるセットのデフォルト・コンパイラー・オプションを指定することです。多数の分散したコンパイル・スクリプトや makefile よりも、一か所に集めた単一ファイルの方が維持しやすいことが わかります。
適切な -F オプションを指定してコンパイラーを実行することにより、使用するオプションのセットを 選択することができます。 完全な最適化のために 1 セットのオプションを持ち、完全なエラー・チェックなどのためにもう 1 セットの オプションを持つことなどができます。
新しいコンパイラーのリリースがインストールされるたびにデフォルトの構成ファイルが置き換えられるので、 新しいスタンザや新しいコンパイラー・オプションを確実に保管するようにしてください。
# Use stanza debug in default xlf.cfg. xlf95 -F:debug t.f # Use stanza xlf95 in /home/fred/xlf.cfg. xlf95 -F/home/fred/xlf.cfg t.f # Use stanza myxlf in /home/fred/xlf.cfg. xlf95 -F/home/fred/xlf.cfg:myxlf t.f
構成ファイルのカスタマイズでは、構成ファイルの内容と、-F オプションを 使用せずにファイル内の別のスタンザを選択する方法が説明されています。
-Idir
インクルード・ファイルおよび .mod ファイルの検索パスにディレクトリーを追加します。 XL Fortran が cpp を呼び出す場合、このオプションを指定しておくと、#include ファイルの 検索パスにディレクトリーが追加されます。 コンパイラーは、インクルード・ファイルおよび .mod ファイルのデフォルト・ディレクトリーを検査する前に、 検索パス内の個々のディレクトリーを検査します。 インクルード・ファイルの場合は、INCLUDE 行のファイル名が絶対パスで示されていない場合にのみ、 このパスが使用されます。 #include ファイルの -I オプションについての詳細は、cpp の 資料を参照してください。
dir は有効なパス名 (たとえば /home/dir、/tmp、または ./subdir など) でなければなりません。
検索を行う前に、コンパイラーは dir に / を追加して、ファイル名 と連結します。 複数の -I オプションがコマンド行に指定されると、ファイルはコマンド行上の dir 名の順序で検索されます。
-I オプションで指定した任意のパスを検索した後、以下のディレクトリーが次のような 順序で検索されます。
また、コンパイラーは、コンパイラーとともに出荷されるインクルード・ファイルおよび .mod ファイルが入っている /opt/ibmcmp/xlf/10.1/include も検索します。
-qmoddir オプションは、モジュールを含んでいるファイルをコンパイルするときに .mod ファイルを特定のディレクトリーに置きます。
-k FREE(F90)
プログラムが自由ソース形式になることを指定します。
このオプションの意味は、XL Fortran バージョン 2 とは異なっています。 -k の前の動作を実行するには、代わりに -qfree=ibm オプションを使用してください。
-qfree オプションおよび「XL Fortran 言語解説書」の『自由ソース形式』を参照してください。
このオプションは -qfree=f90 の短い形式です。
-Ldir
指定されたディレクトリーの -l オプションで指定されたライブラリーを調べます。 デフォルト・ライブラリー以外のライブラリーを /opt/ibmcmp/xlf/10.1/lib または /opt/ibmcmp/xlf/10.1/lib64 で使用する場合は、その他のライブラリーの位置を指し示す 1 つ以上の -L オプションを 指定することができます。 また、ライブラリーの検索パスのために LD_LIBRARY_PATH および LD_RUN_PATH 環境変数を 指定することもできます。
このオプションは ld コマンドに直接渡され、XL Fortran によって処理されることは絶対にありません。
リンクを制御するオプションおよび XL Fortran プログラムのリンクを参照してください。
-lkey
指定されたライブラリー・ファイルを検索します (key はライブラリー libkey.so または libkey.a を選択します)。
このオプションは ld コマンドに直接渡され、XL Fortran によって処理されることは絶対にありません。
リンクを制御するオプションおよび XL Fortran プログラムのリンクを参照してください。
-NSbytes SPILLSIZE(bytes)
レジスター の予備スペース (レジスターからストレージへの 流出物で、内部最適化プログラムによって使用されるプログラムストレージ域) のサイズ (バイト単位) を指定します。
レジスターに保持する変数の数が多過ぎて、 プログラムがレジスターの内容用の一時ストレージを必要とする場合に備えて、 個々のサブプログラムに確保するスタック空間のバイト数を定義します。
デフォルト時には、個々のサブプログラムのスタックには、512 バイトの予備空間が確保されます。
このオプションが必要な場合は、 コンパイル時メッセージでその旨をユーザーに通知します。
-qspillsize は -NS の長い形式です。
-O[level]
OPTimize[(level)] | NOOPTimize
コンパイル中にコードを最適化するかどうかを指定し、最適化する場合はそのレベルも指定します。
また、このレベルの最適化は -qfloat オプションの設定にも影響を与え、デフォルト時には fltint オプションと rsqrt サブオプションをオンにして、-qmaxmem=-1 を 設定します。
-O3 を指定すると、明示的に -qhot または -qhot=level=1 を 指定しない限り、-qhot=level=0 を暗黙指定します。
-O4 は、次のオプションを暗黙指定します。
-qarch、-qtune、-qcache の「auto」設定は、 実行環境がコンパイル環境と同じであることを暗黙指定することに注意してください。
このオプションは「最後のオプションが選択される」という競合解決規則に従っており、そのため -O4 によって変更されるオプションを後から変更できます。 -O4 -qarch=com を たとえば、指定すると、積極的に内部手順の最適化を行えるだけでなく、コードの移植性を保持することもできます。
最適化したアプリケーションと最適化していないアプリケーションで同じ 浮動小数点の正確度を得るには、-qfloat=nomaf コンパイラー・オプションを指定しなければなりません。 -qfloat=nomaf を指定した後でも、依然として浮動小数点の正確度に 差がある場合は、-qstrict コンパイラー・オプションを使用すると、 最適化が原因で浮動小数点のセマンティクスで行われる変更を制御できます。
普通は、コンパイルとリンク・ステップの両方に同じ最適化レベルを使用します。 -O4 あるいは -O5 最適化レベルを使用して最良の実行時パフォーマンスを得るには、 こうすることが重要です。 -O5 レベルの場合、すべてのループ変換 (-qhot オプションを介して指定したように) は、 リンク・ステップで行われます。
最適化のレベルを高くすることで、パフォーマンスがさらに改善される場合と、されない場合があります。 これは、分析を加えてさらに最適化の機会を見い出せるかどうかによって決まります。
-O3 以上の最適化レベルでは、プログラムの動作を変更することがあり、その結果、通常は起こらない 例外が起こる可能性があります。 -qstrict オプションを使用すると、潜在的な変更や例外が起こるのをなくすことができます。
@PROCESS 文で -O オプションを使用する場合は、 最適化レベル 0、2、または 3 のみを使用できます。
最適化とともにコンパイルを行うと、時間とマシン・リソースが他のコンパイルよりも必要になる場合があります。
コンパイラーがプログラムを最適化すればするほど、 プログラムをシンボリック・デバッガーでデバッグするのが難しくなります。
-qstrict オプションには、プログラムのセマンティクスを変える場合のある -O3 の影響を取り去る方法が示されています。
-qipa オプション、-qhot オプションと -qpdf オプションは、一部のプログラムについて、パフォーマンスを向上させる可能性がある追加の最適化をオンにします。
『XL コンパイラー・プログラムの最適化』には、コンパイラーが使用する最適化手法の技術的な詳細と、 ご使用のコードから最高のパフォーマンスを得るために行う方法が説明されています。
-qOPTimize は -O の長い形式です。
-o name
出力オブジェクト・ソース・ファイル、実行可能ソース・ファイル、アセンブラー・ソース・ファイルなどの名前を 指定します。
オブジェクト・ファイルの名前を選択するには、 このオプションを -c オプションと組み合わせて 使用してください。アセンブラー・ソース・ファイルの場合は、 これを -S オプションと組み合わせて使用してください。
実行可能ファイルのデフォルト名は、a.out です。 オブジェクト・ソース・ ファイルまたはアセンブラー・ソース・ファイルのデフォルト名は ソース・ファイルと同じですが、 拡張子.o または .s が付きます。
オプション -c また は -S が指定されている場合を除き、-o オプション は XL Fortran で処理されないで、ld c コマンドに直接渡されます。
xlf95 t.f # Produces "a.out"
xlf95 -c t.f # Produces "t.o"
xlf95 -o test_program t.f # Produces "test_program"
xlf95 -S -o t2.s t.f # Produces "t2.s"
-p[g]
プロファイル用のオブジェクト・ファイルをセットアップします。
-p または -pg はプロファイル用のプログラムを用意します。 プログラムを実行すると、プロファイル情報を使用する gmon.out ファイルが作成されます。 これで、gprof コマンドを使用して実行時プロファイルを作成することができます。
プロファイルのために、コンパイラーは個々のルーチンが呼び出される回数をカウントするモニター・コードを作成します。 コンパイラーは、個々のサブプログラムの始動ルーチンを、 開始時にモニター・サブルーチンを呼び出すルーチンと置き換えます。 プログラムが正常に終了すると、記録された情報が gmon.out ファイルに書き込まれます。
プロファイルと、 gprof コマンドについて詳しくは、 このコマンドの man ページを 参照してください。
-Q+names | -Q-names | -Q | -Q!
Fortran 90 または Fortran 95 プロシージャーをインライン化するかどうか、および/または、インライン化しなければ ならないかインライン化してはならない特定のプロシージャーの名前を指定します。 names はプロシージャー名をコロンで区切ったリストです。
デフォルトでは、-Q は内部プロシージャーまたはモジュール・プロシージャーにのみ影響します。 別の有効範囲のプロシージャーへの呼び出しに対するインライン展開をオンにするには、-qipa オプションも使用する必要があります。
リストなしの -Q オプションは、インライン化される呼び出し数の制限、および結果としての コード・サイズの増加量に従って、適切なすべてのプロシージャーをインライン化します。 +names は、インライン化するプロシージャー名をコロンで区切って指定し、それぞれの プロシージャーに対する限界値を上げます。 -names は、インライン化しないプロシージャー名をコロンで区切って指定します。 これらのオプションを複数指定して、どのプロシージャーが最もインライン化されやすいかを厳密に制御することが できます。
-Q! オプションは、インライン化をオフにします。
プロシージャーは非常に小さくない限り、基本的な -Q オプションによっては インライン化されません。 (正確なカットオフを判別するのは難しいが、) 通常は数行以内のソース・ステートメントを含みます。 -Q+ によって命名されたプロシージャーは、最大では約 20 倍大きくでき、依然としてインライン化できます。
-Q を使用してインライン化を有効にするには、少なくとも -02 の最適化レベルを指定する必要があります。
プロシージャーに対してインライン化を指定した場合、 以下の @PROCESS コンパイラー指示である、ALIAS、ALIGN、ATTR、COMPACT、DBG、 EXTCHK、EXTNAME、FLOAT、FLTTRAP、HALT、IEEE、LIST、MAXMEM、 OBJECT、OPTIMIZE、PHSINFO、SPILLSIZE、STRICT、および XREF は、 ファイル内の最初のコンパイル単位の前にある場合にのみ有効になります。
xlf95 -O -Q many_small_subprogs.f # Compiler decides what to inline. xlf95 -O -Q+bigfunc:hugefunc test.f # Inline even though these are big. xlf95 -O -Q -Q-only_once pi.f # Inline except for this one procedure.
-q32
64 ビット環境で 32 ビットのコンパイル・モード (簡単に言えば、 32 ビット・モード) を使用できるようにします。 -q32 オプションではコンパイル・ビット・モードが指定され、-qarch オプションとの組み合わせ で、32 ビット実行モジュールが実行されるターゲット・マシンが決まります。
-qarch=ppc -q32
-qarch=ppc -q32 -qarch=rs64b
-qarch の最後の設定値が優先される点に注意してください。
-qarch=ppc -q32 -qarch=rs64b -q64-q64 を指定すると、以前のインスタンスである -q32 がオーバーライドされる点に注意してください。
-q64
64 ビットのコンパイル・ビット・モードが指定され、-qarch オプションとの組み合わせで、64 ビット 実行モジュールが実行されるターゲット・マシンが決まります。 -q64 オプションを指定すると、オブジェクト・モジュールが 64 ビットのオブジェクト形式で作成され、 64 ビットの命令セットが生成されます。 注意点として、32 ビット環境でコンパイルを行って 64 ビット・オブジェクトを作成することもできますが、 そのオブジェクトは、-q64 オプションを使って 64 ビット環境にリンクする必要があります。
下の例は 64 ビット・モードで RS64II (RS64b とも呼ばれます) をターゲットとしています。
-q32 -qarch=rs64b -q64
次の例では、64 ビット・アーキテクチャーの共通グループ (現在は RS64II、RS64III、POWER3、POWER4、POWER5、 POWER5+、および PowerPC 970 のみからなる) をターゲットとする 64 ビット・コンパイルを行います。
-q64 -qarch=com
このarch 設定はサイレントに、もっとも一般的な 64 ビット・モード・コンパイル・ターゲットである ppc64grsq にアップグレードされます。
-qalias={argument_list} ALIAS( {ARGUMENT_LIST} )
ある種の別名付けが、プログラムに含まれているかどうかを示します。 コンパイラーは、同じストレージ・ロケーションにさまざまな名前が別名として付けられている可能性がある場合、 最適化の有効範囲を制限します。 考慮すべきエイリアス計画については、 『XL コンパイラー・プログラムの最適化』を参照してください。
ストレージ内の項目が複数の名前で参照できる場合は、別名が存在します。 Fortran 90 および Fortran 95 標準では、別名付けを許可する型と許可しない型があります。 以下の状況のように非標準の別名付けが存在すると、XL Fortran コンパイラーが実行する非常に複雑な最適化によって、 好ましくない結果が生じる可能性があります。
-qalias=nopteovrlp を使って以下のサブルーチンをコンパイルすると、 さらに効率のよいコードをコンパイラーが生成できる場合があります。 整数ポインター (ptr1 および ptr2) が、動的に割り振られたメモリーだけを指しているため、 -qalias=nopteovrlp を使ってこのサブルーチンをコンパイルすることができます。
subroutine sub(arg) real arg pointer(ptr1, pte1) pointer(ptr2, pte2) real pte1, pte2 ptr1 = malloc(%val(4)) ptr2 = malloc(%val(4)) pte1 = arg*arg pte2 = int(sqrt(arg)) arg = pte1 + pte2 call free(%val(ptr1)) call free(%val(ptr2)) end subroutine
コンパイル単位内のほとんどの配列の割り当てが、オーバーラップしない配列に関与しており、 少数の割り当てがストレージ関連配列に関与している場合、 オーバーラップした割り当てを追加ステップでコーディングすれば NOARYOVRLP サブオプションを安全に 使うことができます。
@PROCESS ALIAS(NOARYOVRLP) ! The assertion that no array assignments involve overlapping ! arrays allows the assignment to be done without creating a ! temporary array. program test real(8) a(100) integer :: j=1, k=50, m=51, n=100 a(1:50) = 0.0d0 a(51:100) = 1.0d0 ! Timing loop to achieve accurate timing results do i = 1, 1000000 a(j:k) = a(m:n) ! Here is the array assignment end do print *, a end program
Fortran では、J または K が更新される場合は別名付けは許可されず、検出されないままで あると、予測不能な結果が起きることがあります。
! We cannot assert that this unit is free ! of array-assignment aliasing because of the assignments below. subroutine sub1 integer a(10), b(10) equivalence (a, b(3)) a = b ! a and b overlap. a = a(10:1:-1) ! The elements of a are reversed. end subroutine ! When the overlapping assignment is recoded to explicitly use a ! temporary array, the array-assignment aliasing is removed. ! Although ALIAS(NOARYOVRLP) does not speed up this assignment, ! subsequent assignments of non-overlapping arrays in this unit ! are optimized. @PROCESS ALIAS(NOARYOVRLP) subroutine sub2 integer a(10), b(10), t(10) equivalence (a, b(3)) t = b; a = t t = a(10:1:-1); a = t end subroutine
SUB1 が呼び出される場合は、J と K の間に別名が存在します。 J と K は、ストレージ内の同じ項目を参照します。
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 設定で コンパイルしないと、誤った結果を作成する場合があります。 xlf90、xlf90_r、xlf95、xlf95_r、f90、 および f95 コマンドは、プログラムに標準的な 別名 (-qalias=aryovrlp:pteovrlp:std:nointptr) のみが入っているものと 想定しますが、xlf_r、xlf、 および f77/fort77 コマンドは整数 POINTER が 存在する可能性がある (-qalias=aryovrlp:pteovrlp:std:intptr) ものと想定します。
-qalign={[no]4k|struct={suboption}|bindc={suboption}} ALIGN({[NO]4K|STRUCT{(suboption)}|BINDC{(suboption)}})
誤って位置合わせされたデータによるパフォーマンス上の問題を回避する、 ストレージ内でのデータ・オブジェクトの位置合わせを指定します。 [no]4k、bindc、 および struct オプションを一緒に指定することができ、 しかも互いに排他的ではありません。 [no]4k オプションは、 基本的には論理ボリューム I/O とディスク・ストライピングの組み合わせに 有効です。
デフォルト設定は -qalign= no4k:struct=natural:bindc=linuxppc です。
XL Fortran オプション |
対応する XL C オプション |
---|---|
-qalign=bindc=bit_packed | -qalign=bit_packed |
-qalign=bindc=linuxppc | -qalign=linuxppc |
型 | 自然の位置合わせ (バイトの倍数) |
---|---|
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 サブオプションを struct オプションで指定すると、
port サブオプションは AUTOMATIC 属性を持つ配列または構造体、 あるいは動的に割り振られる配列には影響を及ぼしません。 このオプションは非シーケンス派生型のレイアウトを変更する場合があるので、 不定様式ファイルを使用してそのようなオブジェクトを読み書きするプログラムをコンパイルする場合は、 すべてのソース・ファイルについてこのオプションには同じ設定を使用してください。
配列が AUTOMATIC 属性を持つかどうか、また、 そのために -qalign=4k によって影響を受けないかどうかは、 -qattr オプションのリストで AUTOMATIC キーワードまたは CONTROLLED AUTOMATIC キーワードを探せば知ることができます。このリストには、データ・オブジェクトのオフセットも示されています。
-qarch=architecture
コンパイラーが生成する命令を制御します。 デフォルトを変更すると、 パフォーマンスを向上させることができますが、 特定のマシンでしか実行できないコードが生成される可能性があります。
一般に、-qarch オプションを指定すると、コンパイルで特定のアーキテクチャーをターゲットにすることができます。 特定の -qarch 設定では、コンパイラーは特定の一致する -qtune 設定にデフォルト指定されて、さらにパフォーマンスを向上させることができます。 その結果生成されるコードはほかのアーキテクチャーでは稼動しない可能性がありますが、選択した アーキテクチャーには最高のパフォーマンスを提供します。 複数のアーキテクチャーで実行可能なコードを生成するには、 アーキテクチャーのグループをサポートする -qarch サブオプション (com、ppc、 または ppc64 など) を指定します。 これにより、すべてのサポートされているアーキテクチャー、PowerPC、または 64 ビット PowerPC アーキテクチャー上でそれぞれコードを生成します。 -qarch サブオプションをグループ引数とともに指定すると、-qtune を auto として 指定するか、またはそのグループ内の特定アーキテクチャーを指定することができます。 -qtune=auto の場合、コンパイラーは、-qarch サブオプションで指定されたグループ内の すべてのアーキテクチャー上で稼動するコードを生成しますが、コンパイルに使用したマシンのアーキテクチャー上で 最高のパフォーマンスが得られる命令シーケンスを選択します。 代わりに、特定アーキテクチャーをパフォーマンス・チューニングのターゲットとすることもできます。
Y-HPC 以外の場合、選択項目は 次のとおりです。
-q64 オプションと -qarch=com オプションを 同時に指定した場合、ターゲット・プラットフォームは 64 ビットであり、-qarch オプションは サイレントに ppc64grsq にアップグレードされます。 命令セットは、すべての 64 ビット・マシンに共通の命令に制限されます。 詳細については、64 ビット環境での XL Fortran の使用を 参照してください。
64 ビット・モードでは、64 ビット PowerPC プラットフォームでは実行されるが 32 ビットのみのプラットフォームでは 実行されない、オプションのグラフィックス命令を含むオブジェクト・コードを 生成し、-qarch オプションはサイレントに -qarch=ppc64grsqにアップグレードされます。
プログラムを特定マシン上でのみ稼動させたい場合は、-qarch オプションを使用して、該当するアーキテクチャーに特定の コードを生成するようにコンパイラーに指示することができます。 これにより、コンパイラーは、マシン特定の命令を活用してパフォーマンスを向上させることができます。 -qarch オプションは、特定のチップ・モデルを指定する引数を提供します。 たとえば、-qarch=pwr3 を指定して、プログラムが POWER3 ハードウェア・プラットフォームで実行されるように指定することができます。
所定のアプリケーション・プログラムに対しては、それぞれのソース・ファイルを コンパイルするときに必ず同じ -qarch 設定を指定してください。
さらに、-qcache および -qhot オプションの ようなその他のパフォーマンス関連オプションを使用して、特定のマシンを対象とした プログラムのパフォーマンスを向上させることができます。
以下の指針を使用して、このオプションを使用するかどうかを決定する一助としてください。
PowerPC 命令セットには、特定のハードウェア・プラットフォームにインプリメントされる 2 つのオプショナル 命令グループが入っていますが、これらは必須ではありません。 この 2 つのグループとは、グラフィックス命令グループと sqrt 命令グループです。 特定の -qarch オプションを指定してコンパイルされるコード (そのすべては特定の PowerPC マシンを参照する) は、 同じ命令グループがある、任意の同等な PowerPC マシン上で実行されます。 以下の表では、さまざまな PowerPC マシンに組み込まれる命令グループを示します。
プロセッサー | グラフィックス・グループ | sqrt グループ | 64 ビット |
---|---|---|---|
ppc | なし | なし | なし |
ppcgr | あり | なし | なし |
ppc64 | なし | なし | あり |
ppc64v | あり | あり | あり |
ppc64gr | あり | なし | あり |
ppc64grsq | あり | あり | あり |
rs64b | あり | あり | あり |
rs64c | あり | あり | あり |
pwr3 | あり | あり | あり |
pwr4 | あり | あり | あり |
pwr5 | あり | あり | あり |
pwr5x | あり | あり | あり |
ppc970 | あり | あり | あり |
-qassert={deps | nodeps | itercnt=n} ASSERT(DEPS) | NODEPS | ITERCNT(N))
次を参照してください。
-qattr[=full] | -qnoattr ATTR[(FULL)] | NOATTR
属性の属性コンポーネントおよびリストの相互参照セクションを作成するかどうかを指定します。
-qattr だけを指定すると、使用される識別子だけが報告されます。 -qattr=full が指定されると、参照されてもされなくても、すべての識別子が報告されます。
-qattr=full の後に -qattr が指定されると、完全な属性リストが依然として作成されます。
属性リストを使用して、正しく指定されていない属性が起こす問題のデバッグを支援することができます。 あるいは、新しいコードを書いている際に各オブジェクトの属性の覚え書きとして使用することもできます。
リストとメッセージを制御するオプションおよび 属性および相互参照セクションを参照してください。
-qautodbl=setting AUTODBL(setting)
単精度浮動小数点計算を倍精度へ自動的に変換する方法、 そして倍精度計算を拡張精度へ自動的に変換する方法を提供します。
ストレージの関係が重要で、XL Fortran のデフォルトとは異なっている場合に、コードを移植する際にこの オプションを使用すると便利なことがわかります。 たとえば、IBM VS FORTRAN コンパイラー用に書かれたプログラムは、そのコンパイラーの同等のオプションを 使用することができます。
-qautodbl サブオプションを使用して、プロモートまたは埋め込みが行われるオブジェクト間、 あるいはプロモートまたは埋め込みが行われないオブジェクト間のストレージの関係を保持するための 別の方法を選択します。
使用できる設定は次のとおりです。
このサブオプションは、リンク中に libxlfpmt4.a ライブラリーを必要とします。
このサブオプションは、リンク中に libxlfpmt8.a ライブラリーを必要とします。
このサブオプションは、リンク中に libxlfpmt4.a および libxlfpmt8.a ライブラリーを必要とします。
このサブオプションは、リンク中に libxlfpmt4.a および libxlfpad.a ライブラリーを必要とします。
このサブオプションは、リンク中に libxlfpmt8.a および libxlfpad.a ライブラリーを必要とします。
このサブオプションは、リンク中に libxlfpmt4.a、libxlfpmt8.a および libxlfpad.a ライブラリーを必要とします。
リンク中に適切な -qautodbl オプションが指定されると、プログラムは必要なエクストラ・ライブラリーと 自動的にリンクされます。 自動的にリンクされない場合は、手操作でリンクする必要があります。
dbl4 または dblpad4 を使用することにより、REAL(8) オブジェクトを REAL(16) オブジェクトに変換せずに、REAL(4) のサイズを増やすことができます。 REAL(16) は、計算処理の点で、REAL(8) ほど効率がよくありません。
-qautodbl オプションは、プロモートされる引数を持つ組み込み機能への呼び出しを処理します。 必要な場合は、正しい高精度の組み込み関数が代わりに使用されます。 たとえば、単精度項目がプロモートされている場合は、プログラム内で SIN を呼び出すと、それが 自動的に DSIN への呼び出しになります。
プロモーション、埋め込み、ストレージ/値の関係に関する背景情報を得たり、ソースの例を参照するには、 -qautodbl のプロモーションと埋め込みの実行の詳細を参照してください。
-qrealsize オプションには、-qautodbl のように機能しますが、デフォルトの kind 型の項目にのみ 影響を与え、埋め込みはまったく行わない、別のオプションについて説明してあります。 -qrealsize および -qautodbl オプションの両方を指定する場合、-qautodbl だけが 有効になります。また、-qautodbl は、-qdpc オプションを オーバーライドします。
-qbigdata | -qnobigdata
32 ビット・モードでは、初期化されたデータの 16 MB を超えるプログラム (gcc 制限) および 共用ライブラリーの呼び出しルーチン (like open、close、printf など) 用に、このコンパイラー・オプションを使用します。
-qcache= { assoc=number | auto | cost=cycles | level=level | line=bytes | size=Kbytes | type={C|c|D|d|I|i} }[:...]
特定の実行マシンに対して、キャッシュ構成を指定します。 コンパイラーはこの情報を使用して、 特に、データ・キャッシュに適合するデータ量に限定して処理するように構造化 (あるいはブロック化) 可能なループ演算の場合に、 プログラムのパフォーマンスを調整します。
プログラムの実行場所となるシステムの種類が明確で、かつこのシステムの命令/データ・キャッシュの構成が、 デフォルトの構成 (-qtune 設定による) とは異なる場合は、キャッシュの特性を正確に指定することにより、 コンパイラーは、特定のキャッシュ関連最適化によって得られる利点をさらに正確に算出できるようになります。
-qcache オプションを有効にするには、level サブオプションと type サブオプションを 組み込み、-qhot オプションまたは -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 | -qnocclines CCLINES | NOCCLINES
コンパイラーが条件付きコンパイル行を、固定ソース形式および F90 自由ソース形式で認識するかどうかを 決定します。 IBM 自由ソース形式はサポートされていません。
デフォルトは -qsmp=omp オプションをオンにした場合は -qcclines です。 オフにした場合、デフォルトは -qnocclines です。
「XL Fortran 言語解説書」の言語エレメントの節の『条件付きコンパイル』を参照してください。
-qcheck | -qnocheck CHECK | NOCHECK
-qcheck は、-C オプションの長い形式です。
-qci=numbers CI(numbers)
処理する INCLUDE 行の識別番号 (1 から 255) を指定します。 INCLUDE 行の終わりに数字が入っている場合は、 -qci オプションでその番号が指定されている場合のみ、そのファイルが含まれます。 認識される識別番号のセットは、-qci オプションのすべてのオカレンスに対して指定されているすべての識別番号のユニオンです。
このオプションを使用すると、一種の条件付きコンパイルができます。 あまり使用しないコード (たとえば WRITE 文のデバッグ、 追加のエラー・チェック・コード、XLF 固有のコード) を別のファイルに入れて、 それらを処理するかどうかを個々のコンパイルに対して決定することができるからです。
REAL X /1.0/ INCLUDE 'print_all_variables.f' 1 X = 2.5 INCLUDE 'print_all_variables.f' 1 INCLUDE 'test_value_of_x.f' 2 END
この例では、-qci オプションを指定しないでコンパイルすると、 単に X が宣言されて、それに値が割り当てられます。 -qci=1 を指定してコンパイルすると、 インクルード・ファイルの 2 つのインスタンスが含まれ、 -qci=1:2 を指定してコンパイルすると、 両方のインクルード・ファイルが含まれます。
INCLUDE 行の任意の数字は広く行き渡っている Fortran 機能ではないので、 それを使用すると、プログラムの移植性が制限される場合があります。
「XL Fortran 言語解説書」の INCLUDE ディレクティブについての節を参照してください。
-qcompact | -qnocompact COMPACT | NOCOMPACT
コード・サイズを大きくする最適化を抑制します。
デフォルトでは、ループ・アンロールおよび配列ベクトル化など、 パフォーマンスの改善のために最適化プログラムが使用する手法によって、 プログラムが大きくなってしまう場合があります。 ストレージが限られているシステムの場合は、-qcompact を使用して、 発生する拡張を少なくすることができます。 プログラムに多数のループや配列言語構成要素がある場合、-qcompact オプションを使用すると、アプリケーション全体のパフォーマンスに影響が出ます。 このオプションの使用を、最適化による影響が 出ないプログラム部分だけに制限することができます。
-qcompact を有効にしても、その他の最適化オプションは 依然として機能しています。 コード・サイズは、最適化中に自動的に行われるコードの複製を制限することで 縮小されます。
-qcr | -qnocr
コンパイラーが CR (復帰) 文字をどのように解釈するかを制御することができます。 デフォルトでは、CR (16 進値 X'0d') または LF (16 進値 X'0a') 文字、あるいは CRLF (16 進値 X'0d0a') の組み合わせは、ソース・ファイルでの行の終了を示します。 これにより、Mac OS または DOS/Windows のエディターを使用して作成したコードをコンパイルできます。
-qnocr を指定した場合、コンパイラーは LF 文字のみを行の終了文字として認識します。 CR 文字を行の終了以外の目的に使用する場合は、-qnocr を指定しなければなりません。
-qctyplss[(=[no]arg)] | -qnoctyplss CTYPLSS[([NO]ARG)]| NOCTYPLSS
型が指定されていない定数を使用できる場合に、必ず文字定数式が許可されるかどうかを指定します。 他のプラットフォームからプログラムを移植するとき、 この言語拡張機能が必要となる場合があります。
-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
『ホレリス定数』と、 『参照によるまたは値による引数の引き渡し』を参照してください。
-qdbg | -qnodbg DBG | NODBG
-qdbg は -g オプションの長い形式です。
-qddim | -qnoddim DDIM | NODDIM
配列が参照されるたびに、pointee 配列の境界が再評価されること を指定し、pointee 配列用の境界式に対する制約事項をいくつか除去します。
デフォルト時には、pointee 配列のみが変数名を含む次元宣言子を持つことができ (その配列が サブプログラム内にある場合)、次元宣言子の変数は仮引数、共通ブロックのメンバー、使用関連付けまたは ホスト関連付けでなければなりません。 次元のサイズは、サブプログラムに対する入り口で計算され、サブプログラムの実行中は一定の状態に保たれます。
@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[=directive_list] | -qnodirective[=directive_list] DIRECTIVE[(directive_list)] | NODIRECTIVE[(directive_list)]
トリガー定数として知られる文字列を指定します。 これらの文字列は、コメント行をコンパイラーのコメント・ディレクティブとして識別します。
コンパイラーのコメント・ディレクティブは、Fortran ステートメントではない行ですが、コンパイラーがそのように認識し、それに従って動作します。 最大限の柔軟性を持たせるようにするため、将来の XL Fortran コンパイラーに付属する可能性がある新しい ディレクティブは、コメント行に含められます。 これにより、他のコンパイラーがそれらのディレクティブを認識しなければ、移植性の問題を避けられます。
コンパイラーは、デフォルト時にはトリガー定数 IBM* を認識します。 -qsmp の指定には暗黙的に -qdirective=smp¥$:¥$omp:ibmp が 含まれており、デフォルトで、トリガー定数 SMP$、$OMP、および IBMP もオンに なります。 -qsmp=omp を指定する場合、コンパイラーはその時点までに指定したすべてのトリガー定数を無視し、 $OMP トリガー定数だけを認識します。 -qthreaded の指定には暗黙的に -qdirective=ibmt が含まれており、 デフォルト時にはトリガー定数 IBMT もオンになります。
directive_list を持たない -qnodirective オプションは、 以前に指定したディレクティブ識別子をすべてオフにします。 directive_list を持っている場合は、選択された識別子だけをオフにします。
directive_list を持たない -qdirective は以前の -qnodirective によってオフにされている場合でも、 デフォルトのトリガー定数 IBM* をオンにします。
xlf95 -qdirective='dbg*' -qnodirective='IBM*' directives.f
! This program is written in Fortran free source form. PROGRAM DIRECTV INTEGER A, B, C, D, E, F A = 1 ! Begin in free source form. B = 2 !OLDSTYLE SOURCEFORM(FIXED) ! Switch to fixed source form for this include file. INCLUDE 'set_c_and_d.inc' !IBM* SOURCEFORM(FREE) ! Switch back to free source form. E = 5 F = 6 END
この例の場合は、-qdirective=oldstyle オプションを指定してコンパイルし、INCLUDE 行の 前の SOURCEFORM ディレクティブをコンパイラーが必ず認識するようにします。 インクルード・ファイル行を処理すると、SOURCEFORM(FREE) 文の後は、プログラムは自由形式ソースに戻ります。
「XL Fortran 言語解説書」の SOURCEFORM ディレクティブについての節を参照してください。
誤ったトリガー定数を使用すると、警告メッセージまたはエラー・メッセージ、あるいはその両方が生成されることがあります。 適切な関連するトリガー定数については、「XL Fortran 言語解説書」の『ディレクティブ』の 節にある特定のディレクティブ・ステートメントを確認してください。
-qdirectstorage | -qnodirectstorage
指定のコンパイル単位がライトスルー使用可能またはキャッシュ使用禁止のストレージを参照できることを コンパイラーに通知します。
このオプションは慎重に使用してください。 メモリーとキャッシュ・ブロックの作業に精通し、最適なパフォーマンスを得るためにアプリケーションを チューニングすることができるプログラマーを対象としています。 すべての PowerPC のキャッシュ編成のインプリメンテーションでプログラムが正しく実行されるためには、 プログラマーは、命令キャッシュとデータ・キャッシュが別々に存在することを想定し、その別個の キャッシュ・モデルに対してプログラムを作成する必要があります。
-qdlines | -qnodlines DLINES | NODLINES
-qdlines は -D オプションの長い形式です。
-qdpc[=e] | -qnodpc DPC[(E)] | NODPC
実定数を DOUBLE PRECISION 変数に割り当てるときに、 最大の精度を得られるように実定数の精度を高めます。 他のプラットフォームからプログラムを移植するとき、 この言語拡張機能が必要となる場合があります。
-qdpc を指定すると、すべての基本実定数 (たとえば 1.1) が倍精度定数として処理されます。 コンパイラーは、これを指定しないと DOUBLE PRECISION 変数への割り当て中に失われてしまう精度を 持つ数字を保存します。 -qdpc=e を指定すると、指数 e を持つ定数も含め、すべての単精度定数が倍精度定数として 処理されます。
このオプションは、kind 型付きパラメーターが指定されている定数には影響を与えません。
@process nodpc subroutine nodpc real x double precision y data x /1.000000000001/ ! The trailing digit is lost data y /1.000000000001/ ! The trailing digit is lost print *, x, y, x .eq. y ! So x is considered equal to y end @process dpc subroutine dpc real x double precision y data x /1.000000000001/ ! The trailing digit is lost data y /1.000000000001/ ! The trailing digit is preserved print *, x, y, x .eq. y ! So x and y are considered different end program testdpc call nodpc call dpc end
コンパイルされると、このプログラムは次のように印刷して、
1.000000000 1.00000000000000000 T 1.000000000 1.00000000000100009 F
-qdpc によって余分な精度が保持されていることを示します。
-qautodbl オプションと -qrealsize オプションは、さらに汎用的なオプションで、-qdpc が実行することも実行できます。 これらのオプションのいずれかが指定されている場合は、-qdpc は効力を持ちません。
-qenablevmx | -qnoenablevmx
ベクトル・マルチメディア拡張機能 (Vector Multimedia eXtension (VMX)) 命令の生成を使用可能にします。 これらの命令は、 マルチメディア・アプリケーションなどのアルゴリズム集約的なタスクで使用されるとき、より高い性能を提案できます。
-qenablevmx は、コンパイラーが VMX 組み込み関数および -qhot=simd 最適化の両方を使用可能にするためにオンである必要があります。-qenablevmx は、PowerPC 970 プロセッサーのように、VMX 命令 をサポートする -qarch ターゲットにのみ互換性があります。
-qenum=value
列挙型定数の範囲を指定し、判別されるストレージ・サイズを使用可能にします。
ストレージ・サイズに関わりなく、列挙型定数の値は value に対応する範囲によって制限されます。列挙型定数 の値が指定された範囲を越える場合、警告メッセージが表示され、必要に応じて切り捨てが実行されます。各 value に 対応する範囲の限度および kind 型パラメーターは次のとおりです。
値 | 列挙型定数値の有効な範囲 | kind 型付きパラメーター |
---|---|---|
1 | -128 から 127 まで | 4 |
2 | -32768 から 32767 まで | 4 |
4 | -2147483648 から 2147483647 まで | 4 |
8 | -9223372036854775808 から 9223372036854775807 まで | 8 |
-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 が認識するエスケープ・シーケンスのリストは、の『文字ストリングのエスケープ・シーケンス』に記載されています。
-qessl | -qnoessl
Fortran 90 組み込みプロシージャーの代わりに科学技術計算サブルーチン・ライブラリー (ESSL) ルーチンを使用することが できます。
ESSL は、サブルーチンの集まりで、各種科学技術計算アプリケーション用に幅広い数学関数を提供します。 これらのサブルーチンでは、特定のアーキテクチャーでパフォーマンス調整が行われます。 Fortran 90 組み込みプロシージャーの中には ESSL と類似のものがあります。 これらの Fortran 90 組み込みプロシージャーを ESSL とリンクするとパフォーマンスが向上します。 この場合、Fortran 90 組み込みプロシージャーのインターフェースを保持することができ、 ESSL を使用してパフォーマンスを向上させる追加の利点を得ることができます。
-lessl でリンクするときは、ESSL シリアル・ライブラリーを使用します。 -lesslsmp でリンクするときは、ESSL SMP ライブラリーを使用します。
-qessl でコードをコンパイルするときは常に、-lessl または -lesslsmp を使用する必要があります。 ESSL は、V4.1.1 以降が推奨されます。 ライブラリーは、32 ビット環境と 64 ビット環境をサポートします。
また、libessl.so および libesslsmp.so は libxlf90_r.so に依存 するので、xlf_r、xlf90_r、または xlf95_r を使用してコンパイルしてください (これら は、デフォルトでリンクするために libxlf90_r.so を使用します)。直接にリンカーまたはリンク用に他のコマンドを 使用する場合、リンク・コマンド行で -lxlf90_r を指定することもできます。
次の MATMUL 関数呼び出しでは、-qessl を使用可能にすると、ESSL ルーチンを使用することができます。
real a(10,10), b(10,10), c(10,10) c=MATMUL(a,b)
ESSL ライブラリーは、XL Fortran コンパイラーと一緒に出荷されることはありません。 これらのライブラリーについて詳しくは、次の URL を参照してください。 http://publib.boulder.ibm.com/clresctr/windows/public/esslbooks.html
-qextern=names
ユーザー作成のプロシージャーを、XL Fortran 組み込み機能の代わりに 呼び出せるようにします。names はプロシージャー名をコロンで区切ったリストです。 プロシージャー名は、コンパイル中の個々の コンパイル単位の EXTERNAL 文内にあるかのように扱われます。 プロシージャー名が XL Fortran 組み込みプロシージャーと競合する場合は、 このオプションを使用して組み込みプロシージャーの代わりに ソース・コード内のプロシージャーを呼び出します。
プロシージャー名をコロンで区切ってください。
Fortran 90 および Fortran 95 は組み込み関数およびサブルーチンを多数持っているので、 FORTRAN 77 プログラムではこのオプションが必要なかった場合でも、 このオプションを使用しなければならない場合があります。
subroutine matmul(res, aa, bb, ext) implicit none integer ext, i, j, k real aa(ext, ext), bb(ext, ext), res(ext, ext), temp do i = 1, ext do j = 1, ext temp = 0 do k = 1, ext temp = temp + aa(i, k) * bb(k, j) end do res(i, j) = temp end do end do end subroutine implicit none integer i, j, irand integer, parameter :: ext = 100 real ma(ext, ext), mb(ext, ext), res(ext, ext) do i = 1, ext do j = 1, ext ma(i, j) = float(irand()) mb(i, j) = float(irand()) end do end do call matmul(res, ma, mb, ext) end
オプションを指定しないでこのプログラムを コンパイルすると、MATMUL への 呼び出しが実際には組み込みサブルーチンを呼び出していて、 プログラムに定義されているサブルーチンを呼び出さないため、コンパイルが失敗します。 -qextern=matmul を 指定してコンパイルを行うと、プログラムを正しくコンパイルして実行することができます。
-qextname[=name1[:name2...]] | -qnoextname EXTNAME[(name1: name2:...)] | NOEXTNAME
すべてのグローバル・エンティティーの名前に下線を追加します (これが混合言語プログラムに 対する規則であるシステムの場合、システムからプログラムを移植するのに役立ちます)。 -qextname=name1[:name2...] を使用して、特定の グローバル・エンティティーを識別します。 名前付きエンティティーのリストの場合、それぞれの名前をコロンで区切ってください。
メインプログラムの名前は影響を受けません。
-qextname オプションは、XL Fortran に混合言語プログラムを変更しないで移植する一助となります。 このオプションを使用して以下が原因となって発生する命名の問題を回避します。
プログラムのすべてのソース・ファイルは、 必須モジュール・ファイルのソース・ファイルも含め、 同じ -qextname 設定でコンパイルする必要があります。
xlfutility モジュールを使用してサービスおよびユーティリティー・サブプログラムが 正しく宣言されていることを確認する場合は、-qextname を指定してコンパイルする際に名前を xlfutility_extname に変更する必要があります。
コンパイル単位内に参照される複数のサービスおよびユーティリティー・サブプログラムがある場合、 名前が指定されていない -qextname と xlfutility_extname モジュールを使用すると、 プロシージャー宣言検査が正しく機能しない可能性があります。
@PROCESS EXTNAME SUBROUTINE STORE_DATA CALL FLUSH(10) ! Using EXTNAME, we can drop the final underscore. END SUBROUTINE
@PROCESS(EXTNAME(sub1)) program main external :: sub1, sub2 call sub1() ! An underscore is added. call sub2() ! No underscore is added. end program
このオプションは、他のオプションに指定された名前にも影響を与えます。 したがって、コマンド行上の名前に下線を入れる必要はありません。 影響を受けるオプションは、-qextern オプション、-Q オプション、および -qsigtrap オプションです。
-qfixed[=right_margin] FIXED[(right_margin)]
入力ソース・プログラムが固定ソース形式になっていることを示し、任意で行の最大長を指定します。
FREE ディレクティブ または FIXED @PROCESS ディレクティブを使用してコンパイル単位の形式を切り換えたり、 SOURCEFORM 注釈ディレクティブを使用して (コンパイル単位内部でも) ファイルの残りの形式を切り換えることはできますが、 コンパイラーの実行時に指定されたソース形式は、すべての入力ファイルに適用されます。
他のシステムのソース・コードの場合、 デフォルトよりも大きい右マージンを指定しなければならない場合もあります。 このオプションを使用すれば、 最大右マージン 132 を指定することができます。
-qfixed=72 は、 xlf、xlf_r、f77、および fort77 コマンドのデフォルトです。 -qfree=f90 は、 f90、f95、 xlf90、xlf90_r、xlf95、および xlf95_r コマンドのデフォルトです。
-qfree オプションを参照してください。
このソース形式の正確な仕様については、「XL Fortran 言語解説書」の 『固定ソース形式』を参照してください。
-qflag=listing_severity:terminal_severity FLAG(listing_severity,terminal_severity)
listing_severity と terminal_severity の両方を指定する必要があります。
診断メッセージを指定されたレベルまたはそれ以上のレベルに限定します。listing_severity またはそれ以上の重大度を持つメッセージだけがリスト・ファイルに書き込まれます。 terminal_severity またはそれ以上の重大度を持つメッセージだけが端末装置に書き込まれます。 -w は、-qflag=e:e の短い形式です。
重大度レベル (最低から最高) は次のとおりです。
-qflag オプションは、 指定された -qlanglvl、-qsaa などのオプションをオーバーライドします。
このオプションのデフォルトは i:i で、 これによりすべてのコンパイラー・メッセージを表示されます。
-qlanglvl オプションおよび XL Fortran エラー・メッセージに関する情報を参照してください。
-qfloat=options FLOAT(options)
浮動小数点計算のスピードを上げて精度を改善するための、別の方法を選択します。
-qfloat 設定を変更する場合は、その前に 『XL Fortran 浮動小数点処理のインプリメンテーションの詳細』 に記述されている事柄と IEEE 標準を 熟知しておかなければなりません。
デフォルト設定では、 サブオプション nocomplexgcc、 nofltint、 fold、 nohsflt、 maf、 nonans、 norrm 、 norsqrt、 および nostrictnmaf を使用します。 以下に示すように、このデフォルトを変更するオプションもいくつかあります。
個々のサブオプションのデフォルト設定は、明示的に変更されない限り有効です。 例えば、-qfloat=nofold を選択すると、nohsflt、または 関連オプションの設定は影響を受けません。
使用可能なサブオプションにはそれぞれ、 fold と nofold のような肯定の形式と否定の形式があります。 否定の形式は肯定の形式の反対です。
サブオプションは以下のとおりです。
ライブラリー関数 (-qfloat=fltint が指定されていない場合、 または別のオプションによって示されていない場合、デフォルトで呼び出される) は、 整数の表現可能範囲外の浮動小数点値をチェックし、範囲外の浮動小数点値が 渡された場合は、最小または最大の表現可能整数を戻します。
Fortran 言語では、整数の表現可能範囲外の浮動小数点値をチェックする必要がありません。 効率を向上させるために、-qfloat=fltint によって使用されるインライン・シーケンスはこの チェックを行いません。 範囲外の値が渡された場合、インライン・シーケンスは未定義の結果を生成します。
このサブオプションは、デフォルトではオフになりますが、 -O3 の最適化レベルでは、-qstrict も指定されている場合を除いてオンになります。
このサブオプションは、デフォルトではオフになりますが、 -O3 を指定すると、-qstrict も指定されている場合を除いてオンになります。
セマンティクスを厳密にするには、-qstrict と -qfloat=strictnmaf を両方とも指定します。
-qflttrap[=suboptions] | -qnoflttrap FLTTRAP[(suboptions)] | NOFLTTRAP
実行時に検出する浮動小数点例外条件のタイプを決定します。 該当する例外が発生すると、 プログラムは SIGFPE シグナルを受信します。 発生することをトラッピングするために
サブオプションなしの -qflttrap オプションは -qflttrap=ov:und:zero:inv:inex と同等ですが、 このデフォルトには enable が含まれていません。 このため、fpsets または類似のサブルーチンが ソースに既存している場合のみ、有効になる可能性があります。 サブオプションを使ったり、 使わなかったりして -qflttrap を複数回指定すると、 サブオプションなしの -qflttrap は無視されます。
-qflttrap オプションは IPA とリンク中に認識されます。リンク・ステップでオプションを 指定するとコンパイル時の設定値をオーバーライドします。
次のプログラムをコンパイルします。
REAL X, Y, Z
DATA X /5.0/, Y /0.0/
Z = X / Y
PRINT *, Z
END
次のコマンドを使用します。
xlf95 -qflttrap=zerodivide:enable -qsigtrap divide_by_zero.f
除算が実行されると、プログラムは停止します。
zerodivide サブオプションは、ガードすべき例外のタイプを識別します。 enable サブオプションは、例外が発生すると SIGFPE シグナルを出します。 -qsigtrap オプションは、シグナルがプログラムを停止すると、通知出力を出します。
-qfree[={f90|ibm}] FREE[({F90|IBM})]
ソース・コードが自由ソース形式になっていることを示します。 ibm サブオプションと f90 サブオプションは、それぞれ VS FORTRAN と Fortran 90 に対して 定義されている自由ソース形式との互換性を指定します。 Fortran 90 用に定義した自由ソース形式は、Fortran 95 にも適用されることに注意してください。
FREE ディレクティブ または FIXED @PROCESS ディレクティブを使用してコンパイル単位の形式を切り換えたり、 SOURCEFORM 注釈ディレクティブを使用して (コンパイル単位内部でも) ファイルの残りの形式を切り換えることはできますが、 コンパイラーの実行時に指定されたソース形式は、すべての入力ファイルに適用されます。
-qfree そのものは、Fortran 90 自由ソース形式を指定します。
-qfixed=72 は、 xlf、xlf_r、f77、および fort77 コマンドのデフォルトです。 -qfree=f90 は、 f90、f95、 xlf90、xlf90_r、xlf95、および xlf95_r コマンドのデフォルトです。
-qfixed オプションを参照してください。
-k は -qfree=f90 と同等です。
Fortran 90 自由ソース形式については、「XL Fortran 言語解説書」の『自由ソース形式』で 説明されています。 この形式は、現在および将来 Fortran 90 および Fortran 95 機能をサポートするコンパイラーに最大の移植性を与えるために使用される形式です。
IBM 自由ソース形式は、IBM VS FORTRAN コンパイラーの自由形式と同等で、 z/OS(R) プラットフォームからの プログラムの移植を支援するためのものです。 この形式については、「XL Fortran 言語解説書」の 『IBM 自由ソース形式』に説明されています。
-qfullpath | -qnofullpath
ソース・ファイルとインクルード・ファイルの完全なパス名、 つまり絶対パス名は、コンパイルされたオブジェクト・ファイルの中にデバッグ情報と一緒に記録されます。 (-g オプションを指定してコンパイルするとき、デバッグ情報は表示されます。)
実行可能ファイルをデバッグの前に別のディレクトリーへ移動する必要がある場合、 または複数のバージョンのソース・ファイルがあってデバッガーが必ず元のソース・ファイルを使用するようにしたい場合は、 -qfullpath オプションを -g オプションと組み合わせて使用すると、 ソース・レベル・デバッガーは正しいソース・ファイルを見つけることができます。
デフォルトでは、コンパイラーは元のソース・ファイルの相対パス名をそれぞれの .o ファイルの中に記録します。 また、インクルード・ファイルの相対パス名が記録される場合もあります。
-qfullpath は -g オプションがなくても機能しますが、 -g オプションを一緒に指定しない限りソース・レベルのデバッグはできません。
この例では実行可能ファイルは作成後に移動されますが、 デバッガーは元のソース・ファイルを引き続き見つけることができます。
$ xlf95 -g -qfullpath file1.f file2.f file3.f -o debug_version
...
$ mv debug_version $HOME/test_bucket
$ cd $HOME/test_bucket
$ gdb debug_version
-g オプションを参照してください。
-qhalt=severity HALT(severity)
コンパイル時メッセージの最大の重大度が、指定した重大度と等しいか、それを上回る場合、 オブジェクト・ファイル、実行可能ファイル、アセンブラー・ソース・ファイルを作成する前に動作を停止します。 severity (重大度) は、i (通知)、l (言語)、w (警告)、 e (エラー)、s (重大エラー)、u (回復不能エラー)、q (「停止しない」を示す重大度) のいずれかです。
重大度レベル (最低から最高) は次のとおりです。
デフォルトは -qhalt=s です。 この場合コンパイラーはコンパイルが失敗してもオブジェクト・ファイルを生成しません。
-qhot[=suboptions] | -qnohot HOT[=suboptions] | NOHOT
最適化中に高位ループ分析および変換を 実行するようにコンパイラーに指示します。
-qhot コンパイラー・オプションは、ループと配列言語を最適化するためのチューニングを助ける強力な代替手段です。 このコンパイラー・オプションは、指定されたサブオプションに 関係なく、常にループの最適化を試行します。
-O および -qhot を使用するときに最適化レベル 2 以上を指定しないと、コンパイラーは -O2 を暗黙指定します。
-O3 を指定する場合、コンパイラーは -qhot=level=0 を想定します。-O3 を使用して すべての HOT 最適化を防ぐため、-qnohot を指定する必要があります。
サブオプションを使用しないで -qhot を指定することは、-qhot=nosimd、 -qhot=noarraypad、-qhot=vector、および -qhot=level=1 を暗黙指定します。これらのサブオプションはオプション -qsmp、-O4、 または-O5 によっても暗黙指定されます。
-qhot、-qenablevmx、および -qarch=ppc970 または -qarch=ppc64v のいずれかを指定する場合、-qhot=simd がデフォルトとして設定されます。
XL Fortran では、2 の累乗である配列次元がキャッシュの使用効率の低下を招く可能性があります。 arraypad サブオプションを使用すると、コンパイラーは配列処理ループの効率を高められそうな配列次元を増やすことができます。これにより、配列処理プログラムを低下させるキャッシュ・ミスやページ不在を削減することができます。
ソースに 2 の累乗である次元を持つ大きな配列が含まれる場合は -qhot=arraypad を指定してください。 これは特に、最初の次元が 2 の累乗である場合に効果的です。
-C オプションは、いくつかの配列最適化をオフにします。
-qhot コンパイラー・オプションは、simd および vector サブオプションをサポートします。 これらは、可能であれば演算を並列に実行することによって、 配列データの演算のためのソース・コードのループを最適化することができます。 どちらのサブオプションもパフォーマンスを 向上させることができますが、各サブオプションはそれぞれ特定のタイプの ベクトル化に最も適しています。
simd サブオプションは、配列データを最適化して、ターゲット・アーキテクチャーで許可される場合、算術演算を並列に実行します。並列演算は、16 バイト・ベクトル・レジスターで行われます。 コンパイラーは、レジスター長を超えるベクトルを 16 バイト単位に分割して、最適化を促進します。 16 バイトの 1 つの単位には、次のいずれかの型のデータを含めることができます。
ショート・ベクトル化は、倍精度の浮動小数点算術演算をサポートしません。ユーザーは -qarch=ppc970 のように VMX 命令をサポートする アーキテクチャーを指定する必要があります。ユーザーは、一般に、 たとえば、-qhot=simd 最適化をイメージ処理アプリケーションに適用するときに利点を見いだします。
vector サブオプションは、-qnostrict または -O3 またはより高位のレベル の最適化のレベルと併せて使用されたとき、配列データを最適化して、可能な場合は、算術演算を並列に実行します。 コンパイラーは、ベクトル・サイズの制限なしで標準レジスターを使用します。 単精度および倍精度の浮動小数点算術演算のサポートは、通常、ユーザーが大きな算術演算の要件 を持つアプリケーションに -qhot=vector を適用するときに有利です。
arraypad および arraypad=n オプションを指定した場合、コンパイラーは再シェーピングまたはそれと同等のものをチェックしません。 埋め込みが行われる場合、プログラムが予測不能な結果を生成することがあります。
最適化レベル -O3 は qhot=level=0 を暗黙指定します。
level 以外のすべての -qhot サブオプションのデフォルトの HOT レベルは 1 です。 たとえば、-O3 -qhot=novector の指定により HOT レベルは 1 に設定されます。
-qhot または -qhot=level=1 を明示的に指定しない限り、-O3 の指定 は -qhot=level=0 を暗黙指定します。
明示的に -qhot=level=0 を指定しない限り、-O4、-O5、または -qsmp は -qhot=level=1 を暗黙指定します。
-qhot=nosimd を指定すると、コンパイラーはループと配列に対して最適化を実行しますが、特定のコードを VMX 命令への呼び出しに置き換えることはしません。
このサブオプションは、指定されたアーキテクチャーが VMX 命令をサポートし、-qenablevmx に効力があるときにのみ効果があります。
-O4 以上を使用している場合、ベクトル化は、プログラムの結果の精度に影響を及ぼすこと があるので、精度についての変更を受け入れられない場合は、-qhot=novector を指定する必要があります。
-qieee={Near | Minus | Plus | Zero} IEEE({Near | Minus | Plus | Zero})
コンパイル時に定数浮動小数点式を評価するときにコンパイラーが使用する丸めモードを指定します。
選択項目は次のとおりです。
このオプションは、XL Fortran サブルーチン fpsets など実行時に丸めモードを変更する方法と組み合わせて使用することを想定しています。 このオプションは、コンパイル時の演算 (たとえば、 2.0/3.5 などのような定数式の計算) に使用される丸めモードを設定します。 コンパイル時の演算と実行時の演算に同じ丸めモードを指定することにより、 浮動小数点結果に矛盾が生じることを回避します。
実行時のデフォルト (最も近い値への丸め) モード以外に丸めモードを変更する場合は、 必ず -qfloat=rrm も指定して、デフォルトの丸めモードでのみ適用される最適化をオフにしてください。
-qinit=f90ptr INIT(F90PTR)
ポインターの初期関連付け状況を関連付け解除にします。 これは、Fortran 90 以降に当てはまることに注意してください。
このオプションを使用して、ポインターを定義する前に使用することによって生じた問題の発見および修正を行うことができます。
「XL Fortran 言語解説書」の『ポインター関連付け』を参照してください。
-qinitauto[=hex_value] | -qnoinitauto
hex_value の長さに応じて、自動変数用のストレージの個々のバイトまたはワード (4 バイト) を、特定の値に初期化します。 これにより、定義前に参照される変数を見つけることができます。たとえば、REAL 変数を シグナル NAN 値に 初期化するための -qinitauto オプションと、-qflttrap オプションの両方を使用することにより、実行時に初期化されていない REAL 変数を参照していないかどうかを識別することができます。
hex_value をゼロに設定すると、自動変数はすべて使用前にクリアされます。 プログラムの中には、変数がゼロに初期化され、ゼロに初期化されないと機能しない、と想定するものがあります。 また、最適化されなければ機能し、最適化されると障害が発生する、と想定するプログラムもあります。 一般に、変数をすべてゼロ・バイトに設定すれば、そのような実行時エラーは回避されます。実行時エラーを回避するためには、このオプションに依存するよりも、ゼロへのリセットを必要とする変数を見つけて プログラムにコードを挿入するほうが良い方法です。 このオプションを使用すると、通常、必要以上の数をゼロにするので、 プログラムが遅くなる可能性があります。
それらのエラーを見つけて修正するには、正しくない結果が常に再現されるようバイトの値をゼロ以外に設定します。 この方法は、デバッグ・ステートメントを追加したり、 シンボリック・デバッガーにプログラムをロードしてエラーを排除する場合に、特に価値があります。
hex_value を FF (255) に設定すると、「負の非数値」、 つまり - 静止 NAN の初期値が REAL 変数および COMPLEX 変数に与えられます。 これらの変数で演算を行っても、結果は 静止 NAN 値に なり、初期化されていない変数が計算で使用されたことが明らかになります。
このオプションは、サブプログラム内に初期化されていない変数を含んでいるプログラムをデバッグするときに 役立ちます。 たとえば、 シグナル NAN 値を使用して REAL 変数を初期化するときに使用できます。 繰り返したときに倍精度の シグナル NAN 値を持つ 8 桁の 16 進数を指定することにより、8 バイトの REAL 変数を倍精度の シグナル NAN 値に初期化することができます。 たとえば、7FBFFFFF のような数値を指定することができます。 これは、REAL(4) 変数に入れられると、単精度の シグナル NAN 値を持つことになります。 7FF7FFFF は、REAL(4) 変数に入れられると、単精度の 静止 NAN 値を持つことになります。 REAL(8) 変数に同じ数値を 2 回入れる (7FF7FFFF7FF7FFFF) と、 倍精度のシグナル NAN 値を持つようになります。
次の例では、自動変数のワード初期化を実行する方法が示されています。
subroutine sub() integer(4), automatic :: i4 character, automatic :: c real(4), automatic :: r4 real(8), automatic :: r8 end subroutine
次のオプションを指定してコードをコンパイルする場合、hex_value が 2 桁より長くなったら、 コンパイラーはワード初期化を実行します。
-qinitauto=0cf
コンパイラーは、i4、r4、および r8 変数の場合は、 hex_value にゼロを埋め込み、c 変数の場合は最初の 16 進数字を切り捨てることにより、 変数を初期化します。
変数 | 値 |
---|---|
i4 | 000000CF |
c | CF |
r4 | 000000CF |
r8 | 000000CF000000CF |
-qflttrap オプション、および「XL Fortran 言語解説書」の AUTOMATIC ディレクティブについての節を参照してください。
-qinlglue | -qnoinlglue INLGLUE | NOINLGLUE
このオプションは、-q64 および -O2 およびより高位のものでコンパイルしているとき、ご使用の アプリケーションで外部関数呼び出しを最適化する Glue コードをインライン化します。
リンカーによって生成された Glue コードは、2 つの外部関数間で 制御を引き渡すのに使用されます。パフォーマンスの補助のため、最適化プログラムは、ユーザーが 適切なプロセッサーを持つマシン上で -qtune=pwr4、-qtune=pwr5、 -qtune=ppc970、または -qtune=auto を指定してコンパイルする とき、Glue コードを自動的にインライン化します。-qnoinlglue はこれらのアーキテクチャー 上で Glue コードの自動インライン化を防ぎます。
Glue コードのインライン化はユーザーのコードのサイズを増加させます。-qcompact を指定すると -qinlglue をオーバーライドしてコードの増大を防ぎます。
-qnoinlglue または -qcompact を指定するとパフォーマンスを低下させます。 これらのオプションは慎重に使用してください。
-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
組み込み関数 IAND、IOR、IEOR、および NOT を使用して、ビット単位の 論理演算を行うこともできます。
-qintsize=bytes INTSIZE(bytes)
デフォルトの INTEGER および LOGICAL データ・エンティティー (つまり、 長さまたは種類が指定されていないデータ・エンティティー) のサイズを設定します。
指定されたサイズ1 は、以下のようなデータ・エンティティーに適用されます。
バイト に使用できるサイズは次のとおりです。
このオプションは、データのデフォルト・サイズが異なるシステムから、 プログラムを変更せずに移植できるようにするためのものです。 たとえば、16 ビットのマイクロプロセッサー用に書かれたプログラムには -qintsize=2 が必要で、 CRAY コンピューター用に書かれたプログラムには -qintsize=8 が必要です。 このオプションのデフォルト値 4 は、多くの 32 ビット・コンピューター用に書かれたコードに 適しています。-q64 コンパイラー・オプションの指定は、-qintsize のデフォルト設定に影響し ないことに注意してください。
このオプションは、データ・エンティティーのサイズを大きくするための一般的な方法として 機能させるためのものではありません。 用途は、他のシステム用に作成されたコードとの互換性を維持することに限定されています。
PARAMETER 文を追加して、 引数として渡す定数に明示的な長さを指定する必要がある場合があります。
次の例を見れば、変数、リテラル定数、組み込み関数、算術演算子、入出力操作が、変更された デフォルト整数サイズをどのように処理するかが理解できます。
@PROCESS INTSIZE(8) PROGRAM INTSIZETEST INTEGER I I = -9223372036854775807 ! I is big enough to hold this constant. J = ABS(I) ! So is implicit integer J. IF (I .NE. J) THEN PRINT *, I, '.NE.', J END IF END
次の例は、整数のデフォルト・サイズでのみ機能します。
CALL SUB(17) END SUBROUTINE SUB(I) INTEGER(4) I ! But INTSIZE may change "17" ! to INTEGER(2) or INTEGER(8). ... END
デフォルト値を変更する場合は、INTEGER(4) の代わりに INTEGER として I を宣言するか、 以下のように、実引数に長さを指定する必要があります。
@PROCESS INTSIZE(8) INTEGER(4) X PARAMETER(X=17) CALL SUB(X) ! Use a parameter with the right length, or CALL SUB(17_4) ! use a constant with the right kind. END
-qrealsize オプションおよび「XL Fortran 言語解説書」の 『タイプ・パラメーターおよび指定子』を参照してください。
-qipa[=suboptions] | -qnoipa
プロシージャー間で詳細な分析 (プロシージャー間分析、つまり IPA) を行うことによって、-O 最適化を増大させます。
-qipa を指定するときには、-O、-O2、-O3、-O4、または -O5 オプションも指定する必要があります。 (-O5 オプションを指定することは、-O4 オプションと -qipa=level=2 を指定する ことと同じです。) パフォーマンスをさらに 改善するために、-Q オプションを指定することもできます。 -qipa は、最適化実行中、および単一プロシージャーから複数プロシージャー (おそらく別のソース・ファイル内にある) へのインライン化実行中、 そして、それらのリンク実行中に調べられる区域を拡張します。
サブオプションを指定することによって、実行される最適化を微調整することができます。
このオプションを使用するために必要なステップは、次のとおりです。
コンパイル中に、コンパイラーは .o ファイルにプロシージャー間分析情報を格納します。 リンク中に、-qipa オプションはアプリケーション全体の完全な最適化を再発生させます。
-# とともにこのオプションを指定する場合、コンパイラーは IPA リンク・ステップの後に リンカー情報を表示しないことにご注意ください。 これは、コンパイラーが IPA を実際に呼び出していないためです。
コンパイル時のサブオプション
IPA は、コンパイル時間のフェーズで以下のサブオプションを使用します。
コンパイルとリンクを同じステップで実行した場合で、 -S または リストされているオプションを指定しない場合、-qipa=noobject が暗黙指定されます。
プログラムに noobject サブオプションを使用して作成したオブジェクト・ファイルが含まれる場合、 -qipa を使用してプログラムをリンクする前に、 エントリー・ポイント (実行可能プログラムの場合は主プログラム、ライブラリーの場合はエクスポートされたプロシージャー) を含むファイルがあれば -qipa オプションを指定してコンパイルする必要があります。
リンク時のサブオプション
IPA は、リンク時間のフェーズで以下のサブオプションを使用します。
コンパイラーは効果のある -qarch 設定に基づき、命令セットの汎用版を 生成し、該当する場合、clonearch サブオプションでユーザーが指定するアーキテクチャー用に clones 特殊 バージョンを生成します。 コンパイラーはコードをご使用のアプリケーションに挿入して実行時にプロセッサー・アーキテクチャーを検査します。実行時に、 ランタイム環境に対して最良に最適化された、命令セットのアプリケーションのバージョンが選択されます。
arch は、コンマで区切られた、アーキテクチャー値のリストです。サポートされる clonearch 値は pwr4、pwr5、および ppc970 です。値を指定しない、無効値を指定する、 または -qarch 設定値に等しい値を指定する場合、このオプションに対して関数のバージョン管理は 実行されません。
-qarch 設定 | 許可された clonearch 値 |
---|---|
com、ppc、pwr3、ppc64、ppcgr、 ppc64gr、ppc64grsq | pwr4, pwr5, ppc970 |
pwr4 | pwr5, ppc970 |
ppc64v | ppc970 |
-qlist コンパイラー・オプションまたは -qipa=list コンパイラー・オプションによってオブジェクト・リストが要求されたイベントにおいて、 リンク・フェーズ中に出力リスト・ファイル名を指定することにより、 ユーザーが出力のタイプを指示できるようにします。 filename サブオプションを指定しなかった場合、デフォルト・ファイル名は「a.lst」になります。
short を指定した場合は、 オブジェクト・ファイル・マップ、ソース・ファイル・マップ、 グローバル・シンボル・マップのセクション が組み込まれます。long を指定した場合は、 オブジェクト解像度警告、オブジェクト参照マップ・セクション、 インライン報告書、区画マップ・セクションに加えて、 それに先行するセクションも表示されます。
-qipa オプションと -qlist オプションを同時に指定すると、IPA は a.lst ファイルを生成し、 既存の a.lst ファイルがあればそれらを上書きします。 a.f というソース・ファイルがあるとすると、IPA のリストにより、 通常のコンパイラー・リスト a.lst が上書きされます。代替のリスト・ファイル名を指定するときには、 list=filename サブオプションを使用できます。
PDF プロファイル情報を含むプロファイル・データ・ファイルの名前を指定します。 filename を指定しない場合は、デフォルト・ファイル名は、__pdf に なります。 プロファイルは現行作業ディレクトリーか、PDFDIR 環境変数が指名しているディレクトリーに置かれます。 これにより、ユーザーは、同時に複数の実行可能ファイルを 同じ PDFDIR を使用して稼動することができます。 こうすると、動的ライブラリーの PDF を使用したチューニングに特に有効です。 (チューニングの最適化についての詳細は、-qpdf オプションを参照してください。)
-qipa=threads を指定すると、IPA 最適化時間を削減することができます。 スレッド・サブオプションを指定すると、IPA 最適化プログラムは最適化処理の部分を並列スレッドで実行することができるため、 マルチプロセッサー・システム上でコンパイル・プロセスを高速化することができます。
isolated、missing、pure、safe、 および unknown の主な使用目的は、 -qipa を指定してコンパイルしていないライブラリー・ルーチンへの呼び出しに対して、 最適化をどの程度安全に実行するかを指定することです。
以下のコンパイラー・オプションは、-qipa のリンク時間のフェーズに影響があります。
正規表現は、以下のサブオプションでサポートされています。
正規表現の構文規則について、以下に説明します。
式 | 説明 |
---|---|
string | string で指定したすべての文字と突き合わせます。 たとえば、test は、testimony、 latest、intestine と突き合わせます。 |
^string | 行の先頭に置かれている場合にのみ、 string によって指定されているパターンと突き合わせます。 |
string$ | 行の末尾に置かれている場合にのみ、 string によって指定されているパターンと突き合わせます。 |
str.ing | すべての文字と突き合わせます。 たとえば、t.st は test、tast、tZst、および t1st と突き合わせます。 |
string¥.$ | 円記号 (¥) は、その文字を突き合わせるための特殊エスケープ文字に使用することができます。 たとえば、ピリオドで終了する行を検索する場合、 .$ という式では、最低でも 1 つの文字を含むすべての行が表示されます。 ピリオド (.) をエスケープするには、¥.$ と指定します。 |
[string] | string で指定したすべての文字と突き合わせます。 たとえば、t[a-g123]st は tast および test とは突き合わせますが、 t-st または tAst とは突き合わせません。 |
[^string] | string で指定した文字とは突き合わせません。 たとえば、t[^a-zA-Z]st は t1st、 t-st、および t,st とは突き合わせますが、 test または tYst とは突き合わせません。 |
string* | string によって指定されたパターンの、ゼロ回以上のオカレンスと突き合わせます。 たとえば、te*st は、tst、test、 および teeeeeest と突き合わせます。 |
string+ | string によって指定されたパターンの、1 回以上のオカレンスと突き合わせます。 たとえば、t(es)+t は、test、 tesest とは突き合わせますが、tt. との突き合わせは行いません。 |
string? | string によって指定されたパターンの、ゼロ回以上のオカレンスと突き合わせます。 たとえば、te?st は、tst または test のいずれかと突き合わせます。 |
string{m,n} | string によって指定されたパターンの m 回と n 回の間のオカレンスを突き合わせます。 たとえば、a{2} は aa と、 また b{1,4} は b、bb、bbb、 および bbbb とそれぞれ突き合わせます。 |
string1 | string2 | string1 または string2 のいずれかによって指定されたパターンと突き合わせます。 たとえば、s | o は s と o の両方の文字と突き合わせます。 |
関数名だけが考慮されるため、 正規表現は自動的に ^ および $ 文字で囲まれます。 たとえば、-qipa=noinline=^foo$ は -qipa=noinline=foo と同一です。 そのため、 -qipa=noinline=bar の場合、bar は決してインライン化されませんが、 bar1、teebar、barrel はインライン化される可能性があります。
一連のファイルをプロシージャー間分析でコンパイルする方法を次に示します。
xlf95 -O -qipa f.f xlf95 -c -O3 *.f -qipa=noobject xlf95 -o product *.o -qipa -O
次の例では、パフォーマンスを向上させるために正規表現を使って、上で示したのと同じファイルと プロシージャー間分析とをリンクする方法を示します。 この例では、関数 user_abort はプログラムを終了し、その関数のルーチン user_trace1、user_trace2、および user_trace3 はまれにしか呼び出されないものと 想定します。
xlf95 -o product *.o -qipa=exit=user_abort:lowfreq=user_trace[123] -O
-qkeepparm | -qnokeepparm
プロシージャーは通常、着信パラメーターを入り口点のスタックに格納します。 ただし、最適化を行ってコードをコンパイルすると、最適化プログラムは 必要であれば、スタックに対するストアを除去する可能性があります。
-qkeepparm コンパイラー・オプションを指定すると、最適化していてもそのパラメーターが スタックに保管されることが保証されます。 これは実行のパフォーマンスにマイナスの影響を与える可能性があります。 このオプションは、さらに、着信パラメーターの値をスタックにただ保存しておくことにより、デバッガーなどの ツールに送られる着信パラメーターの値を使用できるようにします。
-qlanglvl={suboption} LANGLVL({suboption})
非準拠の検査を行う言語標準 (または標準のスーパーセットまたはサブセット) を決定します。 非準拠のソース・コード、 およびそのような非準拠を許可するオプションを識別します。
コンパイラーは、言語レベルで許可されていない構文を指定していることを検出すると、重大度コード L のメッセージを送出します。
デフォルトは -qlanglvl=extended です。
次の例では、Fortran 標準の組み合わせに準拠するソース・コードが示されています。
!---------------------------------------------------------- ! in free source form program tt integer :: a(100,100), b(100), i real :: x, y ... goto (10, 20, 30), i 10 continue pause 'waiting for input' 20 continue y= gamma(x) 30 continue b = maxloc(a, dim=1, mask=a .lt 0) end program !----------------------------------------------------------
次の図には、特定の -qlanglvl サブオプションがこのサンプル・プログラムに与える影響についての例が 示されています。
指定した -qlanglvl サブオプション | 結果 | 理由 |
---|---|---|
95pure |
PAUSE 文にフラグを付ける 計算型 GOTO 文にフラグを 付ける GAMMA 組み込み関数に フラグを付ける |
Fortran 95 で 削除された機能 Fortran 95 で 廃止された機能 Fortran 95 への拡張機能 |
95std |
PAUSE 文にフラグを付ける GAMMA 組み込み関数に フラグを付ける |
Fortran 95 で 削除された機能 Fortran 95 への拡張機能 |
extended | フラグを付けられるエラーはなし |
-qflag オプション、-qhalt オプション、 および -qsaa オプションを参照してください。
実行時オプションの設定に記載されている langlvl 実行時オプションは、コンパイル時にチェックできない 実行時拡張機能を見つけるのに役立ちます。
-qlibansi | -qnolibansi
ANSI C ライブラリー関数の名前を持つ関数はすべてシステム機能と見なすことを指定します。
このオプションにより、最適化プログラムは、所定の関数が何らかの副次作用を持っているかいないかなどの、 動作について知るようになるので、より良いコードを生成することができます。
-qipa オプションを参照してください。
-qipa オプションを参照してください。
-qlinedebug | -qnolinedebug LINEDEBUG | NOLINEDEBUG
デバッガーに対して行番号およびソース・ファイル名情報を生成します。
このオプションは最小のデバッグ情報を作り出すので、結果のオブジェクト・サイズは -g デバッグ・ オプションが指定された場合に作り出すオブジェクト・サイズより小さいのです。デバッガーを使用してソース・コード をステップスルーできますが、可変情報を見たり、照会することはできません。トレースバック・テーブルには、 生成された場合、行番号が組み込まれます。
-g と同様に、使用される最適化レベルが高ければ高いほど、行番号を含め、デバッグ情報はより誤解を招きやすく なります。
-qlinedebug オプションを指定する場合、インライン・オプションは デフォルトの -Q! になります (関数はインラインされません)。
-qnolinedebug オプションは、-g に効果がありません。
-qlist[=offset | nooffset] | -qnolist LIST[([NO]OFFSET)] | NOLIST
オブジェクト・リストを含むコンパイラー・リストを作成します。
オブジェクト・リストを使用すると、 生成コードのパフォーマンス特性の理解、 および実行時の問題の診断に役立ちます。
-qipa オプションと -qlist オプションを同時に指定すると、IPA は a.lst ファイルを生成し、 既存の a.lst ファイルがあればそれらを上書きします。 a.f というソース・ファイルがあるとすると、IPA のリストにより、 通常のコンパイラー・リスト a.lst が上書きされます。 これを回避するには、-qipa の list=filename サブオプションを使用して、代わりのリストを生成してください。
コンパイル単位に複数のプロシージャーがある場合にのみ -qlist=offset オプションは関係があります。たとえば、 プログラムでネストされたプロシージャーが使用される場合、これは発生することがあります。
-qlist=offset を指定する場合、リストはコード生成の開始からのオフセットよりもむしろ プロシージャーの開始からのオフセットを示します。
PDEF ヘッダーのオフセットには、テキスト域の開始からのオフセットが含まれます。これにより、.lst ファイルを 読み込むすべてのプログラムは PDEF の値および問題の行を追加することができ、-qlist=offset または -qlist=nooffset が 指定されたかを示す同一の値を生産します。
-qlist オプションを指定すると -qlist=nooffset と見なされます。
-qlistopt | -qnolistopt LISTOPT | NOLISTOPT
リスト・ファイル内のすべてのコンパイラー・オプションの設定を表示するか、 または、選択したオプションだけを表示するかを決定します。 これらの選択したオプションには、コマンド行またはディレクティブに 指定されているオプションと、常にリストにあるオプションが含まれます。
このオプション・リストは、デバッグ中に使用すると、コンパイラー・オプションの特定の組み合わせにおいて 問題が起きるかどうかをチェックすることができます。 また、パフォーマンス・テスト中に使用すると、特定のコンパイルに対して有効な最適化オプションを記録することが できます。
リストに常に表示されるオプションは次のとおりです。
リストとメッセージを制御するオプションおよび オプション・セクションを参照してください。
-qlog4 | -qnolog4 LOG4 | NOLOG4
論理オペランドを持つ論理演算の結果が、LOGICAL(4) であるか、 それともオペランドの最大長を持つ LOGICAL であるかを指定します。
このオプションを使用すると、 元々 IBM VS FORTRAN コンパイラー用に書かれたコードを移植することができます。
-qlog4 は常に結果を LOGICAL(4) にし、 -qnolog4 は結果をオペランドの長さに依存させます。
-qmaxmem=Kbytes MAXMEM(Kbytes)
コンパイラーが特定のメモリー集中の最適化を実行するときに、 割り振るメモリーの量を指定キロバイト数に制限します。 値 -1 を指定すれば、制限チェックは行わず、必要なだけメモリーを使って最適化を実行します。
-O2 最適化レベルでは、デフォルトの -qmaxmem 設定は 8,192 KB です。 -O3 最適化レベルでは、デフォルトの設定は無制限 (-1) です。
コンパイラーが特定の最適化を算出するには 指定されたメモリーの容量が不十分な場合は、 コンパイラーがメッセージを発行し最適化の度合いが減ります。
このオプションは、 -O オプションと組み合わせた場合以外は効果がありません。
-O2 を指定してコンパイルするときには、 コンパイル時メッセージが限界を上げるように指示する場合にその指示に従うだけで十分です。マシン・ラン-O3 を指定してコンパイルするときには、 マシン・ランによりストレージが不足するためにコンパイルが停止する場合に、 限界の設定が必要な場合があります。 この場合は 8,192 以上の値で開始し、 過大なストレージをコンパイルが要求し続けるときはこの値を減らします。
コンパイルされるソース・ファイル、ソース・コード内のサブプログラムのサイズ、 マシン構成、システム上の作業負荷によっては、限界を高く設定し過ぎると、 ページング・スペースを使い果たしてしまう場合があります。 特に、値 -1 は、装備の充実したマシンでも、リソースを使い果たす場合があります。
-qmbcs | -qnombcs MBCS | NOMBCS
文字リテラル定数、ホレリス定数、H 編集記述子、 文字ストリング編集記述子にマルチバイト文字セット (MBCS) 文字または Unicode 文字を含めることができるかどうかをコンパイラーに示します。
このオプションは、 日本語のようなマルチバイト言語でデータを処理しなければならないアプリケーションのためのものです。
実行時にマルチバイト・データを正しく処理するには、コンパイル中と同じ値にロケールを設定してください (LANG 環境変数を使用するか、 または libc setlocale ルーチンへの呼び出しを使用)。
マルチバイト文字の個々のバイトは、1 桁としてカウントされます。
Unicode データの読み書きを行うには、実行時にロケール値を UNIVERSAL に設定します。 ロケールが設定されていないと、Unicode が使用可能なアプリケーションとデータを交換できない場合があります。
-qminimaltoc | -qnominimaltoc
このコンパイラー・オプションは、目次 (TOC) の生成を変更できます。 コンパイルを 64 ビット・モードで行った際、コンパイラーは各実行可能ファイルごとに作成します。 デフォルトでは、プログラム内の固有の、非自動変数参照ごとに、少なくとも 1 つの TOC エントリー をコンパイラーが割り当てます。 現在、8192 の TOC エントリーのみが使用可能で、重複エントリーは廃棄されません。 これは、プログラムが 8192 の TOC エントリーを超える場合、64 ビット・モードで大きなプログラムをリンクしている際に、 エラーが起きる原因になります。
-qminimaltoc を指定すると、コンパイラーが、各コンパイル単位ごとに、1 つの TOC エントリーのみ作成します。 このオプションの指定は、使用可能な TOC エントリーの使用を最小限にします。 しかし、この使用はパフォーマンスに影響します。-qminimaltoc オプション は、特に頻繁に実行されるコードを含むファイルでは、個別に使用してください。
-qmixed | -qnomixed MIXED | NOMIXED
これは、-U オプションの長い形式です。
-qmoddir=directory
コンパイラーが書き込むモジュール・ファイル (.mod) の位置を指定します。
-qmoddir を指定しない場合、 .mod ファイルは現行ディレクトリーに置かれます。
モジュールを参照するファイルをコンパイルしているときに、 このディレクトリーから .mod ファイルを読むには、 -I オプションを使用してください。
XL Fortran 出力ファイルを参照してください。
モジュールは Fortran 90 または 95 の機能であり、「XL Fortran 言語解説書」の『モジュール』の節で説明されています。
-qmodule=mangle81
コンパイラーが非組み込みモジュール・ファイルに対して XL Fortran バージョン 8.1 の命名規則を 使用するように指定します。
このオプションを使用すると、モジュールと Version 10.1 のコンパイラーに関連したオブジェクト・ファイルを生成して、 これらのオブジェクト・ファイルと、バージョン 8.1 のコンパイラーで コンパイルされた他のオブジェクト・ファイルをリンクすることができます。
Version 8.1 コンパイラーで コンパイルされたアプリケーションをリンクする必要がある場合にのみこのオプションを使用してください。可能な場合、 このコンパイラー・スイッチの使用を避け、コンパイラーの新規バージョンで古いコードおよびモジュールを再ビルド することをお勧めします。そのようにすることによりご使用のモジュールと組み込みのコンパイラー・モジュールの 間の命名の競合が避けられます。
-qnoprint
他のリスト・オプションの設定とは関係なく、 コンパイラーがリスト・ファイルを作成しないようにします。
コマンド行に -qnoprint を指定すれば、構成ファイルまたは @PROCESS ディレクティブに 他のリスト・オプションを入れることができ、リスト・ファイルが作成されるのを防止します。
通常、リスト・ファイルは、-qattr、-qlist、-qlistopt、-qphsinfo、-qsource、 -qreport または -qxref のいずれかのオプションを指定すると作成されます。 -qnoprint は、名前を /dev/null (書き込まれたあらゆるデータを廃棄するデバイス) に変更して リスト・ファイルが作成されるのを防止します。
リストとメッセージを制御するオプションを参照してください。
-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 | -qNOOBJect OBJect | NOOBJect
オブジェクト・ファイルを作成するか、または、 ソース・ファイルの構文をチェックした直後に停止するかを指定します。
コンパイルに時間がかかる大きなプログラムをデバッグするときは、-qnoobject オプションを 使用するようお勧めします。 このオプションを使用すれば、コード生成のオーバーヘッドなしに、プログラムの構文をすばやくチェックすることが できます。 .lst ファイルは依然として作成されるので、 デバッグを開始するための診断情報を得ることができます。
プログラム・エラーを修正した後に再びデフォルト (-qobject) に変更して、プログラムが正しく 機能するかをテストし、 正しく機能しない場合は、対話式デバッグのための -g オプションでコンパイルすることができます。
リストとメッセージを制御するオプションおよび オブジェクト・セクションを参照してください。
コンパイラー・フェーズには、 コンパイラー・フェーズに関する技術情報が記載されています。
-qoldmod=compat
このオプションは、V9.1.1 より前の XL Fortran のバージョンでコンパイルされたモジュール・データを含む オブジェクト・ファイルが未初期化のモジュール・データを含まないかまたは convert_syms スクリプトを使用して 移植するかを指定します。
XL Fortran が初期化されていないモジュール変数用に使用するマングリング・スキームは、Version 9.1.1 で 変更されました。前のマングリング・スキームは @ 記号を使用していて、それが共用ライブラリーの 作成時に Linux リンカーを混乱させました。Linux リンカーは、 @ 記号をシンボルのバージョン管理用に 予約しています。
この変更の結果として、未初期化のモジュール変数を含む XL Fortran およびこれらのモジュールを 使用するすべてのコンパイル単位は、-qoldmod=compat オプションを指定して再コンパイルする 必要があります。
再コンパイルが実現可能でない場合、古いコンパイラーにより作成されたオブジェクト・ファイルを 次のスクリプトの使用により移植することができます。
> cat convert_syms
#!/bin/bash
if [[ $# = 0 || "$1" = "-?" ]]
then
echo "Usage: $0 object-files"
echo "e.g. $0 *.o *.a"
exit
fi
for file in $*
do
XLFSYMS=""
for i in `nm $file | grep -o "&&¥([NI]&¥)¥?@.*$" | sort -u`
do
XLFSYMS="$XLFSYMS --redefine-sym $i=`echo $i | sed -e 's/@/¥&/'`"
done
if [[ -n "$XLFSYMS" ]]; then
echo Converting symbols in $file...
objcopy $XLFSYMS $file
fi
done
モジュール・シンボル・ファイル (*.mod) は移植する必要はありません。
# If old_module.o and old_module.mod were produced using the original # release of XL Fortran Advanced Edition V9.1 for Linux, you'll get # the following error when you try to use them in new programs: # > xlf95 new_program.f old_module.o "new_program.f", line 1.5: 1517-022 (S) Module old_module was compiled using an incompatible version of the compiler. Please see the -qoldmod option for information on recovery. 1501-511 Compilation failed for file new_program.f. # Convert the object file. This needs to be done only once. # > ./convert_syms old_module.o > # You can now use the updated object file safely. # Specify -qoldmod=compat # > xlf95 new_program.f old_module.o -qoldmod=compat ** _main === End of Compilation 1 === 1501-510 Compilation successful for file new_program.f. >
-qonetrip | -qnoonetrip ONETRIP | NOONETRIP
これは、-1 オプションの長い形式です。
-qOPTimize[=level] | -qNOOPTimize OPTimize[(level)] | NOOPTimize
これは、-O オプションの長い形式です。
-qpdf{1|2}
プロファイル指示フィードバック (profile-directed feedback (PDF)) によって最適化を調整します。 その場合、条件付き分岐の近辺および頻繁に実行されるコード・セクション内の最適化が、サンプル・プログラムの実行結果を使用して改善されます。
PDF を使用する場合、次のステップに従ってください。
大きなアプリケーションでは、最適化から最も利益を得られる範囲のコードを集中的に作成します。 アプリケーションのコードすべてを -qpdf1 オプション付きでコンパイルする必要はありません。
-qpdf2 ステップで フル再コンパイルを避けたい場合、オブジェクト・ファイルが保管されるように、リンクなしで -qpdf1 を 指定して最初にコンパイルしてください。次にオブジェクト・ファイルを実行可能モジュールにリンクしてください。この 手順を使用するには、以下と同様のコマンドを発行してください。
xlf -c -qpdf1 -O2 file1.f file2.f
xlf -qpdf2 -O2 file1.o file2.o
あるいは、オブジェクト・ファイルを 1 から保管した場合、単にそれらを再リンクします。たとえば、次のコマンドを発行します。
xlf -qpdf2 -O2 file1.o file2.o
これにより、かなりの時間を 節約でき、最適化のために大規模アプリケーションを微調整できます。-qpdf2 パスで異なるオプションを 使用することにより、PDF バイナリーを異なる最適化の方法で作成し、テストできます。
最善のパフォーマンスを得るため、PDF を使用する場合は (上記の例のように) あらゆるコンパイルに -O3、-O4、または -O5 オプションを使用してください。 IBM XL C/C+ コンパイラーでコンパイルした C または C++ コードが アプリケーションに含まれている場合、これらのコンパイラーで使用可能な -qpdf1 および -qpdf2 オプションを指定して、 追加の PDF 最適化を実行することができます。 すべての Fortran および C/C++ コード上で -qpdf1/-qpdf2 と -qipa または -O5 オプションを組み合わせると (すなわち、IPA とリンクすると)、最適化に使用可能な最大 PDF 情報を もたらします。
プロファイルは現行作業ディレクトリーか、PDFDIR 環境変数が設定されている場合はその変数が指定する ディレクトリーに置かれます。
コンパイルと実行で時間を無駄にしないために、PDFDIR 環境変数には必ず絶対パスを指定してください。 そうしなかった場合、アプリケーションを誤ったディレクトリーから実行し、アプリケーションがプロファイル・データ・ファイルを 見つけられないこともあります。 その場合、プログラムが正しく最適化されなかったり、セグメント化障害によって停止する可能性があります。 セグメント化障害は、PDFDIR 変数の値を変更し、 PDF プロセスを完了する前にアプリケーションを実行した場合にも起きることがあります。
このオプションは、アプリケーション全体を 2 回コンパイルする必要があるので、 他のデバッグと調整が済んだ後、 アプリケーションを実動させる前の最終ステップの 1 つとして使用されるよう設計されています。
以下のコマンドは /opt/ibmcmp/xlf/10.1/bin ディレクトリーにあり、PDFDIR ディレクトリーの 管理に使用できます。
簡単な例を次に示します。
# 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 -O3 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 -qpdf2 -O3 file1.o file2.o file3.o file4.o
-qpdf2 を指定してソースの再コンパイルを迂回する例を次に示します。
# Set the PDFDIR variable. export PDFDIR=$HOME/project_dir # Compile source with -qpdf1. xlf -O3 -qpdf1 -c file.f # Link in object file. xlf -O3 -qpdf1 file.o # Run with one set of input data. a.out <sample.data # Link in object file from qpdf1 pass. # (Bypass source recompilation with -qpdf2.) xlf -O3 -qpdf2 file.o
pdf1 オブジェクトおよび pdf2 オブジェクトの使用の例を次に挙げます。
# Set the PDFDIR variable. export PDFDIR=$HOME/project_dir # Compile source with -qpdf1. xlf -c -qpdf1 -O3 file1.f file2.f # Link in object files. xlf -qpdf1 -O3 file1.o file2.o # Run with one set of input data. a.out <sample.data # Link in the mix of pdf1 and pdf2 objects. xlf -qpdf2 -O3 file1.o file2.o
-qphsinfo | -qnophsinfo PHSINFO | NOPHSINFO
-qphsinfo コンパイラー・オプションは、各コンパイラー・フェーズの タイミング情報を端末に表示します。
出力は、各フェーズで number1/number2 の形式をとります。 ここで、number1 はコンパイラーが使用する CPU 時間、number2 はコンパイラー時間と CPU がシステム呼び出しの処理に要する時間の合計を表します。
3 つのコンパイル単位からなる app.f をコンパイルして、コンパイルの各フェーズに要する時間をレポートするには、次のように入力します。
xlf90 app.f -qphsinfo
出力は以下のようなものになります。
FORTRAN phase 1 ftphas1 TIME = 0.000 / 0.000 ** m_module === End of Compilation 1 === FORTRAN phase 1 ftphas1 TIME = 0.000 / 0.000 ** testassign === End of Compilation 2 === FORTRAN phase 1 ftphas1 TIME = 0.000 / 0.010 ** dataassign === End of Compilation 3 === HOT - Phase Ends; 0.000/ 0.000 HOT - Phase Ends; 0.000/ 0.000 HOT - Phase Ends; 0.000/ 0.000 W-TRANS - Phase Ends; 0.000/ 0.010 OPTIMIZ - Phase Ends; 0.000/ 0.000 REGALLO - Phase Ends; 0.000/ 0.000 AS - Phase Ends; 0.000/ 0.000 W-TRANS - Phase Ends; 0.000/ 0.000 OPTIMIZ - Phase Ends; 0.000/ 0.000 REGALLO - Phase Ends; 0.000/ 0.000 AS - Phase Ends; 0.000/ 0.000 W-TRANS - Phase Ends; 0.000/ 0.000 OPTIMIZ - Phase Ends; 0.000/ 0.000 REGALLO - Phase Ends; 0.000/ 0.000 AS - Phase Ends; 0.000/ 0.000 1501-510 Compilation successful for file app.f.
各フェーズは、各コンパイル単位に対応して 3 回呼び出されます。FORTRAN はフロントエンド構文解析とセマンティック分析、 HOT はループ変換、W-TRANS は中間言語変換、OPTIMIZ は高水準最適化、REGALLO はレジスター割り振りと低水準最適化、および AS は最終アセンブリーを表します。
-qphsinfo を指定して、app.f を -O4 最適化レベルで コンパイルします。
xlf90 myprogram.f -qphsinfo -O4
出力結果は以下のようになります。
FORTRAN phase 1 ftphas1 TIME = 0.010 / 0.020 ** m_module === End of Compilation 1 === FORTRAN phase 1 ftphas1 TIME = 0.000 / 0.000 ** testassign === End of Compilation 2 === FORTRAN phase 1 ftphas1 TIME = 0.000 / 0.000 ** dataassign === End of Compilation 3 === HOT - Phase Ends; 0.000/ 0.000 HOT - Phase Ends; 0.000/ 0.000 HOT - Phase Ends; 0.000/ 0.000 IPA - Phase Ends; 0.080/ 0.100 1501-510 Compilation successful for file app.f. IPA - Phase Ends; 0.050/ 0.070 W-TRANS - Phase Ends; 0.010/ 0.030 OPTIMIZ - Phase Ends; 0.020/ 0.020 REGALLO - Phase Ends; 0.040/ 0.040 AS - Phase Ends; 0.000/ 0.000
IPA (プロシージャー間分析) 最適化フェーズ中、プログラムの結果は 1 つのコンパイル単位になることに注意してください。 つまり、すべてのプロシージャーがインライン化されます。
-qpic[=small|large]| -qnopic (in 32-bit mode) -qpic[=small|large]| -qnopic (in 64-bit mode)
-qpic コンパイラー・オプションは、共用ライブラリーで 使用できる位置独立コード (PIC) を生成します。
64 ビット・モードでは、-qpic=small がデフォルトです。
32 ビット・モードでは、-qnopic がデフォルトです。
リンカー・オプションの詳細については、ld コマンドの マニュアル・ページを参照してください。
-qport[=suboptions]| -qnoport PORT[(suboptions)]| NOPORT
-qport コンパイラー・オプションは、他の Fortran 言語拡張機能を収容するためにいくつかのオプションを 提供して、XL Fortran にプログラムを移植するときの柔軟性を高めます。 特定のサブオプションは常に、他の -qport およびコンパイラー・オプションとは独立して機能します。
この動作を期待する他の FORTRAN コンパイラーからこのアプリケーションの移植の際、-qport=clogicals オプション は便利です。ただし、プログラム間で論理データを共有するか受け渡す場合、非ゼロ整数に対して異なる設定値を使用する プログラムを混用するのは危険です。デフォルトの -qintlog 設定値を既に指定して書かれている データ・ファイルは、-qport=clogicals オプション・アクティブを指定して読み込まれた場合、予期しない動作を引き起こします。
空の引数の例を次に示します。
call foo(,,z) call foo(x,,z) call foo(x,y,)
次のプログラムには、ヌル引数が含まれます。
program nularg real(4) res/0.0/ integer(4) rc integer(4), external :: add rc = add(%val(2), res, 3.14, 2.18,) ! The last argument is a ! null argument. if (rc == 0) then print *, "res = ", res else print *, "number of arguments is invalid." endif end program
int add(int a, float *res, float *b, float *c, float *d) { int ret = 0; if (a == 2) *res = *b + *c; else if (a == 3) *res = (*b + *c + *d); else ret = 1; return (ret); }
このオプションを使用した場合、いくつかの組み込みプロシージャーの種類が 一致しないことがあります。 その種類を最も長い引数の種類に変換するには、-qxlf77=intarg を指定してください。
-qposition={appendold | appendunknown} ... POSITION({APPENDOLD | APPENDUNKNOWN} ...)
POSITION= 指定子を持たない OPEN 文の後にデータが書き込まれ、 対応する STATUS= 値 (OLD または UNKNOWN) が指定されると、 ファイル・ポインターをファイルの終わりに置きます。
デフォルト設定は OPEN 文の I/O 指定子とコンパイラー呼び出し コマンドに応じて、xlf、xlf_r、 および f77/fort77 コマンドの場合は -qposition=appendold、 xlf90、 xlf90_r、xlf95、xlf95_r、 f90、 および f95 コマンドの場合は、 定義済みの Fortran 90 および Fortran 95 の動作になります。
最初の入出力操作がファイル・ポインターを移動させ、その操作が WRITE 文または PRINT 文であると、位置は APPEND になります。 また、BACKSPACE、ENDFILE、READ、 REWIND 文であると、位置は REWIND になります。
次の例では、POSITION= 指定子を指定せずに STATUS='old' を 指定する OPEN 文は、POSITION='append' が指定されているかのように ファイルをオープンします。
xlf95 -qposition=appendold opens_old_files.f
次の例では、POSITION= 指定子を指定せずに STATUS='unknown' を 指定する OPEN 文は、POSITION='append' が指定されているかのように ファイルをオープンします。
xlf95 -qposition=appendunknown opens_unknown_files.f
次の例では、POSITION= 指定子を指定せずに STATUS='old' か STATUS='unknown' のいずれかを指定する OPEN 文は、POSITION='append' が 指定されているかのようにファイルをオープンします。
xlf95 -qposition=appendold:appendunknown opens_many_files.f
-qprefetch | -qnoprefetch
コードのパフォーマンスを向上させる機会がある場合に、プリフェッチ命令を自動的に 挿入するようにコンパイラーに指示します。
プリフェッチ・ディレクティブについて詳しくは、 「XL Fortran 言語解説書」の『PREFETCH ディレクティブ』および 「The POWER4 Processor Introduction and Tuning Guide」を参照してください。 トリガー制約を使用してプリフェッチ・ディレクティブを選択的に 制御するには、-qdirective オプションを 参照してください。
-qqcount | -qnoqcount QCOUNT | NOQCOUNT
拡張精度 Q 編集記述子 (Qw.d) だけではなく、 Q 文字カウント編集記述子 (Q) を受け入れます。-qnoqcount を使用すると、 すべての Q 編集記述子が拡張精度 Q 編集記述子として解釈されます。
コンパイラーは、Q 編集記述子を構文によって拡張精度 Q 編集記述子または Q 文字カウント編集記述子であると 解釈して、どちらの記述子が指定されるかを判別できない場合に、警告を出します。
「XL Fortran 言語解説書」の『Q (文字カウント) 編集』を参照してください。
-qrealsize=bytes REALSIZE(bytes)
REAL、DOUBLE PRECISION、 COMPLEX、および 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 言語解説書」の『型付きパラメーターおよび 指定子』では、kind 型付きパラメーターについて説明しています。
-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
xlf、xlf_r、f77、または fort77 コマンドを使用して再帰呼び出しを含むプログラムをコンパイルする場合は、-qnosave を指定して、 デフォルトのストレージ・クラスを自動的に作成します。
-qreport[={smplist | hotlist}...] -qnoreport REPORT[({SMPLIST | HOTLIST}...)] NOREPORT
プログラムを並列化する方法とループを最適化する方法を示す 変換報告書を作成するかどうかを決定します。
smplist サブオプションを使用すると、低レベルの変換が調べられるため、 SMP プログラムのパフォーマンスをデバッグしたり調整したりできます。プログラムのデータ処理方法や、ループの自動並列化方法を知ることもできます。 リスト内のコメントは、変換後のプログラムが元のソース・コードにどのように対応しているかを示したり、 特定のループが並列化されなかった理由などを示したりします。
hotlist サブオプションを使用すると、 ループの変換過程を示す報告書を生成することができます。
また、-qsmp オプションが有効なときに -qreport=hotlist オプションが指定された場合は、SMP 実行時への呼び出し、 および並列構文のために作成されたプロシージャーへの呼び出しを示す疑似 Fortran リストが作成されます。
変換リストはコンパイラー・リスト・ファイルの一部です。
ループ変換 および自動並列処理 は、-O5 (または -qipa=level=2) 最適化レベルを使用して、リンク・ステップで行われます。 -qreport オプションは、リンク・ステップで、リスト・ファイルに報告書を生成します。
ループ変換リストを生成する場合は、 -qsmp オプションか -qhot オプションを必ず指定します。 並列変換リストまたは並列パフォーマンス・メッセージを生成する場合は、 -qsmp オプションを必ず指定します。
リストに示されるコードはコンパイル可能であるというわけではありません。 プログラムにこのコードを組み込んだり、 名前がリストに出ている内部ルーチンを明示的に呼び出したりしないでください。
並列の調整に使用できるリスト・ファイルを作成するには、次のようにします。
xlf_r -qsmp -O3 -qhot -qreport=smplist needs_tuning.f
並列調整とループ・パフォーマンス調整の両方に使用できるリスト・ファイルを作成するには、次のようにします。
xlf_r -qsmp -O3 -qhot -qreport=smplist:hotlist needs_tuning.f
ループのパフォーマンスの調整に だけ使用できるリスト・ファイルを作成するには、次のようにします。
xlf95_r -O3 -qhot -qreport=hotlist needs_tuning.f
-qpdf オプションを参照してください。
-qsaa | -qnosaa SAA | NOSAA
SAA FORTRAN 言語定義に従っているかどうかをチェックします。 非準拠のソース・コード、 およびそのような非準拠を許可するオプションを識別します。
これらの警告には、言語レベル関係の問題を示すプレフィックス (L) が付きます。
-qlanglvl オプションを使用して、コードが国際標準に従っているかどうかを調べます。
-qsave[={all|defaultinit}] | -qnosave SAVE[({all|defaultinit})] NOSAVE
これには、ローカル変数の デフォルト・ストレージ・クラスを指定します。
-qsave=all を指定する場合は、デフォルト・ストレージ・クラスは STATIC です。 -qnosave を指定する場合は、デフォルト・ストレージ・クラスは AUTOMATIC です。 -qsave=defaultinit を指定する場合は、デフォルト・ストレージ・クラスは、デフォルト初期化の指定が ある派生型の変数においては STATIC、その他の場合は AUTOMATIC です。 -qsave オプションのデフォルト・サブオプションは、all です。 2 つのサブオプションは相互に排他的です。
このオプションのデフォルトは、使用される起動によって異なります。 たとえば、-qsave を指定して、FORTRAN 77 プログラムの動作を再現しなければならない場合があります。 xlf、xlf_r、f77、および fort77 コマンドは、前の動作を保持するために、 /etc/opt/ibmcmp/xlf/10.1/xlf.cfg にデフォルト・オプションとしてリストされている -qsave を持っています。
以下には、派生データ型での -qsave オプションの影響を例示しています。
PROGRAM P CALL SUB CALL SUB END PROGRAM P SUBROUTINE SUB LOGICAL, SAVE :: FIRST_TIME = .TRUE. STRUCTURE /S/ INTEGER I/17/ END STRUCTURE RECORD /S/ LOCAL_STRUCT INTEGER LOCAL_VAR IF (FIRST_TIME) THEN LOCAL_STRUCT.I = 13 LOCAL_VAR = 19 FIRST_TIME = .FALSE. ELSE ! Prints " 13" if compiled with -qsave or -qsave=all ! Prints " 13" if compiled with -qsave=defaultinit ! Prints " 17" if compiled with -qnosave PRINT *, LOCAL_STRUCT ! Prints " 19" if compiled with -qsave or -qsave=all ! Value of LOCAL_VAR is undefined otherwise PRINT *, LOCAL_VAR END IF END SUBROUTINE SUB
-qrecur オプションでコンパイルされたマルチスレッド・アプリケーション およびサブプログラムには、通常、-qnosave オプションが必要です。
このオプションが変数のストレージ・クラスにどのような影響を与えるかについては、 「XL Fortran 言語解説書」の『変数のストレージ・クラス』を参照してください。
-qsaveopt | -qnosaveopt
ソース・ファイル、およびその他の情報のコンパイルに使用するコマンド行オプションを 該当するオブジェクト・ファイルに保管します。 コンパイルでは、このオプションを有効にするためのオブジェクト・ファイルを生成する必要があります。 各オブジェクトに複数のコンパイル単位が含まれている場合であっても、コマンド行オプションの 1 コピーだけが保管されます。
使用されているオプションをリストするには、オブジェクト・ファイルに strings -a コマンドを発行します。 以下がリストされます。
opt source_type invocation_used compilation_options
たとえば、オブジェクト・ファイルが t.o である場合、strings -a t.o コマンドは、 以下のような情報を生成します。
@(#) opt f /opt/ibmcmp/xlf/10.1/bin/xlf90 -qlist -qsaveopt t.f
ここで、f は Fortran として使用されたソースを識別し、 /opt/ibmcmp/xlf/10.1/bin/xlf90 は使用された呼び出しコマンドを示し、-qlist -qsaveopt はコンパイル・オプションを示します。
-qsclk[={centi | micro}]
SYSTEM_CLOCK 組み込みプロシージャーがプログラム内で使用するレゾリューションを指定します。 デフォルトは、センチ秒レゾリューション (-qsclk=centi) です。 マイクロ秒レゾリューションを使用するには、-qsclk=micro を指定します。
リアルタイム・クロックからの整数データの戻りに関する詳細については、「XL Fortran 言語解説書」の 『SYSTEM_CLOCK』を参照してください。
-qshowpdf | -qnoshowpdf
-qpdf1 および -O の最小最適化レベルとともに使用して、追加の呼び出しとブロック数プロファイル情報を 実行可能ファイルに追加します。
-qpdf1 とともに指定すると、コンパイラーは、追加のプロファイル情報をコンパイル済みアプリケーションに 挿入して、アプリケーション内のすべてのプロシージャーに対する呼び出しおよびブロック数を収集します。 コンパイル済みアプリケーションを実行すると、呼び出しおよびブロック数を ._pdf ファイルに 記録します。
トレーニング・データを使用してアプリケーションを実行した後で、showpdf ユーティリティーを 使用して ._pdf ファイルの内容を検索することができます。 このユーティリティーについては、-qpdf オプションで説明します。
-qsigtrap[=trap_handler]
メインプログラムが入っているファイルをコンパイルするときに、このオプションは、指定された トラップ・ハンドラーをセットアップして SIGTRAP および SIGFPE 例外をキャッチします。 このオプションを使用すれば、プログラム内の SIGNAL または SIGFPE サブプログラムを呼び出さなくても、SIGTRAP シグナル用にハンドラーを インストールすることができます。
xl__trce トラップ・ハンドラーを使用可能にするには、 ハンドラー名なしで -qsigtrap を指定してください。 別のトラップ・ハンドラーを使用可能にするには、 -qsigtrap オプションでそのハンドラー名を指定してください。
別のハンドラーを指定する場合は、 それが入っているオブジェクト・モジュールが プログラムとリンクされていることを確認してください。 XL Fortran によって提供されるトラップ・ハンドラーより生成されるトレースバック内の 詳細情報 (xl__trce など) を表示するには、-qlinedebug または -g オプションを指定します。
-qsmallstack[=[no]dynlenonheap]
| -qnosmallstack
可能な限りコンパイラーがスタック使用を最小化するように指定します。
このコンパイラー・オプション 2 つの相異なる、しかし関連した変換の セット (一般小スタック変換および動的長さ変数割り振り変換) を制御します。これらの 2 種類の変換は互いに独立して 制御できます。
デフォルトで、-qnosmallstack は、すべてのサブオプションがオフであることを暗黙指定されます。
-qsmallstack=dynlenonheap サブオプションは、非定数の文字長または非定数の配列境界 (DYNamic LENgth ON HEAP) を持つ自動オブジェクトに影響を与えます。 指定すると、これらの自動変数はヒープ上に割り振られます。 このサブオプションを指定しないと、これらの自動変数はスタック上に割り振られます。
このオプションの使用によりプログラム・パフォーマンスに逆に作用することがあるので、 スタックに大量のデータを割り振るプログラム用にのみ使用する必要があります。
-qsmp[=suboptions]
-qnosmp
コードを SMP システムに対応するようにして生成すべきかどうかを示します。 デフォルトでは、単一処理装置マシンを想定してコードを生成します。このオプションを指定した場合、 コンパイラーはトリガー定数 SMP$、$OMP、 および IBMP にあるすべてのディレクティブを認識します (ただし omp サブオプションを指定した場合は認識されません)。
すべてのスレッド・セーフ・コンポーネントで自動的にリンクを 行うものは、xlf_r、 xlf90_r 、およびxlf95_r 呼び出しコマンドのみです。 xlf、 xlf90、xlf95、f77、および fort77 呼び出しコマンドと一緒に -qsmp オプションを使用することもできますが、 適切なコンポーネントにリンクさせるのはユーザー側の責任で行います。 -qsmp オプションを使ってプログラム内のソース・ファイルをコンパイルする場合、 ld コマンドを使ってリンクしない限り、 リンク時に -qsmp も一緒に指定する必要があります。
nested_par サブオプションを設定しても、 これは OpenMP API に従っているわけではないことに注意してください。このサブオプションを指定する場合、ランタイム・ライブラリーは、 PARALLEL 構文を囲むのに使用したのと同じスレッドを、ネストされた PARALLEL DO および PARALLEL SECTIONS 構文にも使用します。
C プリプロセッサーの起動時に このオプションを指定すると、_OPENMP C プリプロセッサー・マクロも自動的に 値 200505 と一緒に定義されます。 これは、条件付きコンパイルをサポートするのに役立ちます。 このマクロは、C プリプロセッサーの呼び出し時にのみ定義されます。
詳細については、「XL Fortran 言語解説書」の言語エレメントの節の 『条件付きコンパイル』を参照してください。
デフォルトは、norec_locks または正規のロックです。
スレッドが解放されると、スレッドが最初に割り当てられた区画から次のチャンクを取ります。 その区画の中にチャンクが 1 つも無くなったら、最初に別のスレッドに割り当てられた区画から使用可能な 次のチャンクを探します。
スリープ状態のスレッドに最初から割り当てられていた区画の処理は、活動状態にある別の スレッドにより完了されます。
活動状態のスレッドがチャンクに割り当てられる仕方は、「先着順実行」の原則に基づいています。 残りの処理のチャンクは、すべての処理の割り当てが終了するまで、活動状態のスレッドに割り当てられていきます。
スリープ状態のスレッドに割り当てられた処理は、そのスレッドが使用可能にならない限り、活動状態の 別のスレッドに引き継がれます。
最初のチャンクには CEILING(number_of_iterations / number_of_threads) 回の反復が含まれます。 次のチャンクには CEILING(number_of_iterations_left / number_of_threads) 回の反復が含まれます。 活動状態のスレッドがチャンクに割り当てられる仕方は、「先着順実行」の原則に基づいています。
n を指定しない場合、チャンクには CEILING (number_of_iterations / number_of_threads) 反復が入ります。 各スレッドは、これらのチャンクのいずれかに割り当てられます。 これをブロック・スケジューリング と言います。
スリープ状態のスレッドに処理が割り当てられている場合、 その処理を完了できるようにするため、 そのスレッドは活動状態にさせられます。
チャンク入れのアルゴリズムと SCHEDULE の詳細については、 「XL Fortran 言語解説書」の『ディレクティブ』という節を参照してください。
-qsmp=noopt サブオプションは、プログラムのパフォーマンスに影響することがあります。
-qsmp を指定してある状態では、 特定のサブオプションの前後に omp サブオプションを指定することはできません。 omp を使用してそれらのサブオプションを指定しようとする場合、 コンパイラーは警告メッセージを発行します。
-qsmp=noopt サブオプションは、コマンド行上のどこにあっても、パフォーマンス最適化オプションを オーバーライドします (-qsmp の前に -qsmp=noopt が現れる場合以外は)。 次の例では、-qsmp=noopt の後にあるすべての最適化オプションが、通常の有効範囲と優先順位の規則に従って 処理されることを示します。
例 1
xlf90 -qsmp=noopt -O3... is equivalent to xlf90 -qsmp=noopt...
例 2
xlf90 -qsmp=noopt -O3 -qsmp... is equivalent to xlf90 -qsmp -O3...
例 3
xlf90 -qsmp=noopt -O3 -qhot -qsmp -O2... is equivalent to xlf90 -qsmp -qhot -O2...
次を指定すると、コンパイラーは $OMP ディレクティブ・トリガーと SMP$ ディレクティブ・トリガーの 両方を認識し、いずれかのトリガーで指定したディレクティブが OpenMP では許可されていない場合に警告を発行します。
-qsmp=omp -qdirective=SMP$
次を指定すると、noauto サブオプションが使用されます。 コンパイラーは警告メッセージを出し、auto サブオプションを無視します。
-qsmp=omp:auto
以下の例では、CRITICAL 構文が原因で生じるデッドロックを回避するために、 -qsmp=rec_locks を指定する必要があります。
program t integer i, a, b a = 0 b = 0 !smp$ parallel do do i=1, 10 !smp$ critical a = a + 1 !smp$ critical b = b + 1 !smp$ end critical !smp$ end critical enddo end
xlf、xlf_r、f77、 または fort77 コマンドを -qsmp オプションと一緒に使用して プログラムをコンパイルする場合は、デフォルト・ストレージ・クラスを自動的に 作成するために -qnosave を指定し、スレッド・セーフ・コードを生成するよう コンパイラーに指示するために -qthreaded を指定します。
-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=bytes SPILLSIZE(bytes)
-qspillsize は -NS の長い形式です。 -NS オプションを参照してください。
-qstacktemp={0 | -1 | positive signed integer value} STACKTEMP={0 | -1 | positive signed integer value}
実行時に適用できる XL Fortran コンパイラーのテンポラリー (temporary) をどこに割り振るかを判別します。
適当なコンパイラーのテンポラリー (temporary) は、安全にこれらを適用できるとコンパイラーが判別するとき、 コンパイラーが自身の使用のため、自身により作成された一連の一時変数です。 もっとも一般的には、アレイ言語セマンティクス用の XL Fortran アレイのコピーを保持するため、コンパイラーは これらの種類のテンポラリー (temporary) を (組み込み関数またはユーザー・サブプログラムと連動して) 作成します。大規模アレイを 利用するプログラムを所有している場合、それらを実行するときスタック・スペースのオーバーフローを防ぐためこの オプションを使用する必要があります。たとえば、スタック・スペースにより拘束される SMP または OpenMP アプリケーション の場合、これらのオプションを使用してコンパイラーのテンポラリー (temporary) をスタックからのヒープに移動できます。
コンパイラーは、アプリケーションが実行しているとき、スタックの限界が越えられているか否かを検出できません。ご使用 のアプリケーション用に作動する設定値を見つける前に、いくつかの設定値を経験する必要があります。現在の設定値を オーバーライドするには、新規の設定値を指定する必要があります。
使用できるサブオプションは、次のとおりです。
-qstrict | -qnostrict STRICT | NOSTRICT
デフォルトにより -O3、-O4、および -O5 オプションで行われた最適化 と、オプショナルで -O2 オプションで行われた最適化によって、プログラムのセマンティクスが 変更されないようにします。
-O3、-O4、および -O5 の場合、 デフォルトは -qnostrict です。 -O2 の場合、デフォルトは -qstrict です。 このオプションは、-qnoopt の場合は無視されます。 -qnostrict では、最適化はコードを再調整して、結果または例外が、最適化されていない プログラムのものとは異なるようにします。
このオプションは、最適化されているプログラムでのプログラムの実行における変更が、 最適化されていないプログラムの場合とは異なった結果を発生させる状況を意図したオプションです。 IEEE 浮動小数点算術計算用のほとんど使用されない規則と関連があるので、 このような状況はめったに発生しません。
-qnostrict が有効である場合は、-qstrict も指定されていない限り、以下の 最適化がオンになります。
-O オプション、-qhot オプション、および -qfloat オプションを参照してください。
-qstrictieeemod | -qnostrictieeemod STRICTIEEEMOD | NOSTRICTIEEEMOD
ieee_arithmetic および ieee_exceptions 組み込み モジュール用の Fortran 2003 IEEE 演算規則を コンパイラーに順守させるかどうかを指定します。 -qstrictieeemod を指定すると、コンパイラーは、次の規則を順守します。
上記の規則はパフォーマンスに影響を与えるため、-qnostrictieeemod を指定すると、 浮動小数点状況を保存したり、復元したりする規則から解放されます。 これは関連するパフォーマンスの影響を防ぎます。
-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=option=suffix
xlf.cfg ファイルの代わりに、コマンド行でソース・ファイルのサフィックスを指定します。 このオプションを使用すれば、makefile の名前をほんの少し修正するだけでファイルを使用でき、無駄な時間を 節約できるだけでなく、xlf.cfg ファイルの修正に関連した問題のリスクを削減できます。 どのファイル・タイプの場合にも、 1 度に 1 つの設定だけがサポートされます。
以下に例を示します。
xlf a1.f2k a2.F2K -qsuffix=f=f2k:cpp=F2K
これにより、以下の効果があります。
-qsuppress[=nnnn-mmm[:nnnn-mmm ...] | cmpmsg]
-qnosuppress
このサブオプションは、出力されるエラー・メッセージには影響しません。
状況によっては、非常に多くのコンパイラー・メッセージがユーザーに送られてくることがあります。 多くの場合、これらのコンパイラー・メッセージには重要な情報が示されています。 しかし、そのようなメッセージの中には冗長なものや、まったく無視して問題がないものもあります。 コンパイル時に複数のエラーや警告メッセージが表示された場合は、どのメッセージに注意を払うべきか 非常に判断の難しい場合があります。 -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 | -qnoswapomp SWAPOMP | NOSWAPOMP
コンパイラーが、XL Fortran プログラムにある OpenMP ルーチンを認識して置換するように指定します。
Fortran と C の OpenMP ルーチンには、別々のインターフェースがあります。 OpenMP ルーチンを使用する複数言語アプリケーションをサポートするには、コンパイラーは OpenMP ルーチン名を認識し、 そうしたルーチンの他のインプリメンテーションが存在しているかどうかにかかわらず、 そのルーチンを XL Fortran バージョンのルーチンに置換する必要があります。
コンパイラーは、-qnoswapomp オプションを指定すると、 OpenMP ルーチンの置換は実行しません。
-qswapomp および -qnoswapomp オプションは、 プログラムに存在する OpenMP ルーチンを参照する Fortran サブプログラムだけに影響を与えます。
次の例では、OpenMP ルーチンが INTERFACE 文で宣言されます。
@PROCESS SWAPOMP INTERFACE FUNCTION OMP_GET_THREAD_NUM() INTEGER OMP_GET_THREAD_NUM END FUNCTION OMP_GET_THREAD_NUM FUNCTION OMP_GET_NUM_THREADS() INTEGER OMP_GET_NUM_THREADS END FUNCTION OMP_GET_NUM_THREADS END INTERFACE IAM = OMP_GET_THREAD_NUM() NP = OMP_GET_NUM_THREADS() PRINT *, IAM, NP END
「XL Fortran 言語解説書」にある『OpenMP 実行環境ルーチンおよびロック・ルーチン』の節を参照してください。
-qtbtable={none | small | full}
オブジェクト・ファイル内のトレースバック情報のデバッグ量を制限し、 プログラムのサイズを小さくします。
このオプションを使用して、プログラムを小さくすることができます。 その代わりデバッグは難しくなります。 実動ステージに到達しているときにできるだけコンパクトなプログラムを作成したい場合は、 -qtbtable=none を指定することができます。 そうでない場合は、通常のデフォルトが適用されます。 この場合、-g を指定してコンパイルされたコードや -O を指定しないでコンパイルされたコードには トレースバックの全情報が入り (-qtbtable=full)、 -O を指定してコンパイルされたコードにはそれよりも小さなトレースバック情報が入ります (-qtbtable=small)。
多くの長いプロシージャー名 (モジュール・プロシージャー用に作成された内部名など) が入っているプログラムには、 このオプションが非常に適しています。 Fortran プログラムよりも C++ プログラムに対する方が適用度が高い場合があります。
-qthreaded
コンパイラーがこのオプションを使用することにより、 スレッド・セーフ・コードを生成する必要があるのはいつかを判断します。
-qthreaded オプションを指定しても、 -qnosave オプションも暗黙的に指定されるということはありません。 -qnosave オプションは、 ユーザー・ローカル変数のデフォルト時自動ストレージ・クラスを指定するものです。 一般に、スレッド・セーフなコードを生成するには、これらの両方のオプションを使用する必要があります。 これらのオプションを指定すると、コンパイラーによって作成される変数およびコードが スレッド・セーフであることを確実にしますが、ユーザー作成のコードのスレッド・セーフティーは保証しません。 サブプログラム用に代替エントリー・ポイントを持つため ENTRY 文、およびコンパイル 用に xlf_r コマンドを使用する場合、スレッド・セーフであるために -qxlf77=nopersistent オプション も指定してください。適切なロック機構もインプリメントする必要があります。
-qthreaded は、xlf90_r、 xlf95_r、 および xlf_r コマンド用の デフォルトです。
-qthreaded オプションを指定すると -qdirective=ibmt が暗黙指定されますが、 デフォルトでは trigger_constant IBMT が認識されます。
-qtune=implementation
ハードウェア・アーキテクチャーの特定のインプリメンテーションに対する命令の選択、 スケジューリング、その他のインプリメンテーションに依存するパフォーマンス拡張機能を調整します。 コンパイラーは、ターゲット・アーキテクチャーと 互換性のある -qtune 設定を使用します。 これは、-qarch、-q32、および -q64 オプション によって制御されます。
プログラムを複数のアーキテクチャーで稼動させるけれど、特定のアーキテクチャーで調整したい場合は、 -qarch および -qtune オプションを組み合わせて使用することができます。 これらのオプションは、基本的には 浮動小数点中心のプログラムに有効です。
キャッシュ・サイズおよびパイプラインなどのハードウェア・フィーチャーを 最大限に活用するように、生成されたマシン・インストラクションを配置 (スケジューリング) することによって、-qtune オプションは パフォーマンスを改善することができます。 このオプションは、最適化を使用可能にするオプションと組み合わせて使用した場合にのみ 効果があります。
-qtune 設定を変更すると、 その結果作成される実行可能ファイルのパフォーマンスに影響する場合がありますが、 実行可能ファイルが特定のハードウェア・プラットフォーム上で正しく実行できるかどうかには、まったく影響を与えません。
選択項目は次のとおりです。
-qtune を指定しないと、設定は -qarch オプションによって 決定されます。
-qarch 設定 | 許可されている -qtune 設定 | デフォルトの -qtune 設定 |
---|---|---|
ppc |
-qarch=ppc64 エントリーで、 受け入れ可能な -qtune 設定のリストを参照してください。 |
pwr4 |
ppcgr |
-qarch=ppc64gr エントリーで、 受け入れ可能な -qtune 設定のリストを参照してください。 |
pwr4 |
ppc64 | rs64b、 rs64c、 pwr3、 pwr4、 pwr5、 ppc970、 auto | pwr4 |
ppc64gr | rs64b、 rs64c、 pwr3、 pwr4、 pwr5、 ppc970、 auto | pwr4 |
ppc64grsq | rs64b、 rs64c、 pwr3、 pwr4、 pwr5、 ppc970、 auto | pwr4 |
rs64b | rs64b、 auto | rs64b |
rs64c | rs64c、 auto | rs64c |
pwr3 | pwr3、 pwr4、 pwr5、 ppc970 、 auto | pwr3 |
pwr4 | pwr4、 pwr5、 ppc970 、 auto | pwr4 |
pwr5 | pwr5、 auto | pwr5 |
pwr5x | pwr5、 auto | pwr5 |
ppc970 | ppc970、 auto | ppc970 |
これで、-qtune サブオプションと互換性のあるマシン上で コンパイルしている限り、-qarch=auto とともに -qtune サブオプションを指定できるように なりました。 たとえば、-qarch=auto と -qtune=pwr5 を 指定する場合、POWER3、POWER4、または POWER5 マシン上でコンパイルする必要があります。
-qundef | -qnoundef UNDEF | NOUNDEF
-qundef は、-u オプションの長い形式です。
-qunroll[=auto | yes] | -qnounroll
DO ループのアンロールをプログラム内で許可するかどうかを指定します。 アンロールは、外部および内部 DO ループで許可されます。
ループをアンロールすることに決定した場合、上記のサブオプションの 1 つを指定することが自動的に、 コンパイラーがその操作を実行することを保証するわけではありません。 パフォーマンス上の利点を考慮して、コンパイラーはプログラムにとってアンロールが有利かどうかを 判断します。 熟練したコンパイラー・ユーザーは、前もって有利かどうかを判断できるようであるべきです。
STREAM_UNROLL、UNROLL、 または 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
でループのアンロールの該当するディレクティブを参照してください。
『ハイ・オーダー変換 (HOT) の利点』を参照してください。
-qunwind |-qnounwind UNWIND | NOUNWIND
プロシージャー呼び出し中に、コンパイラーが、揮発性レジスターの保存と復元のデフォルト動作を保持するように指定します。 -qnounwind を指定すると、コンパイラーは、サブプログラムを再調整して、 揮発性レジスターの保存と復元を最小化します。 この再調整により、プログラムまたはデバッガーがサブプログラム・スタック・フレーム・チェーン をウォークスルーまたは「アンワインド」するのを不可能にする場合があります。
コードのセマンティクスが保持されている間は、保存と復元のデフォルト動作に依存する例外ハンドラーのような アプリケーションは、未定義の結果を生成する可能性があります。 -qnounwind を -g コンパイラー・オプションと結合して使用するときは、 例外処理操作に関するデバッグ情報は、プログラム・スタックをアンワインドするとき不正確になる可能性があります。
-qversion | -qnoversion
起動されているコンパイラーのバージョンとリリースを表示します。
コンパイラー・コマンドで、このオプションを単独で指定します。 たとえば、次のようになります。
xlf90 -qversion
-qwarn64 | -qnowarn64
32 ビット環境から 64 ビット環境へのコードの移植の際に役立ちます。 つまり、8 バイト整数ポインターの 4 バイトへの切り捨てが検出されます。 -qwarn64 オプションでは、通知メッセージを 使用して、32 ビットから 64 ビットへのマイグレーションで 問題の原因となり得る文が識別されます。
-qxflag=dvz
-qxflag=dvz を指定すると、コンパイラーは、浮動小数点ゼロ除算演算を検出するコードを生成します。
このオプションは、最適化レベル -O 以上を指定した場合にのみ有効です。
このオプションをオンにした場合、除数がゼロのとき、追加のコードは外部ハンドラー関数 __xl_dzx を呼び出します。 この関数の戻り値は、除算の結果として使用されます。 ユーザーは、ゼロ除算演算を処理するための関数を指定する必要があります。 -qxflag=dvz を指定すると、単精度 (REAL*4) および倍精度 (REAL*8) 除算のみが処理されます。
関数のインターフェースは次のとおりです。
real(8) function __xl_dzx(x, y, kind_type) real(8), value :: x, y integer, value :: kind_type end function
上記の意味は次のとおりです。
ゼロと等しい kind_type 値は、x および y に関連付けられた実引数が REAL(8) 型であることを示します。 1 と等しい kind_type 値は、x および y に関連付けられた実引数が REAL(4) 型であることを示します。
除算は常に、ハンドラー・ルーチンが呼び出される前に実行されます。 すなわち、例外はハンドラー関数が呼び出される前に通知および処理されます。
-qxflag=oldtab XFLAG(OLDTAB)
桁 1 から 5 のタブを単一文字として 解釈します (固定ソース形式のプログラムの場合)。
デフォルトでは、コンパイラーはソース行の桁 6 の後に 66 文字の有効文字を許可します。 桁 1 から 5 のタブは、桁カウンターを桁 6 の後に移動する適切な数のブランクであると解釈されます。 行番号またはその他のデータを桁 73 から 80 に含んでいる従来の Fortran の慣例に従っている方には、このデフォルトは便利です。
-qxflag=oldtab オプションを指定しても、ソース・ステートメントは依然としてタブの直後に 始まりますが、タブ文字は桁をカウントするための単一の文字として処理されます。 この設定を使用すれば、最大 71 文字の入力を行うことができます。 文字数はタブ文字が発生する場所によって異なります。
-qxlf77=settings XLF77(settings)
変更された言語セマンティクスと I/O データ形式について、 FORTRAN 77 との互換性を提供します。 これらの変更のほとんどは、Fortran 90 標準で必要です。
デフォルトでは、コンパイラーはあらゆる場合に Fortran 95、Fortran 90、および最新バージョンの コンパイラーに適用される設定を使用します。 したがって、デフォルトのサブオプションは、blankpad、nogedit77、nointarg、 nointxor、leadzero、nooldboz、nopersistent、nosofteof です。 ただし、これらのデフォルトは、新しいプログラムのコンパイルに 使用しなければならない xlf95、xlf95_r、xlf90、xlf90_r、f90、 および f95 コマンドのみによって使用されます。
前のプログラムを変更しないでコンパイルして実行する場合のみ、適切な呼び出しコマンドを引き続き 使用しても、このオプションを意識する必要はありません。 このオプションについては、Fortran 90 または Fortran 95 で既存のソース またはデータ・ファイルを使用し、xlf90、 xlf90_r、 xlf95、 xlf95_r、 f90、 または f95 コマンドを使用する場合で、動作またはデータ形式が 変更されたために一部の互換性が失われる場合にのみ必要です。 最終的には、古い動作への依存性を除去するために、データ・ファイルを 再作成するか、またはソース・ファイルを変更できなければなりません。
XL Fortran バージョン 2 の動作におけるさまざまな面を理解するために、以下の サブオプションの 1 つ以上に対してデフォルト以外の選択項目を選んでください。 説明には、デフォルト以外の選択項目を指定した場合に生じる事柄が記載されています。
それ以外の場合、.XOR. 演算子は定義された 演算子としてのみ認識されます。組み込み演算はアクセス不能で、 優先順位は、演算子が単項コンテキストで使用されているか、 それともバイナリー・コンテキストで使用されているかによって異なります。
-qxlf90={settings} XLF90({settings})
Fortran 言語上の理由で、 Fortran 90 標準との 互換性を提供します。
-qxlf90 のデフォルトのサブオプションは、指定する呼び出しコマンドによって異なります。 f95、xlf95 または xlf95_r コマンドの場合、デフォルトのサブオプションは signedzero と autodealloc です。 他のすべての呼び出しコマンドでは、デフォルトは nosignedzero と noautodealloc です。
このサブオプションでは、以下の場合に負符号 (-) が印刷されるかどうかも決定します。
次のプログラムを見てください。
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 |
-qxlines | -qnoxlines XLINES | NOXLINES
桁 1 に X を持つ固定ソース形式行がコンパイルされるか、コメントとして扱われるかを指定します。 このオプションは、条件付きコンパイル (デバッグ) 文字として、桁 1 に文字「d」を認識するのに似ています。 -D オプションは、このコンパイラー・オプションが使用可能なとき、条件付きコンパイル文字として 桁 1 に文字「x」を認識します。桁 1 の「x」は、ブランクとして解釈され、 その行はソース・コードとして処理されます。
このオプションは、デフォルトで -qnoxlines に設定され、固定ソース形式で桁 1 に文字「x」が ある行はコメント行として扱われます。 -qxlines オプションは、-D から独立しているので、条件付きコンパイル文字として 「d」を使用するのに適用するデバッグ行の規則は、条件付きコンパイル文字「x」にも適用します。 -qxlines コンパイラー・オプションは、固定ソース形式にのみ適用可能です。
条件付きコンパイル文字「x」および「d」は、固定ソース形式プログラムと継続されるソース行内で 混用することが可能です。 条件付きコンパイル行が、次の行に継続する場合は、すべての継続行には、桁 1 に「x」または 「d」が存在している必要があります。 継続されるコンパイル・ステートメントの最初の行が、桁 1 の「x」 または「d」のいずれで始まるデバッグ行ではない場合は、後続の継続行は、そのステートメントが構文的に正しい限り、 デバッグ行として指定されます。
OMP 条件付きコンパイル文字「!$」、「C$」、および「*$」は、固定ソース形式および継続される ソース行内の両方で、条件付き文字「x」および「d」と混用することができます。 OMP 条件付き文字の規則は、このインスタンスでまだ 適用されます。
-qxlines の基本ケースの例は以下のとおりです。
C2345678901234567890 program p i=3 ; j=4 ; k=5 X print *,i,j X + ,k end program p <output>: 3 4 5 (if -qxlines is on) no output (if -qxlines is off)
この例では、条件付きコンパイル文字「x」および「d」は、最初の行の「x」と混用されています。
C2345678901234567890 program p i=3 ; j=4 ; k=5 X print *,i, D + j, X + k end program p <output>: 3 4 5 (if both -qxlines and -qdlines are on) 3 5 (if only -qxlines is turned on)
ここでは、条件付きコンパイル文字「x」および「d」は、最初の行の「d」と混用されています。
C2345678901234567890 program p i=3 ; j=4 ; k=5 D print *,i, X + j, D + k end program p <output>: 3 4 5 (if both -qxlines and -qdlines are on) 3 5 (if only -qdlines is turned on)
この例では、最初の行はデバッグ行ではありませんが、継続行は、桁 1 に「x」があるので、デバッグ行として 解釈されます。
C2345678901234567890 program p i=3 ; j=4 ; k=5 print *,i X + ,j X + ,k end program p <output>: 3 4 5 (if -qxlines is on) 3 (if -qxlines is off)
-D オプションと、「XL Fortran 言語解説書」の 言語エレメントの節にある『条件付き コンパイル』を参照してください。
-qxref[=full] | -qnoxref XREF[(FULL)] | NOXREF
属性の相互参照コンポーネントおよびリストの相互参照セクションを作成するかどうかを決定します。
-qxref だけを指定すると、使用される識別子だけが報告されます。 -qxref=full を指定すると、使用されてもされなくても、 プログラム内にあるすべての識別子に関する情報がリストに含まれます。
-qxref=full の後に -qxref が指定されても、 完全な相互参照リストが依然として作成されます。
デバッグ中に相互参照リストを使用して、問題 (変数の定義前使用や変数名の誤入力など) を見つけることができます。
リストとメッセージを制御するオプションおよび 属性および相互参照セクションを参照してください。
-qzerosize | -qnozerosize ZEROSIZE | NOZEROSIZE
サイズがゼロの文字ストリングおよび配列の検査を行わせないことによって、 FORTRAN 77 プログラムと、一部の Fortran 90 および Fortran 95 プログラムのパフォーマンスを向上させます。
このようなオブジェクトを処理する可能性がある Fortran 90 および Fortran 95 プログラムの場合は、-qzerosize を 使用します。 サイズがゼロのオブジェクトを使用できない FORTRAN 77 プログラムや、それらを使用しない Fortran 90 および Fortran 95 プログラムの場合は、-qnozerosize でコンパイルすると、いくつかの配列演算または 文字ストリング演算のパフォーマンスを改善することができます。
デフォルト設定は、どのコマンドでコンパイラーを呼び出すかによって 異なります。 xlf90、 xlf90_r、 xlf95、 xlf95_r、 f90、 および f95 コマンドの場合は -qzerosize で、xlf、xlf_r、 および f77/fort77 コマンドの場合は -qnozerosize です。 (FORTRAN 77 との互換性のため)
-C オプションが実行する実行時検査は、 -qzerosize が有効であると、時間が多少長くかかります。
-S
個々の Fortran ソース・ファイルに対して同等のアセンブラー・ソースを示す 1 つ以上の .s ファイルを作成します。
このオプションが指定されると、コンパイラーは、 オブジェクト・ファイルまたは実行可能ファイルの代わりに、 出力ファイルとしてアセンブラー・ソース・ファイルを作成します。
作成されたアセンブラー・ファイルには、 -qipa オプションまたは -g オプションによって .o ファイルに入れられたすべてのデータが入っているわけではありません。
xlf95 -O3 -qhot -S test.f # Produces test.s
-o オプションを使用すれば、その結果作成されるアセンブラー・ソース・ファイルの名前を指定できます。
アセンブラー言語形式については、 「Assembler Language Reference」を参照してください。
-tcomponents
-B オプションで指定されたプレフィックスを、指定されたコンポーネントに適用します。 components には、分離文字なしで 1 つ以上の a、 F、 c、 h、 I、 b、 z、 l、または d を指定でき、それぞれアセンブラー、C プリプロセッサー、コンパイラー、配列言語最適化プログラム、プロシージャー間分析 (IPA) ツール/ループ、コード生成プログラム、バインド・プログラム、リンカー、および -S 逆アセンブラーに対応します。
-t が指定されないと、プレフィックス -B がすべてのコンポーネントに適用されます。
Component -t Standard Program Name Mnemonic
assembler a as
C preprocessor F cpp
compiler front end c xlfentry
array language optimizer h xlfhot
IPA/loop optimizer I ipa
code generator b xlfcode
binder z bolt
linker l ld
disassembler d dis
-B オプション (この項には例も記載されています)。
-U
MIXED | NOMIXED
コンパイラーが、名前内の文字の大文字と小文字を区別するようにします。
Fortran 名はデフォルト時にはすべて小文字であり、 C 言語およびその他の言語の名前は大文字と小文字が混在してもかまいません。 混合言語プログラムを書く際にこのオプションを使用することができます。
-U が指定される場合は、名前の大文字と小文字の区別が重要です。 たとえば、Abc という名前と ABC という名前は別々のオブジェクトを参照します。
このオプションは、コンパイル単位間の呼び出しを解決するのに使用されるリンク名を変更します。 また、モジュールの名前に影響を与え、したがって、 .mod ファイルの名前にも影響を与えます。
デフォルトでは、コンパイラーは、すべての名前を小文字であるかのように解釈します。 たとえば、Abc と ABC はどちらも abc であると解釈され、 したがって、同じオブジェクトを参照します。
-U が有効な場合は、組み込み機能の名前はすべて小文字でなければなりません。 小文字でない場合は、コンパイラーはエラーを送出しなくても名前を受け入れることはできますが、 それらを組み込み関数ではなく外部プロシージャーの名前であると判断します。
これは、-qmixed の短い形式です。 -qmixed オプションを参照してください。
-u
UNDEF | NOUNDEF
変数名の暗黙の型指定が許可されないことを指定します。 これには、暗黙の文を許可する個々の有効範囲に含まれる IMPLICIT NONE 文を 使用するときと同じ効果があります。
デフォルト時には、暗黙のタイプ指定は許可されます。
「XL Fortran 言語解説書」の『IMPLICIT』を参照してください。
これは、-qundef の短い形式です。 -qundef オプションを参照してください。
-v
コンパイルの進捗状況を生成します。
コンパイラーがコマンドを実行してさまざまなコンパイル・ステップを実行するときに、このオプションは、 コンパイラーが呼び出すコマンドおよび、コンパイラーが渡すシステム引数リストのシミュレーションを 表示します。
特定のコンパイルの関して、このオプションが生成する出力を調べると、次の事項を判別するのに役立ちます。
-# オプション は -v と似ていますが、 実際にはどのコンパイル・ステップも実行しません。
-V
表示から直接切り貼りによってコマンドを作成できるという点を除き、このオプションは -v と同じです。
-Wcomponent,options
リストされたオプションを、コンパイル中に実行されるコンポーネントに渡します。component は、a、F、 c、h、I、b、z、l、または d の 1 つで、 それぞれアセンブラー、C プリプロセッサー、コンパイラー、配列言語最適化プログラム、プロシージャー間分析 (IPA) ツール/ループ、 コード生成プログラム、バインド・プログラム、リンカー、 および -S 逆アセンブラーに対応します。
Component -W Standard Program Name Mnemonic
assembler a as
C preprocessor F cpp
compiler front end c xlfentry
array language optimizer h xlfhot
IPA/loop optimizer I ipa
code generator b xlfcode
binder z bolt
linker l ld
disassembler d dis
-W オプションの後に続いているストリングでは、各オプションに対して分離文字としてコンマを使用し、スペースは入れないでください。たとえば、次のように指定します。
-Wcomponent,option_1[,option_2,...,option_n]
このオプションの主な目的は、コンパイラー・オプションのシーケンスを作成して、最適化プリプロセッサーの 1 つに渡すことです。 また、ld コマンドにパラメーターを渡すことによって、リンク・エディット・ステップを微調整するのにも 使用できます。
ほとんどのオプションは、リンカーに渡す際に -W オプションを使用する必要はありません。 -q オプション以外の認識されないコマンド行オプションは、自動的にリンカーに渡されるからです。 -W (または構成ファイル内の ldopts スタンザ) が 絶対に必要なオプションは、コンパイラー・オプションと同じ文字を持つリンカー・オプション (たとえば -v または -S) のみです。
オプション・ストリング内のシェルに特有の文字を入れる必要がある場合は、 その文字の前にバックスラッシュを置いてください。
コマンド行オプションの「ld」または「as」コマンドへの引き渡しを参照してください。
¥ を使用して、-W オプションで提供されたストリングに リテラル・コンマを組み込むことができます。
次の例の ¥ は、-WF ストリングにリテラル・コンマを組み込み、4 つではなく、3 つ の引数が生じ、C プリプロセッサーに提供されます。
$ xlf -qfree=f90 '-WF,-Dint1=1,-Dint2=2,-Dlist=3¥,4' a.F $ cat a.F print *, int1 print *, int2 print *, list end
プログラムからの出力は以下のとおりです。
$ ./a.out 1 2 3 4
-w
-qflag オプションの同義語です。-qflag=e:e を設定して、 言語レベル検査によって生成されるメッセージだけではなく、 警告メッセージおよび通知メッセージも抑止します。
-y{n | m | p | z} IEEE(Near | Minus | Plus | Zero)
コンパイル時に定数浮動小数点式を評価するときにコンパイラーが使用する丸めモードを指定します。 これは -qieee オプションと同等です。
-O オプションおよび -qfloat オプション を参照してください。
-y は -qieee オプションの短い形式です。