Если ваши данные в данный момент находятся в памяти локальной машины, можно использовать 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.