1

LSF ジョブ システムを備えたクラスタ上で MPI fortran プログラムを実行しています。私のプログラムには MKL 関数も含まれています。

MKLスレッド番号を設定できるサブルーチンがあることを知っています(たとえば、2に設定します)

call mkl_set_num_threads(2)

最初に、これがプログラムの合計スレッド数を設定すると思いました。しかし、私がテストしたように、これは各MPIプロセスのスレッド番号を設定しているようです

だから私が次のような仕事を提出した場合

bsub -n 2 mpiexec.hydra ./a.out

ノードにsshして、Top実際には4つのコアを使用し、各MPIプロセスは2つのスレッドを使用することがわかりました。

しかし、これは私のクラスターでは許可されていません。これは、要求された以上に CPU リソースを使用し、実行中に強制終了されるためです。

MPI プロセスの数が CPU コアを分割できない場合があります。たとえば、ノードに 24 コアがあり、実行する MPI プロセスが 7 つある場合、次のように送信します。

bsub -n 24 mpiexec.hydra -n 7 ./a.out

MKL にはDynamic機能があるため、MKL は自動的にリソースを 7 つの MPI タスクに動的に分配し、すべての CPU を効率的に使用します。

しかし、今ならクラスターは一杯です。リクエストできるのは 12 コアのみです。

bsub -n 12 mpiexec.hydra -n 7 ./a.out

次に、7 つの MPI タスクの中で正確に 12 の mkl スレッドを使用するように MKL を設定し、システムによって強制終了されず、最大の効率を維持する方法。

4

0 に答える 0