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

CX400/2550において,ハイブリッド並列処理のジョブ実行を想定した記述方法を示します.

ジョブスクリプト例1

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

計算資源

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

並列計算条件

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

このとき,仮想ノード数と仮想ノード当たりのコア数は以下のようになります. 仮想ノード数は-L "vnode=num",仮想ノード当たりのコア数は-L "vnode-core=num"で指定します.

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

仮想ノード数 8ノード (MPIプロセス数と同じ)
仮想ノード当たりのコア数 28コア (MPIプロセスあたりのスレッド数と同じ)

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

#!/bin/sh
#PJM -L "rscgrp=cx-small"
#PJM -L "vnode=8"
#PJM -L "vnode-core=28"
#PJM -L "elapse=10:00"
#PJM -j
#PJM -S

export OMP_NUM_THREADS=28
export PARALLEL=28
mpiexec ./a.out

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

#!/bin/sh
#PJM -L "rscgrp=cx-small"
#PJM --vset "NUM_PROCS=8"
#PJM --vset "NUM_THREADS=28"
#PJM -L "elapse=10:00"
#PJM -L "vnode=${NUM_PROCS}, vnode-core=${NUM_THREADS}"
#PJM -x "VNODE_CORES=${NUM_THREADS}"
#PJM -j
#PJM -S

export OMP_NUM_THREADS=${VNODE_CORES}
export PARALLEL=${VNODE_CORES}
mpiexec ./a.out

ジョブスクリプト例2

ノード内におけるMPIプロセス数とスレッド数の最適な割合は利用されるプログラムによって異なります. 以下は,8物理ノードを確保し,各物理ノードに2 MPIプロセス,各MPIプロセスのスレッド数を14とする例です.

計算資源

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

並列計算条件

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

このとき,仮想ノード数と仮想ノード当たりのコア数は以下のようになります. 仮想ノード数は-L "vnode=num",仮想ノード当たりのコア数は-L "vnode-core=num"で指定します.

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

仮想ノード数 16ノード (MPIプロセス数と同じ)
仮想ノード当たりのコア数 14コア (MPIプロセスあたりのスレッド数と同じ)

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

#!/bin/sh
#PJM -L "rscgrp=cx-small"
#PJM -L "vnode=16"
#PJM -L "vnode-core=14"
#PJM -L "elapse=10:00"
#PJM -j
#PJM -S

export OMP_NUM_THREADS=14
export PARALLEL=14
mpiexec ./a.out

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

#!/bin/sh
#PJM -L "rscgrp=cx-small"
#PJM --vset "NUM_PROCS=16"
#PJM --vset "NUM_THREADS=14"
#PJM -L "elapse=10:00"
#PJM -L "vnode=${NUM_PROCS}, vnode-core=${NUM_THREADS}"
#PJM -x "VNODE_CORES=${NUM_THREADS}"
#PJM -j
#PJM -S

export OMP_NUM_THREADS=${VNODE_CORES}
export PARALLEL=${VNODE_CORES}
mpiexec ./a.out