MPIによるノード間並列に加えて、自動並列化やOpenMPによってノード内並列実行を行うことが可能です。MPIコードに対して、自動並列化やOpenMP用の指示行挿入を行う必要がありますので、まず以下をご一読ください。
自動並列化/OpenMPの利用方法
コンパイル
SQUIDではintel MPIコンパイラが利用可能です。プログラミング言語ごとにコマンドが異なりますので、ご注意ください。
MPI+自動並列化
$ module load BaseCPU
$ mpiifort -parallel [options] source_file (Fortranの場合)
$ mpiicc -parallel [options] source_file (Cの場合)
$ mpiicpc -parallel [options] source_file (C++の場合)
MPI+OpenMP
$ module load BaseCPU
$ mpiifort -qopenmp [options] source_file (Fortranの場合)
$ mpiicc -qopenmp [options] source_file (Cの場合)
$ mpiicpc -qopenmp [options] source_file (C++の場合)
実行スクリプト
MPI&自動並列化/OpenMPプログラムを実行する際のスクリプト例は下記の通りです。
4ノード並列実行(intelMPI)、1ノードにつき76並列実行(自動並列化/OpenMP)、経過時間 1時間でMPIのバッチリクエストを実行するスクリプトになります。
-l オプションで指定するcpunum_job(1ノードあたりの利用コア数)と-v オプションで指定するOMP_NUM_THREADS(1ノード内の自動並列化/OpenMPプロセス数)は同じ値を指定してください。
2つの値が異なっていると実行性能が低下する場合があります。
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #PBS -q SQUID #PBS --group=securenet #PBS -l cpunum_job=76,elapstim_req=1:00:00 #PBS -T intmpi # Intel MPI 実行時に必須 #PBS -b 4 # 利用するノード数を指定 #PBS -v OMP_NUM_THREADS=76 # 自動並列化/OpenMPプロセス数(1ノード内の自動並列化/OpenMPプロセス数) cd $PBS_O_WORKDIR module load BaseCPU mpirun ${NQSV_MPIOPTS} -np 4 ./a.out # -np (MPIプロセス数) 実行ファイル名 |
マルチノード実行時の注意点
ジョブスクリプトで「setenv (オプション名)」などでオプションや環境変数を指定した場合、マスターノードにのみ設定され、スレーブノードには設定されません。
全ノードに設定を反映させたい場合は「#PBS -v (オプション名)」と指定してください。
詳細は下記に記載しております。
ジョブスクリプトの書き方 環境変数の指定