代码之家  ›  专栏  ›  技术社区  ›  James Smith

无法将所有Core与mpirun一起使用

  •  13
  • James Smith  · 技术社区  · 7 年前

    我正在桌面上测试一个简单的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 回复  |  直到 7 年前
        1
  •  27
  •   Richard    5 年前

    您的处理器有4个超线程,但只有2个内核(请参阅规格 here ).

    默认情况下,Open MPI不会在每个核心上运行多个MPI任务。 使用以下选项,每个超线程最多可以运行一个打开的MPI任务

    mpirun --use-hwthread-cpus ...
    

    不管好坏

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

    了解机器拓扑的更好方法是通过 lstopo 来自的命令 hwloc 包裹

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

        2
  •  2
  •   Maxim Masiutin    3 年前

    要解决您的问题,您可以使用 --use-hwthread-cpus 的命令行参数 mpirun ,正如 Gilles Gouaillardet . 在这种情况下,Open MPI将把Hyperreading提供的线程视为Open MPI处理器。否则,它会将CPU核心视为开放MPI处理器,这是默认行为。使用时 --使用hwthread CPU ,它将正确确定您可用的处理器总数,即在打开的MPI主机文件中指定的所有主机上可用的所有处理器。因此,不需要指定“-n”参数。此外,当使用 --使用hwthread CPU 命令行参数Open MPI将Hyperreading提供的线程称为“硬件线程”。使用此技术,您不会过度订阅,如果某个开放的MPI处理器将在虚拟机上运行,它将使用分配给该虚拟机的正确线程数。如果您的处理器每个核有两个以上的线程,如至强Phi(Knights Mill、Knights Landing等),那么作为一个开放MPI处理器,每个核将需要所有四个线程。

        3
  •  1
  •   Community tomf    3 年前

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