doMPI 和节点、处理器和内核

Posted

技术标签:

【中文标题】doMPI 和节点、处理器和内核【英文标题】:doMPI and nodes, processors and cores 【发布时间】:2019-03-05 01:03:35 【问题描述】:

我想使用我可以访问的集群进行分布式并行计算:5 个节点(“计算机”);每个节点有两个处理器(“CPU”),每个处理器有 18 个内核。

因此,在令人尴尬的并行计算中,我可以使用的线程数是 180 (5*2*18)。

我发现我不能对集群使用标准的并行 R 函数。相反,我需要使用 MPI。 doMPI 似乎非常适合这项任务,因为它为 MPI 实现了一个 foreach,如小插图中所述:

https://cran.r-project.org/web/packages/doMPI/vignettes/doMPI.pdf

我有一个关于 MPI 的问题:当一个人写作时,例如:

cl

这个 2 是什么意思?集群中要使用的节点数?要使用的核心数?

如果 2 代表要使用的节点数,doMPI 是否能够使用每个节点中的 2 个处理器和 2*18 个内核?还是我必须告诉 doMPI 其他事情,这样我才能使用这 36 个内核?

如果 2 代表核心数,那么一切似乎都更容易了。但是这个选择会很奇怪,因为如果集群实际上大于 5 个节点(并且我已经按比例分配了 5 个节点),那么如果 doMPI 应该使用尽可能少的节点(并且该节点内的所有内核)或使用尽可能多的节点(并且该节点内的内核尽可能少)。

那么,我的问题是:

如果我想执行 180 个令人尴尬的并行任务(或 360 或 1800)的循环,我应该使用 cl

感谢您的帮助。

【问题讨论】:

【参考方案1】:

count 参数是“生成的工人数量”。如果您想使用集群中的所有 180 个核心,您有两个主要选择:

    使用startMPIcluster(count=180)。这将产生 180 个进程。 使用mpirun -np 180 R myscript.r。这将启动 180 个从一开始就设置 MPI 的 R 实例,即 MPI“大小”将为 180,进程的“等级”将为 0 到 179。

这些选项中的任何一个都可以。你也可以混合它们,例如mpirun -np 10 然后用count=15 或其他任何方式生成每个作业。但鉴于您到目前为止告诉我们的内容,我认为您应该坚持使用上述更简单的方法。

作为一般说明,每当 MPI 谈到进程或工作人员或作业的数量时,其中一个都会在一个核心上执行。通常,每个节点的节点或套接字数量并不是您首先需要担心的事情(它们可能值得稍后考虑作为优化)。

【讨论】:

谢谢你的回答,那我试试第一种方法。一个相关的问题:我怎么知道我有多少个内核可用?我在 doMPI 中看到有一个 clusterSize() 函数,但是这个函数需要一个 cl 作为输入,所以这意味着已经创建了一个集群对象。有没有办法先验地知道有多少核心可用? @AnarcocapitalistaSocialdemocr:一般来说,您应该知道要运行多少个进程,以及硬件中存在多少个内核。 MPI 不依赖抢先式多任务处理——一旦 CPU 内核分配给您,它就 100% 属于您,直到您的工作完成或取消。

以上是关于doMPI 和节点、处理器和内核的主要内容,如果未能解决你的问题,请参考以下文章

怎样才能找出哪个 CPU 内核正在运行该进程?

汽车网络处理设计

MPI +线程并行化与仅MPI的优势(如果有的话)是什么?

linux内核源码分析之物理内存组织结构

linux 常用命令整理

Linux内存描述之内存节点node--Linux内存管理