Работники в параллельном пуле взаимодействуют друг с другом, что позволяет распределить массив между работниками. Каждый работник содержит часть массива, и все работники знают, какая часть массива есть у каждого работника.
Используйте distributed для распределения массива между работниками:
M = magic(4) % a 4-by-4 magic square in the client workspace
MM = distributed(M)Сейчас MM - распределенный массив, эквивалентный Mи вы можете манипулировать его элементами или обращаться к ним так же, как и к любому другому массиву.
M2 = 2*MM; % M2 is also distributed, calculation performed on workers x = M2(1,1) % x on the client is set to first element of M2
Одна программа содержит несколько данных (spmd) позволяет определить блок кода, который выполняется параллельно на всех рабочих в параллельном пуле. spmd блок может выполняться для некоторых или всех работников в пуле.
spmd % By default creates pool and uses all workers R = rand(4); end
Этот код создает отдельную матрицу 4 на 4, R, случайных чисел на каждого работника в пуле.
После spmd в клиентском контексте значения из блока доступны, даже если данные фактически хранятся на рабочих. На клиенте эти переменные называются составными объектами. Каждый элемент композита является символом, ссылающимся на значение (данные) работника в пуле. Обратите внимание, что, поскольку переменная может быть определена не для каждого работника, составной элемент может иметь неопределенные элементы.
Продолжая пример сверху, на клиенте, Composite R имеет один элемент для каждого работника:
X = R{3}; % Set X to the value of R from worker 3.Приведенная выше строка извлекает данные из работника 3 для назначения значения X. Следующий код отправляет данные работнику 3:
X = X + 2;
R{3} = X; % Send the value of X from the client to worker 3.Если параллельный пул остается открытым между spmd используются инструкции и одни и те же работники, данные о каждом работнике сохраняются из одного spmd заявление другому.
spmd R = R + labindex % Use values of R from previous spmd. end
Типичное использование для spmd это выполнение одного и того же кода для нескольких работников, каждый из которых получает доступ к различному набору данных. Например:
spmd INP = load(['somedatafile' num2str(labindex) '.mat']); RES = somefun(INP) end
Затем значения RES на работников доступны с клиента как RES{1} от работника 1, RES{2} от работника 2 и т.д.
Существует две формы индексирования композита, сравнимые с индексированием массива ячеек:
AA{n} возвращает значения AA от работника n.
AA(n) возвращает массив ячеек содержимого AA от работника n.
Хотя данные сохраняются на работников от одного spmd если параллельный пул остается открытым, данные из одного экземпляра параллельного пула в другой не сохраняются. То есть, если пул удален и создан новый, все данные из первого пула теряются.
Дополнительные сведения об использовании распределенных массивов см. в разделе spmdи композитные материалы см. в разделе Распределенные массивы.