exponenta event banner

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

Построение 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-loops для доступа к одному и тому же постоянному набору данных, поскольку 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) использует значения, сохраненные в Composite 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 из составного

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