parforOptions

Опции для parfor, такие как разделение итераций

Синтаксис

opts = parforOptions(cluster)
opts = parforOptions(pool)
opts = parforOptions(___,'RangePartitionMethod',method)
opts = parforOptions(___,'RangePartitionMethod','fixed','SubrangeSize',n)
opts = parforOptions(cluster,___,Name,Value)

Описание

пример

opts = parforOptions(cluster) создает набор опций для parfor, который дает команду parfor выполнять операторы на рабочих в cluster, не создавая параллельный пул. Вместо этого parfor представляет независимые задачи кластеру, чтобы выполнить тело цикла. разделы parfor и распределяют итерации рабочим согласно свойству NumWorkers, количеству доступных рабочих, cluster.

пример

opts = parforOptions(pool) создает набор опций для parfor, который дает команду parfor выполнять операторы на рабочих в параллельном пуле pool.

пример

opts = parforOptions(___,'RangePartitionMethod',method) method использования, чтобы задать, как разделить parfor - итерации цикла в подобласти значений. Подобласть значений является непрерывным блоком итераций цикла, которые parfor выполняет как группа на рабочем.

пример

opts = parforOptions(___,'RangePartitionMethod','fixed','SubrangeSize',n) делит parfor - итерации цикла в подобласти значений размера, не больше, чем n.

пример

opts = parforOptions(cluster,___,Name,Value) задает дополнительные опции для использования с кластерным объектом cluster.

Примеры

свернуть все

Создайте кластерный объект с помощью функции parcluster и создайте набор опций parfor с нею. По умолчанию parcluster использует ваш кластерный профиль по умолчанию. Проверяйте, что ваш профиль по умолчанию на вкладке Home MATLAB®, параллельно> Выбирают Default Cluster.

cluster = parcluster;
opts = parforOptions(cluster);

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

Когда вы используете этот подход, parfor может использовать всех доступных рабочих в кластере, и рабочие становятся доступными, как только цикл завершается. Этот подход также полезен, если ваш кластер не поддерживает параллельные пулы.

