Главная причина запустить статистические вычисления параллельно состоит в том, чтобы получить скорость, означая уменьшать время выполнения вашей программы или функций. Факторы, Влияющие на Скорость, обсуждают основные элементы, влияющие на скорость программ или функций. Факторы, Влияющие на Результаты, обсуждают детали, которые могут заставить параллельное выполнение давать различные результаты, чем последовательное выполнение.
Некоторые функции Statistics and Machine Learning Toolbox™ имеют встроенные возможности параллельных вычислений. Смотрите Параллельные вычисления Быстрого запуска для Statistics and Machine Learning Toolbox. Можно также использовать любые функции Statistics and Machine Learning Toolbox с функциями Parallel Computing Toolbox™, такими как циклы parfor
. Чтобы решить, когда вызвать функции параллельно, рассмотрите факторы, влияющие на скорость и результаты.
Некоторые факторы, которые могут влиять на скорость выполнения параллельной обработки:
Параллельная установка среды. Это занимает время, чтобы запустить parpool
, чтобы начать вычислять параллельно. Если ваше вычисление быстро, время установки может превысить любое время, сохраненное путем вычисления параллельно.
Параллель наверху. Существуют издержки в коммуникации и координации при выполнении параллельно. Если функциональные оценки быстры, эти издержки могли бы быть заметной частью общего времени вычисления. Таким образом решение проблемы параллельно может быть медленнее, чем решение проблемы последовательно. Для примера смотрите Улучшающую Производительность Оптимизации с Параллельными вычислениями в Обзоре MATLAB®, март 2009.
Нет вложенные циклы parfor
. Это описано в Работе с parfor. parfor
не работает параллельно, когда названо из другого цикла parfor
. Если вы запрограммировали свои пользовательские функции, чтобы использовать в своих интересах параллельную обработку, ограничение не вложенных циклов parfor
может заставить параллельную функцию запускаться медленнее, чем ожидалось.
При выполнении последовательно, циклы parfor
, запущенные немного медленнее, чем циклы for
.
Передающие параметры. Параметры автоматически передаются сеансам рабочего во время выполнения параллельных вычислений. Если существует много параметров, или они берут большой объем памяти, передающие параметры могут замедлить выполнение вашего вычисления.
Конкуренция для ресурсов: сеть и вычисление. Если пул рабочих имеет низкую пропускную способность или высокую задержку, параллельное вычисление может быть медленным.
Некоторые факторы могут влиять на результаты при использовании параллельной обработки. Вы можете должны быть настроить свой код, чтобы запуститься параллельно, например, вам нужны независимые циклы, и рабочие должны смочь получить доступ к переменным. Некоторые важные факторы:
Персистентные или глобальные переменные. Если какие-либо функции используют персистентные или глобальные переменные, эти переменные могут принять различные значения на различных процессорах рабочего. Тело цикла parfor
не может содержать глобальные или персистентные объявления переменной.
Доступ к внешним файлам. Порядок вычислений не гарантируется во время параллельной обработки, таким образом, к внешним файлам можно будет получить доступ в непредсказуемом порядке, ведя к непредсказуемым результатам. Кроме того, если несколько процессоров пытаются считать внешний файл одновременно, файл может стать заблокированным, ведя к ошибке чтения, и остановив функциональное выполнение.
Невычислительные функции, такие как input
, plot
, и keyboard
, могут вести себя плохо, когда используется в ваших пользовательских функциях. Не используйте эти функции в цикле parfor
, потому что они могут заставить рабочего становиться небыстро реагирующим, поскольку он ожидает входа.
parfor
не позволяет операторы break
или return
.
Случайные числа, которые вы используете, могут влиять на результаты ваших вычислений. Смотрите Воспроизводимость в параллельных Статистических Вычислениях.
Для совета относительно преобразования циклов for, чтобы использовать parfor
, смотрите Параллельные циклы for (parfor) (Parallel Computing Toolbox).