Пакет: кодер
Управляйте встраиванием в сгенерированном коде
coder.inline ('всегда')
coder.inline ('никогда')
coder.inline ('значение по умолчанию')
Встраивание сил coder.inline('always')
текущей функции в сгенерированном коде. Поместите директиву coder.inline
в функции, к которой она применяется. Генератор кода не встраивает функции точки входа, подставляемые функции в циклы parfor
или подставляемые функции, вызванные от циклов parfor
.
coder.inline('never')
предотвращает встраивание текущей функции в сгенерированном коде. Предотвратите встраивание когда это необходимо, чтобы упростить отображение между исходным кодом MATLAB® и сгенерированным кодом. Можно отключить встраивание для всех функций в командной строке при помощи опции -O disable:inline
команды codegen
.
coder.inline('default')
использует внутреннюю эвристику, чтобы определить, встроить ли текущую функцию. Обычно, эвристика производит очень оптимизированный код. Используйте coder.inline
только, когда необходимо будет подстроить эту оптимизацию.
В этом примере функциональный foo
не встраивается в сгенерированном коде:
function y = foo(x) coder.inline('never'); y = x; end
Можно использовать coder.inline
в коде потока управления. Если программное обеспечение обнаруживает противоречащие директивы coder.inline
, сгенерированный код использует эвристику встраивания значения по умолчанию и выдает предупреждение.
Предположим, что вы хотите сгенерировать код для функции деления, используемой системой с ограниченной памятью. Чтобы оптимизировать использование памяти в сгенерированном коде, функция inline_division
вручную управляет встраиванием на основе того, выполняет ли это скалярное деление или векторное деление:
function y = inline_division(dividend, divisor) % For scalar division, inlining produces smaller code % than the function call itself. if isscalar(dividend) && isscalar(divisor) coder.inline('always'); else % Vector division produces a for-loop. % Prohibit inlining to reduce code size. coder.inline('never'); end if any(divisor == 0) error('Cannot divide by 0'); end y = dividend / divisor;