コンパイラ・ライブラリ使用方法

大規模並列計算サーバでのコンパイラ・ライブラリの使用方法を記載します。

スーパーコンピュータでは以下のコンパイラを提供しています。

コンパイラ名称 バージョン 備考
Crayコンパイラ Fortran/C/C++ 8.7.10
8.6.5
デフォルト:8.6.5
Intelコンパイラ Fortran/C/C++ 19.1.3.304
19.1.0.166
19.0.2.187
18.0.2.199
17.0.4.196
デフォルト:18.0.2.199
PGIコンパイラ Fortran/C/C++ 19.1-0
18.5-0
デフォルト:19.1-0
GNUコンパイラ Fortran/C/C++ 4.9.3
5.3.0
6.1.0
7.3.0
8.3.0
デフォルト:7.3.0

プログラミング環境


コマンド
Fortran, C, C++コンパイラのコマンド名はftn, cc, CCに統一されています。
プログラミング環境を切り替えることで、コマンドが内部で呼び出すコンパイラが自動的に切り替わります。

コンパイラ コマンド Crayコンパイラ Intelコンパイラ PGIコンパイラ GNUコンパイラ
Fortran ftn crayftn ifort pgf90 gfortran
C cc craycc icc pgcc gcc
C++ CC crayCC icpc pgc++ g++

重要

MPIプログラムをコンパイルする場合もftn, cc, CCコマンドを利用します。
MPIライブラリは自動的にリンクされるので、明示的にリンクオプションを付ける必要はありません。


プログラミング環境の切り替え
各プログラミング環境に対応するモジュールファイルは以下の通りです。

Crayコンパイラ Intelコンパイラ PGIコンパイラ gnuコンパイラ
PrgEnv-cray PrgEnv-Intel PrgEnv-pgi PrgEnv-gnu

プログラミング環境はmodule switchコマンドで切り替えます。
デフォルトではCrayコンパイラPrgEnv-crayがロードされています。
例として、Intelコンパイラに切り替える場合には以下のように実行します。

$ module switch PrgEnv-cray PrgEnv-intel


共通オプション
以下オプションが全プログラミング環境に共通で指定可能です。

オプション 説明
-craype-verbose コンパイラ・リンカに渡すオプションの表示
-static リンカに静的リンクを指示
-dynamic リンカに動的リンクを指示
-shared 実行時に動的にリンクするライブラリを作成
-help プログラミング環境個別のオプションを表示

Crayコンパイラ


プログラム環境の設定
superではCrayコンパイラをデフォルトで設定しています。
他の環境に切り替えていた場合は下記のように環境を切り替えて下さい。

・例:Intelコンパイラの環境からの切り替え

$ module switch PrgEnv-intel PrgEnv-cray 


バージョンを切り替える場合には以下を実行してください。

・例:バージョンの切り替え

$ module avail cce
cce/8.6.5(default)
cce/8.7.10
$ module switch cce cce/8.7.10


コンパイルオプション

・最適化オプション

オプション 説明
-o outfile 出力ファイル名を指定する。
省略時にはa.outが設定される。
-l library_name リンクするライブラリ名を指定する。
-L library_path ライブラリの検索パスを指定する。
-h autothread ノード内自動並列化を適用する(デフォルト:無効)
-h omp/noomp OpenMP指示行による並列化を有効/無効にする(デフォルト:有効)
-h thread[0-3] OpenMP最適化レベルの指定(3:最高水準、デフォルトは2)
-O [0-3] 自動最適化レベルの指定(3:最高水準、デフォルトは2)
-h ipa[0-5] 関数のインライン展開最適化レベルの指定


・Fortran専用オプション

オプション 説明
-e0 未定義のローカルスタック変数をゼロ初期化する
-ev 変数をstaticに割り当てる(例外条件あり)
-ez allocate()文で確保した領域をゼロ初期化する
-f [free|fixed] ソースファイルの形式


・C専用オプション

オプション 説明
-h c99 C99仕様に準拠してコンパイルする
-h noc99 C99仕様に準拠しないでコンパイルする
-h zero 未定義のローカルスタック変数をゼロ初期化する


・デバッグ用オプション

オプション 説明
-g デバッグ情報を出力します。
-G [0-2] デバッグ情報の管理(0:最多の情報がデバッグ時に得られます。”-G0”=“-g”)
-K trap=… 例外処理をトラップします。[fp | divz | denorm | ... ]


使用例

・固定形式のFortranのソースプログラムhello.fからhello.outという実行モジュールを作成

$ ftn -f fixed -o hello.out hello.f


