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