parforOptions

Опции для parfor, например, итерации разбиения

Описание

пример

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 использует профиль кластера по умолчанию. Проверьте профиль по умолчанию на вкладке MATLAB ® Home, в Parallel > Select a Кластер.

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, в Parallel > Select a Кластер. Создайте набор 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 передает необходимые файлы работникам перед выполнением операторов. В некоторых случаях необходимо явным образом передать эти файлы работникам. Для получения дополнительной информации смотрите Идентификация программных зависимостей.

Если вы используете 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. Для получения дополнительной информации о указателях на функцию см. Раздел «Создание указателя на функцию».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

Введенный в R2019a