parallel.pool.Constant

Создайте parallel.pool.Constant из данных или указателя на функцию

Синтаксис

C = parallel.pool.Constant(X)
C = parallel.pool.Constant(FH)
C = parallel.pool.Constant(FH,CLEANUP)
C = parallel.pool.Constant(COMP)

Описание

C = parallel.pool.Constant(X) копирует значение X каждому рабочему и возвращает объект parallel.pool.Constant, C, что позволяет каждому рабочему получить доступ к значению X внутри параллельной языковой конструкции (parfor, spmd, parfeval) использование свойства C.Value. Это может улучшить эффективность, когда у вас есть несколько циклов parfor, обращающихся к одному и тому же постоянному набору данных, потому что X передается только один раз рабочим.

C = parallel.pool.Constant(FH) определяет указатель на функцию FH на каждом рабочем и сохраняет результат в C.Value. Это также полезно для создания и использования любых ресурсов handle-type на рабочих местах, таких как указатели на файлы и подключения к базе данных.

C = parallel.pool.Constant(FH,CLEANUP) определяет указатель на функцию FH на каждом рабочем и сохраняет результат в C.Value. Когда C очищен, указатель на функцию CLEANUP оценивается одним аргументом C.Value на каждого работника.

C = parallel.pool.Constant(COMP) использует значения, хранящиеся в составной COMPи хранит их в C.Value на каждого работника. Это особенно полезно, когда данные, которые вам нужно использовать внутри цикл parfor, могут быть построены только на рабочих местах, например, когда данные являются слишком большими, чтобы удобно помещаться в клиенте, или когда они загружаются из файла, к которому могут получить доступ только работники. Если COMP не имеет заданного значения для каждого рабочего процесса, результаты ошибки.

Совет

parallel.pool.Constant должен вызываться в сеансе клиента MATLAB.

Можно использовать parallel.pool.Constant с уже запущенным параллельным пулом или последующими параллельными пулами.

Примеры

Сделайте parallel.pool.Constant из массива в клиенте

В этом примере показано, как создать числовой parallel.pool.Constant и использовать его в нескольких parfor-циклы в том же пуле.

Сначала создайте некоторые большие данные на клиенте, затем создайте parallel.pool.Constant, передав данные в пул только один раз.

data = rand(1000);
c = parallel.pool.Constant(data);
for ii = 1:10
    % Run multiple PARFOR loops accessing the data.
    parfor jj = 1:10
        x(ii,jj) = c.Value(ii,jj);
    end
end

Сделайте parallel.pool.Constant из указателя на функцию

В этом примере показано, как создать parallel.pool.Constant с указателем на функцию и функцией очистки.

Создайте временный файл для каждого работника. Передачей @fclose в качестве второго аргумента файл автоматически закрывается при c выходит за пределы возможностей.

c = parallel.pool.Constant(@() fopen(tempname(pwd),'wt'),@fclose);
spmd
   disp(fopen(c.Value)); % Displays the temporary filenames.
end

parfor idx = 1:1000
   fprintf(c.Value,'Iteration: %d\n',idx);
end
clear c;   % Closes the temporary files.

Сделайте parallel.pool.Constant из Composite

В этом примере показано, как создать большие наборы данных как Composite для работников пула внутри spmd блокируйте, а затем используйте эти данные как parallel.pool.Constant внутри parfor-цикл.

spmd
  if labindex == 1
    x = labBroadcast(1,rand(5000));
  else
    x = labBroadcast(1);
  end
end
xc = parallel.pool.Constant(x);
parfor idx = 1:10
  s(idx) = sum(xc.Value(:,idx));
end
s
s =
   1.0e+03 *

    2.5108    2.5031    2.5123    2.4909    2.4957    2.5462    2.4859    2.5320    2.5076    2.5432

См. также

| | | |

Введенный в R2015b