exponenta event banner

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 блок. spmd участки блоков gpuDevice на каждого работника.

spmd
    gpuDevice
end

Использовать параллельные языковые функции, такие как parfor или parfeval, чтобы распределить ваши вычисления среди работников в параллельном пуле. Если вы используете gpuArray включенные функции в вычислениях, эти функции выполняются на GPU работника. Дополнительные сведения см. в разделе Выполнение функций 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 чтобы связать каждого работника с одним из графических процессоров, которые вы хотите использовать, используя индекс устройства. 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 свойство, указанное в соответствующем параллельном профиле для формирования полного списка присоединенных файлов. 'AttachedFiles' имя свойства чувствительно к регистру и должно отображаться, как показано на рисунке.

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

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

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

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

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

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

Флаг для указания, если spmd включена поддержка пула, указанного как логическое значение. Поддержку можно отключить только в локальном кластере или кластере планировщика заданий MATLAB. parfor итерации не предполагают общения между работниками. Следовательно, если 'SpmdEnabled' является false, a 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