exponenta event banner

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

Если используется 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-loop, и 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-закольцовывание тела и передача требуемых файлов рабочим, указанным как разделенная запятыми пара, состоящая из AutoAttachFiles и true или false.

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

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

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

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

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

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

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

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

свернуть все

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

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

Представлен в R2019a