コンパイラ・ライブラリ使用方法
コンパイラ使用方法
アクセラレータサーバでは以下のコンパイラを提供しています。
コンパイラ名称 | バージョン | 備考 |
---|---|---|
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