繁体   English   中英

当Matlab启动“并行池”时会发生什么?

[英]What is happening when Matlab is starting a “parallel pool”?

在Matlab中运行并行CPU进程从命令开始

parpool()

根据文档 ,该功能:

[创建]工作池上的特殊工作,并将MATLAB客户端[连接]到并行池。

此功能通常需要一些时间来执行,大约30秒。 但在OpenMP等其他多CPU范例中,并行执行似乎完全透明 - 我从未注意到任何类似于Matlab所做的行为(授予我对并行编程不是很有经验)。

那么, parpool()被调用的时间和完成执行的时间之间实际发生了什么? 需要这么长时间?

说实话,我认为我们不会完全了解MatLab的作用。

但是,为了给你一些答案,MatLab基本上打开了自己的其他实例,以便执行代码。 为此,首先需要检查实例应该打开的位置(您可以将群集从本地更改为您有权访问的任何其他内容,例如Amazons EC2群集)。 一旦新实例打开,MatLab就会设置从主窗口到实例的连接。

笔记:

1)不建议在函数或脚本中使用parpool ,就好像在并行池打开时运行它会导致错误。 使用并行命令例如parfor将自动打开实例。

2) parpool只需要执行“一次”(在关闭之前),即如果再次运行代码,则实例已经打开。

3)如果你想避免代码中的开销,可以在MATLAB的搜索路径中创建一个名为startup.m的文件,命令为parpool ,这将在启动时自动启动并行池。

4)对代码进行矢量化将自动使其并行化,而不会产生开销。

并行计算工具箱,您可以使用几种不同的模式(如作业和任务,并行运行MATLAB代码parforspmdparfeval ,批量处理),并在本地运行它(在你的本地机器在核并行化)或远程(并行化跨群集中的计算机 - 您拥有的计算机或云计算中的计算机之一。

在任何这些情况下,代码都在MATLAB 工作程序上运行,它们基本上是没有交互式桌面的MATLAB副本。

如果您打算在远程群集上运行,那么这些工作人员可能已经启动并准备好运行代码。 如果你打算在本地运行,你可能已经有了工作人员,但也许你没有。

上面的一些构造(例如,作业和任务,批处理)只运行您要求的东西,然后工作人员返回可用于其他事物(可能来自不同的用户)。

但是,一些结构(如parforspmd )要求工人在您打算运行预留给你一段时间的-部分是因为他们可能会闲置了一段时间,你不希望他们被接管另一个用户,部分原因是(与作业和任务或批处理不同),他们可能需要相互通信。 这称为创建工作池

当您运行parpool ,您告诉MATLAB您要为自己保留一个工作池,因为您打算运行需要工作池的构造。 您可以将群集配置文件指定为输入参数,这将告诉您是要在远程群集上运行还是在本地运行。

如果您正在群集上运行, parpool将向群集发送一条消息,以保留一些(已在运行的)工作人员供您使用。

如果您在本地运行, parpool将确保有足够的工作程序在本地运行,然后将它们连接到池中。

需要30秒的东西是它需要启动工人的部分,如果它们还没有运行的话。 在Windows上,如果你在运行parpool看到任务管理器,那么当工作人员启动时,你会看到MATLAB的其他副本在30秒内弹出(他们实际上不是MATLAB本身,他们是MATLAB工作者 - 你可以将它们区分为他们将使用更少的内存,没有桌面)。

为了比较MATLAB对OpenMP的作用,请注意这些MATLAB工作程序是单独的进程,而OpenMP在现有进程中创建多个线程。

关于@ Nicky回答的一些进一步细节。 创建并行池包括:

  1. 将通信作业提交到适当的群集
  2. 这招募了MATLAB工作流程。 这些进程可能已在运行(在MJS的情况下),或者可能需要启动它们(在'local'和所有其他集群类型的情况下)。
  3. 在工作程序之间建立MPI通信以支持spmd (除非在启动池时指定“ 'SpmdEnabled', false ” - 但是,此阶段通常不是性能瓶颈)。
  4. 然后将MATLAB工作人员连接到客户端,以便他们可以进行出价。

parpool和OpenMP之间的开销差异是因为parpool通常会启动额外的MATLAB进程 - 相对较重的操作,而OpenMP只是在单个进程中创建额外的线程 - 相对轻量级。 此外,正如@Nicky指出的那样 - MATLAB本质上可以多线程一些/大多数矢量化操作 - parpool对于没有发生这种情况的情况很有用,或者你可以运行真正的多节点集群。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM