exponenta event banner

Создание и использование распределенных массивов

Если данные в настоящее время находятся в памяти локального компьютера, можно использовать distributed функция для распределения существующего массива из клиентской рабочей области среди работников параллельного пула. Distributed массивы используют объединенную память нескольких работников в параллельном пуле для хранения элементов массива. Альтернативные способы секционирования данных см. в разделе Распределение массивов по параллельным работникам. Вы работаете со всем массивом как с одной сущностью, однако работники работают только со своей частью массива и при необходимости автоматически передают данные между собой. Вы можете использовать distributed массивы для масштабирования вычислений больших данных. Рассмотреть distributed массивы, когда у вас есть доступ к кластеру, так как вы можете объединить память нескольких машин в кластере.

A distributed массив - это одна переменная, разделенная на несколько работников в параллельном пуле. С этой переменной можно работать как с одной отдельной сущностью, не беспокоясь о ее распределенном характере. Ознакомьтесь с функциональными возможностями, доступными для distributed массивы в Toolbox™ параллельных вычислений: выполнение функций MATLAB с распределенными массивами.

При создании distributed массив, невозможно управлять подробностями дистрибутива. С другой стороны, codistributed массивы позволяют управлять всеми аспектами распределения, включая размеры и секции. Далее вы узнаете, как создавать оба distributed и codistributed массивы.

Создание распределенных массивов

Распределенный массив можно создать различными способами:

  • Используйте distributed функция для распределения существующего массива из клиентской рабочей области среди работников параллельного пула.

  • Распределенный массив можно создать непосредственно на рабочих. Нет необходимости сначала создавать массив в клиенте, чтобы уменьшить требования к памяти рабочей области клиента. Доступные функции: eye(___,'distributed'), rand(___,'distributed')и т.д. Полный список см. в разделе distributed страница ссылки на объект.

  • Создать codistributed массив внутри spmd см. раздел Несколько данных одной программы (spmd). Затем получить доступ к нему как к distributed массив за пределами spmd заявление. Это позволяет использовать схемы распределения, отличные от схем по умолчанию.

В этом примере создается массив в клиентской рабочей области, а затем он превращается в распределенный массив.

parpool('local',4)  % Create pool
A = magic(4);       % Create magic 4-by-4 matrix
B = distributed(A); % Distribute to the workers
B                   % View results in client.
whos                % B is a distributed array here.
delete(gcp)         % Stop pool

Вы создалиB в качестве distributed массив, разделенный на работников в параллельном пуле. Это показано на рисунке.

Создание распределенных массивов

В отличие от этого, distributed массивы, codistributed массивы позволяют управлять всеми аспектами распределения, включая размеры и секции. Можно создать codistributed массив различными способами:

  • Разбиение большего массива - начните с большого массива, который реплицируется на всех работников, и разбиение его таким образом, чтобы части распределялись между работниками. Это наиболее удобно при наличии достаточного объема памяти для хранения исходного реплицированного массива.

  • Создание из меньших массивов - начните с меньших реплицированных массивов, хранящихся на каждом работнике, и объедините их таким образом, чтобы каждый массив стал сегментом большего распределенного массива. Этот метод снижает требования к памяти, так как позволяет создавать распределенный по коду массив из небольших частей.

  • Использование функций конструктора MATLAB - использование любой из функций конструктора MATLAB ®, напримерrand или zeros с аргументом объекта codistributor. Эти функции предлагают быстрое средство построения совместно распределенного массива любого размера всего за один шаг.

В этом примере создается codistributed массив внутри spmd , используя схему распределения, не используемую по умолчанию. Сначала определите распределение 1-D по третьему измерению: 4 детали на работнике 1 и 12 деталей на работнике 2. Тогда создайте множество нолей 3 на 3 на 16.

parpool('local',2) % Create pool
spmd
    codist = codistributor1d(3,[4,12]);
    Z = zeros(3,3,16,codist);
    Z = Z + labindex;
end
Z           % View results in client.
whos        % Z is a distributed array here.
delete(gcp) % Stop pool

Дополнительные сведения о распределенных по кодам массивах см. в разделе Работа с распределенными по кодам массивами.

Связанные темы