XL Fortran for AIX V8.1.1

ユーザーズ・ガイド


XL Fortran プログラムのコンパイル

ソース・プログラムをコンパイルするには、xlf90xlf90_rxlf90_r7xlf95xlf95_rxlf95_r7xlfxlf_rxlf_r7f77、あるいは fort77 コマンドを次の形式で使用します。

|                 .----------------------------------.
|                 V                                  |
|>>-+-xlf90----+----+--------------+----input_file---+----------><
|   +-xlf90_r--+    '-cmd_line_opt-'
|   +-xlf90_r7-+
|   +-xlf95----+
|   +-xlf95_r--+
|   +-xlf95_r7-+
|   +-xlf------+
|   +-xlf_r----+
|   +-xlf_r7---+
|   +-f77------+
|   '-fort77---'
| 
| 

これらのコマンドはすべて、本質的に同じ Fortran 言語を受け入れます。主要な違いは、別のデフォルト・オプション (/etc/xlf.cfg ファイルを参照) を使用していることです。

呼び出しコマンドは、Fortran ソース・ファイルをコンパイルするのに必要なステップを実行して、すべての .s ファイルをアセンブルし、オブジェクト・ファイルとライブラリーをリンクして 1 つの実行可能プログラムを作成します。特に、xlf_rxlf_r7xlf90_rxlf90_r7xlf95_r、および xlf95_r7 コマンドは、スレッド・セーフ・コンポーネント (ライブラリー、 crt0_r.o など) を使用してオブジェクト・ファイルをリンクしたりバインドしたりします。

以下に示す表では、使用できる呼び出しコマンドを要約します。


表 2. XL Fortran 呼び出しコマンド

ドライバー呼び出し パスまたは位置 主な機能 リンクされるライブラリー
xlf90 /usr/bin Fortran 90 libxlf90.a
xlf90_r /usr/bin スレッド・セーフ Fortran 90、オペレーティング・システム・デフォルト POSIX pthreads API libxlf90_r.a
xlf90_r7 /usr/bin スレッド・セーフ Fortran 90、Draft 7 POSIX pthreads API libxlf90_r.a
xlf95 /usr/bin Fortran 95 libxlf90.a
xlf95_r /usr/bin スレッド・セーフ Fortran 95、オペレーティング・システム・デフォルト POSIX pthreads API libxlf90_r.a
xlf95_r7 /usr/bin スレッド・セーフ Fortran 95、Draft 7 POSIX pthreads API libxlf90_r.a
xlf /usr/bin FORTRAN 77 libxlf90.a
xlf_r /usr/bin スレッド・セーフ FORTRAN 77、オペレーティング・システム・デフォルト POSIX pthreads API libxlf90_r.a
xlf_r7 /usr/bin スレッド・セーフ FORTRAN 77、Draft 7 POSIX pthreads API libxlf90_r.a
f77 あるいは fort77 /usr/bin FORTRAN 77 libxlf90.a

呼び出しコマンドには、ディレクティブ・トリガーが以下のようになるという意味があります。

-qsmp コンパイラー・オプションを指定すると、以下のようになります。

XL Fortran は、ライブラリー libxlf90_t.a に加え、ライブラリー libxlf90_r.a も用意しています。ライブラリー libxlf90_r.a は、libxlf90_t.a のスーパーセットです。ファイル xlf.cfg は、xlf90_rxlf90_r7xlf95_rxlf95_r7xlf_r、および xlf_r7 コマンドの使用時に、libxlf90_r.a に自動的にリンクするようにセットアップされています。

libxlf90_t.a は部分スレッド・サポート実行時ライブラリーです。このライブラリーは、使用に関する制限が 1 つ付いた状態で /usr/lib/libxlf90_t.a としてインストールされます。これは、ライブラリーのルーチンはスレッド再入可能ルーチンではなく、 1 つの Fortran のスレッドだけが、I/O オペレーションを実行したり、ライブラリーを使用するマルチスレッド・アプリケーションに Fortran の組み込み機能を呼び出すことができるからです。スレッドの同期によるオーバーヘッドが libxlf90_r.a で生じないようにするには、 Fortran スレッドが 1 つだけ存在しているマルチスレッド・アプリケーションで libxlf90_t.a を使用することができます。

