Ограничьте встраивание когда:
Пределы размера сгенерированного кода превышены из-за чрезмерного встраивания функций. Например, предположите, что вы включаете оператор, coder.inline('always')
, в определенной функции. Вы затем вызываете эту функцию на многих различных сайтах в вашем коде. Размер сгенерированного кода увеличивается, потому что функция встраивается каждый раз, когда это называется. Однако сайты вызова должны отличаться. Например, встраивание не приводит к большому размеру кода, если функция, которая будет встроена, несколько раз вызывается в цикле.
Вы ограничили RAM или стековое пространство.
Можно управлять встраиванием или отключить встраивание в целом. Чтобы отключить встраивание в командной строке, используйте опцию -O disable:inline
команды codegen
. Эта опция отключает встраивание для всех функций.
Можно использовать приложение MATLAB® Coder™ или интерфейс командной строки, чтобы управлять максимальным размером функций, которые могут быть встроены. Функциональный размер измеряется с точки зрения отвлеченного числа инструкций, не фактических инструкций MATLAB или инструкций в целевом процессоре. Экспериментируйте с этим параметром, чтобы получить поведение встраивания, которое вы хотите.
Используя приложение, в диалоговом окне настроек проекта, на вкладке All Settings, устанавливает значение поля, Встраивают порог, к максимальному размеру, который вы хотите.
В командной строке создайте объект настройки codegen
. Установите значение свойства, InlineThreshold
, к максимальному размеру, который вы хотите.
cfg = coder.config('lib');
cfg.InlineThreshold = 100;
Сгенерируйте код при помощи этого объекта настройки.
Можно использовать приложение MATLAB CODER или интерфейс командной строки, чтобы управлять максимальным размером функций после встраивания. Функциональный размер измеряется с точки зрения отвлеченного числа инструкций, не фактических инструкций MATLAB или инструкций в целевом процессоре. Экспериментируйте с этим параметром, чтобы получить поведение встраивания, которое вы хотите.
Используя приложение, в диалоговом окне настроек проекта, на вкладке All Settings, устанавливает значение порога поля Inline макс. к максимальному размеру, который вы хотите.
В командной строке создайте объект настройки codegen
. Установите значение свойства, InlineThresholdMax
, к максимальному размеру, который вы хотите.
cfg = coder.config('lib');
cfg.InlineThresholdMax = 100;
Сгенерируйте код при помощи этого объекта настройки.
Определение предела на стековом пространстве ограничивает объем встраивания позволенного. Для исключительных функций выпущено стековое пространство для переменных, локальных для функции, когда функция возвращается. Однако для встроенных функций, стековое пространство остается занятым локальными переменными даже после того, как функция будет выполняться. Значение свойства InlineStackLimit
измеряется в байтах. На основе информации от настроек целевого компьютера программное обеспечение оценивает количество переменных стека, которые может разместить определенное значение InlineStackLimit
. Эта оценка исключает возможную оптимизацию компилятора C, такую как помещение переменных в регистрах.
Можно использовать приложение MATLAB CODER или интерфейс командной строки, чтобы управлять пределом размера стека на встроенных функциях.
Используя приложение, в диалоговом окне настроек проекта, на вкладке All Settings, устанавливает значение предела стека поля Inline максимальному размеру, который вы хотите.
В командной строке создайте объект настройки codegen
. Установите значение свойства, InlineThresholdMax
, к максимальному размеру, который вы хотите.
cfg = coder.config('lib');
cfg.InlineStackLimit = 2000;
Сгенерируйте код при помощи этого объекта настройки.