在Matlab中运行并行CPU进程从以下命令开始
parpool()根据文档,该函数:
在员工池上创建一个特殊的作业,并将MATLAB客户端连接到并行池。
这个函数通常需要一些时间来执行,大约30秒。但是在其他类似OpenMP的多CPU模式中,并行执行似乎是完全透明的--我从未注意到任何类似于Matlab的行为(当然,我对并行编程不是很有经验)。
那么,从调用parpool()到完成执行之间到底发生了什么呢?为什么要花这么长时间?
发布于 2017-08-18 09:21:44
并行计算工具箱使您能够使用几种不同的范例(例如作业和任务、parfor、spmd、parfeval、批处理)并行运行MATLAB代码,并在本地运行它(在本地机器的核心间并行化)或远程运行(集群中的机器之间并行化--您拥有的并行程序或云中的并行程序)。
在任何一种情况下,代码都是在MATLAB工作人员上运行的,这些工作人员基本上是MATLAB的副本,没有交互式桌面。
如果您打算在远程集群上运行,这些工作人员很可能已经启动并准备运行代码。如果您打算在本地运行,您可能已经开始工作,但可能没有。
上面的一些构造(例如作业和任务、批处理)只是运行所要求的东西,然后工作人员返回到其他事情可用(可能来自不同的用户)。
但是,有些构造(例如parfor、spmd)要求要运行的工作人员为您保留一段时间--部分原因是他们可能闲置了一段时间,您不希望他们被其他用户接管,部分原因是(与作业和任务或批处理不同)他们可能需要相互通信。这称为创建员工池。
当您运行parpool时,您告诉MATLAB您想为自己预留一个工人池,因为您打算运行一个需要一个工作池的构造。您可以指定一个集群配置文件作为输入参数,这将告诉它您是要在远程集群上运行,还是要在本地运行。
如果在集群上运行,parpool将向集群发送一条消息,以保留一些(已经在运行的)工作人员供您使用。
如果您在本地运行,parpool将确保有足够的工人在本地运行,然后为您将它们连接到一个池中。
需要30秒的东西是它需要启动工人的一部分,如果他们还没有开始运行。在Windows上,如果您在运行parpool时观看任务管理器,您将看到在工作人员开始的30秒内会弹出更多的MATLAB副本(它们实际上不是MATLAB本身,它们是MATLAB工作人员--您可以区分它们,因为它们将使用更少的内存而没有桌面)。
要比较MATLAB对OpenMP的作用,请注意,这些MATLAB工作人员是独立的进程,而OpenMP则在现有进程中创建多个线程。
https://stackoverflow.com/questions/45747538
复制相似问题