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

アクセラレータサーバでは以下のコンパイラを提供しています。

コンパイラ名称 バージョン 備考
Intelコンパイラ Fortran/C/C++ 2022.3.1
2021.5.0
19.1.3.304
19.1.0.166
19.0.2.187
18.0.3.222
17.0.4.196
デフォルト : 17.0.4.196
2021.5.0はアプリケーションの実行時のみ利用可能であり、コンパイルはできません。
PGIコンパイラ Fortran/C/C++ 20.4
19.10
19.1
18.10
18.5
デフォルト : 19.1-0
NVIDIA HPCコンパイラ 23.1
22.11
22.5
21.11
20.9
デフォルト : 20.9
GNUコンパイラ Fortran/C/C++ 4.9.1
6.1.0
8.5.0
11.3.0
デフォルト : 6.1.0
nvccコンパイラ (CUDA Toolkit) 11.6.2
10.2.89
10.1.243
9.2.148
9.0.176
8.0.44
デフォルト : 9.0.176



Intelコンパイラ


プログラム環境の設定
Intelコンパイラはデフォルトで設定されています。
バージョンを切替える場合には以下を実行してください。

・例:バージョンの切替

$ module avail intel
intel/17.0.4(default)
intel/18.0.3
intel/19.0.2
intel/19.1.0
intel/19.1.3
intel/21.5.0
intel/oneapi/22.3.1

$ module switch intel/17.0.4 intel/18.0.3

intel/21.5.0はアプリケーションの実行時のみ利用可能であり、コンパイルはできません。

コンパイル方法

・serial

言語 コマンド 実行形式
Fortran ifort ifort [オプション] ファイル
C icc icc [オプション] ファイル
C++ icpc icpc [オプション] ファイル


・MPI

言語 コマンド 実行形式
Fortran mpiifort ifort [オプション] ファイル
C mpiicc mpiicc [オプション] ファイル
C++ mpiicpc mpiicpc [オプション] ファイル


コンパイルオプション

・最適化オプション他

オプション 説明
-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指示文を有効にしてコンパイルする場合に指定します。
-xcore-avx512 インテルAVX-512命令をターゲットに指定します。
当該オプションの指定を推奨します。


・Fortran専用オプション

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


・デバッグ用オプション

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


使用例

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

$ ifort -xcore-avx512 -fixed -o hello.out hello.f


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

$ ifort -xcore-avx512 -free -o hello.out hello.f90


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

$ ifort -xcore-avx512 -fixed -parallel -o hello.out hello.f


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

$ ifort -xcore-avx512 -free -parallel -o hello.out hello.f90


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

$ icc -xcore-avx512 -o hello.out hello.c


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

$ icc -xcore-avx512 -parallel -o hello.out hello.c


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

$ icpc -xcore-avx512 -o hello.out hello.cpp


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

$ icpc -xcore-avx512 -parallel -o hello.out hello.cpp



PGIコンパイラ


プログラム環境の設定
以下のバージョンが利用可能です。

$ module avail PrgEnv-pgi
PrgEnv-pgi/18.5
PrgEnv-pgi/18.10
PrgEnv-pgi/19.1(default)
PrgEnv-pgi/19.10
PrgEnv-pgi/20.4


アクセラレータサーバではIntelコンパイラがデフォルトで設定されているため、下記のように環境を切替えて下さい。

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

$ module switch intel PrgEnv-pgi


コンパイル方法

・serial

言語 コマンド 実行形式
Fortran pgif90 pgif90 [オプション] ファイル
C pgcc pgcc [オプション] ファイル
C++ pgc++ pgc++ [オプション] ファイル


・MPI

言語 コマンド 実行形式
Fortran mpif90 mpif90 [オプション] ファイル
C mpicc mpicc [オプション] ファイル
C++ mpic++ mpic++ [オプション] ファイル


コンパイルオプション

・最適化オプション他

オプション 説明
-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という実行モジュールを作成

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


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

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


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

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


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

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


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

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


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

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


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

$ pgcc -o hello.out hello.c


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

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


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

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


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

$ pgc++ -o hello.out hello.cpp


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

$ pgc++ -Mconcur -o hello.out hello.cpp


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

$ pgc++ -mp -o hello.out hello.cpp



NVIDIA HPCコンパイラ


プログラム環境の設定
以下のモジュールが利用可能です。

モジュール名 説明
nvhpc NVIDIA HPCコンパイラ、CUDAライブラリ、MPI、およびNCCLやNVSHMEMなどの追加ライブラリの環境変数設定を行います。
nvhpc-nompi NVIDIA HPCコンパイラ、CUDAライブラリ、およびNCCLやNVSHMEMなどの追加ライブラリの環境変数設定を行います。
nvhpc-byo-compilers CUDAライブラリ、およびNCCLやNVSHMEMなどの追加ライブラリの環境変数設定を行います。
nvhpc-hpcx MPIなどの追加ライブラリの環境変数設定を行います。