values = [3 3 3 7 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

Используйте этот синтаксис, чтобы запустить parfor на большом кластере, не используя рабочих для дольше, чем необходимый.

Можно управлять, как parfor делит итерации на подобласти значений для рабочих с parforOptions. Управление разделением области значений может оптимизировать производительность parfor - цикл. Для лучшей производительности попытайтесь разделить в подобласти значений, которые являются:

  • Достаточно большой, что время вычисления является большим по сравнению с издержками планирования подобласти значений

  • Достаточно маленький, что существует достаточно подобластей значений, чтобы заставить всех рабочих напряженно трудиться

К итерациям раздела в подобласти значений фиксированного размера создайте набор опций parfor, установите 'RangePartitionMethod' на 'fixed', и задайте размер подобласти значений с 'SubrangeSize'.

opts = parforOptions(parcluster,'RangePartitionMethod','fixed','SubrangeSize',2);

Передайте опции parfor как второй входной параметр к parfor. В этом случае parfor делит итерации на три группы итераций 2.

values = [3 3 3 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

К итерациям раздела в подобласти значений переменного размера передайте указатель на функцию паре "имя-значение" 'RangePartitionMethod'. Эта функция должна возвратить вектор размеров подобласти значений, и их сумма должна быть равна количеству итераций. Для получения дополнительной информации об этом синтаксисе см. метод.

opts = parforOptions(parcluster,'RangePartitionMethod', @(n,nw) [2 1 1 2]);

Передайте опции parfor как второй входной параметр к parfor. В этом случае parfor делит итерации на четыре группы 2, 1, 1 и итераций 2.

values = [3 3 7 7 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

Можно использовать parforOptions, чтобы запустить parfor на рабочих параллельного пула. Используйте этот подход когда это необходимо, чтобы зарезервировать постоянное число рабочих для цикла parfor-. Можно также иметь более прекрасный контроль о том, как parfor делит итерации для рабочих.

Создайте параллельный пул с помощью функции parpool. По умолчанию parpool использует ваш кластерный профиль по умолчанию. Проверяйте, что ваш профиль по умолчанию на вкладке MATLAB Home, параллельно> Выбирают Default Cluster. Создайте набор опций parfor с параллельным объектом пула и задайте опции. Например, задайте подобласти значений фиксированного размера 2 как метод разделения.

p = parpool;
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
opts = parforOptions(p,'RangePartitionMethod','fixed','SubrangeSize',2);

Передайте опции parfor как второй входной параметр к функции parfor. parfor запускает тело цикла на параллельном пуле и делит итерации согласно opts.

values = [3 3 3 3 3 3];
parfor (i=1:numel(values),opts)
    out(i) = norm(pinv(rand(values(i)*1e3)));
end

Когда вы запускаете parfor с или ни с чем не сравнимый пул, по умолчанию, MATLAB выполняет автоматический анализ зависимостей на теле цикла. MATLAB передает требуемые файлы рабочим прежде, чем запустить операторы. В некоторых случаях необходимо явным образом передать те файлы рабочим. Для получения дополнительной информации смотрите, Идентификация программных зависимостей (MATLAB).

Если вы используете parfor ни с чем не сравнимый пул, используйте parforOptions, чтобы передать файлы. Создайте кластерный объект с помощью опции parcluster. Создайте набор опций parfor с кластерным объектом с помощью функции parforOptions. Чтобы передать файлы рабочим, используйте пару "имя-значение" 'AttachedFiles'.

cluster = parcluster;
opts = parforOptions(cluster,'AttachedFiles',{'myFile.dat'});

Передайте опции parfor как второй входной параметр к функции parfor. Рабочие могут получить доступ к необходимым файлам в теле цикла.

parfor (i=1:2,opts)
    M = csvread('myFile.dat',0,2*(i-1),[0,2*(i-1),1,1+2*(i-1)]);
    out(i) = norm(rand(ceil(norm(M))*1e3));
end

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

свернуть все

Кластер, заданный как объект parallel.Cluster, на котором запускается parfor. Чтобы создать кластерный объект, используйте функцию parcluster.

Пример: opts = parforOptions(parcluster('local'));

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

Размер подобласти значений для фиксированного метода разделения, заданного как положительное целое число. Необходимо установить пару "имя-значение" 'RangePartitionMethod' на 'fixed'.

Пример: opts = parforOptions(cluster,'RangePartitionMethod','fixed','SubrangeSize',5);

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

Параллельный пул, заданный как объект parallel.Pool, на котором запускается parfor. Чтобы создать параллельный пул, используйте функцию parpool.

Пример: opts = parforOptions(parpool('local'));

Типы данных: parallel.Pool

Метод раздела области значений, заданный как одно из следующего:

  • 'auto' – Этот метод делит цикл на подобласти значений переменных размеров. Это пытается достигнуть хорошей производительности для разнообразия parfor - циклы.

  • 'fixed' – Делит parfor - цикл в подобласти значений фиксированных размеров. Необходимо задать размер каждой подобласти значений путем установки пары "имя-значение" 'SubrangeSize'.

  • указатель на функцию – Использование указатель на функцию, чтобы разделить итерации цикла на подобласти значений. Функция должна иметь форму sizes = customFcn(n,nw), где n является количеством итераций в parfor - цикл, и nw является количеством рабочих, доступных, чтобы выполнить цикл. Когда цикл работает на параллельном пуле, nw является количеством рабочих в параллельном пуле. Когда цикл запускает использование кластера, nw является свойством NumWorkers кластера. customFcn возвращает векторный sizes размеров подобласти значений. Этот вектор должен удовлетворить sum(sizes) == n. Для получения дополнительной информации об указателях на функцию см. Создание указателя на функцию (MATLAB).

Пример: opts = parforOptions(cluster,'RangePartitionMethod','fixed','SubrangeSize',10);

Пример: opts = parforOptions(cluster,'RangePartitionMethod',@(n,nw) [2,4,4,n-10]);

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: opts = parforOptions(cluster,'AttachedFiles',{'myFile.dat'});

Отметьте, чтобы задать, добавляется ли клиентский путь к пути рабочего, заданному как пара, разделенная запятой, состоящая из AutoAddClientPath и true или false.

Типы данных: логический

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

Типы данных: логический

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

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

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

Пути, чтобы добавить к пути MATLAB® рабочих перед parfor выполняются, заданный как пара, разделенная запятой, состоящая из AdditionalPaths и вектора символов, строки, массива строк или массива ячеек из символьных векторов.

Пример: {'some/path/','another/path'}

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

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

свернуть все

Опции parfor, возвращенные как объект parforOptions. Чтобы задать опции для parfor - цикл, передайте набор опций parfor к второму входному параметру parfor.

Пример: parfor(i=1:10,parforOptions(parcluster)); out(i)=i; end

Смотрите также

| |

Введенный в R2019a