ホーム » システム » スーパーコンピュータシステムITO » 富士通コンパイラ利用法

富士通コンパイラ利用法

最終更新日:2017年10月2日

富士通コンパイラはHPCミドルウェアFUJITSU Software Technical Computing Suite (TCS)の一部を構成するソフトウェアです。 ここでは、プログラム言語Fortran、C、C++の翻訳・実行方法とバッチ処理方法について解説します。


1. 概要

プログラム言語の翻訳・リンクのための書式とコマンドの一覧は以下の通りです。

コマンド [option] file [...]
言語処理系 コマンド 自動並列化* OpenMP*
非MPI並列 Fortran frt -Kparallel -Kopenmp
C fcc
C++ FCC
MPI並列 Fortran mpifrt
C mpifcc
C++ mpiFCC
データ並列 XPFortran xpfrt

* 自動並列化およびOpenMPオプションはデフォルトでは無効です。


2. Fortran

2.1 翻訳・リンク方法

Fortranコンパイラは frt コマンドを利用します。 MPIライブラリを使用する場合はmpifrt コマンドを利用します。

例1)逐次Fortranプログラムを翻訳・リンクする。

$ frt -Kfast sample.f90

例2)ノード内スレッド並列(自動並列)Fortranプログラムを翻訳・リンクする。

$ frt -Kfast,parallel sample.f90

例3)ノード内スレッド並列(OpenMP) Fortranプログラムを翻訳・リンクする。

$ frt -Kfast,openmp sample.f90

例4)MPI並列(フラットMPI) Fortranプログラムを翻訳・リンクする。

$ mpifrt -Kfast sample.f90

例5)ハイブリッド並列(OpenMP+MPI) Fortranプログラムを翻訳・リンクする。

$ mpifrt -Kfast,openmp sample.f90

2.2 主な翻訳時オプション

翻訳時オプション 説明
-c オブジェクトファイルまで生成
-o exe_file 実行可能ファイル名/オブジェクトファイル名をexe_fileに変更
実行可能ファイル名を省略した場合にはa.out
-O[0, 1, 2, 3] 最適化レベルを指定。-Oの後の数字を省略した場合は-O3 (デフォルトでは-O2)
-Kfast 高速化のための最適化オプションを誘導(最適化での推奨オプション)
-Kparallel 自動並列化を行う (デフォルト: -Knoparallel)
-Kopenmp OpenMP Fortran 仕様ディレクティブを有効化。(デフォルト: -Knoopenmp)
-I directory インクルードファイル、モジュールファイルを検索するディレクトリを指定
-Fixed ソースコードが固定形式で記述されていることを指定
-Free ソースコードが自由形式で記述されていることを指定
-Fwide ソースコードの1行の長さが255の固定形式で記述されていることを指定
-fw wレベル(低レベルのエラー)およびsレベル(重度のエラー)の診断メッセージのみを出力
-fs sレベル(重度のエラー)の診断メッセージのみを出力
-Haefosux 翻訳時および実行時に引数の整合性、添字式、部分列式の値、未定義な変数の参照または配列式の形状適合などを検査。
-Koptmsg[=level] 最適化状況をメッセージ出力
-Koptmsg=1: 実行結果に副作用を生じる可能性がある最適化をしたことを出力
-Koptmsg=2: optmsg=1に加えて自動並列化・SIMD化・ループアンローリングなどの最適化機能が動作したことを出力
-Koptmsgの後の数字を省略した場合は-Koptmsg=1(デフォルト: -Koptmsg=1)
-Qt 詳細な最適化情報及び統計情報を出力
-V コンパイラのバージョン情報を出力

○推奨オプション

Fortranの標準的なオプションとして、"-Kfast,parallel"を推奨します。 推奨オプション以外の最適化機能は、プログラムデータの特性によって効果がある場合と、そうでない場合があり、実際に動作させて検証する必要があります。 推奨オプションを指定すると、関連して複数の最適化オプションが誘導されます。 詳しくは「Fortran使用手引書 第9章 最適化機能」を参照してください。


3. C/C++

3.1 Cプログラムの翻訳・リンク方法

Cコンパイラは fccコマンドを利用します。 MPIライブラリを使用する場合はmpifcc コマンドを利用します。

例1)逐次プログラムをコンパイル/リンクする。

$ fcc -Kfast sample.c

例2)ノード内スレッド並列(自動並列)プログラムを翻訳・リンクする。

$ fcc -Kfast,parallel sample.c

例3)ノード内スレッド並列(OpenMP)プログラムを翻訳・リンクする。

