Matlab dfeval开销

时间:2011-08-03 01:48:01

标签: matlab parallel-processing embarrassingly-parallel

我有一个令人尴尬的平行工作,不需要工人之间的沟通。我正在尝试使用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工作人员已经启动了吗?

1 个答案:

答案 0 :(得分:4)

DFEVAL函数是将具有一个或多个任务的作业提交给给定调度程序的包装器,在本例中是“本地”调度程序。使用“本地”调度程序,每个新任务都在一个新的MATLAB工作程序会话中运行,这就是为什么你会看到4.5秒的开销 - 这是启动工作人员的时间,计算出来做什么,做什么,然后退出。

您需要运行的作业数为零的原因是本地调度程序只能运行有限数量的工作程序。

通常,使用PARFOR的{​​{1}}比使用MATLABPOOL更容易使用。此外,当您打开DFEVAL时,工作人员已启动并准备就绪,因此MATLABPOOL的开销要小得多(但仍然不是零,因为循环体需要发送给工作人员)