Преобразование

Размещения Column-Major в Размещение-Major Интерполяционная таблица моделей с блоками

Simulink ® Coder™ поддерживает размещение массива основной строки для генерации кода. Можно интегрировать существующие приложения, которые используют размещение массива основной строки с сгенерированным кодом в размещении массива основной строки. Когда вы переключаете существующую модель с блоками интерполяционной таблицы (LUT) из размещения массива основной столбца в размещение массива основной строки, рекомендуется преобразовать блоки LUT из алгоритма основной столбца в алгоритм основной строки. Код, сгенерированный при помощи алгоритма row-major, выполняет с лучшей скоростью и использованием памяти при работе с данными таблицы с размещением массива row-major. Код, сгенерированный при помощи алгоритма column-major, лучше всего работает с размещением массива column-major.

В этом примере показан рабочий процесс преобразования модели с блоками LUT из размещения основного столбца в размещение основной строки для достижения наилучшей эффективности на размещении массива основной строки.

В этом примере вы:

  • Идентифицируйте размещение массива и выберите оптимизированный алгоритм.

  • Сохраните семантику через таблицу сочетания.

  • Сгенерируйте код с помощью алгоритма основной строки и размещения массива.

Симулируйте и сгенерируйте код при помощи алгоритмов Column-Major

1. Откройте пример модели rtwdemo_row_lutcol2row_workflow.

open_system('rtwdemo_row_lutcol2row_workflow');

По умолчанию Simulink конфигурирует модель, чтобы использовать алгоритмы основного столбца и размещение массива основного столбца. Эти параметры являются параметрами конфигурации в диалоговом окне Configuration Parameters.

2. На вкладке Modeling нажмите запуск, чтобы симулировать модель и наблюдать выход, зарегистрированный в переменной рабочей области yout.

3. Измените текущую папку в MATLAB ® на папку с возможностью записи. На вкладке Кода С нажатия кнопки Build, чтобы сгенерировать Код С.

Выберите оптимизированные алгоритмы для размещения массива Row-Major

Данные таблицы с размещением массива основной строки часто используются в области калибровки. Чтобы сопоставить данные основной таблицы строк с существующей моделью, обновите модель основной таблицы столбцов, чтобы эффективно работать с данными основной таблицы строк.

Используйте алгоритм, который оптимизирован для заданного размещения массива, чтобы достичь наилучшей эффективности. Для примера используйте алгоритмы больших строк, когда Массив размещения задан как Row-major во время генерации кода.

1. Чтобы включить алгоритмы основной строки, откройте диалоговое окно Параметров конфигурации. На панели Математические и типы данных выберите параметр конфигурации Использовать алгоритмы, оптимизированные для размещения массива с основной строкой. Кроме того, в Командном Окне 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. Прежде чем импортировать данные таблицы из файла, необходимо переместить данные таблицы в файл. Это сочетание сохраняет настраиваемую таблицу на протяжении всего рабочего процесса симуляции и генерации кода.

Генерация кода при помощи алгоритма Row-Major и размещения массива

После перестановки данных таблицы Simulink конфигурирует модель rtwdemo_row_lutcol2row_workflow для симуляции основной строки. Модель эквивалентна предварительно сконфигурированной модели rtwdemo_row_lutcol2row_workflow_rowrow который имеет перестановочные данные таблицы и использует алгоритм основной строки.

1. Откройте пример модели rtwdemo_row_lutcol2row_workflow_rowrow.

open_system('rtwdemo_row_lutcol2row_workflow_rowrow');

2. Чтобы настроить эти модели для генерации кода основной строки, откройте диалоговое окно Параметров конфигурации. В дополнение к включению алгоритмов Use, оптимизированных для параметра конфигурации размещения массива с основной строкой, на панели Генерация Кода > 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 на папку с возможностью записи. На вкладке Кода С нажатия кнопки Build, чтобы сгенерировать Код С. В сгенерированном коде наблюдайте данные таблицы с размещением массива основной строки

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

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

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

Похожие темы