无法使用mpirun

时间:2018-02-16 22:14:55

标签: mpi openmpi hpc

我正在我的桌面上测试一个简单的MPI程序(Ubuntu LTS 16.04 /Intel®Core™i3-6100U CPU @ 2.30GHz×4 / gcc 4.8.5 / OpenMPI 3.0.0)并且mpirun不会让我使用我机器上的所有核心(4)。我跑的时候:

$ mpirun -n 4 ./test2

我收到以下错误:

--------------------------------------------------------------------------
There are not enough slots available in the system to satisfy the 4 slots
that were requested by the application:
  ./test2

Either request fewer slots for your application, or make more slots available
for use.
--------------------------------------------------------------------------

但如果我跑:

$ mpirun -n 2 ./test2

一切正常。

我从其他答案中看到我可以用

检查处理器的数量
cat /proc/cpuinfo | grep processor | wc -l

这告诉我我有4个处理器。我对超额订阅感兴趣,我只是希望能够使用我的所有处理器。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:8)

您的处理器有4个超线程但只有2个核心(请参阅规范here)。

默认情况下,Open MPI不会为每个核心运行多个MPI任务。 使用以下选项

,每个超线程可以使Open MPI最多运行一个MPI任务
mpirun --use-hwthread-cpus ...

FWIW

您提到的命令会报告超线程的数量。

通过lstopo包中的hwloc命令找出计算机拓扑结构的更好方法。

MPI任务未绑定在OS X上的内核和线程上,因此如果您在Mac上运行,--oversubscribe -np 4将导致相同的结果。

答案 1 :(得分:0)

使用$ lscpu number of cores per socket * number of sockets会为您提供物理内核的数量(可以用于mpi的内核),其中sockets per core * number of sockets * threads per core将为您提供多个逻辑内核(你可以使用命令$ cat /proc/cpuinfo | grep processor | wc -l

答案 2 :(得分:0)

要解决您的问题,您可以使用 --use-hwthread-cpusmpirun 命令行参数。在这种情况下,Open MPI 会将超线程提供的线程视为 Open MPI 处理器。否则,它会将 CPU 内核视为 Open MPI 处理器,这是默认行为。使用 --use-hwthread-cpus 时,它将正确确定您可用的处理器总数,即 Open MPI 主机文件中指定的所有主机上可用的所有处理器。因此,您不需要指定“-n”参数。此外,在使用 --use-hwthread-cpus 命令行参数时,Open MPI 将超线程提供的线程称为“硬件线程”。使用此技术,您将不会超额订阅,并且如果某个 Open MPI 处理器将在虚拟机上运行,​​它将使用分配给该虚拟机的正确线程数。如果您的处理器每个内核有两个以上的线程,作为 Xeon Phi (Knights Landing),它会将每个内核的所有四个线程作为 Open MPI 处理器。