複数の Fortran スレッドとともに複数の実行可能スレッドをバインドする場合には、 libxlf90_r.a のルーチンにリンクする目的で、 -lxlf90_t または -lxlf90 の代わりに -lxlf90_r をコマンド行に指定する必要があります。 xlf_rxlf_r7xlf90_rxlf90_r7xlf95_r、または xlf95_r7 呼び出しコマンドを使用することによって、正しいリンクが保証されることに注意してください。

XL Fortran バージョン 2 プログラムのコンパイル

xlf は、可能な場合は必ず、 XL Fortran の初期バージョンと同じ I/O 形式、および FORTRAN 77 互換の実施動作を使用することによって、既存のプログラムとの互換性を維持します。

f77xlf と同一です (構成ファイルがカスタマイズされていないという前提の場合)。

既存の makefiles および build 環境との互換性を保持するために、これらのコマンドを引き続き使用しなければならない場合があります。ただし、これらのコマンドでコンパイルされたプログラムは、細かい点で Fortran 90 または Fortran 95 標準に従っていない場合があることに留意してください。

Fortran 90 プログラムまたは Fortran 95 プログラムのコンパイル

xlfxlf_rxlf_r7、および f77/|fort77 コマンドを使用するより、xlf90xlf90_r、および xlf90_r7 コマンドを使用した方が、プログラムを Fortran 90 標準に一層合致させることができます。 xlfxlf_rxlf_r7、および f77/|fort77 コマンドを使用するより、xlf95xlf95_r、および xlf95_r7 コマンドを使用した方が、プログラムを Fortran 95 標準に一層合致させることができます。新しいプログラムをコンパイルする場合には、xlf90xlf90_rxlf90_r7xlf95xlf95_r、および xlf95_r7 コマンドの方が適しています。これらのコマンドはどちらも Fortran 90 の自由ソース形式がデフォルトで使用できます。これを固定ソース形式に使用するには、-qfixed オプションを使用する必要があります。 I/O 形式は、これらの 6 つのコマンドとそれ以外のコマンドではわずかに異なっています。また、I/O 形式は、xlf90xlf90_r、および xlf90_r7 コマンドのセットと、xlf95xlf95_r、および xlf95_r7 コマンドのセットでも異なっています。できる限り、データ・ファイルに関しては Fortran 95 形式に切り替えることをお勧めします。

デフォルトでは、xlf90xlf90_r、および xlf90_r7 コマンドは Fortran 90 標準に完全に準拠しているわけではありません。さらに、xlf95xlf95_r、および xlf95_r7 コマンドもデフォルトで Fortran 95 標準に完全に準拠しているわけではありません。 |完全コンパイルを必要とする場合には、次のコンパイラー・オプション (およびサブオプション) の |いずれかを指定してコンパイルしてください。

-qnodirective -qnoescape -qextname -qfloat=nomaf:rndsngl:nofold -qnoswapomp

また、プログラムを実行する前に、次のようなコマンドを使用して実行時オプションを指定してください。

export XLFRTEOPTS="err_recovery=no:langlvl=90std"

デフォルト設定は、パフォーマンスと使いやすさの最善の組み合わせが得られるように設計されています。したがって、通常、デフォルト設定は必要な場合にだけ変更するようにしてください。上記のオプションの一部は、非常に特殊な状況で適合性を得るためにだけ必要です。たとえば、-qextname は、共通ブロックやサブプログラムなどの外部シンボルの 1 つに main という名前が付いている場合にだけ必要になります。

XL Fortran SMP プログラムのコンパイル

xlf_rxlf_r7xlf90_rxlf90_r7xlf95_r、または xlf95_r7 コマンドを使用して XL Fortran SMP プログラムをコンパイルできます。 xlf_r および xlf_r7 コマンドと xlfxlf90_r および xlf90_r7 コマンドと xlf90 コマンド、また xlf95_r および xlf95_r7 コマンドと xlf95 コマンドは、それぞれほとんど同じです。主な違いは、xlf_rxlf_r7xlf90_rxlf90_r7xlf95_r、または xlf95_r7 コマンドを指定した場合、スレッド・セーフ・コンポーネント (ライブラリー、crt0_r.o など) がオブジェクト・ファイルのリンクおよびバインドに使用される点です。

これらの 6 つのコマンドの 1 つを単独で使用すると、並行処理が行われないことに注意してください。 SMP ディレクティブを認識して並列化を活動化するコンパイラーの場合には、-qsmp も指定する必要があります。または、これらの 6 つの呼び出しコマンドのいずれか 1 つと一緒に -qsmp オプションを指定することは可能です。 -qsmp を指定すると、ドライバーは構成ファイルのアクティブ・スタンザにある smplibraries 行で指定されたライブラリーにリンクします。

