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. Постоянный объект, C, который позволяет каждому рабочему получать доступ к значению X в построении языка параллельного программирования (parforSPMD, 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. Постоянный, и использование это в нескольких 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 из составного объекта

В этом примере показано, как создать большие наборы данных как Составной объект на рабочих пула в 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