如何在MPI fortran程序中设置intel mkl的总线程限制?

时间:2016-05-26 14:54:16

标签: multithreading mpi openmp intel-mkl lsf

我在装有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线程,因此不会被系统杀死但仍保持最大效率。

0 个答案:

没有答案