parpool

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

Описание

пример

parpool запускает параллельный пул рабочих процессов с использованием профиля кластера по умолчанию. С настройками по умолчанию, MATLAB® запускает пул на локальной машине с одним рабочим процессом на каждое физическое ядро центрального процессора, до предпочтительного количества рабочих. Дополнительные сведения о параллельных настройках см. в разделе «Задание параллельных настроек».

В целом размер пула определяется вашими параллельными настройками и профилем по умолчанию. parpool создает пул в кластере по умолчанию с его NumWorkers в области значений [1, preferredNumWorkers] для выполнения функций параллельного языка. preferredNumWorkers - значение, заданное в ваших параллельных настройках. Для всех факторов, которые могут повлиять на размер пула, смотрите Размер пула и Выбор кластера.

parpool включает полную функциональность функций параллельного языка в MATLAB путем создания специального задания для пула работников и подключения клиента MATLAB к параллельному пулу. Функции параллельного языка включают parfor, parfeval, parfevalOnAll, spmd, и distributed. Если это возможно, рабочая папка рабочих процессов будет соответствовать папке сеанса клиента MATLAB.

пример

parpool(poolsize) создает и возвращает пул с заданным количеством работников. poolsize может быть положительным целым числом или областью значений, заданным как 2-элементный вектор целых чисел. Если poolsize - область значений, полученный пул имеет максимально возможный размер в запрошенной области значений.

Определение poolsize переопределяет количество работников, заданное в настройках или профиле, и запускает пул с точно таким количеством работников, даже если ему приходится ждать, когда они будут доступны. Большинство кластеров имеют максимальное количество рабочих мест, которые они могут запустить. Если профиль задает кластер планировщика заданий MATLAB, parpool сохраняет свои рабочие данные из числа уже запущенных и доступных под этим планировщиком заданий MATLAB. Если профиль задает локальный или сторонний планировщик, parpool указывает планировщику, чтобы запустить рабочие места для пула.

пример

parpool(resources) или parpool(resources,poolsize) запускает рабочий пул на ресурсах, заданных resources.

пример

parpool(___,Name,Value) применяет заданные значения для определенных свойств при запуске пула.

пример

poolobj = parpool(___) возвращает parallel.Pool объект для клиентской рабочей области, представляющей пул в кластере. Объект пула можно использовать для программного удаления пула или получения доступа к его свойствам. Использование delete(pool) для завершения работы параллельного пула.

Примеры

свернуть все

Запустите параллельный пул с помощью профиля по умолчанию, чтобы определить количество работников. С настройками по умолчанию пул по умолчанию находится на локальном компьютере.

parpool

Можно создавать пулы в различных типах параллельных окружений на локальном компьютере.

  • Запустите параллельный пул рабочих процессов.

    parpool('local')
  • Запустите параллельный пул рабочих потоков.

    parpool('threads')

Для получения дополнительной информации о параллельных окружениях см. Раздел «Выбор между основанными на потоках и основанными на процессах Окружениями».

Запустите параллельный пул из 16 работников с помощью профиля под названием myProf.

parpool('myProf',16)

Создайте объект, представляющий кластер, идентифицированный профилем по умолчанию, и используйте этот объект кластера, чтобы запустить параллельный пул. Размер пула определяется профилем по умолчанию.

c = parcluster
parpool(c)

Запустите параллельный пул с профилем по умолчанию и передайте работникам два файла кода.

parpool('AttachedFiles',{'mod1.m','mod2.m'})

Если у вас есть доступ к нескольким графическим процессорам, можно выполнять вычисления на нескольких графических процессорах параллельно с помощью параллельного пула.

Чтобы определить количество графических процессоров, доступных для использования в MATLAB, используйте gpuDeviceCount функция.

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

Запустите параллельный пул с таким количеством рабочих процессов, как доступные графические процессоры. Для оптимальной эффективности MATLAB по умолчанию присваивает каждый рабочий процессор другому графическому процессору.

parpool('local',availableGPUs);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 3).

Чтобы определить, какой графический процессор использует каждый рабочий процесс, вызовите gpuDevice внутри spmd блок. The spmd блок запускается gpuDevice на каждом работнике.

spmd
    gpuDevice
end

