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