富士通コンパイラ利用法
最終更新日:2020年6月30日富士通コンパイラはHPCミドルウェアFUJITSU Software Technical Computing Suite (TCS)の一部を構成するソフトウェアです。 ここでは、主にプログラム言語Fortran、C、C++の翻訳・実行方法とバッチ処理方法について解説します。
利用環境
システム・利用範囲
- サブシステムA
- サブシステムB
九州大学構成員 | 学術研究機関構成員 | 民間利用の方 |
---|---|---|
○ | ○ | ○ |
九州大学構成員 | 学術研究機関構成員 | 民間利用の方 |
---|---|---|
○ | ○ | ○ |
利用コマンド
プログラム言語の翻訳・リンクのための書式とコマンドの一覧は以下の通りです。
コマンド [option] file [...] |
言語処理系 | コマンド | 自動並列化* | OpenMP* | |
---|---|---|---|---|
非MPI並列 | Fortran | frt |
-Kparallel |
-Kopenmp |
C | fcc |
|||
C++ | FCC |
|||
MPI並列 | Fortran | mpifrt |
||
C | mpifcc |
|||
C++ | mpiFCC |
|||
データ並列 | XPFortran | xpfrt |
* 自動並列化およびOpenMPオプションはデフォルトでは無効です。
利用方法
C/C++
C/C++コンパイラにはfcc
/ FCC
コマンドを用います。
またIntel MPIを利用する場合には,mpifcc
/ mpiFCC
コマンドを用います。
(以下のプログラム例では fcc
およびmpifcc
のみを記載しますのでC++を使う場合はfcc
および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 |
Fortran
Fortranコンパイラは frt
コマンドを利用します。
またMPIライブラリを使用する場合はmpifrt
コマンドを利用します。
例1)逐次プログラム
$ 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 |
主なコンパイルオプション
コンパイルオプション | 説明 |
---|---|
-c | オブジェクトファイルまで生成 |
-o exe_file |
実行可能ファイル名/オブジェクトファイル名をexe_fileに変更 実行可能ファイル名を省略した場合にはa.out |
-O[0, 1, 2, 3] | 最適化レベルを指定。-Oの後の数字を省略した場合は-O3 (デフォルトでは-O2) |
-Kfast | 高速化のための最適化オプションを誘導(最適化での推奨オプション) |
-Kparallel | 自動並列化を行う (デフォルト: -Knoparallel) |
-Kopenmp | OpenMP Fortran 仕様ディレクティブを有効化。(デフォルト: -Knoopenmp) |
-Kocl | 最適化制御行を有効化(デフォルト: -Knoocl) |
-I directory | インクルードファイル、モジュールファイルを検索するディレクトリを指定 |
-Fixed (Fortranのみ) | ソースコードが固定形式で記述されていることを指定 |
-Free (Fortranのみ) | ソースコードが自由形式で記述されていることを指定 |
-Fwide (Fortranのみ) | ソースコードの1行の長さが255の固定形式で記述されていることを指定 |
-fw | wレベル(低レベルのエラー)およびsレベル(重度のエラー)の診断メッセージのみを出力 |
-fs | sレベル(重度のエラー)の診断メッセージのみを出力 |
-Haefosux (Fortranのみ) | 翻訳時および実行時に引数の整合性、添字式、部分列式の値、未定義な変数の参照または配列式の形状適合などを検査。 |
-Koptmsg[=level] |
最適化状況をメッセージ出力 -Koptmsg=1: 実行結果に副作用を生じる可能性がある最適化をしたことを出力 -Koptmsg=2: optmsg=1に加えて自動並列化・SIMD化・ループアンローリングなどの最適化機能が動作したことを出力 -Koptmsgの後の数字を省略した場合は-Koptmsg=1(デフォルト: -Koptmsg=1) |
-Qt | 詳細な最適化情報及び統計情報を出力 |
-V | コンパイラのバージョン情報を出力 |
-Xg (Cのみ) | GNU Cコンパイラ仕様の言語仕様に基づいてコンパイル。-Xgオプションが指定された場合、C89規格でコンパイルする。 GNU拡張仕様とC99規格を同時に指定する場合には、-noansiオプションを同時に指定する必要がある |
-Nsta (C/C++のみ) | 統計情報を出力 |
C/C++ および Fortranの標準的なオプションとして、"-Kfast,parallel
"を推奨します。
最適化機能は、プログラムデータの特性によって効果がある場合と、そうでない場合があり、実際に動作させて検証する必要があります。
詳しくは「C言語使用手引書 第3章 逐次最適化機能」、「C++言語使用手引書 第3章 逐次最適化機能」または「Fortran使用手引書 第9章 最適化機能」を参照してください。
なお、本コンパイラは、現時点で AVX512には対応していません。
実行時環境変数
Fortran / C / C++ プログラムにおいて実行時に指定可能な主な環境変数は以下の通りです。
環境変数 | 説明 |
---|---|
PARALLEL |
自動並列化によりスレッド並列化されたプログラムを実行する場合にスレッド数を指定。 |
OMP_NUM_THREADS |
OpenMP によりスレッド並列化されたプログラムを実行する場合にスレッド数を指定。 |
THREAD_STACK_SIZE |
スレッド毎のスタック領域の大きさをキロバイト単位で指定。 |
数値計算ライブラリ
富士通コンパイラから利用できる数値演算ライブラリに BLAS / LAPACK / ScaLAPACK、およびSSL IIがあります。
BLAS / LAPACK / ScaLAPACK
ライブラリ名 | バージョン | 説明 |
---|---|---|
BLAS | - | ベクトル演算や行列演算ライブラリ ※ Level3 全ルーチン,Level2 重要ルーチンでスレッド並列ルーチンを提供 |
LAPACK | 3.2.2 | 線形代数ライブラリ ※ 重要ルーチンでスレッド並列ルーチンを提供 |
ScaLAPACK | 1.8 | 線形代数メッセージパッシング並列ライブラリ ※ ScaLAPACK1.8 の追加機能を提供 |
利用ライブラリ | 並列性 | 指定オプション | 備考 |
---|---|---|---|
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 |
SSL II(Scientific Subroutine Library 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倍精度基本演算ライブラリ | 4倍精度の値を double-double 形式で表現し、高速に演算を行うライブラリ |
利用ライブラリ | 並列性 | 指定オプション | 備考 |
---|---|---|---|
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 |
XPFortran
XPFortran コンパイラは xpfrt
コマンドを利用します。
$ xpfrt -Kfast sample.f90 |
オプションの詳細はマニュアル「XPFortran使用手引書(PCクラスタ) 第2章言語処理システム」を参照してください。
バッチ処理
ITOのサブシステム A/Bで富士通コンパイラで作成した実行可能ファイル(モジュール)を実行するためには、 「バッチ処理」と呼ばれる手続きにより計算サーバーに処理の依頼をする必要があります。
バッチ処理の詳細は バッチ処理を参照してください。
以下に富士通コンパイラで翻訳した実行可能ファイルをバッチジョブにより処理するスクリプトの例を示します。
例1)逐次プログラム
|
:1ノード(1プロセス) |
:1コア(1スレッド)(リソースグループのコア数を指定) | |
:10分 | |
:あり | |
:ito-single |
|
|
例2)ノード内スレッド並列(OpenMP)プログラム
:1ノード(1プロセス) | |
:36コア(36スレッド、自動並列)(リソースグループのコア数を指定) | |
:10分 | |
:あり | |
:ito-ss-dbg |
|
|
例3)ノード内スレッド並列(自動並列)プログラム
:1ノード(1プロセス) | |
:36コア(36スレッド、OpenMP並列) | |
:10分 | |
:あり | |
:ito-ss-dbg |
|
|
例4)フラットMPI並列プログラム
:144ノード(144プロセス)(リソースグループのコア数以下を指定) | |
:1コア(1スレッド) | |
:10分 | |
:あり | |
:ito-g-16-dbg |
|
|
例5)ハイブリッド並列化プログラム
:24ノード(24プロセス) | |
:6コア(6スレッド) (仮想ノード数 * 仮想ノードあたりのコア数がリソースグループのコア数以下となるよう指定) |
|
:10分 | |
:あり | |
:ito-s-dbg |
|
|
MPI用のジョブオプション
MPIジョブを実行する際に指定する主なオプションは以下の通りです。 --mpi オプションに続けてMPI 実行時の動作を指定します。 詳細はマニュアル「ジョブ運用ソフトウェア エンドユーザ向けガイド」を参照ください。
オプション名 | 説明 |
---|---|
--mpi proc=num | 静的に起動する最大プロセス数を指定 省略時は仮想ノード数となる。 |
--mpi rank-map-bynode[=rankmap] | ノードに1プロセス生成すると次のノードに移動し、ラウンドロビンでランクを割り付ける (rank-map-bychipと排他) |
--mpi rank-map-bychip[:rankmap] | ノードに [proc÷vnode-code](小数点以下切り上げ)のプロセスを生成すると 次のノードに移動しランクを割り付ける(rank-map-bynodeと排他) |
--mpi rank-map-hostfile=filename | filenameに従って生成するプロセスのランクを割り付ける |