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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Похожие темы