2011-08-03 28 views
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. 

运行后续时间会产生类似的时间。所以我的问题是:

  1. 为什么我需要运行matlabpool close force local才能让Number Running为零,因为我在新实例中运行matlabpool打开?
  2. 对于这样一个微不足道的例子,真正需要5秒的开销吗?特别是考虑到Matlab的工作人员已经启动了?

回答

4

DFEVAL函数是一个包含提交作业与一个或多个任务给定的调度程序,在你的情况下,'本地'调度。使用“本地”调度程序,每个新任务都运行在新的MATLAB工作区会话中,这就是为什么您会看到4.5秒的开销 - 这是启动工作人员所需的时间,制定该做什么,做什么,然后退出的原因。

您需要将运行作业的数量设置为零的原因是本地调度程序只能运行受限制的数量的工作人员。

一般而言,PARFORMATLABPOOLDFEVAL更容易组合使用。此外,当您打开MATLABPOOL时,工作人员已启动并准备就绪,因此PARFOR的开销要小得多(但仍然不为零,因为循环的主体需要发送给工作人员)。

+0

谢谢。我认为这些工人已经开放,但你说得对,正在启动三名工人。是否有一个调度程序允许重用工作人员,以避免启动并退出开销?由于每次迭代中的数据很大,并且索引不规则,所以我没有从parfor中获得太多加速,所以我试图使用较低级别的构造。 – MatlabSorter

+1

是的,MathWorks自己的作业管理者可以重复使用工作者,就像在“SOA”模式下与HPCServer的集成一样。这两个都需要额外的MATLAB分布式计算服务器许可证。 – Edric