多处理器环境中主机和插槽的区别是什么?
what is the difference between host and slot in mulicore-multiprocessor environment?
我知道资源管理器(R.M.)向openmpi传递槽位信息,但是
- R.M.如何确定多核处理器中的插槽数量(1核总是= 1个插槽吗?)和
-
如果我在4核处理器上运行a.t out,那么它们之间的区别是:
- myshell$ mpirun——host n1,n1,n1,n1 ./a myshell$ mpirun -np 5——host n1 ./a.out
我的意思是,在哪种情况下,我是否"过度订阅"了节点?
对于资源管理器,例如SLURM、LSF、SGE/OGE、Torque等,插槽和内核之间的映射完全留给系统管理员。它通常取决于要在节点上执行的作业的性质。在HPC中,大多数任务都是cpu绑定的,通常的映射是每个内核(或每个硬件线程)一个插槽。在数据处理中,大多数任务都是I/O绑定的,拥有比内核更多的插槽可能更有益。
同样适用于启动MPI进程。在hostfile中描述主机时,每个主机的插槽数量不一定要与硬件配置匹配。同样,这取决于MPI作业的性质。槽位信息通常用于控制如何分配等级。例如,Open MPI中的默认策略是填充第一台主机上提供的插槽,然后移动到下一台主机。一旦所有的主机都被填满,如果还有更多的队列等待启动,进程将从主机列表中的第一个节点重新启动。
--host n1,n1,n1,n1,n1
和--host n1 -np 5
的结束效应相同,在主机n1
上启动了5个rank。不同之处在于Open MPI如何解释它。
-
mpiexec --host n1,n1,n1,n1,n1 ./a.out
告诉Open MPI主机n1
上有5个插槽。由于省略了-np
参数,因此mpiexec
在每个定义的槽位上启动一个rank,因此在主机n1
上启动5个rank。 -
mpiexec --host n1 -np 5 ./a.out
告诉Open MPI主机n1
上只有一个插槽。一个等级在n1
上线。由于没有剩余的插槽,mpiexec
从第一个定义的插槽重新开始,即在主机n1
上启动另一个rank。如此重复,直到n1
上所有5个排名都被发布,并导致其被超额订阅。
请注意,仅从MPI库的角度来看,节点是超额订阅的——n1
上提供了一个插槽,但它必须在那里开始5个排名。这与过度订阅节点本身无关,也就是说,可能有比5更多的CPU空闲内核。
当主机列表由资源管理器提供时,过度订阅节点是一个非常糟糕的主意,特别是因为一些或所有节点可能与其他作业共享。在这种情况下,建议使用--nooversubscribe
选项,以防止mpiexec
启动的排名超过授予的插槽。但是请注意,存在合理的超额订阅情况,例如,当节点被独占授予(不与其他作业共享)并且MPI作业是I/O密集型作业时。
您还可以指定每个主机上可用插槽的数量:
mpirun -np 5 --host n1:2,n2:3 ./a.out
将在n1上运行2个进程,在n2上运行3个进程。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- C++和Python之间平等含义的区别的根源是什么?
- 尾随空格是什么意思,它和空白有什么区别?
- 调试构建和发布构建、区别和用途是什么意思
- "Thing thing;"和"Thing thing = Thing();"有什么区别,什么时候应该使用一个而不是另一个?
- char和CString的区别和关系是什么?
- 那么,是什么区别了template(c.end(),_1)和template_back(_1)呢