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"
ていますが、特定のケースで何をしなければならないかわかりません。
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"
ていますが、特定のケースで何をしなければならないかわかりません。
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 になります)。