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