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

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

A distributed массив является одной переменной, разделенной на несколько рабочих мест в вашем параллельном пуле. Можно работать с этой переменной как с одной отдельной сущностью, не беспокоясь о ее распределенном характере. Исследуйте функциональности, доступные для distributed arrays in the Parallel Computing Toolbox™: Run MATLAB Functions with Distributed Arrays.

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

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

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

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

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

  • Создайте codistributed массив внутри spmd оператор, см. Single Program Multiple Data (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 с аргументом объект. Эти функции предлагают быстрое средство построения кодируемого массива любого размера всего за один шаг.

В этом примере вы создаете 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

Для получения дополнительной информации о codistributed arrays, смотрите Работа с Codistributed Arrays.

Похожие темы