以下コマンドを実行してください。

$ module avail nvhpc 
nvhpc/20.9(default) nvhpc-byo-compiler/20.9(default)
nvhpc-nompi/20.9(default)
nvhpc/21.11 nvhpc-byo-compiler/21.11 nvhpc-nompi/21.11
nvhpc/22.5 nvhpc-byo-compiler/22.5 nvhpc-nompi/22.5
nvhpc/22.11 nvhpc-byo-compiler/22.11 nvhpc-nompi/22.11
nvhpc/23.1 nvhpc-byo-compiler/23.1 nvhpc-nompi/23.1
nvhpc-hpcx/23.1

$ module switch intel nvhpc


コンパイル方法

・serial

言語 コマンド 実行形式
Fortran nvfortran nvfortran [オプションの並び] ファイルの並び
C nvc nvc [オプションの並び] ファイルの並び
C++ nvc++ nvc++ [オプションの並び] ファイルの並び

・MPI

言語 コマンド 実行形式
Fortran mpif90 mpif90[オプションの並び] ファイルの並び
C mpicc mpicc [オプションの並び] ファイルの並び
C++ mpic++ mpic++ [オプションの並び] ファイルの並び


コンパイルオプション

・最適化オプション他

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

・Fortran専用オプション

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

・デバッグ用オプション

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


使用例

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

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


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

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


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

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


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

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


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

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


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

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


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

$ nvc -o hello.out hello.c


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

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


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

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


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

$ nvc++ -o hello.out hello.cpp


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

$ nvc++ -Mconcur -o hello.out hello.cpp


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

$ nvc++ -mp -o hello.out hello.cpp



GNUコンパイラ


プログラム環境の設定
特に設定を行わない場合、GNUコンパイラのバージョンはOSデフォルトの4.8.5となります。
他のバージョンを使用する場合、以下コマンドを実行してください。

$ module avail gcc
gcc/4.9.1 gcc/6.1.0(default) gcc/8.5.0 gcc/11.3.0

$ module load gcc


コンパイル方法

・serial

言語 コマンド 実行形式
Fortran gfortran gfortran [オプション] ファイル
C gcc gcc [オプション] ファイル
C++ g++ g++ [オプション] ファイル


・MPI

言語 コマンド 実行形式
Fortran mpif90 mpif90 [オプション] ファイル
C mpicc mpicc [オプション] ファイル
C++ mpicxx mpicxx [オプション] ファイル


コンパイルオプション

・最適化オプション他

オプション 説明
-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という実行モジュールを作成

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


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

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


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

$ gcc -o hello.out hello.c


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

$ g++ -o hello.out hello.cpp



nvccコンパイラ


プログラム環境の設定
デフォルトでcuda が使用できます。
バージョンを切替える場合には以下を実行してください。

$ module switch cudatoolkit/9.0.176 cudatoolkit/10.1.243


Intelコンパイラをバックエンドとして使う場合、デフォルトでセットアップされています。
PGIコンパイラをバックエンドとして使う場合、PGIコンパイラをセットアップしてください。

$ module switch intel PrgEnv-pgi


コンパイルオプション

オプション 説明
-ccbin コンパイラ バックエンドコンパイラを指定します。
Intelコンパイラの場合 : icpc
PGIコンパイラの場合 : pgc++
-O0|1... 最適化オプション(バックエンドコンパイラに渡されます)
-Xcompiler options 最適化オプション以外のコンパイルオプション(バックエンドコンパイラに渡されます)
-gencode options 生成するコードのCUDAバージョンを指定します。
–machine {32|64}
(-m)
32ビット|64ビットを指定します。
-I include_path インクルードヘッダの検索パスを指定します。
-l library_name リンクするライブラリ名を指定します。
-L library_path ライブラリの検索パスを指定します。
–help (-h) 利用可能なオプションの一覧と説明を表示します。
–version (-V) バージョン情報を表示します。


使用例

・バックエンドコンパイラにインテルコンパイラ(icpc)を指定する場合

$ nvcc –ccbin icpc -m64 -gencode arch=compute_70,code=compute_70 -o simple simple.cpp


・バックエンドコンパイラにPGIコンパイラ(pgc++)を指定する場合

$ nvcc -ccbin pgc++ -m64 -gencode arch=compute_70,code=compute_70 -o simple simple.cpp


アクセラレータサーバでは以下のライブラリを提供しています。

