Mpi numactl—physcpubind处理器迁移

Mpi numactl—physcpubind处理器迁移,mpi,openmpi,numa,pinning,Mpi,Openmpi,Numa,Pinning,我正在尝试使用numactl启动我的mpi应用程序(打开mpi 1.4.5)。显然,使用--cpu nodebind的负载平衡并没有在可用节点之间以循环的方式分配我的进程,因此我想专门将我的进程限制在一组封闭的cpu上。通过这种方式,我计划根据每个节点上运行的线程数量来确保节点之间的负载平衡--physcpubind似乎是根据numactl手册来完成这项工作的 问题是——根据我从post中提取的信息——使用--phycpubind,进程可以在这个cpu集中迁移。另一个问题是,此集合中的一些CPU

我正在尝试使用numactl启动我的mpi应用程序(打开mpi 1.4.5)。显然,使用--cpu nodebind的负载平衡并没有在可用节点之间以循环的方式分配我的进程,因此我想专门将我的进程限制在一组封闭的cpu上。通过这种方式,我计划根据每个节点上运行的线程数量来确保节点之间的负载平衡--physcpubind似乎是根据numactl手册来完成这项工作的

问题是——根据我从post中提取的信息——使用--phycpubind,进程可以在这个cpu集中迁移。另一个问题是,此集合中的一些CPU保持未使用状态,而其他CPU被分配两个或多个进程,因此运行时CPU使用率仅为50%或更少。为什么会发生这种情况?这种现象是否有解决办法

亲切问候

我想你可以试试这个(它对我有用):

chrt命令用于建立调度策略,您可以从以下选项中进行选择:

Policy options:
 -b, --batch          set policy to SCHED_BATCH
 -d, --deadline       set policy to SCHED_DEADLINE
 -f, --fifo           set policy to SCHED_FIFO
 -i, --idle           set policy to SCHED_IDLE
 -o, --other          set policy to SCHED_OTHER
 -r, --rr             set policy to SCHED_RR (default)
编辑:数字98是优先级,在我的情况下,我运行的是一个时间关键型流程。
此外,您可能需要隔离正在使用的CPU,以防止计划程序向它们分配/移动进程。

我不确定是否理解您试图实现的目标。如果有多个进程,为什么不将每个进程绑定到给定的节点?如果只有一个进程,但有多个线程,则无法使用numactl指定类似循环策略的内容。您需要使用numa库并从代码中执行此操作。(请参阅)Open MPI支持处理器和内存绑定。有关如何在您的OMPI版本中执行此操作的信息,请参阅。
Policy options:
 -b, --batch          set policy to SCHED_BATCH
 -d, --deadline       set policy to SCHED_DEADLINE
 -f, --fifo           set policy to SCHED_FIFO
 -i, --idle           set policy to SCHED_IDLE
 -o, --other          set policy to SCHED_OTHER
 -r, --rr             set policy to SCHED_RR (default)