Создайте 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, обращающихся к одному и тому же постоянному набору данных, потому что X
передается только один раз рабочим.
C = parallel.pool.Constant(FH)
определяет указатель на функцию FH
на каждом рабочем и сохраняет результат в C.Value
. Это также полезно для создания и использования любых ресурсов handle-type на рабочих местах, таких как указатели на файлы и подключения к базе данных.
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 и использовать его в нескольких 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.
В этом примере показано, как создать большие наборы данных как Composite для работников пула внутри 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
parcluster
| parfeval
| parfor
| parpool
| spmd