exponenta event banner

coder.ignoreConst

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

Описание

пример

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

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

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

Создайте код C.

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

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

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

Входные аргументы

свернуть все

Выражение, значение которого должно рассматриваться как несоответствующее, указанное как выражение MATLAB.

Подробнее

свернуть все

Специализация функций

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

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

Совет

  • Для некоторых рекурсивных вызовов функций можно использовать coder.ignoreConst для принудительной рекурсии во время выполнения. См. раздел Принудительное использование генератора кода для рекурсии во время выполнения.

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

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