ライブラリ名称 バージョン リンク可能なコンパイラ 備考
Intel MKL(インテルマス・カーネル・ライブラリー) 19.1.3.304
19.1.0.166
19.0.2.187
18.0.3.222
17.0.4.196
Intelコンパイラ
cuBLAS 9.0
8.0
Intel コンパイラ
PGI コンパイラ
cuDNN 7.6.5 for CUDA10.2
7.6.3 for CUDA10.1
7.6.5 for CUDA9.2
7.6.3 for CUDA9.0
Intel コンパイラ
PGI コンパイラ



Intel MKL

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

プログラム環境の設定

Intel MKLはデフォルトで環境設定されます。
バージョンを切替える場合には以下を実行してください。

$ module switch intel/17.0.4 intel/18.0.3


使用例

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

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


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

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



nvccコンパイラ


プログラム環境の設定
デフォルトでcuda が使用できます。
バージョンを切替える場合には以下を実行してください。

$ module switch cudatoolkit/9.0.176 cudatoolkit/10.1.243


Intelコンパイラをバックエンドとして使う場合、デフォルトでセットアップされています。
PGIコンパイラをバックエンドとして使う場合、PGIコンパイラをセットアップしてください。

$ module switch intel PrgEnv-pgi


コンパイルオプション

オプション 説明
-ccbin コンパイラ バックエンドコンパイラを指定します。
Intelコンパイラの場合 : icpc
PGIコンパイラの場合 : pgc++
-O0|1... 最適化オプション(バックエンドコンパイラに渡されます)
-Xcompiler options 最適化オプション以外のコンパイルオプション(バックエンドコンパイラに渡されます)
-gencode options 生成するコードのCUDAバージョンを指定します。
–machine {32|64}
(-m)
32ビット|64ビットを指定します。
-I include_path インクルードヘッダの検索パスを指定します。
-l library_name リンクするライブラリ名を指定します。
-L library_path ライブラリの検索パスを指定します。
–help (-h) 利用可能なオプションの一覧と説明を表示します。
–version (-V) バージョン情報を表示します。


使用例

・バックエンドコンパイラにインテルコンパイラ(icpc)を指定する場合

$ nvcc –ccbin icpc -m64 -gencode arch=compute_70,code=compute_70 -o simple simple.cpp


・バックエンドコンパイラにPGIコンパイラ(pgc++)を指定する場合

$ nvcc -ccbin pgc++ -m64 -gencode arch=compute_70,code=compute_70 -o simple simple.cpp


cuBLAS

cuBLASは、cuda対応のBLASライブラリです。

プログラム環境の設定

・デフォルトでcuda(含むcuBLAS)が使用できます。
バージョンを切替える場合には以下を実行してください。

$ module switch cudatoolkit/9.0.176 cudatoolkit/8.0.44


Intelコンパイラをバックエンドとして使う場合、デフォルトでセットアップされています。
PGIコンパイラをバックエンドとして使う場合、PGIコンパイラをセットアップしてください。

$ module switch intel PrgEnv-pgi


使用例

・インテルコンパイラ(icc)をバックエンド指定し、cuBLASライブラリをリンクする場合

$ nvcc -ccbin icpc -I../../common/inc -m64 -gencode arch=compute_70,code=compute_70 -o simpleCUBLAS simpleCUBLAS.cpp -lcublas


・PGIコンパイラ(pgc++)をバックエンド指定し、cuBLASライブラリをリンクする場合

$ nvcc -ccbin pgc++ -I../../common/inc -m64 -gencode arch=compute_70,code=compute_70 -o simpleCUBLAS simpleCUBLAS.cpp -lcublas



cuDNN


プログラム環境の設定

・デフォルトでcuda (含むcuDNN)が使用できます。
バージョンを切替える場合には以下を実行してください。

$ module switch cudatoolkit/9.0.176 cudatoolkit/10.1.243


Intelコンパイラをバックエンドとして使う場合、デフォルトでセットアップされています。
PGIコンパイラをバックエンドとして使う場合、PGIコンパイラをセットアップしてください。

$ module switch intel PrgEnv-pgi


使用例

・インテルコンパイラ(icc)をバックエンド指定し、cuDNNライブラリをリンクする場合

$ nvcc -ccbin icpc -I../../common/inc -m64 -gencode arch=compute_70,code=compute_70 -o simpleCUBLAS simpleCUBLAS.cpp -lcudnn


・PGIコンパイラ(pgc++)をバックエンド指定し、cuDNNライブラリをリンクする場合

$ nvcc -ccbin pgc++ -I../../common/inc -m64 -gencode arch=compute_70,code=compute_70 -o simpleCUBLAS simpleCUBLAS.cpp -lcudnn


  • user_manual/acceleratorserver/compilers_libraries.txt
  • 最終更新: 2023/08/09 00:44
  • by ccms