Matlab dfeval накладные расходы
У меня смущающая параллельная работа, которая не требует общения между рабочими. Я пытаюсь использовать функцию 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 to zero, учитывая, что я запускаю matlabpool open в новом экземпляре?
- Действительно ли пять секунд служебной нагрузки необходимы для такого тривиального примера? особенно если учесть, что работники Matlab уже запущены?
1 ответ
DFEVAL
Функция - это оболочка для отправки задания с одной или несколькими задачами в заданный планировщик, в вашем случае "локальный" планировщик. При использовании "локального" планировщика каждая новая задача выполняется в новом рабочем сеансе MATLAB, поэтому вы видите 4,5-секундные накладные расходы - это время, необходимое для запуска работника, определения того, что делать, делать это и затем завершать работу.
Причина, по которой необходимо, чтобы число запущенных заданий было равно нулю, заключается в том, что локальный планировщик может выполнять только ограниченное количество рабочих мест.
В общем, PARFOR
с MATLABPOOL
это более простая комбинация, чем DFEVAL
, Кроме того, когда вы открываете MATLABPOOL
рабочие запущены и готовы, поэтому накладные расходы PARFOR
намного меньше (но все же не ноль, поскольку тело цикла должно быть отправлено рабочим).