Если ваши данные находятся в настоящее время в памяти о вашей локальной машине, можно использовать 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
массив, разделенный по рабочим в вашем параллельном пуле. Это показано на рисунке.
В отличие от этого, 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.