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