Параллельные for
- цикл
parfor
создает цикл в сгенерированной MEX-функции или в коде C/C + +, который запускается параллельно на многоядерных платформах с общей памятью.LoopVar
= InitVal
:EndVal
; Statements
;
end
The parfor
-цикл выполняет Statements
для значений LoopVar
между InitVal
и Endval
. LoopVar
задает вектор целочисленных значений, увеличивающийся на 1.
parfor (
использует максимум LoopVar
= InitVal
:EndVal
, NumThreads
); Statements
;
endNumThreads
потоки при создании параллельного for
-цикл.
Необходимо использовать компилятор, который поддерживает интерфейс приложения Open Multiprocessing (OpenMP). См. «Поддерживаемые компиляторы». Если вы используете компилятор, который не поддерживает OpenMP, MATLAB Coder лечит parfor
-циклы как for
-циклы. В сгенерированной MEX-функции или коде C/C + + итерации цикла выполняются в одном потоке.
Интерфейс приложения OpenMP несовместим с JIT MEX. См. JIT-компиляция не поддерживает OpenMP.
Не используйте следующие конструкции внутри parfor
-циклы:
Вы не можете вызвать внешние функции, используя coder.extrinsic
в теле a parfor
-цикл.
Вы не можете записать в глобальную переменную внутри parfor
-цикл.
MATLAB Coder не поддерживает использование coder.ceval
в сокращениях. Для примера вы не можете сгенерировать код для следующих parfor
-цикл:
parfor i = 1:4 y = coder.ceval('myCFcn',y,i); end
coder.ceval
и вызовите эту функцию в parfor
-цикл. Для примера:parfor i = 1:4 y = callMyCFcn(y,i); end function y = callMyCFcn(y,i) y = coder.ceval('mCyFcn', y , i); end
Вы не можете использовать varargin
или varargout
в parfor
-циклы.
Тип индекса цикла должен быть представим целому типу на целевой компьютер. Используйте тип, который не требует многословного типа в сгенерированном коде.
parfor
для автономной генерации кода требуется подход набора инструментальных средств для создания исполняемых файлов или библиотек. Не изменяйте настройки, которые заставляют генератор кода использовать подход make-файла шаблона. Смотрите проект или строение, использующую файл make-файла шаблона.
Полный список ограничений см. в разделе Ограничения parfor.
Используйте parfor
-цикл, когда:
Вам нужно много итерации цикла простого вычисления. parfor
разделяет итерации цикла на группы, чтобы каждый поток мог выполнить одну группу итераций.
У вас есть итерации цикла, выполнение которых занимает много времени.
Не используйте parfor
-loop, когда итерация в вашем цикле зависит от результатов других итераций.
Сокращения являются одним из исключений из этого правила. reduction variable накапливает значение, которое зависит от всех итераций вместе, но не зависит от порядка итерации.
Входной параметр NumThreads
устанавливает num_threads()
OpenMP предложение в сгенерированном коде. OpenMP также поддерживает глобальное ограничение количества потоков в C/C + + путем установки
переменного окружения OMP_NUM_THREADS
или при помощи omp_set_num_threads()
. Для получения дополнительной информации см. спецификации openMP. https://www.openmp.org/specifications/