・自由形式のFortranのソースプログラムhello.f90からhello.outという実行モジュールを作成

$ ftn -f free -o hello.out hello.f90


・固定形式のFortranのソースプログラムhello.fから自動並列化したhello.outという実行モジュールを作成

$ ftn -h autothread -f fixed -o hello.out hello.f


・自由形式のFortranのソースプログラムhello.f90から自動並列化したhello.outという実行モジュールを作成

$ ftn -h autothread -f free -o hello.out hello.f90


・Cのソースプログラムhello.cからhello.outという実行モジュールを作成

$ cc hello.c -o hello.out


・Cのソースプログラムhello.cから自動並列化したhello.outという実行モジュールを作成

$ cc -h autothread hello.c -o hello.out


・C++のソースプログラムhello.cppからhello.outという実行モジュールを作成

$ CC hello.cpp -o hello.out


・C++のソースプログラムhello.cppから自動並列化したhello.outという実行モジュールを作成

$ CC -h autothread hello.cpp -o hello.out

Intelコンパイラ


プログラム環境の設定
superではCrayコンパイラがデフォルトで設定されているため下記のように環境を切り替えて下さい。

・例:Crayコンパイラの環境からの切り替え

$ module switch PrgEnv-cray PrgEnv-intel


バージョンを切り替える場合には以下を実行してください。

・例:バージョンの切替

$ module avail intel
intel/17.0.4.196
intel/18.0.2.199(default)
intel/19.0.2.187
intel/19.1.0.166
intel/19.1.3.304

$ module switch intel intel/19.0.2.187


コンパイルオプション

・最適化オプション他

オプション 説明
-o outfile 出力ファイル名を指定します。省略時にはa.outが設定されます。
-l library_name リンクするライブラリ名を指定します。
-L library_path ライブラリの検索パスを指定します。
-O0|-O1|-O2|-O3 最適化オプションを指定します。デフォルトは-O2です。
-fast プログラム全体の速度を最大限にします。次のオプションが内部的に設定されます。
-ipo、-O3、-no-prec-div、-static、-fp-model fast=2、-xHost
-parallel 自動並列化を有効にしてコンパイルする場合に指定します。
-openmp OpenMP指示文を有効にしてコンパイルする場合に指定します。


・Fortran専用オプション

オプション 説明
-free|-fixed プログラムが自由形式(free)であるか固定形式(fixed)であるかを指定します。


・デバッグ用オプション

オプション 説明
-g デバッグ情報を出力します。
-traceback エラーが発生した場合にトレースバックを表示します。
-fpe[0-3] 例外処理をトラップします。(-fpe0が最も詳細)


使用例

・固定形式のFortranのソースプログラムhello.fからhello.outという実行モジュールを作成

$ ftn -fixed -o hello.out hello.f


・自由形式のFortranのソースプログラムhello.f90からhello.outという実行モジュールを作成

$ ftn -free -o hello.out hello.f90


・固定形式のFortranのソースプログラムhello.fから自動並列化したhello.outという実行モジュールを作成

$ ftn -fixed -parallel -o hello.out hello.f


・自由形式のFortranのソースプログラムhello.f90から自動並列化したhello.outという実行モジュールを作成

$ ftn -free -parallel -o hello.out hello.f90


・Cのソースプログラムhello.cからhello.outという実行モジュールを作成

$ cc -o hello.out hello.c


・Cのソースプログラムhello.cから自動並列化したhello.outという実行モジュールを作成

$ cc -parallel -o hello.out hello.c


・C++のソースプログラムhello.cppからhello.outという実行モジュールを作成

$ CC -o hello.out hello.cpp


・C++のソースプログラムhello.cppから自動並列化したhello.outという実行モジュールを作成

$ CC -parallel -o hello.out hello.cpp

PGIコンパイラ


プログラム環境の設定
superではCrayコンパイラがデフォルトで設定されているため下記のように環境を切り替えて下さい。

・例:Crayコンパイラの環境からの切り替え

$ module switch PrgEnv-cray PrgEnv-pgi


バージョンを切り替える場合には以下を実行してください。

・例:バージョンの切替

$ module avail pgi
pgi/18.5
pgi/19.1(default)

$ module switch pgi pgi/18.5


コンパイルオプション

・最適化オプション他

オプション 説明
-o outfile 出力ファイル名を指定します。省略時にはa.outが設定されます。
-l library_name リンクするライブラリ名を指定します。
-L library_path ライブラリの検索パスを指定します。
-O0|-O1|-O2|-O3|-O4 最適化オプションを指定します。デフォルトは-O2です。
-fast 一般的な最適化フラグセットが有効になります。
-Mconcur 自動並列化を有効にしてコンパイルする場合に指定します。
-mp OpenMP指示文を有効にしてコンパイルする場合に指定します。


