Параллельный for
- цикл
parfor LoopVar = InitVal:EndVal; Statements; end
parfor (LoopVar = InitVal:EndVal, NumThreads); Statements; end
создает цикл в сгенерированной MEX-функции или в коде C/C++, который запускает параллельно на общей памяти многожильные платформы.parfor LoopVar = InitVal:EndVal; Statements; end
parfor
- цикл выполняет Statements
для значений LoopVar
между InitVal
и Endval
. LoopVar
задает вектор целочисленных значений, увеличивающихся на 1.
использует максимум потоков parfor (LoopVar = InitVal:EndVal, NumThreads); Statements; end
NumThreads
при создании параллельного for
- цикл.
Необходимо использовать компилятор, который поддерживает интерфейс приложения Open Multiprocessing (OpenMP). См. Поддерживаемые Компиляторы. При использовании компилятор, который не поддерживает OpenMP, MATLAB CODER обрабатывает parfor
- циклы как for
- циклы. В сгенерированной MEX-функции или коде C/C++, итерации цикла работают на единственном потоке.
Интерфейс приложения OpenMP не совместим с компиляцией JIT MEX. Смотрите, что JIT-компиляция Не Поддерживает OpenMP.
Не используйте следующие построения в parfor
- циклы:
Вы не можете вызвать внешние функции с помощью coder.extrinsic
в теле 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
- цикл, когда итерация в вашем цикле будет зависеть от результатов других итераций.
Сокращения являются одним исключением к этому правилу. Переменная сокращения накапливает значение, которое зависит от всех итераций вместе, но независимо от порядка итерации.