POSIX pthreads API サポートのレベル

| |AIX バージョン 4.3 以降の XL Fortran では |、1003.1-1996 |(POSIX) 標準 pthreads API を使用した 64 ビット・スレッド・プログラミングが |サポートされます。また、Draft 7 と 1003.1-1996 標準 API の両方を使用した 32 ビット・プログラミングもサポートされます。

呼び出しコマンド (xlf.cfg 構成ファイルの対応するスタンザ) を使用し、 1003.1-1996 標準または Draft 7 インターフェース・ライブラリーのいずれかを指定して、プログラムのコンパイルおよびリンクを行うことができます。

他のコンパイル・コマンドの作成

XL Fortran は、デフォルトでは f90 コマンドまたは f95 コマンドを提供しませんが、root ユーザーは次のようなコマンドを使用して他の呼び出しコマンドの 1 つへのリンクを作成することにより、コマンドを作成できます。

    ln /usr/bin/xlf90 /usr/bin/f90

または

    ln /usr/bin/xlf95 /usr/bin/f95

root ユーザーではない場合は、独自のディレクトリーの 1 つのリンクを作成することができます。

f90 コマンド (デフォルトのサフィックスが .f90) を作成する場合、このコマンドでコンパイルしたファイルには、 program.f90 等の名前を付ける必要があります。同様に、f95 コマンド (デフォルトのサフィックスが .f95) を作成する場合、このコマンドでコンパイルしたファイルには、 program.f95 等の名前を付ける必要があります。

Fortran プログラムのコンパイル順序

モジュールを使用するプログラム・ユニット、サブプログラム、またはインターフェース・ボディは、モジュールの後にコンパイルする必要があります。モジュール、およびモジュールを使用するコードが別個のファイルに入っている場合、モジュールが入っているファイルを最初にコンパイルする必要があります。同じファイルに入っている場合は、モジュールは、ファイル内のモジュールを使用するコードの前になければなりません。モジュールにあるエンティティーを変更する場合、そのモジュールを使用するファイルをすべて再コンパイルする必要があります。

コンパイルの取り消し

コンパイルの完了前にコンパイラーを停止するには、対話モードで Ctrl+C を入力するか、 kill コマンドを使用してください。

XL Fortran 入力ファイル

コンパイラーへの入力ファイルには次のものがあります。

ソース・ファイル (.f または .F サフィックス)
.f および .F ファイルはすべて、コンパイル用のソース・ファイルです。コンパイラーは、指定されたソース・ファイルをコマンド行で指定された順序でコンパイルします。指定されたソース・ファイルが見つからない場合、コンパイラーはエラー・メッセージを作成し、次のファイルがあれば、そのファイルの処理に移ります。サフィックス .F を持つファイルは、コンパイルされる前にまず、cpp に渡されます。

インクルード・ファイルもソースを含んでいて、 .f 以外のサフィックスを持っていることがしばしばあります。

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

構成ファイルのカスタマイズおよび -qsuffix オプションに記載されている fsuffix および cppsuffix 属性を使用する場合は、別のサフィックスを選択します。

オブジェクト・ファイル (.o サフィックス)
.o ファイルはすべてオブジェクト・ファイルです。コンパイラーはソース・ファイルをコンパイルした後、その結果作成された .o ファイルと、入力ファイルとして指定した .o ファイル、およびプロダクト・ディレクトリーやシステム・ライブラリー・ディレクトリーにあるいくつかの .o ファイルや .a ファイルを、 ld コマンドを使用してリンク・エディットし、1 つの実行可能出力ファイルを作成します。
関連情報:
リンクを制御するオプションおよび XL Fortran プログラムのリンクを参照してください。

osuffix 属性 (構成ファイルのカスタマイズ および -qsuffix オプション に説明されている) を使用して、別のサフィックスを選択することができます。

アセンブラー・ソース・ファイル (.s サフィックス)
コンパイラーは、指定された .s ファイルをアセンブラー (as) に送ります。アセンブラー出力は、リンク時にリンカーに送られるオブジェクト・ファイルから構成されます。
関連情報:
ssuffix 属性 (構成ファイルのカスタマイズ および -qsuffix オプション に説明されている) を使用して、別のサフィックスを選択することができます。

