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.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