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