На скорость выполнения параллельной обработки могут влиять некоторые факторы:
Параллельные накладные расходы. При вызове имеются накладные расходы parfor вместо for. Если анализ функций выполняется быстро, эти накладные расходы могут стать значительными. В частности, решение задачи параллельно может быть медленнее, чем решение задачи последовательно.
Нет вложенных parfor петли. Это описано в разделе Вложенные параллельные функции. parfor не работает параллельно при вызове из другого parfor цикл. Если вы запрограммировали целевые функции или функции ограничения, чтобы воспользоваться преимуществами параллельной обработки, ограничение не вложено parfor петли могут привести к тому, что решатель будет работать медленнее, чем ожидалось. В частности, параллельное вычисление конечных разностей имеет приоритет, поскольку это внешний цикл. Это приводит к последовательному выполнению любого параллельного кода в рамках целевой функции или функции ограничения.
При серийном выполнении parfor циклы выполняются медленнее, чем for петли. Поэтому для достижения максимальной производительности убедитесь, что только самые внешние вызовы параллельного цикла parfor. Например, предположим, что ваш код вызывает fmincon в пределах parfor цикл. Для достижения максимальной производительности в данном случае установите fmincon
UseParallel опция для false.
Проходящие параметры. Параметры автоматически передаются рабочим машинам во время выполнения параллельных вычислений. Если имеется большое количество параметров или они занимают большой объем памяти, их передача может замедлить выполнение вычислений.
Конкуренция за ресурсы: сеть и вычисления. Если сеть рабочих машин имеет низкую пропускную способность или высокую задержку, вычисления могут быть замедлены.
Некоторые факторы могут влиять на численные результаты при использовании параллельной обработки. Существует больше оговорок, связанных с parfor в списке Parallel for-Loops (parfor) (Панель параллельных вычислений).
Постоянные или глобальные переменные. Если функции цели или ограничения используют постоянные или глобальные переменные, эти переменные могут принимать разные значения в разных процессорах работника. Кроме того, они могут быть неправильно очищены на рабочих процессорах. Решатели могут выдать ошибки, такие как несовпадения размеров.
Доступ к внешним файлам. Доступ к внешним файлам может осуществляться непредсказуемым образом во время параллельных вычислений. Порядок вычислений не гарантируется при параллельной обработке, поэтому доступ к внешним файлам может осуществляться в непредсказуемом порядке, что приводит к непредсказуемым результатам.
Доступ к внешним файлам. Если два или более процессора попытаются прочитать внешний файл одновременно, файл может стать заблокированным, что приведет к ошибке чтения и остановит выполнение оптимизации.
Если целевая функция вызывает Simulink ®, результаты могут быть ненадежными при параллельной оценке градиента.
Некомпьютерные функции, такие как input, plot, и keyboard, может вести себя плохо при использовании в функциях объектива или ограничения. При вызове в parfor loop, эти функции выполняются на рабочих машинах. Это может привести к тому, что работник не будет отвечать, так как он ожидает ввода.
parfor не позволяет break или return заявления.
Для поиска глобальной оптимизации одним из подходов является оценка решателя из множества начальных точек. При распределении этих оценок по нескольким процессорам с помощью parfor функция, вы отключаете параллельную оценку градиента, так как parfor циклы не могут быть вложенными. Оптимизация обычно выполняется быстрее, если распределить оценки по всем процессорам, а не выполнять их последовательно с параллельной градиентной оценкой, поэтому отключение параллельной оценки, вероятно, не замедлит вычисления. Однако, если у вас больше процессоров, чем начальных точек, неясно, лучше ли распределить начальные точки или включить параллельную оценку градиента.
При наличии лицензии Global Optimization Toolbox можно использовать MultiStart Решатель (Global Optimization Toolbox) для параллельного изучения нескольких начальных точек. См. разделы Параллельные вычисления (инструментарий глобальной оптимизации) и Параллельный мультизапуск (инструментарий глобальной оптимизации).