Matlab dfeval накладные расходы - PullRequest
1 голос
/ 03 августа 2011

У меня смущающая параллельная работа, которая не требует общения между рабочими. Я пытаюсь использовать функцию 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 Ответ

4 голосов
/ 03 августа 2011

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

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

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

...