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

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

Массив distributed является одной переменной, разделенной по нескольким рабочим в вашем параллельном пуле. Можно работать с этой переменной как одна одна сущность, не имея необходимость волноваться о ее распределенном характере. Исследуйте функциональности, доступные для массивов distributed в Parallel Computing 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

Вы имеете 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.

Похожие темы