Распределите массивы и запущенный SPMD

Распределенные массивы

Рабочие в параллельном пуле связываются друг с другом, таким образом, можно распределить массив среди рабочих. Каждый рабочий содержит часть массива, и все рабочие знают, какой фрагмент массива каждый рабочий имеет.

Используйте 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 блок может работать на некоторых или всех рабочих в пуле.

spmd     % By default creates pool and uses all workers
    R = rand(4);
end

Этот код создает матрицу индивидуума 4-by-4, R, из случайных чисел на каждом рабочем в пуле.

Составляет композит

После spmd оператор, в клиентском контексте, значения от блока доступны, даже при том, что данные на самом деле хранимы на рабочих. На клиенте эти переменные называются Составными объектами. Каждым элементом составного объекта является символ, ссылающийся на значение (данные) по рабочему в пуле. Обратите внимание на то, что, потому что переменная сила не быть заданной на каждом рабочем, Составная сила имеет неопределенные элементы.

Продолжая пример сверху, на клиенте, Составной объект 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, и Составляет композит, смотрите Распределенные Массивы.