exponenta event banner

coder.ignoreSize

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

Описание

пример

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

Примеры

Создание дубликатов функций для нескольких входных размеров

Если код MATLAB ® вызывает функцию несколько раз и передает входы различных размеров, генератор кода может создавать специализации функций для каждого размера. Чтобы избежать этой проблемы, используйтеcoder.ignoreSize на входе функции. Например, этот код использует coder.ignoreSize во избежание создания нескольких копий функции indexOf:

function [out1, out2] = test1(in)
  a = 1:10;
  b = 2:40;
  % Without coder.ignoreSize duplicate functions are generated
  out1 = indexOf(coder.ignoreSize(a), in);
  out2 = indexOf(coder.ignoreSize(b), in);
end

function index = indexOf(array, value)
  coder.inline('never');
  for i = 1:numel(array)
      if array(i) == value
          index = i;
          return
      end
  end
  index = -1;
  return
end

Для создания кода введите:

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

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

свернуть все

Пример: foo(coder.ignoreSize(1:10))

Подробнее

свернуть все

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

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

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

Совет

  • При назначении выражения переменной и объявлении переменной в качестве размера переменной с помощью coder.varsize, это объявление имеет тот же эффект, что и использование coder.ignoreSize на выражении.

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