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))

Больше о

свернуть все

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

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

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

Советы

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

Введенный в R2019b