6.6. ランク割り当て

MPIでは、プロセス識別のために、プロセス番号に相当する「ランク」と呼ぶ番号を割り当てます。
ランクの割り当てルールは、pjsubコマンドの--mpiオプションにより指定することができます。

6.6.1. rank-map-bynode

rank-map-bynodeは、計算ノードに1プロセスを生成すると、次の計算ノードに移動し、ラウンドロビンで自動的に割り付けます。座標の原点をランク0とし、rank-map-bynodeの先頭文字の軸方向にランクを並べ、上限まで達した時点で、次の文字に移動します。

オプション

内容

rank-map-bynode[=rankmap]

rankmapには、XY|YX|XYZ|XZY|YXZ|YZX|ZXY|ZYXを指定してください。
rankmapshapeで指定した次元数と同じものを指定してください。
1次元の場合、rankmapの指定はできません。
2次元の場合は文字 XY、3次元の場合は文字 XYZの組み合わせで指定してください。
rankmapのデフォルトは、以下のとおりです。
  • 1次元ジョブの場合は、1次元座標がランク番号になります。

  • 2次元ジョブの場合は、[XY]と同じです。

  • 3次元ジョブの場合は、[XYZ]と同じです。

6.6.2. rank-map-bynode(1次元)

1次元の指定例を示します。

#!/bin/sh
#PJM -L  "node=8"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "rank-map-bynode"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out
../_images/RankAssignment_01.png

6.6.3. rank-map-bynode(2次元)

2次元の指定例を示します。

#!/bin/sh
#PJM -L  "node=3x3"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "rank-map-bynode=XY"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out
../_images/RankAssignment_02.png

6.6.4. rank-map-bynode(3次元)

3次元の指定例を示します。

#!/bin/sh
#PJM -L  "node=3x3x2"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "rank-map-bynode=XYZ"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out
../_images/RankAssignment_03.png

6.6.5. rank-map-bynode(ノード内複数プロセス指定(1次元))

ノード内に複数のプロセスを指定する場合の例を示します。

#!/bin/sh
#PJM -L  "node=8"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "proc=16"
#PJM --mpi  "rank-map-bynode"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out
../_images/RankAssignment_04.png

6.6.6. rank-map-bychip

rank-map-bychipは、計算ノードにnプロセスを生成すると、次の計算ノードに移動し、ラウンドロビンで自動的に割り付けます。座標の原点をランク0とし、rank-map-bychipの先頭文字の軸方向にランクを並べ、上限まで達した時点で、次の文字に移動します。

オプション

内容

rank-map-bychip[:rankmap]

rankmapには、XY|YX|XYZ|XZY|YXZ|YZX|ZXY|ZYXを指定してください。
rankmapshapeで指定した次元数と同じものを指定してください。
1次元の場合、rankmapの指定はできません。
2次元の場合は文字 XY、3次元の場合は文字 XYZの組み合わせで指定してください。
rankmapのデフォルトは、以下のとおりです。
  • 1次元ジョブの場合は、1次元座標がランク番号になります。

  • 2次元ジョブの場合は、[XY]と同じです。

  • 3次元ジョブの場合は、[XYZ]と同じです。

rank-map-bychipの指定例を示します。

#!/bin/sh
#PJM -L  "node=3x3"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "proc=18"
#PJM --mpi  "rank-map-bychip:XY"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out
../_images/RankAssignment_05.png

6.6.7. rank-map-hostfile

ランクマップファイルに指定された座標を基に、ランクを割り当てます。

rank-map-hostfileの指定例を示します。

#!/bin/sh
#PJM -L  "node=2x2x2"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "rank-map-hostfile=filename"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out
  1. filenameは、pjsubコマンドを実行するカレントディレクトリに配置します。

  2. filename内のランク指定は、ノード形状に合わせて、1次元、2次元または3次元座標で指定します。

  3. filenameには、1行に1座標を記述し、括弧で囲んで指定します。

6.6.8. rank-map-hostfile(1次元)

1次元座標を指定する場合、(X)と指定します。

#!/bin/sh
#PJM -L  "node=8"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "rank-map-hostfile=filename"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out

ホストマップファイル(1次元指定例)

(0)      <-- ランク0
(1)      <-- ランク1
(2)      <-- ランク2
(3)      <-- ランク3
(7)      <-- ランク4
(6)      <-- ランク5
(5)      <-- ランク6
(4)      <-- ランク7
../_images/RankAssignment_06.png

6.6.9. rank-map-hostfile(2次元)

2次元座標を指定する場合、(X,Y)と指定します。

#!/bin/sh
#PJM -L  "node=4x2"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "rank-map-hostfile=filename"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out

