OpenMPIの実行時のコアの指定 2016年11月24日
OpenMPIで立ち上がってくる各プロセスをどのコアに割り当てるか明示する方法について, メモ書き.
単に --bind-to socket
すると同じコアで複数プロセス実行したりして困る.
かといって --bind-to core --cpus-per-rank 1
をすると, socket0 内のコアから順に割り当てられていくためプロセスごとに明示できない.
numactl
使えばできるよ!みたいなことを聞いていたけれどだめだったので調べた.
結論としては, rankfile
使いましょうね, ということ.
例えば8Core持つXeon E5 2650が2つのってる場合. (HTは無効化)
実行するプロセス数 : 8
socket0 に割り当てるプロセス数:4
socket1 に割り当てるプロセス数:4
と置く.
用意するファイルは次の通り.
- hostfile
- rankfile
内容は以下の通り.
https://gist.github.com/ytn86/0081170bc868f91ab4c6926b5aa6fb61#file-hostfile
https://gist.github.com/ytn86/0081170bc868f91ab4c6926b5aa6fb61#file-rankfile
rankfileでは, どのrankのプロセスをどのホストのコアに割り当てるか明示している.
例えば
rank0 は node1 のソケット0 にある, 0番コア
rank7 は node1 のソケット1 にある, 3番コア
と指定されている.
実行結果は以下の通り. なお, --report-bindings
を指定することでどのプロセスがどのコアに割り当てられているか確認できる
https://gist.github.com/ytn86/0081170bc868f91ab4c6926b5aa6fb61#file-result
Leave a Reply