0

MPICH プロセスごとに異なる数の MKL スレッドを作成したいと考えています。

たとえば、4 つの MPICH プロセスがあるとします。私が欲しいのは:

工程 1=4 MKL ねじ、工程 2=3 MKL ねじ、工程 3=5 MKL ねじなど。

わかっexport MKL_NUM_THREADS=4; export MKL_DOMAIN_NUM_THREADS="MKL_ALL=1, MKL_BLAS=4"ていますが、特定のケースで何をしなければならないかわかりません。

4

1 に答える 1

1

MPI ジョブの異なるランクが異なる数の MKL スレッドを使用することを達成したい場合は、2 つの異なる方法でそれを行うことができます。

プロセスのランクに応じて、コードでスレッドの数を設定できます。

#define NUM_PROCS 4

int threads_per_proc[NUM_PROCS] = { 4, 3, 5, 5 };
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
// ...
// Signal an error if rank >= 4
// ...
mkl_set_num_threads(threads_per_proc[rank]);

mpiexec(または)の MPMD 起動モードを使用することもできますがmpirun、これは少し面倒です。

mpiexec -env MKL_NUM_THREADS 4 -n 1 ./program : \
        -env MKL_NUM_THREADS 3 -n 1 ./program : \
        -env MKL_NUM_THREADS 5 -n 2 ./program

簡潔にするために、設定するオプションを省略しましたMKL_DOMAIN_NUM_THREADS./programこれにより、MKL_NUM_THREADS設定された MPI プログラムの 1 つのコピーが起動され4ます (このコピーはランク 0 になります)。MKL_NUM_THREADSに設定された1 つのコピー3(そのコピーがランク 1 になります)。MKL_NUM_THREADSに設定された2 つのコピー5(これらのコピーはランク 2 と 3 になります)。

于 2013-01-25T16:24:12.217 に答える