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

ソース・プログラムをコンパイルするには、コマンド xlfxlf_rxlf90xlf90_rf90xlf95xlf95_rf95xlf2003xlf2003_rf2003 xlf2008xlf2008_rf2008、および CUDA Fortran の始まり xlcuf CUDA Fortran の終わり のいずれかを使用してください。形式は次のとおりです。
構文図を読む構文図をスキップする
                  .----------------------------------.   
                  V                                  |   
>>-+-xlf-------+----+--------------+----input_file---+---------><
   +-xlf_r-----+    '-cmd_line_opt-'                     
   +-f77-------+                                         
   +-fort77----+                                         
   +-xlf90-----+                                         
   +-xlf90_r---+                                         
   +-f90-------+                                         
   +-xlf95-----+                                         
   +-xlf95_r---+                                         
   +-f95-------+                                         
   +-xlf2003---+                                         
   +-xlf2003_r-+                                         
   +-f2003-----+                                         
   +-xlf2008---+                                         
   +-xlf2008_r-+                                         
   +-f2008-----+                                         
   '-xlcuf-----'                                         

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

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

以下に示す表では、使用できる呼び出しコマンドを要約します。
表 1. XL Fortran 呼び出しコマンド
ドライバー呼び出し 1 主な機能 リンクされるライブラリー
xlf 選択された Fortran 言語レベル 3 libxlf90.so
xlf_r 選択された言語レベルのスレッド・セーフ・バージョン 3 libxlf90_r.so
f77, fort77 FORTRAN 77 libxlf90.so
xlf90, f90 Fortran 90 libxlf90.so
xlf90_r スレッド・セーフ Fortran 90 libxlf90_r.so
xlf95, f95 Fortran 95 libxlf90.so
xlf95_r スレッド・セーフ Fortran 95 libxlf90_r.so
xlf2003 Fortran 2003 libxlf90.so
xlf2003_r スレッド・セーフ Fortran 2003 libxlf90_r.so
f2003 Fortran 2003 libxlf90.so
xlf2008 Fortran 2008 libxlf90.so
xlf2008_r スレッド・セーフ Fortran 2008 libxlf90_r.so
f2008 Fortran 2008 libxlf90.so
CUDA Fortran の始まりxlcuf 2 CUDA Fortran サポート libxlf90_r.so、 libcudadevrt.a、 libcudart.so、 libcuda.so、および libdevice*.bc CUDA Fortran の終わり
注:
  1. これらの呼び出しコマンドは、/opt/ibm/xlf/16.1.0/bin ディレクトリーにあります。
  2. CUDA Fortran の始まり xlcuf を指定することは、xlf2008_r および -qcuda オプションを指定することと同じです。
  3. 呼び出しコマンド xlf および xlf_r は、ソース・ファイル名のサフィックスに従って適切な言語レベルを選択します。他の呼び出しコマンドは、Fortran ソース・ファイル名のサフィックスにかかわらず、一貫した動作を示します。次の例を参照してください。

    例 1
    xlf program1.f program2.f90 program3.f95 program4.f03 program5.f08
    動作は、次のようになります。
    • program1.f ファイルは、呼び出しコマンドが f77 であった場合と同じようにコンパイルされます。
    • program2.f90 ファイルは、呼び出しコマンドが xlf90 であった場合と同じようにコンパイルされます。
    • program3.f95 ファイルは、呼び出しコマンドが xlf95 であった場合と同じようにコンパイルされます。
    • program4.f03 ファイルは、呼び出しコマンドが xlf2003 であった場合と同じようにコンパイルされます。
    • program5.f08 ファイルは、呼び出しコマンドが xlf2008 であった場合と同じようにコンパイルされます。
    CUDA Fortran の始まり
    例 2
    xlf_r program6.cuf
    program6.cuf ファイルは、呼び出しコマンドが xlcuf であった場合と同じようにコンパイルされます。これにより、CUDA Fortran サポートが有効になります。
    CUDA Fortran の終わり

libxlf90.so はスレッド化されたアプリケーションと非スレッド化されたアプリケーションの両方に提供されます。XL Fortran は、実行時にアプリケーションがスレッド化されているかどうかを判別します。

XL Fortran は、 libxlf90_r.so に加えて、ライブラリー libxlf90_t.so を提供します。 libxlf90_t.so は、 libxlf90_r.so がエクスポートするのと同じエントリー・ポイントをエクスポートします。 ライブラリー libxlf90_r.so は、libxlf90_t.so のスーパーセットです。 ファイル xlf.cfg は、xlf90_rxlf95_r、および xlf_r コマンドを使用すると自動的に libxlf90_r.so にリンクするようセットアップされます。libxlf90_t.so は、一部スレッドをサポートするランタイム・ライブラリーです。libxlf90_r.so と異なり、libxlf90_t.so はスレッド同期を提供しません。また、libxlf90_t.so 内のルーチンは再入可能ではありません。そのため、入出力操作の実行または Fortran 組み込み機能の呼び出しができる Fortran スレッドは、一度に 1 つだけです。 1 つの Fortran スレッドしかないマルチスレッド・アプリケーションで、libxlf90_r.so の代わりに libxlf90_t.so を使用 して、libxlf90_r.so におけるスレッド同期のオーバーヘッドを回避することができます。

マルチスレッドの実行可能プログラムを複数の Fortran スレッドとバインドする場合は、 libxlf90_r.so を使用する必要があります。 呼び出しコマンド xlf_rxlf90_rxlf95_rxlf2003_rxlf2008_r、または CUDA Fortran の始まりxlcufCUDA Fortran の終わり を使用することによって、正しいリンクが保証されることに注意してください。

呼び出しコマンドまたはオプションによって暗黙指定されるディレクティブ・トリガーは、次のリストのとおりです。
  • 呼び出しコマンド f77fort77f90f95f2003xlfxlf90xlf95xlf2003、および xlf2008 では、ディレクティブ・トリガーはデフォルトで IBM* です。
  • その他のすべての呼び出しコマンドでは、ディレクティブ・トリガーはデフォルトで IBM* および IBMT です。
  • -qsmp が有効であれば、コンパイラーはディレクティブ・トリガー IBMPSMP$、および $OMP も認識します。
  • -qthreaded が有効であれば、コンパイラーは IBMT ディレクティブ・トリガーも認識します。