Используйте функции параллельного языка, такие как parfor или parfeval, чтобы распределить ваши расчеты среди работников в параллельном пуле. Если вы используете gpuArray активизированные функции в ваших расчетах, эти функции выполняются на графическом процессоре работника. Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре. Для получения примера смотрите Запуск функций MATLAB на нескольких графических процессорах.

Когда вы закончите с вашими расчетами, отключите параллельный пул. Можно использовать gcp функция для получения текущего параллельного пула.

delete(gcp('nocreate'));

Если вы хотите использовать другой выбор графических процессоров, то можно использовать gpuDevice для выбора конкретного графического процессора на каждом рабочем месте с помощью индекса устройства графического процессора. Вы можете получить индекс каждого графического процессора в вашей системе, используя gpuDeviceCount функция.

Предположим, что в вашей системе доступно три графических процессоров, но для расчетов нужно использовать только два. Получите индексы устройств.

[availableGPUs,gpuIndx] = gpuDeviceCount("available")
availableGPUs = 3
gpuIndx = 1×3

     1     2     3

Задайте индексы устройств, которые вы хотите использовать.

useGPUs = [1 3];

Запустите свой параллельный пул. Использование spmd блок и gpuDevice чтобы связать каждый рабочий процесс с одним из используемых графических процессоров, используя индекс устройства. The labindex функция определяет индекс каждого работника.

parpool('local',numel(useGPUs));
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 2).
spmd
    gpuDevice(useGPUs(labindex));
end

В качестве наилучшей практики и для обеспечения оптимальной эффективности назначьте каждому работнику отдельный графический процессор.

Когда вы закончите с вашими расчетами, отключите параллельный пул.

delete(gcp('nocreate'));

Создайте параллельный пул с профилем по умолчанию, а затем удалите пул.

poolobj = parpool;

delete(poolobj)

Найдите количество работников в текущем параллельном пуле.

poolobj = gcp('nocreate'); % If no pool, do not create new one.
if isempty(poolobj)
    poolsize = 0;
else
    poolsize = poolobj.NumWorkers
end

Входные параметры

свернуть все

Размер параллельного пула, заданный как положительное целое число или область значений, заданный как 2-элементный вектор целых чисел. Если poolsize - область значений, полученный пул имеет максимально возможный размер в запрошенной области значений. Установите предпочтительное количество работников по умолчанию в параллельных настройках или параллельном профиле.

Пример: parpool('local',2)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Ресурсы для запуска пула, заданные как 'local', 'threads', имя профиля кластера или объекта кластера.

Пример: parpool('local')

Пример: parpool('threads')

Пример: parpool('myClusterProfile',16)

Пример: c = parcluster; parpool(c)

Типы данных: char | string | parallel.Cluster

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'AttachedFiles',{'myFun.m'}

Файлы для присоединения к пулу, заданные как вектор символов, строковые или строковые массивы или массив ячеек из векторов символов.

С помощью этой пары аргументов parpool запускает параллельный пул и передает идентифицированные файлы работникам пула. Указанные здесь файлы добавляются к AttachedFiles свойство, заданное в применимом параллельном профиле, чтобы сформировать полный список вложенных файлов. The 'AttachedFiles' имя свойства зависит от регистра и должно отображаться как показано на рисунке.

Пример: {'myFun.m','myFun2.m'}

Типы данных: char | cell

Флаг, чтобы указать, добавляются ли добавленные пользователем записи в пути клиента к пути каждого работника при запуске, заданный как логическое значение.

Типы данных: logical

Имена переменных окружения для копирования из сеанса клиента в рабочие органы, заданные как вектор символов, строковые или строковые массивы или массив ячеек из векторов символов. Имена, указанные здесь, добавляются к 'EnvironmentVariables' свойство, заданное в применимом параллельном профиле, чтобы сформировать полный список переменных окружения. Все перечисленные переменные, которые не заданы, не копируются в рабочие. Эти переменные окружения заданы для работников на время параллельного пула.

Типы данных: char | cell

Флаг для определения, если spmd поддержка включена в пуле, заданная как логическое значение. Отключить поддержку можно только в локальном кластере или кластере планировщика заданий MATLAB. parfor итерации не включают коммуникацию между работниками. Поэтому, если 'SpmdEnabled' является false, а parfor-loop продолжается, даже если один или несколько рабочих процессов прерываются во время выполнения цикла.

Типы данных: logical

