Заменяющие библиотеки кода могут выровняться, объекты данных передали в заменяющую функцию заданному контуру.
Можно использовать в своих интересах реализации функции, которые требуют, чтобы выровненные данные оптимизировали производительность приложения при использовании MATLAB® Coder™. Сконфигурировать выравнивание данных для реализации функции:
Задайте требования выравнивания данных в заменяющей записи кода. Задайте выравнивание отдельно для каждого аргумента функции реализации или коллективно для всех аргументов функции. Смотрите Задают Требования Выравнивания Данных для Аргументов функции.
Задайте возможности выравнивания данных и синтаксис для одного или нескольких компиляторов. Включайте технические требования выравнивания в регистрационную запись библиотеки в rtwTargetInfo.m
файл. Смотрите Предоставляют Технические требования Выравнивания Данных для Компиляторов.
Укажите библиотеку, содержащую запись таблицы и объект спецификации выравнивания.
Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и сгенерировать код. Наблюдайте результаты.
Для примеров смотрите Основной Пример Заменяющего Выравнивания Данных Кода и раздел “Data Alignment for Function Implementations” Оптимизировать Сгенерированного кода Путем Разработки и пользования Заменяющими Библиотеками Кода - страница Simulink® в качестве примера.
Примечание
Если замена, которая требует использования выравнивания импортированные данные (например, ввод-вывод функции точки входа или экспортируемой функции), задает выравнивание данных с coder.dataAlignment
операторы в коде MATLAB. Задайте выравнивание отдельно для каждого экземпляра импортированных данных. Смотрите Задают Выравнивание Данных в коде MATLAB для Импортированных Данных.
Задавать требование выравнивания данных для аргумента в заменяющей записи кода:
Если вы задаете заменяющую функцию в заменяющем табличном регистрационном файле кода, создаете объект дескриптора аргумента (RTW.ArgumentDescriptor
). Используйте его AlignmentBoundary
свойство задать необходимый контур выравнивания и присвоить объект аргументу Descriptor
свойство.
Если вы задаете заменяющую функцию, использование Code Replacement Tool, на вкладке Mapping Information, в разделе Argument properties для заменяющей функции, вводит значение для параметра Alignment value.
AlignmentBoundary
свойство (или параметр Alignment value) указывает, что контур выравнивания для данных передал аргументу функции в количестве байтов. AlignmentBoundary
свойство допустимо только для адресуемых объектов, включая аргументы указателя и матрицу. Это не применимо для аргументов значения. Допустимые значения:
-1 (значение по умолчанию) — Если данными является
Simulink.Bus
, Simulink.Signal
, или Simulink.Parameter
возразите, указывает, что генератор кода определяет оптимальное выравнивание на основе использования. В противном случае, указывает, что нет требования выравнивания для этого аргумента.
Положительное целое число, которое является степенью 2, не превышая 128 — Задает количество байтов в контуре. Стартовый адрес памяти для данных, выделенных для аргумента функции, является кратным заданному значению. Если вы задаете контур выравнивания, который меньше естественного выравнивания типа данных аргумента, директива выравнивания испускается в сгенерированном коде. Однако целевой компилятор игнорирует директиву.
Следующий код задает AlignmentBoundary
для аргумента как 16 байтов.
hLib = RTW.TflTable; entry = RTW.TflCOperationEntry; arg = getTflArgFromString(hLib, 'u1','single*'); desc = RTW.ArgumentDescriptor; desc.AlignmentBoundary = 16; arg.Descriptor = desc; entry.Implementation.addArgument(arg);
Эквивалентная спецификация контура выравнивания в диалоговом окне Code Replacement Tool находится в этом рисунке.
Примечание
Если ваша модель импортирует Simulink.Bus
, Simulink.Parameter
, или Simulink.Signal
объекты, задайте контур выравнивания в свойствах объектов, с помощью свойства Alignment. Для получения дополнительной информации смотрите Simulink.Bus
, Simulink.Parameter
, и Simulink.Signal
.
Чтобы поддержать выравнивание данных в сгенерированном коде, опишите возможности выравнивания данных и синтаксис для ваших компиляторов в заменяющей регистрации библиотеки кода. Предоставьте одни или несколько технических требований выравнивания для каждого компилятора в ключе реестра библиотеки.
Описать возможности выравнивания данных и синтаксис для компилятора:
Если вы задаете заменяющую регистрационную запись библиотеки кода в rtwTargetInfo.m
файл настройки, добавляет один или несколько AlignmentSpecification
объекты к RTW.DataAlignment
объект. Присоедините RTW.DataAlignment
возразите против TargetCharacteristics
объект ключа реестра.
RTW.DataAlignment
объект также имеет свойство DefaultMallocAlignment
, который задает контур выравнивания по умолчанию в байтах, что компилятор использует для динамически выделенной памяти. Если генератор кода использует динамическое выделение памяти для объекта данных, вовлеченного в замену кода, это значение определяет, удовлетворяет ли память требованию выравнивания замены. В противном случае генератор кода не использует замену. Значение по умолчанию для DefaultMallocAlignment
-1
, указание, что контур выравнивания по умолчанию, используемый для динамически выделенной памяти, неизвестен. В этом случае генератор кода использует естественное выравнивание типа данных, чтобы определить, позволить ли замену.
Кроме того, можно задать контур выравнивания для составных типов при помощи addComplexTypeAlignment
функция.
Если вы генерируете функцию файла настройки использование Заменяющего Инструмента Кода, заполняете следующие поля для каждого компилятора.
Щелкните плюс (+) символ, чтобы добавить дополнительные технические требования компилятора.
Для каждой спецификации выравнивания данных предоставьте следующую информацию.
AlignmentSpecification Свойство | Параметр диалогового окна | Описание |
---|---|---|
AlignmentType | Alignment type | Массив ячеек предопределенных перечислимых строк, задавая, который типы выравнивания эта спецификация поддержки.
Каждая спецификация выравнивания должна задать, по крайней мере |
AlignmentPosition | Alignment position | Предопределенная перечисленная строка, задающая положение, в которое необходимо поместить директиву выравнивания компилятора для выравнивания, вводит
Поскольку выравнивание вводит кроме |
AlignmentSyntaxTemplate | Alignment syntax | Задает направляющую строку выравнивания, которую поддерживает компилятор. Строка указана как шаблон синтаксиса, который имеет заполнителей в ней. Эти заполнители поддерживаются:
Например, для gcc компилятора, можно задать |
SupportedLanguages | Supported languages | Массив ячеек, задающий языки, к которым эта спецификация выравнивания применяется среди |
Вот спецификация выравнивания данных для компилятора GCC:
da = RTW.DataAlignment; as = RTW.AlignmentSpecification; as.AlignmentType = {'DATA_ALIGNMENT_LOCAL_VAR', ... 'DATA_ALIGNMENT_STRUCT_FIELD', ... 'DATA_ALIGNMENT_GLOBAL_VAR'}; as.AlignmentSyntaxTemplate = '__attribute__((aligned(%n)))'; as.AlignmentPosition = 'DATA_ALIGNMENT_PREDIRECTIVE'; as.SupportedLanguages = {'c', 'c++'}; da.addAlignmentSpecification(as); tc = RTW.TargetCharacteristics; tc.DataAlignment = da;
Вот соответствующая спецификация в диалоговом окне Generate customization Заменяющего Инструмента Кода.
Если замены MATLAB Coder кода, которые требуют использования выравнивания данных импортированные данные, такие как точка входа или экспортировали функциональный ввод-вывод, задают выравнивание данных к внешнему коду с coder.dataAlignment
операторы в коде MATLAB.
Если замены MATLAB Coder кода происходят, которые требуют выравнивания данных (использование импортированные данные), такое как точка входа или экспортируемая функция с вводом-выводом, задают заменяющее выравнивание данных кода с coder.DataAlignment
операторы в коде MATLAB.
Задавать требования выравнивания данных для импортированных данных в коде MATLAB:
Для каждого экземпляра импортированных данных, которые требуют выравнивания данных, задайте выравнивание в функции с coder.dataAlignment
оператор формы:
coder.dataAlignment ('
varName
', align_value
)
varName
символьный массив имени переменной, которое требует спецификации информации о выравнивании. align_value
целое число, которое должно быть степенью 2, от 2 до 128. Этот номер задает power-2 контур выравнивания байта.
Функция, взятая в качестве примера, которая задает выравнивание данных:
function y = testFunction(x1,x2) coder.dataAlignment('x1',16); % Specifies information coder.dataAlignment('x2',16); % Specifies information coder.dataAlignment('y',16); % Specifies information y = x1 + x2; end
Если testFunction
точка входа или экспортировала функцию, импортированные данные x1
x2
, и y
не выравниваются автоматически генератором кода. coder.DataAlignment
операторы для этих переменных только предназначены как информация для генератора кода. Сайты вызова, выделяющие память для данных, должны гарантировать, что данные выравниваются, как задано.
Также можно задать заменяющее выравнивание данных кода для экспортированных данных, таких как global
переменная или ExportedGlobal
класс памяти. Для получения дополнительной информации смотрите, Выбирают Storage Class for Controlling Data Representation in Generated Code.