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