1

我在配备 LSF 作业系统的集群上运行 MPI fortran 程序。我的程序还包含 MKL 功能。

我知道有子程序可以设置 MKL 线程数(例如设置为 2)

call mkl_set_num_threads(2)

首先,我认为这设置了程序的总线程数。但正如我测试的那样,这似乎为每个 MPI 进程设置线程号

所以如果我提交一份工作

bsub -n 2 mpiexec.hydra ./a.out

然后 ssh 进入节点Top,我发现它实际上使用了 4 个内核,每个 MPI 进程使用 2 个线程。

但这在我的集群上是不允许的,因为它使用的 cpu 资源比请求的多,并且在运行期间会被杀死。

有时MPI进程数不能划分cpu核心。例如,如果一个节点有 24 个核心,并且我有 7 个 MPI 进程要运行,我想提交如下

bsub -n 24 mpiexec.hydra -n 7 ./a.out

由于 MKL 具有Dynamic功能,MKL 会自动将资源动态分配给 7 个 MPI 任务,并有效地使用所有 cpu。

但是如果现在集群已经满了。我只能请求12个核心,然后

bsub -n 12 mpiexec.hydra -n 7 ./a.out

那么如何将 MKL 设置为在 7 个 MPI 任务中准确使用 12 个 mkl 线程,从而不会被系统杀死,但仍保持最大效率。

4

0 回答 0