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

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

A distributed массив является одной переменной, разделенной по нескольким рабочим в вашем параллельном пуле. Можно работать с этой переменной как одна одна сущность, не имея необходимость волноваться о ее распределенном характере. Исследуйте функциональности, доступные для distributed массивы в Parallel Computing Toolbox™: Запустите функции MATLAB с Распределенными Массивами.

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

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

Можно создать распределенный массив по-разному:

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

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

  • Создайте a codistributed массив в spmd оператор, см. Одну Программу Несколько Данных (spmd). Затем получите доступ к нему как a 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

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

Создание массивы Codistributed

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

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

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

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

В этом примере вы создаете a codistributed массив в spmd оператор, с помощью схемы распределения не по умолчанию. Во-первых, задайте 1D распределение по третьему измерению с 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 массивах смотрите Работу с Массивами Codistributed.

Похожие темы