Повышение эффективности при параллельных вычислениях

Факторы, которые влияют на скорость

Некоторые факторы могут повлиять на скорость выполнения параллельной обработки:

  • Параллельные накладные расходы. В вызове есть накладные расходы 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).

Похожие темы