・Fortran専用オプション

オプション 説明
-Mfree|-Mfixed プログラムが自由形式(free)であるか固定形式(fixed)であるかを指定します。


・デバッグ用オプション

オプション 説明
-g|-gopt デバッグ情報を出力します。


使用例

・固定形式のFortranのソースプログラムhello.fからhello.outという実行モジュールを作成

$ ftn -Mfixed -o hello.out hello.f


・固定形式のFortranのソースプログラムhello.fから自動並列化したhello.outという実行モジュールを作成

$ ftn -Mfixed -Mconcur -o hello.out hello.f


・固定形式のFortranのソースプログラムhello.fからOpenMPでhello.outという実行モジュールを作成

$ ftn -mp -Mfixed -o hello.out hello.f


・自由形式のFortranのソースプログラムhello.f90からhello.outという実行モジュールを作成

$ ftn -Mfree -o hello.out hello.f90 


・自由形式のFortranのソースプログラムhello.f90から自動並列化したhello.outという実行モジュールを作成

$ ftn -Mfree -Mconcur -o hello.out hello.f90


・自由形式のFortranのソースプログラムhello.f90からOpenMPでhello.outという実行モジュールを作成

$ ftn -mp -Mfree -o hello.out hello.f90


・Cのソースプログラムhello.cからhello.outという実行モジュールを作成

$ cc -o hello.out hello.c


・Cのソースプログラムhello.cから自動並列化したhello.outという実行モジュールを作成

$ cc -Mconcur -o hello.out hello.c


・Cのソースプログラムhello.cからOpenMPでhello.outという実行モジュールを作成

$ cc -mp -o hello.out hello.c


・C++のソースプログラムhello.cppからhello.outという実行モジュールを作成

$ CC -o hello.out hello.cpp


・C++のソースプログラムhello.cppから自動並列化したhello.outという実行モジュールを作成

$ CC -Mconcur -o hello.out hello.cpp


・C++のソースプログラムhello.cppからOpenMPでhello.outという実行モジュールを作成

$ CC -mp -o hello.out hello.cpp

GNUコンパイラ


プログラム環境の設定
superではCrayコンパイラがデフォルトで設定されているため下記のように環境を切り替えて下さい。

・例:Crayコンパイラの環境 からの切り替え

$ module switch PrgEnv-cray PrgEnv-gnu


バージョンを切り替える場合には以下を実行してください。

・例:バージョンの切替

$ module avail gcc
gcc/4.9.3
gcc/5.3.0
gcc/6.1.0
gcc/7.3.0(default)
gcc/8.3.0

$ module switch gcc gcc/8.3.0


コンパイルオプション

・最適化オプション他

オプション 説明
-o outfile 出力ファイル名を指定します。省略時にはa.outが設定されます。
-l library_name リンクするライブラリ名を指定します。
-L library_path ライブラリの検索パスを指定します。
-O0|-O1|-O2|-O3|-O4 最適化オプションを指定します。デフォルトは-O2です。
-fopenmp OpenMP指示文を有効にしてコンパイルする場合に指定します。


・Fortran専用オプション

オプション 説明
-ffree-form|-ffixed-form プログラムが自由形式(free)であるか固定形式(fixed)であるかを指定します。


・デバッグ用オプション

オプション 説明
-g デバッグ情報を出力します。
-g0|-g1|-g2|-g3 デバッグレベルを指定します。(-g2 = -g)


使用例

・固定形式のFortranのソースプログラムhello.fからhello.outという実行モジュールを作成

$ ftn -ffixed-form -o hello.out hello.f


・自由形式のFortranのソースプログラムhello.f90からhello.outという実行モジュールを作成

$ ftn -ffree-form -o hello.out hello.f90


・Cのソースプログラムhello.cからhello.outという実行モジュールを作成

$ cc -o hello.out hello.c


・C++のソースプログラムhello.cppからhello.outという実行モジュールを作成

$ CC -o hello.out hello.cpp


大規模並列計算サーバでは以下のライブラリを提供しています。

ライブラリ バージョン リンク可能なコンパイラ
CSML(Cray Scientific and Math Libraries) 19.05.5
18.03.1
各コンパイラ
Intel MKL(インテル マス・カーネル・ライブラリー) 19.1.3.304
19.1.0.166
19.0.2.187
18.0.2.199
17.0.4.196
Intelコンパイラ
Third Party Products - 各コンパイラ