$ fcc -Kfast,openmp sample.c

例4)MPI並列(フラットMPI)プログラムを翻訳・リンクする。

$ mpifcc -Kfast sample.c

例5)ハイブリッド並列(OpenMP+MPI)プログラムを翻訳・リンクする。

$ mpifcc -Kfast,openmp sample.c

3.2 C++プログラムの翻訳・リンク方法

C++コンパイラは FCC コマンドを利用します。 MPIライブラリを使用する場合は、mpiFCCコマンドを利用します。

例1)逐次プログラムをコンパイル/リンクする。

$ FCC -Kfast sample.c

例2)ノード内スレッド並列(自動並列)プログラムを翻訳・リンクする。

$ FCC -Kfast,parallel sample.c

例3)ノード内スレッド並列(OpenMP)プログラムを翻訳・リンクする。

$ FCC -Kfast,openmp sample.c

例4)MPI並列(フラットMPI)プログラムを翻訳・リンクする。

$ mpiFCC -Kfast sample.c

例5)ハイブリッド並列(OpenMP+MPI)プログラムを翻訳・リンクする。

$ mpiFCC -Kfast,openmp sample.c

3.3 主な翻訳時オプション

翻訳時オプション 説明
-c オブジェクトファイルまで生成
-o exe_file 実行可能ファイル名/オブジェクトファイル名をexe_fileに変更
実行可能ファイル名を省略した場合にはa.out
-O[0, 1, 2, 3] 最適化レベルを指定。-Oの後の数字を省略した場合は-O3(デフォルトでは-O2)
-Kfast 高速化のための最適化オプションを誘導(最適化での推奨オプション)
-Kparallel 自動並列化を行う。
-Kopenmp OpenMPディレクティブを有効化(デフォルト: -Knoopenmp)
-Kocl 最適化制御行を有効化(デフォルト: -Knoocl)
-I directory インクルードファイルを検索するディレクトリを指定
-Koptmsg[=level] 最適化状況をメッセージ出力
-Koptmsg=1: 実行結果に副作用を生じる可能性がある最適化をしたことを出力
-Koptmsg=2: optmsg=1に加えて、自動並列化、SIMD化、ループアンローリングなどの最適化機能が動作したことを出力
-Koptmsgの後の数字を省略した場合は-Koptmsg=1(デフォルト: -Koptmsg=1)
-Qt 詳細な最適化情報及び統計情報を出力
-V コンパイラのバージョン情報を出力
-Xg GNU Cコンパイラ仕様の言語仕様に基づいてコンパイル。-Xgオプションが指定された場合、C89規格でコンパイルする。 GNU拡張仕様とC99規格を同時に指定する場合には、-noansiオプションを同時に指定する必要がある
-Nsta 統計情報を出力

○推奨オプション

C/C++の標準的なオプションとして、"-Kfast,parallel"を推奨します。 推奨オプション以外の最適化機能は、プログラムデータの特性によって効果がある場合と、そうでない場合があり、実際に動作させて検証する必要があります。 推奨オプションを指定すると、関連して複数の最適化オプションが誘導されます。 詳しくは「C言語使用手引書 第3章 逐次最適化機能」または「C++言語使用手引書 第3章 逐次最適化機能」を参照してください。


4. XPFortran

XPFortran コンパイラは xpfrt コマンドを利用します。

$ xpfrt -Kfast sample.f90

オプションの詳細はマニュアル「XPFortran使用手引書(PCクラスタ) 第2章言語処理システム」を参照してください。


5. 数値計算ライブラリ

富士通コンパイラから利用できる数値演算ライブラリに BLAS / LAPACK / ScaLAPACK、およびSSL IIがあります。

5.1 BLAS / LAPACK / ScaLAPACK

BLAS / LAPACK / ScaLAPACK の概要
ライブラリ名 バージョン 説明
BLAS - ベクトル演算や行列演算ライブラリ
※ Level3 全ルーチン,Level2 重要ルーチンでスレッド並列ルーチンを提供
LAPACK 3.2.2 線形代数ライブラリ
※ 重要ルーチンでスレッド並列ルーチンを提供
ScaLAPACK 1.8 線形代数メッセージパッシング並列ライブラリ
※ ScaLAPACK1.8 の追加機能を提供

コンパイル時に指定するオプションは、以下の通りです。

BLAS / LAPACK / ScaLAPACK オプション一覧
利用ライブラリ 並列性 指定オプション 備考
BLAS 逐次 -SSL2
スレッド並列 -SSL2BLAMP
LAPACK 逐次 -SSL2
スレッド並列 -SSL2BLAMP
ScaLAPACK MPI並列 -SCALAPACK リンクする BLAS/LAPACK に応じて -SSL2 または
-SSL2BLAMP を指定

