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 作业都固定到相同的两个核心(0
和 1
iirc)。
一个次优的解决方案是避免绑定,让 Linux 调度程序来处理
mpirun --bind-to none -np 2 ./foo
更好的解决方案是使用资源管理器(例如 SLURM)、配置 cpuset 或类似工具,以便您的所有作业都分配到不相交的两个核心集上。
我运行在一个有 36 个 CPU 和 72 个线程(超线程)的节点中使用 mpi运行 连接多个进程。当我 运行 它们使用不同的 mpi运行 调用(每个都带有 -np 2)时,它们 运行 在同一个 cpu 中,从而降低了进程的效率。使用 ps 命令我看到当我发送 7
mpirun -np 2 ./foo
调用,所有进程都 运行仅 4 个线程。任何人都知道如何解决它?我想在所有线程中分配进程以最大限度地提高效率。
Open MPI 的默认设置是将 MPI 任务绑定到通过 -np 2
调用的内核。作业之间没有联系,因此所有 MPI 作业都固定到相同的两个核心(0
和 1
iirc)。
一个次优的解决方案是避免绑定,让 Linux 调度程序来处理
mpirun --bind-to none -np 2 ./foo
更好的解决方案是使用资源管理器(例如 SLURM)、配置 cpuset 或类似工具,以便您的所有作业都分配到不相交的两个核心集上。