Если у вас есть многоядерный процессор, можно увеличить скорость обработки при помощи параллельной обработки. Можно создать параллельный пул из нескольких работников с лицензией Parallel Computing Toolbox™. Описание программного обеспечения Parallel Computing Toolbox смотрите в Запуск с Parallel Computing Toolbox (Parallel Computing Toolbox).
Предположим, у вас есть двухъядерный процессор, и вы хотите использовать параллельные вычисления. Введите этот код в командной строке.
parpool
MATLAB® запускает пул рабочих процессов, использующих многоядерный процессор. Если вы ранее установили профиль кластера без параметров, можно применить многоядерные (локальные) вычисления, введя этот код.
parpool('local')
Примечание
В зависимости от ваших настроек MATLAB может автоматически запустить параллельный пул. Чтобы включить эту функцию, выберите Parallel > Parallel Preferences в группе Environment на вкладке Home, а затем выберите Automatically create a parallel pool.
Установите решатель, чтобы использовать параллельную обработку.
Решатель | Настройки командной строки |
---|---|
ga |
|
gamultiobj |
|
MultiStart |
или
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
Начиная с R2019a, когда вы устанавливаете UseParallel
опция для true
, patternsearch
внутренне переопределяет UseCompletePoll
установка значения true
так что он опрашивает параллельно.
Когда вы запускаете применимый решатель с options
, применимые решатели автоматически используют параллельные вычисления.
Чтобы остановить вычисление оптимизации параллельно, установите UseParallel
на false
. Чтобы остановить все параллельные расчеты, введите этот код.
delete(gcp)
Примечание
Документация рекомендует не использовать parfor
или parfeval
при вызове Simulink®; см. Использование функции sim в parfor (Simulink). Поэтому вы можете столкнуться с проблемами при оптимизации параллельной симуляции Simulink с помощью встроенной параллельной функциональности решателя.
Если у вас есть несколько процессоров в сети, используйте функции Parallel Computing Toolbox и программное обеспечение MATLAB Parallel Server™, чтобы установить параллельные расчеты.
Убедитесь, что ваша система настроена правильно для параллельных вычислений. Обратитесь к системному администратору или обратитесь к документации Parallel Computing Toolbox.
Выполните базовую проверку путем ввода этого кода, где prof
- ваш профиль кластера.
parpool(prof)
Работники должны иметь возможность доступа к файлу целевой функции и, если применимо, к нелинейным файлам функции ограничений. Выполните один из следующих шагов, чтобы гарантировать доступ:
Распространите файлы среди работников, используя parpool
(Parallel Computing Toolbox) AttachedFiles
аргумент. В этом примере objfun.m
Ваш объективный файл функции, и constrfun.m
является вашим нелинейным ограничением файл функции.
parpool('AttachedFiles',{'objfun.m','constrfun.m'});
Работники получают доступ к собственным копиям файлов.
Задайте путь к сетевому файлу для ваших целевых или ограничительных файлов функции.
pctRunOnAll('addpath network_file_path')
Рабочие получают доступ к файлам функции по сети.
Проверьте, указан ли файл в пути каждого работника.
pctRunOnAll('which filename')
filename not found.
Установите решатель, чтобы использовать параллельную обработку.
Решатель | Настройки командной строки |
---|---|
ga |
|
gamultiobj |
|
MultiStart |
или
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
Начиная с R2019a, когда вы устанавливаете UseParallel
опция для true
, patternsearch
внутренне переопределяет UseCompletePoll
установка значения true
так что он опрашивает параллельно.
После того, как вы установили своё параллельное вычислительное окружение, применимые решатели автоматически используют параллельные вычисления всякий раз, когда вы вызываете их с options
.
Чтобы остановить вычисление оптимизации параллельно, установите UseParallel
на false
. Чтобы остановить все параллельные расчеты, введите этот код.
delete(gcp)
Примечание
Документация рекомендует не использовать parfor
или parfeval
при вызове Simulink; см. Использование функции sim в parfor (Simulink). Поэтому вы можете столкнуться с проблемами при оптимизации параллельной симуляции Simulink с помощью встроенной параллельной функциональности решателя.
Иметь patternsearch
поисковая функция запускается параллельно, или гибридная функция для ga
или simulannealbnd
выполняйте параллельно, делайте следующее.
Настройте параллельную обработку, как описано в многоядерных процессорах или процессорной сети.
Убедитесь, что ваша функция поиска или гибридная функция имеют условия, изложенные в следующих разделах:
patternsearch
использует функцию параллельного поиска при следующих условиях:
UseCompleteSearch
является true
.
Метод поиска не @searchneldermead
или custom
.
Если метод поиска является patternsearch
метод опроса или поиск по латинскому гиперкубу, UseParallel
является true
. Установите в командной строке с optimoptions
:
options = optimoptions('patternsearch','UseParallel',true,... 'UseCompleteSearch',true,'SearchFcn',@GPSPositiveBasis2N);
Если метод поиска ga
, опция метода поиска имеет UseParallel
установлено на true
. Установите в командной строке с optimoptions
:
iterlim = 1; % iteration limit, specifies # ga runs gaopt = optimoptions('ga','UseParallel',true); options = optimoptions('patternsearch','SearchFcn',... {@searchga,iterlim,gaopt});
Дополнительные сведения об опциях поиска см. в разделе Параметры поиска. Для получения примера смотрите Поиск и опрос.
ga
, particleswarm
, и simulannealbnd
могут иметь другие решатели, запускаемые после или перемежающиеся с их итерациями. Эти другие решатели называются гибридными функциями. Для получения информации об использовании гибридной функции с gamultiobj
, см. Параллельные вычисления с gamultiobj. Оба patternsearch
и fmincon
может быть гибридными функциями. Можно задать опции так, чтобы patternsearch
проходит параллельно, или fmincon
оценивает градиенты параллельно.
Установите опции для гибридной функции, как описано в Hybrid Function Options для ga
, Гибридная Функция для particleswarm
, или опции гибридной функции для simulannealbnd
. Подводя итоги:
Если ваша гибридная функция patternsearch
Создать patternsearch
опции:
hybridopts = optimoptions('patternsearch','UseParallel',true,... 'UseCompletePoll',true);
Установите ga
или simulannealbnd
опции для использования patternsearch
как гибридная функция:
options = optimoptions('ga','UseParallel',true); % for ga options = optimoptions('ga',options,... 'HybridFcn',{@patternsearch,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@patternsearch,hybridopts});
Для получения дополнительной информации о параллели patternsearch
, см. Поиск по шаблонам.
Если ваша гибридная функция fmincon
:
Создать fmincon
опции:
hybridopts = optimoptions(@fmincon,'UseParallel',true,... 'Algorithm','interior-point'); % You can use any Algorithm except trust-region-reflective
Установите ga
или simulannealbnd
опции для использования fmincon
как гибридная функция:
options = optimoptions('ga','UseParallel',true); options = optimoptions('ga',options,'HybridFcn',{@fmincon,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@fmincon,hybridopts});
Для получения дополнительной информации о параллели fmincon
, см. Параллельные вычисления.
Выполните следующие действия, чтобы проверить, правильно ли ваша проблема запускается параллельно.
Попробуйте свою задачу без параллельных расчетов, чтобы убедиться, что она запускается последовательно. Убедитесь, что этот тест успешен (дает правильные результаты), прежде чем переходить к следующему тесту.
Задайте UseParallel
на true
, и убедитесь, что никакого параллельного пула не существует путем ввода delete(gcp)
. Чтобы убедиться, что MATLAB не создает параллельный пул, выберите Parallel > Parallel Preferences в группе Environment на вкладке Home, а затем очистите Automatically create a parallel pool. Ваша задача запускается parfor
последовательно, с итерациями цикла в обратном порядке от a for
цикл. Убедитесь, что этот тест успешен (дает правильные результаты), прежде чем переходить к следующему тесту.
Задайте UseParallel
на true
, и создать параллельный пул, используя parpool
. Если у вас нет многоядерного процессора или сети, этот тест не увеличивает скорость обработки. Это тестирование просто для проверки правильности расчетов.
Не забудьте вызвать решатель с помощью options
аргумент для тестирования или использования параллельных функций.