Параллельный for- цикл
parfor создает цикл в сгенерированной MEX-функции или в коде C/C++, который запускает параллельно на общей памяти многожильные платформы.LoopVar = InitVal:EndVal; Statements;
end
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- цикл.
Вы не можете записать в глобальную переменную внутри a 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 \in parfor- циклы.
Тип индекса цикла должен быть представимым целочисленным типом на целевом компьютере. Используйте тип, который не требует типа многословного в сгенерированном коде.
parfor поскольку автономная генерация кода требует подхода набора инструментальных средств для создания исполняемых файлов или библиотек. Не изменяйте настройки, которые заставляют генератор кода использовать подход make-файла шаблона. См. Проект, или Настройка Использует Make-файл Шаблона.
Для всестороннего списка ограничений см. parfor Ограничения.
Используйте a parfor- цикл, когда:
Вам нужны много итераций цикла простого вычисления. parfor делит итерации цикла на группы так, чтобы каждый поток мог выполнить одну группу итераций.
У вас есть итерации цикла, которые занимают много времени, чтобы выполниться.
Не используйте a parfor- цикл, когда итерация в вашем цикле зависит от результатов других итераций.
Сокращения являются одним исключением к этому правилу. reduction variable накапливает значение, которое зависит от всех итераций вместе, но независимо от порядка итерации.
Входной параметр NumThreads устанавливает OpenMP num_threads() пункт в сгенерированном коде. OpenMP также поддерживает глобально ограничение количества потоков на C/C++ путем установки переменной окружения OMP_NUM_THREADS или при помощи omp_set_num_threads(). Для получения дополнительной информации см. openMP технические требования. https://www.openmp.org/specifications/