Разверните for
- цикл путем создания копии тела цикла для каждой итерации цикла
coder.unroll()
разворачивает for
- цикл. coder.unroll
вызов должен быть на линии отдельно сразу предшествованием for
- цикл, который это разворачивает.
Вместо того, чтобы произвести a for
- цикл в сгенерированном коде, развертывание цикла производит копию for
- тело цикла для каждой итерации цикла. В каждой итерации индекс цикла становится постоянным. Чтобы развернуть цикл, генератор кода должен смочь определить границы for-
цикл.
Для маленьких, жестких циклов разворачивание может улучшать производительность. Однако для больших циклов, разворачивание может значительно увеличить время генерации кода и сгенерировать неэффективный код.
coder.unroll
проигнорирован за пределами генерации кода.
Иногда, генератор кода разворачивает for
- цикл даже при том, что вы не используете coder.unroll
. Например, если for
- цикл индексирует в неоднородный массив ячеек или в varargin
или varargout
, генератор кода разворачивает цикл. Путем разворачивания цикла генератор кода может определить значение индекса для каждой итерации цикла. Генератор кода использует эвристику, чтобы определить, когда развернуть for
- цикл. Если эвристике не удается идентифицировать, что разворачивание гарантировано, или если количество итераций цикла превышает предел, сбои генерации кода. В этих случаях можно обеспечить развертывание цикла при помощи coder.unroll
. Смотрите Непостоянный индекс в varargin или varargout в цикле for.
Если a for
- циклом не предшествуют coder.unroll
, генератор кода использует порог развертывания цикла, чтобы определить, развернуть ли автоматически цикл. Если количество итераций цикла меньше порога, генератор кода разворачивает цикл. Если количество итераций больше или равно порогу, генератор кода производит for
- цикл. Значением по умолчанию порога является 5
. Путем изменения этого порога можно подстроить развертывание цикла. Для получения дополнительной информации смотрите, Разворачивают циклы for и циклы parfor.