OCTOPUSでは、PGIコンパイラが利用可能です。バージョンは18.1となります。
PGIコンパイラの利用方法
事前準備
PGIコンパイラを使用する前に、PATHの設定をお願いたします。
export PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/bin/:$PATH
コンパイル コマンド
コンパイルを行う際のコマンドは、プログラミング言語ごとに異なります。
C言語 | C++言語 | Fortran言語 | |
---|---|---|---|
PGIコンパイラ | pgcc | pg++ | pgfortran |
実行スクリプト
プログラムの実行については、基本的な利用方法と差はありません。下記をご参照ください。
プログラムの実行方法
PGIコンパイラ+OpenMPIライブラリの利用方法
PGIコンパイラではOpenMPIライブラリが利用可能です。GPUの使用を前提としていますが、使用しない場合も並列実行可能です。詳細は実行スクリプトをご覧ください。
事前準備
コンパイルを行う前に、下記のPATHの設定をお願いたします。
export PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/bin/:$PATH
export PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/mpi/openmpi/bin:$PATH
コンパイル コマンド
コンパイルを行う際のコマンドは、プログラミング言語ごとに異なります。
C言語 | C++言語 | Fortran言語 | |
---|---|---|---|
OpenMPI | mpicc | mpic++ | mpif90 |
実行スクリプト
OpenMPI(PGIコンパイラ)でのスクリプト例は下記の通りです。
2ノード48プロセス並列実行(1ノードあたり24プロセス)、経過時間 10時間でOpenMPI(PGIコンパイラ)のバッチリクエストを実行するスクリプトになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l elapstim_req=10:00:00,cpunum_job=24 #PBS -T openmpi #PBS -v OMPI=PGI #PBS -b 2 export PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/bin:$PATH export PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/mpi/openmpi/bin:$PATH export LD_LIBRARY_PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/mpi/openmpi/lib:$LD_LIBRARY_PATH cd $PBS_O_WORKDIR mpirun ${NQSII_MPIOPTS} --mca mpi_cuda_support 0 -np 48 ./a.out |
OpenMPI(PGIコンパイラ)を利用する場合、OpenMPI(GNUコンパイラ)の場合と違い5行目の -v オプションを指定する必要があります。
12行目で記述している「--mca mpi_cuda_support 0」はGPU(CUDAライブラリ)を利用しないこと指示しています。必須ではありませんが、余計な警告文が出力されるため、GPUノード以外で実行する場合は記述しておくとよいでしょう。GPUノードで実行する場合は不要ですが、GPUを利用する場合はCUDAのパスを通す必要があります。
OpenACCの利用方法
PGIコンパイラではOpenACCディレクティブが利用可能です。OpenACCを使用することで、比較的簡単にGPU向けの最適化が行えます。OpenMPIとの併用も可能です。
コンパイル例
OpenACCディレティブを挿入したコードtest.f90を、OCTOPUS GPUノード群向けにコンパイルする場合は、以下のようになります。
MPIを利用しない場合
pgfortran -O3 -acc -Minfo=accel -ta=tesla,cc60 -Mpreprocess test.f90
MPIを利用する場合
mpif90 -O3 -acc -Minfo=accel -ta=tesla,cc60 -Mpreprocess test.f90
実行スクリプト
GPUを利用するプログラムのOpenMPI(PGIコンパイラ)でのスクリプト例は下記の通りです。OpenACCを利用するプログラムも下記ジョブスクリプトで実行可能です。
2ノード8プロセス、8GPU並列実行(1ノードあたり4プロセス、4GPU)、経過時間 10時間でOpenMPI(PGIコンパイラ)のバッチリクエストを実行するスクリプトになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l elapstim_req=10:00:00,cpunum_job=4,gpunum_job=4 #PBS -T openmpi #PBS -v OMPI=PGI #PBS -b 2 export PATH=/octfs/apl/CUDA/cuda-9.0/bin:$PATH export LD_LIBRARY_PATH=/octfs/apl/CUDA/cuda-9.0/lib64:$LD_LIBRARY_PATH export PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/bin:$PATH export LD_LIBRARY_PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/lib:$LD_LIBRARY_PATH export PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/mpi/openmpi/bin:$PATH export LD_LIBRARY_PATH=/octfs/apl/pgi/18.10/linux86-64/18.10/mpi/openmpi/lib:$LD_LIBRARY_PATH cd $PBS_O_WORKDIR mpirun ${NQSII_MPIOPTS} -np 8 ./a.out |
マニュアル
下記をご参照ください。
PGI version 18.10 Documentation