我想为每个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"
,但在特定情况下,我无法得到我必须做的事情。
答案 0 :(得分:1)
如果你想要实现的是MPI作业中不同的等级使用不同数量的MKL线程,你可以用两种不同的方式来实现。
您可以根据流程等级设置代码中的线程数,例如
#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
(或mpirun
)的MPMD启动模式,但这有点麻烦:
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
的选项。这将启动MPI程序./program
的一个副本,MKL_NUM_THREADS
设置为4
(该副本变为等级0);将MKL_NUM_THREADS
设置为3
的一个副本(该副本变为等级1);将MKL_NUM_THREADS
设置为5
的两份副本(这些副本成为第2和第3行)。