首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当Matlab启动一个“并行池”时,会发生什么?

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

Stack Overflow用户
提问于 2017-08-18 02:19:45
回答 3查看 5K关注 0票数 4

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

代码语言:javascript
复制
parpool()

根据文档,该函数:

在员工池上创建一个特殊的作业,并将MATLAB客户端连接到并行池。

这个函数通常需要一些时间来执行,大约30秒。但是在其他类似OpenMP的多CPU模式中,并行执行似乎是完全透明的--我从未注意到任何类似于Matlab的行为(当然,我对并行编程不是很有经验)。

那么,从调用parpool()到完成执行之间到底发生了什么呢?为什么要花这么长时间?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-18 09:21:44

并行计算工具箱使您能够使用几种不同的范例(例如作业和任务、parforspmdparfeval、批处理)并行运行MATLAB代码,并在本地运行它(在本地机器的核心间并行化)或远程运行(集群中的机器之间并行化--您拥有的并行程序或云中的并行程序)。

在任何一种情况下,代码都是在MATLAB工作人员上运行的,这些工作人员基本上是MATLAB的副本,没有交互式桌面。

如果您打算在远程集群上运行,这些工作人员很可能已经启动并准备运行代码。如果您打算在本地运行,您可能已经开始工作,但可能没有。

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

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

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

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

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

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

要比较MATLAB对OpenMP的作用,请注意,这些MATLAB工作人员是独立的进程,而OpenMP则在现有进程中创建多个线程。

票数 4
EN

Stack Overflow用户

发布于 2017-08-18 06:36:50

老实说,我认为我们永远不会确切地知道MatLab是做什么的。

但是,为了给出一些答案,MatLab基本上会打开它自身的其他实例,以便它可以继续执行代码。为了做到这一点,它首先需要检查应该在何处打开实例(您可以将集群从本地更改为您可以访问的其他任何东西,例如亚马逊EC2集群)。一旦打开了新实例,MatLab就会设置从主窗口到实例的连接。

备注:

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

2) parpool只需执行一次(在关闭之前),也就是说,如果您再次运行代码,实例已经打开。

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

4)代码的矢量化将使代码在没有开销的情况下自动并行化。

票数 2
EN

Stack Overflow用户

发布于 2017-08-18 09:15:45

关于@Nicky的回答,还需要进一步了解一些细节。创建并行池包括:

  1. 将通信作业提交到适当的群集
  2. 这招募了MATLAB的工作人员处理。这些进程可能已经在运行(在MJS中),或者它们可能需要启动(对于'local'和所有其他集群类型)。
  3. 在工作人员之间设置MPI通信以支持spmd (除非在启动池时指定"'SpmdEnabled', false“--但是,这一阶段通常不是性能瓶颈)。
  4. MATLAB的工作人员然后连接到客户端,这样他们就可以执行它的命令。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45747538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档