Simulink ® Coder™ поддерживает компоновку основного массива строк для создания кода. Можно интегрировать существующие приложения, которые используют макет основной строки с сгенерированным кодом в макете основной строки. При переключении существующей модели с блоками таблицы поиска (LUT) из макета основной массив столбца в макет основной массив строки рекомендуется преобразовывать блоки LUT из алгоритма основной столбец в алгоритм основной строка. Код, генерируемый с помощью алгоритма основной строки, работает с максимальной скоростью и использованием памяти при работе с данными таблицы с макетом основной строки. Код, генерируемый с помощью алгоритма «основной столбец», лучше всего работает с макетом массива «основной столбец».
В этом примере показан рабочий процесс преобразования модели с блоками LUT из макета «основной столбец» в макет «основная строка» для достижения наилучшей производительности макета «основная строка».
В этом примере выполняется следующее:
Определите макет массива и выберите оптимизированный алгоритм.
Сохранение семантики посредством перестановки таблицы.
Создайте код, используя основной алгоритм строки и макет массива.
1. Открыть пример модели rtwdemo_row_lutcol2row_workflow.
open_system('rtwdemo_row_lutcol2row_workflow');

По умолчанию Simulink настраивает модель для использования основных алгоритмов столбцов и компоновки основного массива столбцов. Эти параметры являются параметрами конфигурации в диалоговом окне Параметры конфигурации (Configuration Parameters).
Math and Data Types > Use algoriths optimized for row-major array layout - этот параметр влияет на моделирование и создание кода.
Создание кода > Интерфейс > Макет массива - этот параметр влияет только на создание кода.

2. На вкладке Моделирование (Modeling) щелкните Выполнить (Run), чтобы смоделировать модель и просмотреть выходные данные, зарегистрированные в переменной рабочей области. yout.
3. Измените текущую папку в MATLAB ® на папку с возможностью записи. На вкладке Код C (C Code) щелкните Создать (Build), чтобы создать код C.
В области калибровки часто используются табличные данные с компоновкой главного массива строк. Для сопряжения данных основной таблицы строки с существующей моделью обновите модель основной строки для эффективной работы с данными основной таблицы строки.
Для достижения максимальной производительности используйте алгоритм, оптимизированный для указанной компоновки массива. Например, используйте основные алгоритмы строк, когда формат Array установлен как Row-major при формировании кода.

1. Чтобы включить основные алгоритмы строк, откройте диалоговое окно Параметры конфигурации (Configuration Parameters). На панели Математика (Math) и Типы данных (Data Types) выберите параметр конфигурации Использовать алгоритмы, оптимизированные для компоновки основного массива строк. Либо в окне команды MATLAB введите:
set_param('rtwdemo_row_lutcol2row_workflow','UseRowMajorAlgorithm','on');
2. Щелкните Выполнить (Run), чтобы смоделировать модель. Simulink сообщает об ошибках из-за несогласованности точек останова и табличных данных между блоками предварительной синхронизации и интерполяции. Причинами этой ошибки являются два семантических изменения, которые происходят при переходе от основных алгоритмов столбцов к основным алгоритмам строк, то есть, когда:
Выберите плоскость из таблицы 3-D в блоке интерполяции.
Выберите плоскость из таблицы 4-D через блок таблицы прямого поиска.


1. Для выбора поднабора перед интерполяцией или прямого поиска, выводящего вектор или матрицу 2-D, семантика модели изменяется при переключении с алгоритма типа "столбец-большой" на алгоритм типа "строка-большая" путем выбора параметра конфигурации "Использовать алгоритмы, оптимизированные для компоновки массива типа" строка-большая ". Чтобы сохранить семантику и исправить предыдущие ошибки, переставьте данные таблицы с помощью следующих команд:
T4d_str = get_param('rtwdemo_row_lutcol2row_workflow/Direct LUT','Table'); set_param('rtwdemo_row_lutcol2row_workflow/Direct LUT','Table',... ['permute(',T4d_str,',[3,4,1,2])']);
T3d_str = get_param('rtwdemo_row_lutcol2row_workflow/Interp2','Table'); set_param('rtwdemo_row_lutcol2row_workflow/Interp2','Table',... ['permute(',T3d_str,',[3,1,2])']);
2. Перед импортом данных таблицы из файла необходимо переставить данные таблицы в файле. Эта перестановка обеспечивает возможность настройки таблицы на протяжении всего процесса моделирования и создания кода.
После перестановки данных таблицы Simulink настраивает модель rtwdemo_row_lutcol2row_workflow для моделирования основных строк. Модель эквивалентна предварительно сконфигурированной модели. rtwdemo_row_lutcol2row_workflow_rowrow имеет перестановку данных таблицы и использует основной алгоритм строки.
1. Открыть пример модели rtwdemo_row_lutcol2row_workflow_rowrow.
open_system('rtwdemo_row_lutcol2row_workflow_rowrow');

2. Чтобы настроить эти модели для генерации основного кода строки, откройте диалоговое окно Параметры конфигурации (Configuration Parameters). В дополнение к включению параметра конфигурации Use algoriths optimized for row-major array layout, на панели Code Generation > Interface установите для параметра конфигурации Array Layout значение Row-Major вариант. Параметр Array Layout позволяет модели генерировать основной код строки. Либо в окне команды MATLAB введите:
% For model 'rtwdemo_row_lutcol2row_workflow_rowrow' set_param('rtwdemo_row_lutcol2row_workflow_rowrow', 'ArrayLayout','Row-major'); % For model 'rtwdemo_row_lutcol2row_workflow' set_param('rtwdemo_row_lutcol2row_workflow', 'ArrayLayout','Row-major');
3. В диалоговых окнах блока проверьте таблицу перестановочных 3-D.


4. Измените текущую папку в MATLAB на папку с возможностью записи. На вкладке Код C (C Code) щелкните Создать (Build), чтобы создать код C. В созданном коде просмотрите данные таблицы с макетом основной строки

В созданном коде memcpy функция заменяет for петли. Используя memcpy уменьшает объем памяти для хранения данных. Эта оптимизация повышает скорость выполнения.

Соблюдайте алгоритмы, оптимизированные для основных данных строк.

close_system('rtwdemo_row_lutcol2row_workflow',0); close_system('rtwdemo_row_lutcol2row_workflow_rowrow',0);