Создайте 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.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
parcluster
| parfeval
| parfor
| parpool
| spmd