如何为每个MPICH进程设置不同数量的MKL线程

时间:2013-01-25 13:05:08

标签: multithreading mpich

我想为每个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",但在特定情况下,我无法得到我必须做的事情。

1 个答案:

答案 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行)。