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