CPUソケット2基を有するマザーボードにCPUが2個インストールされているNUMA計算機を想定する.
例えば,CPUとしてXeonが2個インストールされているとする.
lscpu
コマンドで確認すると,
$ lscpu
アーキテクチャ: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
コアあたりのスレッド数:1
ソケットあたりのコア数:16
Socket(s): 2
NUMAノード: 2
ベンダーID: GenuineIntel
CPUファミリー: 6
モデル: 85
Model name: Intel(R) Xeon(R) Gold 6242 CPU @ 2.80GHz
ステッピング: 7
CPU MHz: 1200.048
CPU max MHz: 3900.0000
CPU min MHz: 1200.0000
BogoMIPS: 5600.00
仮想化: VT-x
L1d キャッシュ: 32K
L1i キャッシュ: 32K
L2 キャッシュ: 1024K
L3 キャッシュ: 22528K
NUMAノード 0 CPU: 0-15
NUMAノード 1 CPU: 16-31
のように表示される場合である.
ここにもあるように,Xeon Gold 6242は16コアであり,確かにNUMAノード0に0番から15番の16コアが認識されている.
2個目はNUMAノード1として16番から31番の16コアが認識されている.
つまり計算機としては32コアの資源を有する.
(ハイパースレッディングテクノロジはオフにしてある)
ジョブ管理システムのセットアップ
OSはCentOS 7で,ジョブ管理システムとしてThe Terascale Open-source Resource and QUEue Manager (TORQUE) を使いたい.
まずCentOS 7でTorqueのセットアップに従いTORQUEサーバとクライアント,スケジューラをインストールする.
上述の記事に従って設定すると,pbsnodes
コマンドでは1ノード (16コア) しか表示されていないはずである.
今の場合は2つのNUMAノードがあるので,
以下のように設定を一部書き換える必要がある.
HOSTNAME num_node_boards=2 numa_board_str=16
nodes=0
nodes=1
ここでHOSTNAME
のところには計算機のホストネームが書き込まれているはずである.
num_node_boards
にはNUMAノードの個数を設定する.
numa_board_str
にはNUMAノードあたりのCPUコア数を設定する.
以上を設定してtorqueをリスタート:
# systemctl restart pbs_server
# systemctl restart pbs_sched
# systemctl restart pbs_mom
再びpbsnodes
コマンドを実行し,np=16, state=free
なノードが2個表示されれば成功.
ノードの名前はHOSTNAME-0
とHOSTNAME-1
のようになっていると思う.
例えばOpenMPで32並列の計算を行う場合は,
ジョブスクリプトに以下のようなオプションを追加する:
#PBS -l nodes=2:ppn=16
この例では,2つ全てのNUMAノードとコア (合計32コア) が予約され,
このジョブの実行中(status:R
)は他のジョブは待機状態(status:Q
)となる.