我想在具有24个核心的系统上运行具有2个进程的并行应用程序。我希望第一个进程使用核心0-11,第二个进程使用核心12-23。我可以通过以下命令来实现:
mpirun -np 2 -binding user:0-11,12-24 ./a.out
问题是我的应用程序内部启动了许多我无法控制的线程。当我以上述方式将进程弯曲为核心时,进程启动的线程不会在分配给该进程的核心范围内“浮动”。例如,通过这种绑定,我期望由等级为0的进程启动的线程T1至T4能够在0到11的任何内核上运行。但是,使用top
我观察到该进程以及由进程启动的线程在分配给它们的范围内仍固定在第一个内核上,即等级0的进程的内核0。这种配置导致系统上我可用的内核使用情况欠佳,这是我要避免的事情。
预计,当我不使用任何核心绑定时,我就不会遇到这个问题。
mpirun -np 2 ./a.out
但是这种配置使我无法将某些核心映射到某些进程,这是我想要做的。
有什么方法可以使用mpich来实现这种“浮动的”进程到核心的绑定。如果没有,我也愿意尝试其他MPI实现。