CSML(Cray Scientific and Math Libraries)


CSML(Cray Scientific and Math Libraries)は、Crayが提供する科学数学ライブラリ群です。
以下のライブラリが利用可能です。

ライブラリ 説明 対応ライブラリ モジュール名 オプション
Cray LibSci XC50システム向けに最適化された科学技術計算ライブラリ
デフォルトでロードされる
BLAS,
LAPACK,
BLACS,
ScaLAPCK,
IRT, etc
cray-libsci
Cray PETSc(Portable, Extensible Toolkit for Scientific Computation) 線形・非線形方程式並列ソルバーライブラリ MUMPS,
SuperLU,
SuperLU_dist,
ParMETIS,
HYPRE, etc
cray-petsc
Cray Trilinos Packages 科学計算ライブラリのオブジェクト指向インターフェイス
cray-petscを事前にロードする必要あり
PETSc,
Metis/ParMetis,
SuperLU,
Aztec,
BLAS,
LAPACK
cray-trilinos
TPSL(Third Party Scientific Libraries) PETSc/Trilinosと組み合わせ可能な数学ライブラリ MUMPS,
Super_LU,
Super_LU_dist,
ParMetis,
Hypre,
Sumdials,
Scotch, etc
cray-tpsl
FFTW3.3 Library FFTW バージョン3.3FFTW3.3 cray-fftw -lfftw3
(MPI並列)
-lfftw3_mpi
(スレッド並列)
-lfftw3_threads
FFTW2.1 Library FFTW バージョン2.1
ライブラリ名が単精度・倍精度によって変わるため、リンク時に選択指示が必要
FFTW2.1 fftw (単精度)
-lsrfftw_mpi
-lsfftw_mpi
-lsrfftw
-lsfftw
(倍精度)
-ldrfftw_mpi
-ldfftw_mpi
-ldrfftw
-ldfftw


プログラム環境の設定
superではCrayコンパイラをデフォルトで設定しています。
必要に応じて利用するプログラム環境に切り替えて下さい。

・例:Intelコンパイラの環境への切替

$ module switch PrgEnv-cray PrgEnv-intel


使用例

・例1:CrayコンパイラでFFTW3.3 LibraryをMPI並列プログラムから利用する場合

$ module load cray-fftw
$ cc main.c -L${FFTW_DIR} -lfftw3_mpi -lfftw3


・例2:IntelコンパイラでFFTW3.3 LibraryをMPI並列とスレッド並列を組み合わせたプログラムから利用する場合

$ module switch PrgEnv-cray PrgEnv-intel
$ module load cray-fftw 
$ cc -qopenmp main.c -L${FFTW_DIR} -lfftw3_mpi -lfftw3_threads -lfftw3


・例3:FFTW2.1 Libraryを単精度で利用する場合

$ module load fftw
$ cc main.c -lsrfftw_mpi -lsfftw_mpi -lsrfftw -lsfftw 


・例4:FFTW2.1 Libraryを倍精度で利用する場合

$ module load fftw
$ cc main.c -ldrfftw_mpi -ldfftw_mpi -ldrfftw -ldfftw

Intel MKL


Intel MKL(インテル マス・カーネル・ライブラリー)は、BLAS, LAPACK, SparseBLAS, PARDISO, Iterative Sparse Solver, FFT, 乱数生成などを含むライブラリです。

プログラム環境の設定
Intelプログラム環境(PrgEnv-intel)をロードすることで利用可能です。なお、競合回避のため、cray-libsciはアンロードしてください。
・例:Crayコンパイラ環境からの切り替え

$ module switch PrgEnv-cray PrgEnv-intel
$ module unload cray-libsci 


使用例

・固定形式のBLASを使用したFortranのソースプログラムhello.fからhello.outという実行モジュールを作成

$ ftn -mkl -o hello.out -fixed hello.f 


・BLASを使用したCのソースプログラムhello.cからhello.outという実行モジュールを作成

$ cc -mkl -o hello.out hello.c

Third Party Products


以下のライブラリが使用可能です。

ライブラリ モジュール名称 備考
NetCDF(Unidata’s Network Common Data Format) Library cray-netcdf シリアル版
cray-parallel-netcdf 並列版
HDF5(Hierarchical Data Format 5) Libraries & Utilities cray-hdf5 シリアル版
cray-hdf5-parallel 並列版
  • user_manual/supercomputer/compilers_libraries.txt
  • 最終更新: 2023/04/11 05:49
  • (外部編集)