Библиотеки замещения кода могут выравнивать объекты данных, переданные в функцию замещения, по заданному контуру.
Можно использовать преимущества реализации функций, которые требуют выровненных данных для оптимизации эффективности приложения при использовании MATLAB® Coder™. Чтобы сконфигурировать выравнивание данных для реализации функции:
Задайте требования к выравниванию данных в записи замены кода. Задайте выравнивание отдельно для каждого аргумента функции реализации или коллективно для всех аргументов функции. См. раздел «Задание требований к выравниванию данных» для аргументов функции.
Задайте возможности выравнивания данных и синтаксис для одного или нескольких компиляторов. Включите спецификации выравнивания в запись регистрации библиотеки в rtwTargetInfo.m
файл. См. «Предоставление спецификаций выравнивания данных для компиляторов».
Зарегистрируйте библиотеку, содержащую запись таблицы и объект спецификаций выравнивания.
Сконфигурируйте генератор кода, чтобы использовать библиотеку замены кода и сгенерировать код. Наблюдайте за результатами.
Например, см. Основной пример выравнивания данных замены кода и раздел «Выравнивание данных для реализации функции» на странице примера Оптимизации сгенерированного кода путем разработки и использования библиотек замены кода - Simulink ®.
Примечание
Если при замене, которая требует выравнивания, используются импортированные данные (для примера, ввода-вывода функции точки входа или экспортированной функции), задайте выравнивание данных с coder.dataAlignment
операторы в коде MATLAB. Задайте выравнивание отдельно для каждого образца импортированных данных. Смотрите раздел «Задание выравнивания данных в коде MATLAB» для импортированных данных.
Чтобы задать требование выравнивания данных для аргумента в записи замены кода:
Если вы определяете функцию замены в файле регистрации таблицы замещения кода, создайте объект дескриптора аргумента (RTW.ArgumentDescriptor
). Используйте его AlignmentBoundary
свойство, чтобы задать необходимый контур выравнивания и назначить объект аргументу Descriptor
свойство.
Если вы определяете функцию замены с помощью Code Replacement Tool, на вкладке Mapping Information, в разделе Argument properties для функции замены, введите значение для параметра Alignment value.
The AlignmentBoundary
свойство (или Alignment value параметр) задает контур выравнивания для данных, переданных в аргумент функции, в количестве байтов. The 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
объект записи реестра.
The RTW.DataAlignment
объект также имеет свойство DefaultMallocAlignment
, который задает контур выравнивания по умолчанию в байтах, которую компилятор использует для динамически выделенной памяти. Если генератор кода использует динамическое выделение памяти для объекта данных, участвующего в замене кода, это значение определяет, удовлетворяет ли память требованию выравнивания замены. Если нет, генератор кода не использует замену. Значение по умолчанию для DefaultMallocAlignment
является -1
, что указывает на то, что контур выравнивания по умолчанию, используемая для динамически выделенной памяти, неизвестен. В этом случае генератор кода использует естественное выравнивание типа данных, чтобы определить, разрешать ли замену.
Кроме того, можно задать контур выравнивания для сложных типов при помощи addComplexTypeAlignment
функция.
Если вы генерируете функцию файла индивидуальной настройки с помощью Code Replacement Tool, заполните следующие поля для каждого компилятора.
Щелкните символ плюс (+), чтобы добавить дополнительные спецификации компилятора.
Для каждой спецификации выравнивания данных предоставьте следующую информацию.
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
)
The varName
- символьный массив с именем переменной, который требует спецификации информации о выравнивании. The align_value
- целое число, которое должно быть степенью 2, от 2 до 128. Этот номер задает контур выравнивания мощности 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
не выравниваются автоматически генератором кода. The coder.DataAlignment
операторы для этих переменных предназначены только для генератора кода. Сайты вызовов, выделяющие память для данных, должны гарантировать соответствие данных заданному значению.
Можно также задать выравнивание данных замены кода для экспортированных данных, таких как global
переменная или ExportedGlobal
класс памяти. Для получения дополнительной информации смотрите Выбор класса памяти для управления представлением данных в сгенерированном коде.