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 线程,您可以通过两种不同的方式来实现。

您可以根据进程等级设置代码中的线程数,例如

#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(or 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 程序的一个副本,并将./programMKL_NUM_THREADS设置为4(该副本变为等级 0);一个副本MKL_NUM_THREADS设置为3(哪个副本成为排名 1);MKL_NUM_THREADS设置为的两个副本5(这些副本成为等级 2 和 3)。

于 2013-01-25T16:24:12.217 回答