アーカイブ・ファイルまたはライブラリー・ファイル (.a サフィックス)
コンパイラーは、指定されたライブラリー・ファイル (.a ファイル) をリンク時にリンカーに送ります。また、/usr/lib ディレクトリーには、自動的にリンクされる AIX および XL Fortran ライブラリー・ファイルもあります。
関連情報:
-l オプション-L オプションLIBPATH: ライブラリー検索パスの設定を参照してください。

共用オブジェクト・ファイル (.so サフィックス)
実行時にマルチプロセスによってロードされ共用されることが可能なオブジェクト・ファイルです。リンク時に共用オブジェクトが指定されると、オブジェクトに関する情報は出力ファイルに記録されますが、共用オブジェクトからのコードは実際に出力ファイルには含まれません。
関連情報:
-brtl オプションおよび -bdynamic、-bshared、-bstatic オプションを参照してください。

構成ファイル (.cfg サフィックス)
構成ファイルの内容は、コンパイル・プロセスの多くの面 (最も一般的なのは、コンパイラーのデフォルト・コンパイル・オプション) を決定します。構成ファイルによって、各種のデフォルト時コンパイラー・オプションをまとめたり、 1 つのシステム上に複数のレベルの XL Fortran コンパイラーを残すことができます。

デフォルトの構成ファイルは /etc/xlf.cfg です。

関連情報:
構成ファイルの選択に関する情報については、 構成ファイルのカスタマイズ および -F オプション を参照してください。

モジュール・シンボル・ファイル (modulename.mod)
このファイルは、モジュールのコンパイルから作成された出力ファイルであり、そのモジュールを使用するファイルの以降のコンパイル用の入力ファイルになります。個々のモジュールに対して .mod ファイルが 1 つずつ作成され、したがって、ソース・ファイルを 1 つコンパイルすると、複数の .mod ファイルが作成できます。
関連情報:
-I オプション-qmoddir オプション、および バイナリー・ファイル内の情報の表示 (what) を参照してください。

プロファイル・データ・ファイル

-qpdf1 オプションは、以降のコンパイルで使用する、実行時プロファイル情報を作成します。この情報は、パターン 『.*pdf*』 に一致する名前で 1 つまたは複数の隠しファイルに格納されます。

関連情報:
-qpdf オプションを参照してください。

XL Fortran 出力ファイル

XL Fortran が提供する出力ファイルは、以下のとおりです。

実行可能ファイル (a.out)
デフォルト時、 XL Fortran は現行ディレクトリーに a.out という名前の実行可能ファイルを作成します。
関連情報:
別の名前を選択することについての情報は -o オプションを、オブジェクト・ファイルのみを生成することについての情報は -c オプションをそれぞれ参照してください。

オブジェクト・ファイル (filename.o)
-c コンパイラー・オプションを指定すると、コンパイラーは実行可能ファイルを作成する代わりに、指定された個々の .f ソース・ファイルに対してオブジェクト・ファイルを 1 つ作成し、アセンブラーは指定された個々の .s ソース・ファイルに対してオブジェクト・ファイルを 1 つ作成します。 デフォルト時には、オブジェクト・ファイルはソース・ファイルと同じファイル名プレフィックスを持ち、現行ディレクトリーに存在します。
関連情報:
-c オプションおよび XL Fortran プログラムのリンクを参照してください。オブジェクト・ファイルの名前変更についての情報は、-o オプションを参照してください。

アセンブラー・ソース・ファイル (filename.s)
-S コンパイラー・オプションを指定すると、 XL Fortran コンパイラーは実行可能ファイルを作成する代わりに、指定された個々の .f ソース・ファイルに対して同等のアセンブラー・ソース・ファイルを 1 つ作成します。デフォルト時には、アセンブラー・ソース・ファイルはソース・ファイルと同じファイル名プレフィックスを持ち、現行ディレクトリーに存在します。
関連情報:
-S オプションおよび XL Fortran プログラムのリンクを参照してください。アセンブラー・ソース・ファイルの名前変更についての情報は、 -o オプションを参照してください。

コンパイラー・リスト・ファイル (filename.lst)
デフォルト時には、 1 つまたは複数のリスト関連のコンパイラー・オプションを指定しない限り、リストは作成されません。リスト・ファイルは現行ディレクトリーに入れられ、ソース・ファイルと同じファイル名プレフィックスと、拡張子 .lst を持っています。
関連情報:
リストとメッセージを制御するオプションを参照してください。