Время в минутах, после которого пул отключается в режиме ожидания, заданное как целое число, больше нуля. Пул свободен, если он не выполняет код на работниках. По умолчанию 'IdleTimeout' совпадает со значением в ваших параллельных настройках. Дополнительные сведения о параллельных настройках см. в разделе «Задание параллельных настроек».

Пример: pool = parpool('IdleTimeout',120)

Выходные аргументы

свернуть все

Доступ к параллельному пулу от клиента, возвращенный как parallel.Pool объект.

Совет

  • Индикатор состояния пула в левом нижнем углу рабочего стола показывает соединение сеанса клиента с пулом и состояние пула. Щелкните значок для меню поддерживаемых действий пула.

    С пулом работает: Без пула работает:

  • Если вы устанавливаете свои параллельные настройки, чтобы автоматически создать параллельный пул при необходимости, вам не нужно явным образом вызывать parpool команда. Вы можете явно создать пул для управления, когда вы несете накладное время настройки, поэтому пул готов для последующих параллельных языковых конструкций.

  • delete(poolobj) отключает параллельный пул. Без параллельного бассейна, spmd и parfor запускается как один поток в клиенте, если только для параллельных настроек не задано автоматическое запуск параллельного пула для них.

  • При использовании редактора MATLAB для обновления файлов клиента, присоединенных к параллельному пулу, эти обновления автоматически распространяются на работников пула. (Это автоматическое обновление не относится к Simulink® файлы модели. Чтобы распространить обновленные файлы модели среди работников, используйте updateAttachedFiles функцию.)

  • Если это возможно, рабочая папка рабочих процессов первоначально будет соответствовать папке клиентского сеанса MATLAB. Впоследствии следующие команды, введенные в Командном окне клиента, также выполняются для всех работников пула:

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

    При изменении папок или добавлении пути с cd или addpath на клиентах с Windows® операционные системы, значение, отправленное рабочим, является UNC- пути для папки, если это возможно. Для клиентов с Linux® операционные системы, это абсолютное расположение папки.

    Если какая-либо из этих команд не работает на клиенте, она также не выполняется на рабочих местах. Для примера, если addpath задает папку, к которой клиент не может получить доступ, addpath команда не выполняется для рабочих процессов. Однако, если рабочая папка может быть установлена на клиенте, но не может быть установлена так, как указано в любом из рабочих процессов, сообщение об ошибке не возвращается в Командное окно клиента.

    Будьте осторожны с этим небольшим различием в поведении в смешанной платформе окружения где клиент не является той же платформой, что и работники, где папки, локальные для клиента или сопоставленные с ним, недоступны работникам или где папки находятся в несредневанном файле системе. Например, если клиент MATLAB работает на Microsoft® Операционная система Windows, в то время как все работники MATLAB работают в операционных системах Linux, тот же аргумент, что и addpath не может работать с обоими. В этой ситуации можно использовать функцию pctRunOnAll чтобы убедиться, что команда выполняется для всех работников.

    Другое различие между клиентом и работниками заключается в том, что любой addpath аргументы, являющиеся частью matlabroot папка не установлена в рабочих местах. Предположение состоит в том, что основа установки MATLAB уже включена в пути рабочих. Правила для addpath что касается работников в бассейне, то:

    • Подпапки matlabroot папка не отправляется работникам.

    • Любые папки, которые появляются перед первым вхождением matlabroot папка добавляется в верхнюю часть пути на рабочих местах.

    • Любые папки, которые появляются после первого вхождения matlabroot папка добавляется после matlabroot группа папок в путях работников.

    Например, предположим, что matlabroot на клиенте C:\Applications\matlab\. При открытом параллельном пуле выполните следующее, чтобы задать путь к клиенту и всем работникам:

    addpath('P1',
            'P2',
            'C:\Applications\matlab\T3',
            'C:\Applications\matlab\T4',
            'P5',
            'C:\Applications\matlab\T6',
            'P7',
            'P8');

    Потому что T3, T4, и T6 являются подпапками matlabroot, они не заданы на путях рабочих. Итак, для рабочих, соответствующая часть пути, полученная от этой команды:

    P1
    P2
    <worker original matlabroot folders...>
    P5
    P7
    P8
  • Если вы используете Macintosh или Linux, и видите проблемы во время создания большого параллельного пула, смотрите Рекомендуемые пределы системы для Macintosh и Linux.

Введенный в R2013b