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