parallel.pool. Постоянный

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

Синтаксис

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. Постоянный объект, C, который позволяет каждому рабочему получать доступ к значению X в построении языка параллельного программирования (parfor, spmd, parfeval) использование свойства C.Value. Это может улучшать производительность, когда у вас есть несколько циклов parfor, получающих доступ к тому же постоянному набору данных, потому что X передается только однажды рабочим.

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

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. Постоянный от массива в клиенте

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

Во-первых, создайте некоторые большие данные по клиенту, затем создайте parallel.pool. Постоянный, передавая данные пулу только однажды.

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. Постоянный от указателя на функцию

Этот пример показывает, как создать parallel.pool. Постоянный с указателем на функцию и функцией очистки.

Создайте временный файл на каждом рабочем. Путем передачи @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. Постоянный от Составного объекта

Этот пример показывает, как создать большие наборы данных как Составной объект на рабочих пула в блоке spmd, и затем использовать те данные в качестве parallel.pool. Постоянный в 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