Создайте 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. Постоянный, и использование это в нескольких 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. Постоянный с указателем на функцию и функцией очистки.
Создайте временный файл на каждом рабочем. Путем передачи @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.
Этот пример показывает, как создать большие наборы данных как Составной объект на рабочих пула в блоке 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
parcluster
| parfeval
| parfor
| parpool
| spmd