exponenta event banner

coder.inline

Управление вложением определенной функции в сгенерированный код

Описание

пример

coder.inline('always') принудительное вложение текущей функции в сгенерированный код. Разместить coder.inline директиву внутри функции, которую требуется встроить. Генератор кода не встроен в функции точки входа и рекурсивные функции. Кроме того, генератор кода не встраивает функции в parfor шлейфы или встроенные функции, вызываемые из parfor петли.

пример

coder.inline('never') предотвращает встраивание текущей функции в созданный код. При необходимости упрощения сопоставления между исходным кодом MATLAB ® и сгенерированным кодом не допускается встраивание.

Примечание

Если вы используете codegen или fiaccel (Fixed-Point Designer), можно отключить встраивание для всех функций с помощью -O disable:inline вариант.

При создании кода C/C + + с помощью codegen команда или приложение MATLAB Coder™, вы можете иметь различные требования к скорости и читаемости для кода, созданного для функций, которые вы пишете, и кода, созданного для функций MathWorks ®. Некоторые дополнительные глобальные параметры позволяют отдельно управлять поведением встраивания для этих двух частей созданной базы кода и на границе между ними. См. раздел Управление встроением для точной настройки производительности и читаемости сгенерированного кода.

coder.inline('default') предписывает генератору кода использовать внутреннюю эвристику для определения необходимости включения текущей функции. Обычно эвристика создает высоко оптимизированный код. Использовать coder.inline явно в функциях MATLAB, только когда необходимо точно настроить эти оптимизации.

Примеры

свернуть все

В этом примере функция 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;

Подробнее

свернуть все

Inlining

Метод, заменяющий вызов функции содержимым (телом) этой функции. Встраивание устраняет накладные расходы на вызов функции, но может создавать больший код C/C + +. Встраивание может создать возможности для дальнейшей оптимизации сгенерированного кода C/C + +.

Представлен в R2011a