coder.ignoreConst

Предотвратите использование постоянного значения выражения для функциональных специализаций

Синтаксис

coder.ignoreConst(expression)

Описание

пример

coder.ignoreConst(expression) препятствует тому, чтобы генератор кода использовал постоянное значение expression, чтобы создать функциональные специализации. coder.ignoreConst(expression) возвращает значение expression.

Примеры

свернуть все

Используйте coder.ignoreConst, чтобы предотвратить функциональные специализации для функции, которая вызвана с постоянными значениями.

Запишите функциональный call_myfn, который вызывает myfcn.

function [x, y] = call_myfcn(n)
%#codegen
x = myfcn(n, 'mode1');
y = myfcn(n, 'mode2');
end

function y = myfcn(n,mode)
coder.inline('never');
if strcmp(mode,'mode1')
    y = n;
else
    y = -n;
end
end

Сгенерируйте автономный код С. Например, сгенерируйте статическую библиотеку. Включите отчет генерации кода.

codegen -config:lib call_myfcn -args {1} -report

В отчете генерации кода вы видите две функциональных специализации для call_myfcn.

Генератор кода создает call_myfcn>myfcn>1 для mode со значением 'mode1'. Это создает call_myfcn>myfcn>2 для mode со значением 'mode2'.

В сгенерированном коде C вы видите специализации my_fcn и b_my_fcn.

static double b_myfcn(double n)
{
  return -n;
}

static double myfcn(double n)
{
  return n;
}

Чтобы предотвратить функциональные специализации, дайте генератору кода команду игнорировать, что значения аргумента mode являются постоянными.

function [x, y] = call_myfcn(n)
%#codegen
x = myfcn(n, coder.ignoreConst('mode1'));
y = myfcn(n, coder.ignoreConst('mode2'));
end

function y = myfcn(n,mode)
coder.inline('never');
if strcmp(mode,'mode1')
    y = n;
else
    y = -n;
end
end

Сгенерируйте код С.

codegen -config:lib call_myfcn -args {1} -report

В отчете генерации кода вы не видите нескольких функциональных специализаций.

В сгенерированном коде C вы видите одну функцию для my_fcn.

Входные параметры

свернуть все

Больше о

свернуть все

Функциональная специализация

Версия функции, в которой входной тип, размер, сложность или значение настраиваются для конкретного вызова функции.

Функциональная специализация производит эффективный код С за счет дублирования кода. Отчет генерации кода показывает все специализации функции MATLAB, что генератор кода создает. Однако специализации не могут появиться в сгенерированном коде C/C++ из-за более поздних преобразований или оптимизации.

Советы

  • Для некоторых вызовов рекурсивной функции можно использовать coder.ignoreConst, чтобы обеспечить рекурсию во время выполнения. См. Генератор кода Силы, чтобы Использовать Рекурсию Во время выполнения.

  • coder.ignoreConst(expression) препятствует тому, чтобы генератор кода использовал постоянное значение expression, чтобы создать функциональные специализации. Это не предотвращает другое использование постоянного значения во время генерации кода.

Введенный в R2017a

Была ли эта тема полезной?