Создайте 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. Постоянный, и использование это в нескольких 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.5432parcluster | parfeval | parfor | parpool | spmd