0

私のプログラムでは MPI+pthreads を使用しています。n-1 個の MPI プロセスは純粋な MPI コードですが、pthreads を使用する MPI プロセスは 1 つだけです。最後のプロセスには、2 つのスレッド (メイン スレッドと pthread ) しか含まれていません。このプログラムを実行したい HPC クラスターは、それぞれが 12 個のコアを持つ計算ノードで構成されているとします。ハードウェアを最大限に活用するには、バッチ スクリプトをどのように記述すればよいですか?

以下は、私が書いたバッチスクリプトです。最後の MPI プロセスには 2 つのスレッドがあり、他のプロセスにもそれぞれ 2 つのスレッドがあると想定する必要があるため、 export OMP_NUM_THREADS=2 を使用します。

次に、ノードごとに 6 つの MPI プロセスを割り当てるので、1 つの MPI プロセスを除くすべての MPI プロセスに 1 つのスレッドがあるにもかかわらず、各ノードは 6xOMP_NUM_THREADS = 12(=各ノードのコア数) のスレッドを実行できます。

#BSUB -J LOOP.N200.L1000_SIMPLE_THREAD
#BSUB -o LOOP.%J
#BSUB -W 00:10
#BSUB -M 1024
#BSUB -N
#BSUB -a openmpi
#BSUB -n 20
#BSUB -m xxx
#BSUB -R "span[ptile=6]"
#BSUB -x

export OMP_NUM_THREADS=2

このためのより良いスクリプトを作成するにはどうすればよいですか?

4

2 に答える 2

2

最後のランクをハイブリッドにしたい場合は、次のようにします。

#BSUB -n 20
#BSUB -R "span[ptile=12]"
#BSUB -x

$MPIEXEC $FLAGS_MPI_BATCH -n 19 -x OMP_NUM_THREADS=1 ./program : \
         $FLAGS_MPI_BATCH -n 1  -x OMP_NUM_THREADS=2 ./program

ランク 0 をハイブリッドにしたい場合は、単純に 2 つの行を切り替えます。

$MPIEXEC $FLAGS_MPI_BATCH -n 1  -x OMP_NUM_THREADS=2 ./program : \
         $FLAGS_MPI_BATCH -n 19 -x OMP_NUM_THREADS=1 ./program

これは、Open MPI の機能を利用して MIMD プログラムを起動します。

ハイブリッド ランクは POSIX スレッドを使用しているにもかかわらず、OpenMP 関連の環境変数を設定しているとのことです。実際に OpenMP を使用していない場合は、設定する必要はまったくなくOMP_NUM_THREADS、次の単純なmpiexecコマンドで十分です。

$MPIEXEC $FLAGS_MPI_BATCH ./program

(あなたが勉強したり働いたりしている教育機関についての私の推測が間違っていることが判明した場合は、削除$FLAGS_MPI_BATCHして に置き換え$MPIEXECてくださいmpiexec

于 2014-10-31T07:56:25.560 に答える
1

LSF を使用してからしばらく経ちましたが、これは完全に正しくない可能性があるため、試してみてください。

あなたのリクエストを読みました

#BSUB -n 20
#BSUB -R "span[ptile=6]"

ノードあたり 6 つのタスクで、合計 20 のタスク。つまり、4 つのノードを取得します。各ノードには12個のコアがあると述べたように、これは無駄に思えます。

排他ホストを要求したので、ノード上のすべてのコアを使用するのはどうですか ( -x)

#BSUB -x
#BSUB -n 20
#BSUB -R "span[ptile=12]"

export OMP_NUM_THREADS=2

これでランクがわかります

  • 0..11 は最初のホストにあります
  • 12..19 は 2 番目のホストにあります

2 番目のホストには、ランク 19 の OpenMP 性を利用するための予備のスロットがあります。

もちろん、あなたがもっと楽しい仕事に就きたいのであれば、LSF は仕事の配置を形作ることを可能にします。を使用してLSB_PJL_TASK_GEOMETRYいます。

12 個のコアを使用してランク番号 5 の 25 個の MPI タスクがあるとします。

#BSUB -x
#BSUB -n 25
#BSUB -R "span[ptile=12]"

export LSB_PJL_TASK_GEOMETRY="{(0,1,2,3,4,6,7,8,9,10,11,12)\
                               (13,14,15,16,17,18,19,20,21,22,23,24)\
                               (5)}"

このようにして、タスク 5 は独自のノードを取得します。

于 2014-10-30T21:23:38.933 に答える