Параллельный for - цикл
parfor LoopVar = InitVal:EndVal; Statements; endparfor (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 - цикл, когда итерация в вашем цикле будет зависеть от результатов других итераций.
Сокращения являются одним исключением к этому правилу. Переменная сокращения накапливает значение, которое зависит от всех итераций вместе, но независимо от порядка итерации.