Этот пример использует локальный планировщик и запускает рабочих на вашей локальной клиентской машине MATLAB®. Это не требует внешнего кластера или планировщика. Шаги включают подсказку pmode (P>>
) для команд, которые вы вводите в Параллельном Командном окне.
Запустите pmode с команды pmode
.
pmode start local 4
Это запускает четырех локальных рабочих, создает связывающееся задание, чтобы работать на тех рабочих и открывает Параллельное Командное окно.
Можно управлять, где история команд появляется. Для этого осуществления положение установлено путем нажатия на Window> History Position> Above Prompt, но можно установить его согласно собственной настройке.
Чтобы проиллюстрировать, что команды в подсказке pmode выполняются на всех рабочих, обратитесь за помощью на функции.
P>> help magic
Установите переменную в подсказке pmode. Заметьте, что значение установлено на всех рабочих.
P>> x = pi
Переменная не обязательно имеет то же значение на каждом рабочем. Функция labindex
возвращает ID, конкретный в каждого рабочего, работающего над этим заданием передачи. В этом примере переменная x
существует с различным значением в рабочей области каждого рабочего.
P>> x = labindex
Возвратите общее количество рабочих, работающих над текущим заданием передачи с функцией numlabs
.
P>> all = numlabs
Создайте реплицированный массив на всех рабочих.
P>> segment = [1 2; 3 4; 5 6]
Присвойте уникальное значение массиву на каждом рабочем, зависящем от номера рабочего (labindex
). С различным значением на каждом рабочем это - различный массив.
P>> segment = segment + 10*labindex
До этой точки в примере различные массивы независимы кроме наличия того же имени. Используйте функцию codistributed.build
, чтобы агрегировать сегменты массивов в когерентный массив, распределенный среди рабочих.
P>> codist = codistributor1d(2, [2 2 2 2], [3 8]) P>> whole = codistributed.build(segment, codist)
codistributor1d
указывает, что массив распределяется вдоль его второго измерения (столбцы) с 2 столбцами на каждом из этих четырех рабочих. На каждом рабочем segment
обеспечил данные для локального фрагмента массива whole
.Теперь, когда вы управляете на codistributed массиве whole
, каждый рабочий обрабатывает вычисления только на его фрагменте или сегмент, массива, не целого массива.
P>> whole = whole + 1000
Несмотря на то, что codistributed массив допускает операции на своей полноте, можно использовать функцию getLocalPart
, чтобы получить доступ к фрагменту codistributed массива на конкретном рабочем.
P>> section = getLocalPart(whole)
section
является теперь различным массивом, потому что это отличается на каждом рабочем.Если вам нужен целый массив в одной рабочей области, используйте функцию gather
.
P>> combined = gather(whole)
gather
для синтаксиса, чтобы собрать массив в рабочую область только одного рабочего.Поскольку у рабочих обычно нет отображений, если вы хотите выполнить какие-либо графические задачи, включающие ваши данные, такие как графический вывод, необходимо сделать это из клиентской рабочей области. Скопируйте массив в клиентскую рабочую область путем ввода следующих команд в MATLAB (клиент) Командное окно.
pmode lab2client combined 1
combined
теперь 3 8 массив в клиентской рабочей области.whos combined
combined
Много матричных функций, которые могут быть знакомыми, могут работать с codistributed массивами. Например, функция eye
создает единичную матрицу. Теперь можно создать codistributed единичную матрицу со следующими командами в Параллельном Командном окне.
P>> distobj = codistributor1d(); P>> I = eye(6, distobj) P>> getLocalPart(I)
codistributor1d
без аргументов задает распределение по умолчанию, которое является столбцами в этом случае, распределено максимально равномерно.Если вы требуете распределения по различному измерению, можно использовать функцию redistribute
. В этом примере аргумент 1
к codistributor1d
задает распределение массива по первому измерению (строки).
P>> distobj = codistributor1d(1); P>> I = redistribute(I, distobj) P>> getLocalPart(I)
Выйдите из pmode и возвратитесь к регулярному рабочему столу MATLAB.
P>> pmode exit