モジュール・シンボル・ファイル (modulename.mod)
個々のモジュールには、そのモジュールを使用するプログラム単位、サブプログラム、インターフェース本体によって必要とされる情報が含まれる関連のシンボル・ファイルがあります。デフォルト時には、これらのシンボル・ファイルは現行ディレクトリーに入っている必要があります。
関連情報:
別のディレクトリーに .mod ファイルを書き込むことに関する情報については、 -qmoddir オプションを参照してください。

cpp プリプロセス済みソース・ファイル (Ffilename.f)
サフィックス .F を持つファイルをコンパイルする時に -d オプションを指定すると、 C プリプロセッサー (cpp) によって作成された中間ファイルが削除されないで保管されます。
関連情報:
C プリプロセッサーによる Fortran ファイルの引き渡しおよび -d オプションを参照してください。

プロファイル・データ・ファイル (.*pdf*)
これらのファイルは -qpdf1 オプションによって生成され、それ以後のコンパイルで、実際の実行結果に基づく最適化を調整するために使用されます。
関連情報:
-qpdf オプションを参照してください。

オプション設定の有効範囲と優先順位

3 つの位置のいずれかにコンパイラー・オプションを指定することができます。有効範囲と優先順位は、使用する位置で定義されます。 (XL Fortran は、SOURCEFORM などの、オプション設定を指定できるコメント・ディレクティブも持っています。そのようなディレクティブの有効範囲と優先順位に関する一般的な規則はありません。)

位置 有効範囲 優先順位
構成ファイルのスタンザの中 実際にそのスタンザでコンパイルされたすべてのファイル内のすべてのコンパイル単位。 下位
コマンド行 そのコマンドでコンパイルされたすべてのファイル内のすべてのコンパイル単位。 中間
@PROCESS ディレクティブ (XL Fortran は、SOURCEFORM などの、オプション設定を指定できるコメント・ディレクティブも持っています。そのようなディレクティブの有効範囲と優先順位に関する一般的な規則はありません。) 次のコンパイル単位 上位

異なる設定で複数回オプションが指定されると、通常は最後の設定が効力を発します。 XL Fortran コンパイラー・オプションの詳細記述内で、例外は個々の説明として記載され、『矛盾するオプション』という見出しが付いています。

コマンド行でのオプションの指定

XL Fortran は、従来の UNIX によるコマンド行オプションの指定方法をサポートしています。この方法では、次のように、負符号の後に 1 つまたは複数の文字 (フラグといいます) を指定します。

  xlf95 -c file.f

しばしば複数のフラグを連結することも、個々に指定することもできます。

  xlf95 -cv file.f     # These forms
  xlf95 -c -v file.f   # are equivalent

(例外がいくつかあります。たとえば、-pg。これは単一オプションで、-p -g と同じではありません。)

フラグの中には、引き数ストリングがさらに必要なものもあります。また、XL Fortran はそれらのフラグの解釈で柔軟性を持っています。最後に引き数を指定したフラグであれば、複数のフラグを連結することができます。フラグを指定する方法について、以下の例で示します。

# All of these commands
# are equivalent.
  xlf95 -g -v -o montecarlo -p montecarlo.f
  xlf95 -g -v -omontecarlo -p montecarlo.f
# Because -o takes a blank-delimited
# argument, the -p cannot be concatenated.
  xlf95 -gvomontecarlo -p montecarlo.f
# Unless we switch the order.
  xlf95 -gvpomontecarlo montecarlo.f

他の|コンパイラー、特に XL ファミリーのコンパイラーに精通していれば、すでにこれらのフラグの多くにも精通していることでしょう。

覚えやすい形式で多数のコマンド行オプションを指定して、コンパイル・スクリプトおよび makefiles を理解しやすくすることができます。

>>--q--option_keyword--+---------------------------------------+-><
                       |    .-:------------------------------. |
                       |    V                                | |
                       '-=----suboption--+-----------------+-+-'
                                         |    .-,--------. |
                                         |    V          | |
                                         '-=----argument-+-'
 
 

この形式では、ブランクの挿入に関しては、より制限的です。それぞれの -q オプションはブランクで区切らなければならず、 -q オプションと、その後に続く引き数ストリングとの間にブランクがあってはなりません。「フラグ」オプションの名前とは異なり、-q オプション名には、 q が小文字でなければならないことを除いて、大文字・小文字の区別がありません。 -q オプションとこれが必要としている引き数を分離するには等号を使用し、引き数ストリング内のサブオプションを分離するにはコロンを使用してください。