BLAS / LAPACK / ScaLAPACK ライブラリの詳細についてはマニュアル 「Technical Computing Suite V1.0 数学ライブラリの利用手引」を参照してください。

例1)逐次版 BLAS/LAPACK を利用する

$ frt -Kfast -SSL2 sample.f90
$ fcc -Kfast -SSL2 sample.c

例2)スレッド並列版 BLAS/LAPACK を利用する

$ frt -Kfast,openmp -SSL2BLAMP sample.f90
$ fcc -Kfast,openmp -SSL2BLAMP sample.c

例3)ScaPALACK(ノード内逐次版)を利用する

$ mpifrt -Kfast -SCALAPACK -SSL2 sample.f90
$ mpifcc -Kfast -SCALAPACK -SSL2 sample.c

例4) ScaLAPACK(ノード内スレッド並列版)を利用する

$ mpifrt -Kfast,openmp -SCALAPACK -SSL2BLAMP sample.f90
$ mpifcc -Kfast,openmp -SCALAPACK -SSL2BLAMP sample.c

5.2 SSL II(Scientific Subroutine Library II)

SSL II 系数学ライブラリの概要
ライブラリ名 説明
SSL II スレッドセーフな逐次計算向け数値演算ライブラリ。
線形計算、固有値・固有ベクトル、非線形計算、極値問題、
補間・近似、変換、数値微積分、微分方程式、特殊関数、
疑似乱数サブルーチンなど
SSL II スレッド並列機能 並列効果の見込める重要機能にSMP向け並列処理に適合した
インターフェースで並列数値計算アルゴリズムを採用。
連立1次方程式の直接解法および反復解法、逆行列、
固有値問題、フーリエ変換、擬似乱数など
C-SSL II Fortran 版SSL II の逐次機能サブセットをC言語インター
フェースで利用可能にしたスレッドセーフな逐次版
C-SSL-II スレッド並列機能 Fortran 版SSL II スレッド並列機能のサブセットのC言語イン
ターフェース版
SSL II/MPI MPIで並列化された3次元フーリエ変換ルーチン
高速4倍精度基本演算ライブラリ 倍精度の値を double-double 形式で表現し、高速に演算を行うライブラリ
SSL II系オプション一覧
利用ライブラリ 並列性 指定オプション 備考
SSL II
C-SSL II
逐次 -SSL2 -SSL2 もしくは -SSL2BLAMPどちらでも結合可能。
リンクする BLAS/LAPACK に応じてを指定する
スレッド並列 -SSL2BLAMP
SSL II/MPI MPI 並列 -SSL2MPI 同時に -SSL2 または -SSL2BLAMP を指定する

SSL II / C-SSL-II ライブラリは逐次機能とスレッド並列機能を持ちますがサブルーチン名が異なるため混在して利用可能です。 SSL II ライブラリの詳細はマニュアル「Technical Computing Suite V1.0 数学ライブラリの利用手引」を参照してください。

例1)逐次版SSL IIを利用する

$ frt -Kfast -SSL2 sample.f90

例2)スレッド並列版 SSL II を利用する

$ frt -Kfast,openmp -SSL2BLAMP sample.f90

例3)逐次版C-SSL II を利用する

$ fcc -Kfast,openmp -SSL2 sample.c

例4)SSL II/MPI を利用する

$ mpifrt -Kfast,openmp -SSL2MPI -SSL2 sample.f90

6. 実行時環境変数

Fortran / C / C++ プログラムにおいて実行時に指定可能な主な環境変数は以下の通りです。

環境変数 説明
PARALLEL

自動並列化によりスレッド並列化されたプログラムを実行する場合にスレッド数を指定。
省略時はジョブが利用可能なコア数が使用される。

OMP_NUM_THREADS

OpenMP によりスレッド並列化されたプログラムを実行する場合にスレッド数を指定。
省略時はジョブが利用可能なコア数が使用される。

THREAD_STACK_SIZE

スレッド毎のスタック領域の大きさをキロバイト単位で指定。
省略時は ulimit -s の値が使用される。 環境変数 OMP_STACKSIZE が指定されている場合大きい方の指定値が採用される。

7. バッチ処理

ITOのサブシステムBで富士通コンパイラで作成した実行可能ファイル(モジュール)を実行するためには、 「バッチ処理」と呼ばれる手続きにより計算サーバーに処理の依頼をする必要があります。

詳細は バッチ処理を参照してください。