SQUIDではOpenACCディレクティブが利用可能です。OpenACCを使用することで、比較的簡単にGPU向けの最適化が行えます。OpenMPIとの併用も可能です。
OpenACCの利用方法
事前準備
-
OpenACCを使用する前に、moduleコマンドでBaseGPU環境を読み込んでください。
module load BaseGPU
コンパイル コマンド
-
コンパイルを行う際のコマンドは、プログラミング言語ごとに異なります。OpenACCディレクティブを使用する場合は-accオプションを指定してください
ノード内実行
C言語 | C++言語 | Fortran言語 | |
---|---|---|---|
コマンド | nvc -acc | nvc++ -acc | nvfortran -acc |
ノード間実行(MPI)
C言語 | C++言語 | Fortran言語 | |
---|---|---|---|
コマンド | mpicc -acc | mpic++ -acc | mpif90 -acc |
 
コンパイル例
-
OpenACCディレティブを挿入したコードtest.f90を、SQUID GPUノード群向けにコンパイルする場合は、以下のようになります。(-Minfo=accelオプションでGPUへの最適化メッセージを出力しています。
nvc -O3 -acc -Minfo=accel test.f90
実行スクリプト
ノード内実行
-
OpenACCディレクティブでGPUを利用するプログラムのスクリプト例は下記の通りです。
1ノード8GPU実行、経過時間 1時間でのバッチリクエストを実行するスクリプトになります。
1 2 3 4 5 6 7 8 9 |
#!/bin/bash #PBS -q SQUID #PBS --group=【グループ名】 #PBS -l elapstim_req=01:00:00 #PBS -l gpunum_job=8 module load BaseGPU export UCX_TLS=sm,cuda_copy,cuda_ipc,gdr_copy,self #1ノードで実行する場合は設定してください cd $PBS_O_WORKDIR ./a.out |
ノード間実行(MPI)
-
OpenACCディレクティブでGPUを利用するMPIプログラムのスクリプト例は下記の通りです。
1ノード8GPU実行、2ノード利用(1ノードにつき8プロセス生成、計16プロセス利用)、経過時間 1時間でのバッチリクエストを実行するスクリプトになります。
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash #PBS -q SQUID #PBS --group=【グループ名】 #PBS -l elapstim_req=01:00:00 #PBS -b 2 #PBS -l gpunum_job=8 #PBS -T openmpi #PBS -v NQSV_MPI_MODULE=BaseGPU cd ${PBS_O_WORKDIR} module load BaseGPU mpirun ${NQSV_MPIOPTS} -np 16 -npernode 8 mpi_prog |