たとえば、次のようになります。

 xlf95 -qddim -qXREF=full -qfloat=nomaf:rsqrt -O3 -qcache=type=c:level=1 file.f

ソース・ファイルでのオプションの指定

ソース・ファイルに @PROCESS ディレクティブを入れることによって、個々のコンパイル単位に影響を与えるようにコンパイラー・オプションを指定することができます。 @PROCESS コンパイラー・ディレクティブによって、構成ファイル、デフォルト設定、またはコマンド行で指定したオプションをオーバーライドすることができます。

             .-+---+--------------------------.
             | '-,-'                          |
             V                                |
>>-@PROCESS----option--+--------------------+-+----------------><
                       '-( suboption_list )-'
 
 

option
これは、-q を持たないコンパイラー・オプションの名前です。

suboption
これは、コンパイラー・オプションのサブオプションです。

固定ソース形式では、@PROCESS は 1 桁目から、または 6 桁目より後に開始できます。自由ソース形式では、@PROCESS コンパイラー・ディレクティブはどの桁からでも開始できます。

ステートメント・ラベルまたはインライン注釈を @PROCESS コンパイラー・ディレクティブと同じ行に入れることはできません。

デフォルト時には、@PROCESS コンパイラー・ディレクティブで指定するオプション設定は、ステートメントが存在するコンパイル単位に対してのみ有効です。ファイルが複数のコンパイル単位を持っている場合は、オプション設定は、次の単位がコンパイルされる前に、元の状態にリセットされます。 DIRECTIVE オプションによって指定されたトリガー定数は、ファイルの終わりまで (または NODIRECTIVE が処理されるまで) 有効です。

@PROCESS コンパイラー・ディレクティブは、通常、コンパイル単位の最初のステートメントの前にする必要があります。唯一の例外は、SOURCE および NOSOURCE を指定する場合です。この 2 つは、コンパイル単位内のいかなる場所にある @PROCESS ディレクティブでも使用することができます。

コマンド行オプションの「ld」または「as」コマンドへの引き渡し

コンパイラーは、コンパイル中に必要に応じて他のコマンド (たとえば ld および as) を自動的に実行するので、通常は、これらのコマンドのオプションにユーザーが関与する必要はありません。 これらの個々のコマンドに対してオプションを選択したい場合は、 次のようにできます。

関連情報:
-W オプションおよび 構成ファイルのカスタマイズを参照してください。

コンパイラーの使用状況の追跡

お客様がコンパイラーの使用を監査する必要がある場合、XL Fortran コンパイラーを、LUM (ライセンス使用管理) を使用して制御されるライセンス管理 (LM) とすることができます。ライセンス使用管理は、以前は NetLS** / iFOR/LS** 製品を指していました。

システム管理者は、一連のクライアント・マシンで実行されている並列コンパイルの数を追跡することができます。コンパイラーはデフォルトで LM を使用可能にし、LUM の全機能が使用可能になります。

-qnolm コンパイラー・オプションを使用して LUM を使用不能にすることができます。特定のコンパイル時に LUM を使用不能にするには、コマンド行でこのオプションを使用してください。また、デフォルト時に LUM を使用不能にするには、構成ファイル (xlf.cfg) にこのオプションを入れてください。

XLF 用に購入したソフトウェア・ライセンスでは、特定数のユーザーがコンパイラーを操作することが許可されます。 LM は、デフォルト時にはオンで、使用可能にするパスワードが、 XL Fortran バージョン 8.1.1 に付随する「Using LUM User's Guide 」および「README.FIRST」の説明に従ってインストールされている場合に、ユーザーの数を追跡します。

XL Fortran ユーザーがネットワーク上に分散されている状況に応じて、 並行ネットワーク・ライセンス並行ノードロック・ライセンス、または両方の組み合わせが使用できます。

並行ネットワーク・ライセンス
LUM 『セル』内の任意のマシン上で任意の許可ユーザーが使用できます。構成によっては、コンパイラーと同じマシン上で LUM クライアント・ソフトウェアが実行されていなければならない場合があります。このライセンスでは、コンパイル時にパフォーマンスのオーバーヘッドが生じる可能性があります。

各ユーザー ID に与えられている権限が不十分であれば、アクセスを拒否される場合もあります。

