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.

Запуск в другое время приводит к аналогичным временам. Итак, мои вопросы:

  1. Почему мне нужно запускать matlabpool close force local, чтобы получить Number Running to zero, учитывая, что я запускаю matlabpool open в новом экземпляре?
  2. Действительно ли пять секунд служебной нагрузки необходимы для такого тривиального примера? особенно если учесть, что работники Matlab уже запущены?

1 ответ

Решение

DFEVAL Функция - это оболочка для отправки задания с одной или несколькими задачами в заданный планировщик, в вашем случае "локальный" планировщик. При использовании "локального" планировщика каждая новая задача выполняется в новом рабочем сеансе MATLAB, поэтому вы видите 4,5-секундные накладные расходы - это время, необходимое для запуска работника, определения того, что делать, делать это и затем завершать работу.

Причина, по которой необходимо, чтобы число запущенных заданий было равно нулю, заключается в том, что локальный планировщик может выполнять только ограниченное количество рабочих мест.

В общем, PARFOR с MATLABPOOL это более простая комбинация, чем DFEVAL, Кроме того, когда вы открываете MATLABPOOLрабочие запущены и готовы, поэтому накладные расходы PARFOR намного меньше (но все же не ноль, поскольку тело цикла должно быть отправлено рабочим).

Другие вопросы по тегам