ホストマップファイル(2次元指定例)

(0,0)      <-- ランク0
(1,0)      <-- ランク1
(2,0)      <-- ランク2
(3,0)      <-- ランク3
(3,1)      <-- ランク4
(2,1)      <-- ランク5
(1,1)      <-- ランク6
(0,1)      <-- ランク7
../_images/RankAssignment_07.png

6.6.10. rank-map-hostfile(3次元)

3次元座標を指定する場合、(X,Y,Z)と指定します。

#!/bin/sh
#PJM -L  "node=2x2x2"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "rank-map-hostfile=filename"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out

ホストマップファイル(3次元指定例)

(0,0,0)      <-- ランク0
(1,0,0)      <-- ランク1
(0,1,0)      <-- ランク2
(1,1,0)      <-- ランク3
(0,0,1)      <-- ランク4
(0,1,1)      <-- ランク5
(1,0,1)      <-- ランク6
(1,1,1)      <-- ランク7
../_images/RankAssignment_08.png

6.6.11. rank-map-hostfile(ノード内複数ランク指定)

ホストマップファイル(rank-map-hostfile)にて、ノード内に複数プロセスを割り当てる例を示します。

#!/bin/sh
#PJM -L  "node=2x2"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "proc=8"
#PJM --mpi  "rank-map-hostfile=filename"
#PJM --mpi  "rank-map-bynode"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out

ホストマップファイル(2次元指定例)

(0,0)      <-- ランク0
(0,0)      <-- ランク1
(1,0)      <-- ランク2
(1,0)      <-- ランク3
(0,1)      <-- ランク4
(0,1)      <-- ランク5
(1,1)      <-- ランク6
(1,1)      <-- ランク7
../_images/RankAssignment_09.png

6.6.12. rank-map-hostfile/rank-map-bychip(ノード内複数ランク指定)

rank-map-hostfilerank-map-bychipを同時に指定することができます。
ホストマップファイルで指定される座標(1行)に、ジョブスクリプトで指定したproc=shape=の数を元に、proc/shapeのプロセス数(小数点以下切り上げ)を割り当てます。shapeが指定されない場合、代わりにnode=で指定した数を使用します。
次の例では、proc/node=8/4=2となります。
#!/bin/sh
#PJM -L  "node=2x2"
#PJM -L  "rscgrp=small"
#PJM -L  "elapse=1:00:00"
#PJM --mpi  "proc=8"
#PJM --mpi  "rank-map-hostfile=filename"
#PJM --mpi  "rank-map-bychip"
#PJM -g groupname
#PJM -x PJM_LLIO_GFSCACHE=/vol000N
#
mpiexec ./a.out

ホストマップファイル(2次元指定例)

(0,0)      <-- ランク0,1
(0,1)      <-- ランク2,3
(1,1)      <-- ランク4,5
(1,0)      <-- ランク6,7
../_images/RankAssignment_10.png

6.6.13. ホストマップファイル利用時の注意事項

ホストマップファイルについて注意事項を示します。

  • ファイル内の空行は、無視します。

  • ファイル内に記述する座標は、ノードの形状を表すshapeパラメーターで指定した範囲内の値である必要があります。

    • 例)shape=2x3が指定された場合、記述できる座標は (0,0)、(0,1)、(0,2)、(1,0)、(1,1)、(1,2) です。

  • rank-map-hostfilerank-map-bychipパラメーターを共に指定する場合、ファイル内の記述は以下にしたがう必要があります。

    • ファイル内に記述する座標の個数は、shapeパラメーターで指定された形状が示すノード数と同じにします。

    • 例)shape=3x2の場合、ノード数は6つのため、ファイル内には6つの座標を記述します。

    • 記述した座標の数がshapeパラメーターで指定した形状が示すノード数よりも少ない場合、pjsubコマンドはジョブの受付けを拒否します。

    • 記述した座標の数がshapeパラメーターで指定した形状が示すノード数よりも多い場合、残りの座標は無視されます。

    • ファイル内に複数の同じ座標は記述できません。同じ座標を記述した場合、pjsubコマンドがエラーになります。

  • rank-map-hostfilerank-map-bynodeパラメーターを共に指定する場合、ファイル内の記述は以下にしたがう必要があります。

    • ファイル内に記述した座標の個数がshapeパラメーターで指定したプロセス数よりも少ない場合、最後の座標のノードまで割り当てたら最初の座標のノードに戻って割り当てます。 座標の数がshapeパラメーターで指定したプロセス数よりも多い場合、残りの座標は無視されます。

    • ファイル内には、同じ座標は計算ノードあたりのCPUコア数以下であれば記述できます。