並行ノードロック・ライセンス
単一のマシンに制限されますが、LUM クライアント・ソフトウェアは必要なく、コンパイル時パフォーマンスのオーバーヘッドは並行ネットワーク・ライセンスほど多くはありません。

各ユーザー ID に与えられている権限が不十分であれば、アクセスを拒否される場合もあります。

関連情報:
-qlm オプション、「Using LUM Run-time Guide 」、および「Using LUM User's Guide 」を参照してください。

POWER4、POWER3、 POWER2、 あるいは PowerPC システムでのコンパイル

RISC System/6000(R) は、以下の異なったチップ構成に基づくモデルを含みます。オリジナル POWER プロセッサー、PowerPC プロセッサー (POWER および PowerPC プロセッサー間のブリッジである 601 プロセッサーを含む) 、および POWER2、 POWER3、および POWER4 プロセッサー。

-qarch-qtune を使用して、該当するアーキテクチャーに特定のコードを生成するようにコンパイラーに指示するプログラムを作成することができます。これにより、コンパイラーは、マシン特定の命令を活用してパフォーマンスを向上させることができます。 -qarch オプションは、コンパイル後のプログラムが実行できるアーキテクチャーを判別します。オプション -qtune-qcache は、プラットフォーム固有の最適化の程度を改善します。

デフォルト時には、-qarch を設定すると、すべてのアーキテクチャーに共通の命令のみを使用するコードが作成され、結果として -qtune-qcache の設定値は、これに伴って一般的なものとなります。特定のプロセッサー・セットまたはアーキテクチャーのパフォーマンスを調整するために、これらのオプションの 1 つまたは複数に別の設定値を指定する必要がある場合もあります。通常の試行過程では、まず -qarch を使用して、次に -qtune を追加し、次に -qcache を追加します。 -qarch のデフォルト値は -qtune-qcache のデフォルト値にも影響するため、 -qarch オプション以外は必要でない場合がしばしばあります。

コンパイル中のマシンがターゲット・アーキテクチャーでもある場合は、 -qarch=auto によって、コンパイル中のマシンの設定値が自動的に検出されます。このコンパイラー・オプションの設定値の詳細については、 -qarch オプションを参照してください。 -O オプション-O4-O5 も参照してください。

プログラムのほとんどを、特定のアーキテクチャーで実行するようにしている場合は、これらのオプションのうちの 1 つ以上を構成ファイルに追加しておけば、それをすべてのコンパイルのデフォルトにすることができます。

C プリプロセッサーによる Fortran ファイルの引き渡し

一般的なプログラミングの慣例では、 C プリプロセッサー (cpp) によってファイルを引き渡します。 cpp は、ユーザーが指定した条件に基づいて出力ファイルに行を組み込んだり、出力ファイルから行を削除したり (『条件付きコンパイル』) できます。また、ストリングを置換 (『マクロ展開』) することも可能です。

XL Fortran は cpp を使用して、コンパイル前にファイルをプリプロセスすることができます。また、いずれかの最適化プリプロセッサーを使用している場合も、他のプリプロセッサーより先に cpp が呼び出されます。

特定のファイルに対して cpp を呼び出すには、ファイル・サフィックス .F を使用してください。 -d オプションを指定すると、個々の .F ファイル filename.F は、中間ファイル Ffilename.f にプリプロセスされて、これがコンパイルされます。 -d オプションを指定しないと、中間ファイルの名前は /tmpdir/F8xxxxxx になります。ここで、x は英数字です。 tmpdir は、TMPDIR 環境変数に入れられている値であり、 TMPDIR に値が指定されていない場合は /tmp になります。中間ファイルは、 -d コンパイラー・オプションを指定することによって保管することができます。このオプションを指定しないと、ファイルは削除されます。 プリプロセスは行いたいが、オブジェクト・ファイルや実行可能ファイルは作成したくない場合は、 -qnoobject オプションも指定してください。

XL Fortran がファイルに cpp を使用するとき、プリプロセッサーは #line ディレクティブを出力します。これは、-d オプションを指定すると行われません。 #line ディレクティブは、 cpp かそれ以外の Fortran ソース・コード・ジェネレーターにより作成されたコードと、作成した入力コードを関連づけます。プリプロセッサーによって、コードの行が挿入されたり削除されたりする場合があります。コードの行を出力する #line ディレクティブは、オリジナルのソースで使用された行番号をリストして、プリプロセスされたコードに検出されるソース・ステートメントを識別するため、エラーの報告書作成およびデバッグの際に役に立ちます。

