CX400/2550 ハイブリッド並列処理ジョブスクリプト例 (Intelコンパイラ利用時)

(2015-05-26更新)

CX400/2550において,ハイブリッド並列処理のジョブ実行を想定した記述方法を示します. 富士通コンパイラ利用時と大きく異なる点がありますので,以下を留意してください.

  • 各物理ノードへのプロセス配置はIntel MPIで制御します.必要なプロセス数を確保できるように仮想ノード数と仮想ノード当たりのコア数を指定してください.
  • 仮想ノード配置ポリシーをAbsolutely UNPACKとしてください.
  • スレッド並列処理に必要な環境を設定するためのコマンドが必要となります.
  • Intel MPI並列処理に必要な環境を設定するためのコマンドが必要となります.

ジョブスクリプト例1

以下は,8物理ノードを確保し,各物理ノードに1 MPIプロセス,各MPIプロセスのスレッド数を28とする例です.OpenMPや自動並列のスレッド数指定は必要に応じて行ってください.

計算資源

ノード数 (ノードあたりコア数) 8ノード (28コア)
経過時間 10分

並列計算条件

プロセス数 8プロセス
プロセスあたりのスレッド数 28スレッド

このとき,仮想ノード数は以下のようになります.

ジョブスクリプトで指定する仮想計算資源

仮想ノード数 8 (物理ノード数と同じ)
仮想ノードあたりのコア数 28 (ノードあたりの物理コア数と同じ)
仮想ノードポリシー abs-unpack

MPI-OpenMPハイブリッド並列処理ジョブスクリプト例

#!/bin/sh
#PJM -L "rscgrp=cx-small"
#PJM -L "vnode=8"
#PJM -L "vnode-core=28"
#PJM --mpi "rank-map-bynode"
#PJM -P "vn-policy=abs-unpack"
#PJM -L "elapse=10:00"
#PJM -j
#PJM -S

source /center/local/apl/cx/intel/composerxe/bin/compilervars.sh intel64
source /center/local/apl/cx/intel/impi/4.1.1.036/bin64/mpivars.sh

PROCS=${PJM_VNODES}
THREADS=28

export I_MPI_PIN_DOMAIN=omp
export I_MPI_HYDRA_BOOTSTRAP=rsh
export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh
export I_MPI_HYDRA_HOST_FILE=${PJM_O_NODEINF}

export OMP_NUM_THREADS=$THREADS
export PARALLEL=$THREADS

mpiexec.hydra -n $PROCS ./a.out

上記ジョブスクリプトは,以下のように書くこともできます.

#!/bin/sh
#PJM -L "rscgrp=cx-small"
#PJM --vset "NUM_NODES=8"
#PJM --vset "NUM_CORES=28"
#PJM --vset "NUM_THREADS=28"
#PJM --mpi "rank-map-bynode"
#PJM -P "vn-policy=abs-unpack"
#PJM -L "elapse=10:00"
#PJM -L "vnode=${NUM_NODES}, vnode-core=${NUM_CORES}"
#PJM -x "VNODE_CORES=${NUM_CORES}, THREADS=${NUM_THREADS}"
#PJM -j
#PJM -S

source /center/local/apl/cx/intel/composerxe/bin/compilervars.sh intel64
source /center/local/apl/cx/intel/impi/4.1.1.036/bin64/mpivars.sh

export I_MPI_PIN_DOMAIN=omp
export I_MPI_HYDRA_BOOTSTRAP=rsh
export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh
export I_MPI_HYDRA_HOST_FILE=${PJM_O_NODEINF}

MPI_PERHOST=`expr ${VNODE_CORES} / ${THREADS}`
PROCS=`expr ${PJM_VNODES} \* ${MPI_PERHOST}`
export OMP_NUM_THREADS=${THREADS}
export PARALLEL=${THREADS}

mpiexec.hydra -n $PROCS ./a.out

ジョブスクリプト例2

以下は,8物理ノードを確保し,各物理ノードに2 MPIプロセス,各MPIプロセスのスレッド数を14とする例です.OpenMPや自動並列のスレッド数指定は必要に応じて行ってください.

計算資源

ノード数 (ノードあたりコア数) 8ノード (28コア)
経過時間 10分

並列計算条件

プロセス数 16プロセス
プロセスあたりのスレッド数 14スレッド

このとき,仮想ノード数は以下のようになります.

ジョブスクリプトで指定する仮想計算資源

仮想ノード数 8 (物理ノード数と同じ)
仮想ノードあたりのコア数 28 (ノードあたりの物理コア数と同じ)
仮想ノードポリシー abs-unpack

MPI-OpenMPハイブリッド並列処理ジョブスクリプト例

#!/bin/sh
#PJM -L "rscgrp=cx-small"
#PJM --vset "NUM_NODES=8"
#PJM --vset "NUM_CORES=28"
#PJM --vset "NUM_THREADS=14"
#PJM --mpi "rank-map-bynode"
#PJM -P "vn-policy=abs-unpack"
#PJM -L "elapse=10:00"
#PJM -L "vnode=${NUM_NODES}, vnode-core=${NUM_CORES}"
#PJM -x "VNODE_CORES=${NUM_CORES}, THREADS=${NUM_THREADS}"
#PJM -j
#PJM -S

source /center/local/apl/cx/intel/composerxe/bin/compilervars.sh intel64
source /center/local/apl/cx/intel/impi/4.1.1.036/bin64/mpivars.sh

export I_MPI_PIN_DOMAIN=omp
export I_MPI_HYDRA_BOOTSTRAP=rsh
export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh
export I_MPI_HYDRA_HOST_FILE=${PJM_O_NODEINF}

MPI_PERHOST=`expr ${VNODE_CORES} / ${THREADS}`
PROCS=`expr ${PJM_VNODES} /* ${MPI_PERHOST}`
export OMP_NUM_THREADS=${THREADS}
export PARALLEL=${THREADS}

mpiexec.hydra -n $PROCS ./a.out