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