_OPENMP C プリプロセッサー・マクロを使用すれば、コードを条件付きで組み込めます。このマクロは、 -qsmp=omp コンパイラー・オプションが指定してあれば、 C プリプロセッサーが呼び出されるときに定義されます。このマクロの例を以下に示します。

      program par_mat_mul
        implicit none
        integer(kind=8)                 ::i,j,nthreads
        integer(kind=8),parameter       ::N=60
        integer(kind=8),dimension(N,N)  ::Ai,Bi,Ci
        integer(kind=8)                 ::Sumi
#ifdef _OPENMP
	        integer omp_get_num_threads
#endif
 
	        common/data/ Ai,Bi,Ci
!$OMP   threadprivate (/data/)
 
!$omp   parallel
	        forall(i=1:N,j=1:N) Ai(i,j) = (i-N/2)**2+(j+N/2)
	        forall(i=1:N,j=1:N) Bi(i,j) = 3-((i/2)+(j-N/2)**2)
!$omp   master
#ifdef _OPENMP
	        nthreads=omp_get_num_threads()
#else
        nthreads=8
#endif
!$omp   end master
!$omp end parallel
 
!$OMP parallel default(private),copyin(Ai,Bi),shared(nthreads)
!$omp do
      do i=1,nthreads
	        call imat_mul(Sumi)
      enddo
!$omp end do
!$omp end parallel
 
	    end

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

cpp プリプロセスをカスタマイズできるようにするため、構成ファイルは属性 cppcppsuffix、および cppoptions を受け入れます。

文字 F は、オプション -t および -W を持つ C プリプロセッサーを表します。

関連情報:
-d オプション-t オプション-W オプション、および 構成ファイルのカスタマイズを参照してください。

XL Fortran プログラムに対する cpp ディレクティブ

マクロ展開は、予期しない結果 (たとえば、FORMAT ステートメントの変更、または 72 文字よりも長い行の作成など) を招いてデバッグが困難になる場合があるため、cpp は主に Fortran プログラムの条件付きコンパイルに使用することをお勧めします。条件付きコンパイルに最も頻繁に使用される cpp ディレクティブは、 #if#ifdef#ifndef#elif#else#endif です。

C プリプロセッサーへのオプションの引き渡し

コンパイラーは -I 以外の cpp オプションをコマンド行上で直接認識しないので、このようなオプションは、-W オプションを使用して渡す必要があります。たとえば、 AIXV4 という名前のシンボルの存在をテストする #ifdef ディレクティブがプログラムに含まれている場合は、次のようなコマンドでコンパイルすることにより、このシンボルを cpp に定義することができます。

  xlf95 conditional.F -WF,-DAIXV4

プリプロセスの問題の回避

Fortran と C では、一部の文字列の処理が異なるため、 /**/ を使用する場合には注意して使用してください。 (これらは C の注釈区切り文字として解釈される場合があり、 Fortran の注釈の内部で使用した場合でも問題が起こる可能性があります。) また、?? で始まる 3 文字の文字列にも注意が必要です。 (これは C の三重音字と解釈される可能性があります。)

次の例を考慮します。

     program testcase
     character a
     character*4 word
     a = '?'
     word(1:2) = '??'
     print *, word(1:2)
     end program testcase

プリプロセッサーが、ご使用の文字の組み合わせとそれに対応した三重音字文字列を突き合わせると、出力が予期したものとならない場合があります。

XL Fortran コンパイラー・オプション -qnoescape をコードで使用する必要がない 場合は、解決策として、文字ストリングをエスケープ・シーケンス word(1:2) = '\?\?' に置き換えることが考えられます。しかし、-qnoescape コンパイラー・オプションを使用している場合は、この解決策は役に立ちません。その場合は、三重音字文字列を無視する cpp が必要です。 XL Fortran は /usr/ccs/lib/cpp で見つかった /usr/ccs/lib/cpp を使用します。これは標準の cpp です。この cpp は ANSI C に準拠しているため、三重音字文字列を認識します。

AIX オペレーティング・システムでは、 cpp には -qlanglvl=classic というオプションがあります。このオプションは CSet++ のオプションと似ています。 したがって、AIX 4.1 では、次のコマンドを使用して、三重音字の例を コンパイルしてください。

    xlf95 tst.F -d -v -WF,-qlanglvl=classic

これにより、cpp tst.F -qlanglvl=classic が呼び出されます。


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