exponenta event banner

Преобразовать таблицу поиска с одной точностью в половинную точность

В этом примере показано, как преобразовать таблицу поиска с одной точностью для использования половинной точности. Половинная точность - тип склада; вычисления таблицы поиска продолжают выполняться с использованием одной точности. После преобразования эти примеры вдвое уменьшают размер памяти блоков таблицы поиска, сохраняя при этом требуемую производительность системы.

Задача 1: Моделирование и получение опорной структуры

1. Откройте окно airflow_calc подсистема sldemo_fuelsys пример модели. Он содержит блоки таблицы подстановки с таблицей одиночной точности и данными точек останова, которые должны быть преобразованы в половинную точность.

load_system('sldemo_fuelsys');
open_system('sldemo_fuelsys/fuel_rate_control/airflow_calc');

2. В MATLAB ® измените текущую папку на папку с возможностью записи.

3. Убедитесь в том, что таблицы и точки останова Pumping Constant и Ramp Rate Ki Lookup Table являются едиными типами данных.

4. Выберите выходные сигналы для обоих блоков таблицы поиска. Отметьте их для ведения журнала. Моделирование модели в обычном режиме и использование выходных данных этого прогона в качестве базовой линии.

Задача 2: Анализ и преобразование данных в половину

1. Получение данных таблицы и переменной точки останова из рабочего пространства модели для указанного блока таблицы подстановки. Например, с помощью блока «Постоянная накачки»:

mdlWks = get_param('sldemo_fuelsys','ModelWorkspace');
currentBlk = 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Pumping Constant';

2. Проанализируйте данные таблицы и преобразуйте их в половинную точность, если они могут соответствовать типу половинной точности [-65504, 65504]. В инспекторе данных моделирования смоделируйте модель и сравните зарегистрированные выходные данные текущего блока с базовой линией. Убедитесь, что выходные данные находятся в пределах указанного абсолютного допуска и относительного допуска. Например, этот код устанавливает оба допуска на | 0.01 |.

expath = fullfile(matlabroot,'examples','fixedpoint','main');
addpath(expath); % Add the folder containing the supporting file to the path
numBytesSaved(1) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'Table');

3. Повторите шаг 2 задачи 2 для данных каждой из точек останова текущего блока. Данные точек останова должны оставаться монотонно увеличивающимися после преобразования из одинарной в половинную точность.

numBytesSaved(2) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension1');
numBytesSaved(3) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension2');
totalBytesSaved = sum(numBytesSaved(1:3));

4. Повторите шаги 2 и 3 задачи 2 для остальных блоков таблицы поиска в той же подсистеме. Затем проверьте количество байтов, сохраненных для таблицы и точек останова n-D блоков таблицы поиска.

currentBlk = 'sldemo_fuelsys/fuel_rate_control/airflow_calc/Ramp Rate Ki';
numBytesSaved(4) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'Table');
numBytesSaved(5) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension1');
numBytesSaved(6) = analyzeDataConvertToHalf(mdlWks, currentBlk, 'BreakpointsForDimension2'),
numBytesSaved =

   684    36    38    72    12    12

totalBytesSaved = totalBytesSaved + sum(numBytesSaved(4:6)),
totalBytesSaved =

   854

Задача 3: Моделирование и сравнение

1. Моделирование преобразованной модели с помощью таблицы половинной точности и точек останова.

2. Сравните сигналы «fuel», «air _ fuel _ ratio» и т.д. с базовой линией в блоке «Scope» и в инспекторе данных моделирования. Убедитесь, что желаемая производительность все еще достигнута.

3. Сохраните модель с другим именем в папке, доступной для записи.

Задача 4: Создание кода и проверка оптимизации памяти

1. Щелкните правой кнопкой мыши подсистему fuel_rate_control и выберите C/C + + Code > Build This Subsystem. Чтобы создать код, нажмите кнопку Построить (Build) в диалоговом окне Построить код для подсистемы (Build code for Subsystem).

2. По завершении обработки сборки отображается отчет о создании кода.

3. Щелкните значок half_type.h и fuel_rate_control.c файлы. Обратите внимание на половинную точность (real16_T) определение типа, real16_T введите таблицу и указатели точек останова в look2_ifbhlfthDfIf_linlca интерфейс вызова функции.

4. Откройте окно fuel_rate_control.h и обратите внимание, что 854 байта были сохранены с использованием половинной точности в качестве типа хранения для таблиц и точек останова.

rmpath(expath);
close_system('sldemo_fuelsys',0);

Связанные темы