MPI 在哪里定位新进程?

Where MPI locates new processes?

我运行在一个有 36 个 CPU 和 72 个线程(超线程)的节点中使用 mpi运行 连接多个进程。当我 运行 它们使用不同的 mpi运行 调用(每个都带有 -np 2)时,它们 运行 在同一个 cpu 中,从而降低了进程的效率。使用 ps 命令我看到当我发送 7

mpirun -np 2 ./foo

调用,所有进程都 运行仅 4 个线程。任何人都知道如何解决它?我想在所有线程中分配进程以最大限度地提高效率。

Open MPI 的默认设置是将 MPI 任务绑定到通过 -np 2 调用的内核。作业之间没有联系,因此所有 MPI 作业都固定到相同的两个核心(01 iirc)。

一个次优的解决方案是避免绑定,让 Linux 调度程序来处理

mpirun --bind-to none -np 2 ./foo

更好的解决方案是使用资源管理器(例如 SLURM)、配置 cpuset 或类似工具,以便您的所有作业都分配到不相交的两个核心集上。