Параллельный 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
в теле 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/