TSUBAME3.0計算サービスのWebページはこちら

TSUBAME2.5からTSUBAME3.0へのデータ移行方法の資料はこちら

OpenMPI 1.8.2のプロセスマッピングについて教えてください

 TSUBAME の Thin 計算ノードでは OpenMPI の 1.6.5 と 1.8.2 の二つのバージョンを利用できます(2015年2月時点).この二つのバージョンでは,ランクごとにどのノードにプロセスをマッピングするかが異なります.この FAQ では,バージョン 1.8.2 のマッピングの動作および変更方法について説明します.

マッピング方法を指定しなかった場合の動作について

 8 並列ジョブ(4 ノード使用し,各ノードで 2 プロセス)を例にとり説明します.OpenMPI 1.6.5 の場合は図1 のようにランク番号が{0, 1}, {2, 3}, {4, 5}, {6,7} の配置となります.


図 1 OpenMPI 1.6.5 のプロセスマッピング

Ver 1.8.2 を TSUBAMEで実行する場合は,図2のように {0, 4}, {1, 5}, {2, 6}, {3, 7} とマッピングされます.


図 2 OpenMPI 1.8.2 を TSUBAME上で実行した場合のプロセスマッピング

 

Ver 1.8.2 で Ver 1.6.5 と同様のマッピングを行う方法

 mpirun コマンドのオプションでプロセスのマッピングを変更できます.Ver 1.6.5 と同様のマッピングにする場合は「--rank-by slot」オプションを指定してください.

$ mpirun -np 8 -hostfile ${PBS_NODEFILE} --rank-by slot
もしくは,
$ mpirun -np 8 -hostfile ${PBS_NODEFILE} -mca rmaps_base_ranking_policy slot

 

Ver 1.8.2 のデフォルトとTSUBAMEでのカスタマイズについて

 TSUBAME では Ver 1.8.2 のマッピング設定のカスタマイズを行っています.このカスタマイズがない場合の Ver 1.8.2 のデフォルトでは,スロットに基づいたマッピングを行う動作となります.S キューに対し 16 並列の資源要求をした場合を例に説明します.t2subコマンドの -l オプションによるリソース指定で,mpiprocs が 2 以上の場合は PBS でのリソース要求と同様のマッピングがされます.一方で mpiprocs が 1 もしくは無指定の場合,1 台目のノードを 12 プロセス,2 台目のノードを 4 プロセスというマッピングをします.先頭ノードから順に 12 プロセスずつ詰めていく動作となるためです.

 このマッピングだと,ノード毎に均等のプロセス配分とならないため,TSUBAMEではカスタマイズを行っており,スロットではなくノードに基づいたマッピングを行うようなシステム設定を 2014年11月4日 9時に適用しています.そのため,図2で示すプロセスマッピングとなります.

お知らせ: OpenMPI 1.8.2 における性能上の問題について(11/12更新)
http://tsubame.gsic.titech.ac.jp/node/1205

 

Ver 1.8.2 のデフォルトと同様のプロセスマッピングを行う方法

mpirun コマンドのオプションでVer 1.8.2 のデフォルト(つまり,スロットに基づくマッピング)を行うことが出来ます.「--map-by slot」オプションを指定してください.

$ mpirun -np 8 -hostfile ${PBS_NODEFILE} --map-by slot
もしくは,
$ mpirun -np 8 -hostfile ${PBS_NODEFILE} -mca rmaps_base_mapping_policy slot

 

Tips: プロセスのマッピングのされ方を確認する方法

 mpirunコマンドの「-display-map」オプションでプロセスのマッピングのされ方を確認できます.使用例を示します.

○--rank-by slot を付与した場合

$ mpirun -np 8 -hostfile ${PBS_NODEFILE} -display-map --rank-by slot
======================== JOB MAP ========================

Data for node: t2a000001 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [60030,1] App: 0 Process rank: 0
Process OMPI jobid: [60030,1] App: 0 Process rank: 1

Data for node: t2a000002 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [60030,1] App: 0 Process rank: 2
Process OMPI jobid: [60030,1] App: 0 Process rank: 3

Data for node: t2a000003 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [60030,1] App: 0 Process rank: 4
Process OMPI jobid: [60030,1] App: 0 Process rank: 5

Data for node: t2a000004 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [60030,1] App: 0 Process rank: 6
Process OMPI jobid: [60030,1] App: 0 Process rank: 7

=============================================================

 ○--rank-by slot を付与していない場合

$ mpirun -np 8 -hostfile ${PBS_NODEFILE} -display-map
======================== JOB MAP ========================

Data for node: t2a000001 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [59686,1] App: 0 Process rank: 0
Process OMPI jobid: [59686,1] App: 0 Process rank: 4

Data for node: t2a000002 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [59686,1] App: 0 Process rank: 1
Process OMPI jobid: [59686,1] App: 0 Process rank: 5

Data for node: t2a000003 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [59686,1] App: 0 Process rank: 2
Process OMPI jobid: [59686,1] App: 0 Process rank: 6

Data for node: t2a000004 Num slots: 2 Max slots: 0 Num procs: 2
Process OMPI jobid: [59686,1] App: 0 Process rank: 3
Process OMPI jobid: [59686,1] App: 0 Process rank: 7

=============================================================