1
我有一个尴尬的并行工作,不需要工人之间的沟通。我正在尝试使用dfeval函数,但开销似乎非常巨大。要开始,我试图从文档中运行示例。Matlab dfeval开销
>> matlabpool open
Starting matlabpool using the 'local' configuration ... connected to 8 labs.
>> sched = findResource('scheduler','type','local')
sched =
Local Scheduler Information
===========================
Type : local
ClusterOsType : pc
ClusterSize : 8
DataLocation : C:\Users\~\AppData\Roaming\MathWorks\MATLAB\local_scheduler_data\R2010a
HasSharedFilesystem : true
- Assigned Jobs
Number Pending : 0
Number Queued : 0
Number Running : 1
Number Finished : 8
- Local Specific Properties
ClusterMatlabRoot : C:\Program Files\MATLAB\R2010a
>> matlabpool close force local
Sending a stop signal to all the labs ... stopped.
Did not find any pre-existing parallel jobs created by matlabpool.
>> sched = findResource('scheduler','type','local')
sched =
Local Scheduler Information
===========================
Type : local
ClusterOsType : pc
ClusterSize : 8
DataLocation : C:\Users\~\AppData\Roaming\MathWorks\MATLAB\local_scheduler_data\R2010a
HasSharedFilesystem : true
- Assigned Jobs
Number Pending : 0
Number Queued : 0
Number Running : 0
Number Finished : 8
- Local Specific Properties
ClusterMatlabRoot : C:\Program Files\MATLAB\R2010a
>> tic;y = dfeval(@rand,{1 2 3},'Configuration', 'local');toc
Elapsed time is 4.442944 seconds.
运行后续时间会产生类似的时间。所以我的问题是:
- 为什么我需要运行matlabpool close force local才能让Number Running为零,因为我在新实例中运行matlabpool打开?
- 对于这样一个微不足道的例子,真正需要5秒的开销吗?特别是考虑到Matlab的工作人员已经启动了?
谢谢。我认为这些工人已经开放,但你说得对,正在启动三名工人。是否有一个调度程序允许重用工作人员,以避免启动并退出开销?由于每次迭代中的数据很大,并且索引不规则,所以我没有从parfor中获得太多加速,所以我试图使用较低级别的构造。 – MatlabSorter
是的,MathWorks自己的作业管理者可以重复使用工作者,就像在“SOA”模式下与HPCServer的集成一样。这两个都需要额外的MATLAB分布式计算服务器许可证。 – Edric