我有一个令人尴尬的平行工作,不需要工人之间的沟通。我正在尝试使用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.
运行后续时间会产生类似的时间。所以我的问题是:
答案 0 :(得分:4)
DFEVAL
函数是将具有一个或多个任务的作业提交给给定调度程序的包装器,在本例中是“本地”调度程序。使用“本地”调度程序,每个新任务都在一个新的MATLAB工作程序会话中运行,这就是为什么你会看到4.5秒的开销 - 这是启动工作人员的时间,计算出来做什么,做什么,然后退出。
您需要运行的作业数为零的原因是本地调度程序只能运行有限数量的工作程序。
通常,使用PARFOR
的{{1}}比使用MATLABPOOL
更容易使用。此外,当您打开DFEVAL
时,工作人员已启动并准备就绪,因此MATLABPOOL
的开销要小得多(但仍然不是零,因为循环体需要发送给工作人员)