SQUIDで、OpenMPIを使ったノード間並列(分散メモリ並列)処理を行う方法を解説します。
コンパイル方法
$module load BaseGCC
$ mpif90 [options] source_file (Fortranの場合)
$ mpicc [options] source_file (Cの場合)
$ mpic++ [options] source_file (C++の場合)
GCC 11.4+OpenMPI4.1.5をご利用いただく場合は、BaseGCCの代わりに以下を指定してください。
$ module load /system/apps/env/gcc/Compiler/gcc/11.4.0
$ module load /system/apps/env/gcc/mpi/gcc11.4.0/openmpi/4.1.5cu11.8
実行スクリプト
MPIを実行する際のコマンドは下記の通りです。
mpirun ${NQSV_MPIOPTS} -np (総並列数) 実行ファイル名
スクリプト例は下記の通りです。
4ノード並列実行、1ノードにつき76並列実行(計304並列実行)、経過時間 1時間でMPIのバッチリクエストを実行するスクリプトになります。
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #PBS -q SQUID #PBS --group=【グループ名】 #PBS -l elapstim_req=1:00:00 #PBS -T openmpi #PBS -v NQSV_MPI_MODULE=BaseGCC #PBS -b 4 cd $PBS_O_WORKDIR module load BaseGCC mpirun ${NQSV_MPIOPTS} -np 304 -npernode 76 ./a.out |
マルチノード実行時の注意点
-
ジョブスクリプトで「setenv (オプション名)」などでオプションや環境変数を指定した場合、マスターノードにのみ設定され、スレーブノードには設定されません。
全ノードに設定を反映させたい場合は「#PBS -v (オプション名)」と指定してください。
詳細は下記に記載しております。
ジョブスクリプトの書き方 環境変数の指定