Оптимизируйте сгенерированный код путем разработки и пользования заменяющими библиотеками кода - MATLAB®

Разработайте и пользуйтесь заменяющими библиотеками кода, чтобы заменить функцию и операторы в сгенерированном коде. Замена кода является методом, чтобы изменить код, который генератор кода производит для функций и операторов, чтобы удовлетворить требования кода приложения. Например, можно заменить сгенерированный код, чтобы удовлетворить требования, такие как:

  • Оптимизация для определенной среды выполнения, включая, но не ограниченный, определенного целевого компьютера

  • Интеграция с кодом существующего приложения

  • Податливость со стандартом, таким как AUTOSAR

  • Модификация поведения кода, такого как включение или отключение неличной или встроенной поддержки

  • Приложение - или специфичные для проекта требования кода, такие как использование BLAS или устранение math.h, системные заголовочные файлы или вызовы memcpy или memset.

Можно сконфигурировать генератор кода, чтобы пользоваться заменяющей библиотекой кода, которую обеспечивает MathWorks®. Если у вас есть лицензия Embedded Coder®, можно разработать собственную заменяющую библиотеку кода в интерактивном режиме с Заменяющим Инструментом Кода или программно.

Этот пример предоставляет код MATLAB®, который показывает множество способов, которыми можно задать заменяющие отображения кода. С каждым примером функция MATLAB® пример обеспечивает файлы MATLAB®, которые иллюстрируют, как разработать функцию и замены оператора кода программно.

Дополнительные требования:

  • MATLAB Coder

  • Embedded Coder

  • Fixed-Point Designer

Для получения дополнительной информации смотрите то, Что Заменяющая Индивидуальная настройка Кода? и Разработайте Заменяющую Библиотеку Кода.

Создайте новую папку и скопируйте соответствующие файлы

Следующий код создает sub папку в вашей текущей рабочей папке (pwd). Новая папка содержит файлы, которые важны для этого примера.

currentDir = pwd;
[~,cgDir] = rtwdemodir();
coderdemo_setup('coderdemo_crl');

Шаги для разработки заменяющей библиотеки кода

  1. Идентифицируйте свои заменяющие требования кода относительно функции или операционных отображений, создайте информацию и информацию о регистрации.

  2. Подготовьтесь к заменяющей разработке библиотеки кода (например, идентифицируйте или разработайте модели, чтобы протестировать вашу библиотеку).

  3. Задайте заменяющие отображения кода.

  4. Укажите информацию сборки для заменяющего кода.

  5. Укажите заменяющие отображения кода.

  6. Проверьте замены кода.

  7. Разверните библиотеку.

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

Замена математической функции

Этот пример задает и указывает заменяющие отображения кода для математических функций. Можно задать заменяющие отображения кода для множества функций. Для получения дополнительной информации см. Код, который Можно Заменить из кода MATLAB.

1. Откройте и исследуйте файл MATLAB® для этого примера.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','replace_math_fcns.m'))

2. Сконфигурируйте генератор кода, чтобы использовать заменяющие Заменяющие Примеры библиотечной функции кода.

RTW.TargetRegistry.getInstance('reset');
cfg = coder.config('lib','ecoder',true);
cfg.CodeReplacementLibrary = 'Function Replacement Examples';
cfg.GenerateReport = false;
cfg.LaunchReport = false;

3. Настройте параметры конфигурации, чтобы создать и задать тип входного параметра функции.

t = single(2); 

4. Исследуйте заменяющий табличный файл определения кода.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','crl_table_functions.m'))

5. Скомпилируйте программу MATLAB® в исходный файл C при помощи параметров конфигурации, которые указывают на заменяющую библиотеку кода и входной класс в качестве примера, заданный на шаге 3 как входные параметры к codegen команда.

codegen('replace_math_fcns', '-config', cfg, '-args', {t, t});
Code generation successful.

6. Откройте файл replace_math_fcns.c и исследуйте сгенерированный исходный код.

open(fullfile('codegen','lib','replace_math_fcns','replace_math_fcns.c'))

7. Закройте replace_math_fcns.m.

Для получения дополнительной информации о замене математической функции смотрите Замену Математической функции Кода.

Оператор сложения и замена оператора вычитания

В этом примере показано, как задать и указать заменяющие отображения кода для сложения (+) и вычитание (-) операции. При определении записей для операций сложения и операций вычитания, можно задать который из следующих алгоритмов (EntryInfoAlgorithm) ваша реализация библиотечных функций:

  • Бросок перед операцией (CBO) (RTW_CAST_BEFORE_OP), значение по умолчанию

  • Бросок после операции (CAO) (RTW_CAST_AFTER_OP)

1. Откройте и исследуйте файл MATLAB® для этого примера.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','addsub_two_int16.m'))
%
% CBO, the default algorithm, is assumed.

2. Сконфигурируйте генератор кода, чтобы использовать заменяющую библиотеку Addition & Subtraction Examples кода.

RTW.TargetRegistry.getInstance('reset');
cfg = coder.config('lib','ecoder',true);
cfg.CodeReplacementLibrary = 'Addition & Subtraction Examples';
cfg.GenerateReport = false;
cfg.LaunchReport = false;

3. Настройте параметры конфигурации, чтобы создать и задать входной тип операции.

t = int16(2); 

4. Исследуйте заменяющий табличный файл определения кода.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','crl_table_addsub.m'))

5. Скомпилируйте программу MATLAB® в исходный файл C при помощи параметров конфигурации, которые указывают на желаемую заменяющую библиотеку кода и входной класс в качестве примера, заданный на шаге 3 как входные параметры к codegen команда.

codegen('addsub_two_int16','-config', cfg, '-args', {t, t});
Code generation successful.

6. Откройте файл addsub_two_int16.c и исследуйте сгенерированный исходный код.

open(fullfile('codegen','lib','addsub_two_int16','addsub_two_int16.c'))

7. Закройте addsub_two_int16.m.

Для получения дополнительной информации о замене оператора сложения и оператора вычитания смотрите Скалярную Замену Оператора Кода и Оператор сложения и Замену Оператора вычитания Кода.

Замена матричного оператора

Этот пример задает и указывает заменяющие отображения кода для операций над матрицей: сложение, вычитание, умножение, перемещение, сопряженное, и Эрмитово.

Поддерживаемые типы включают:

  • single'double'

  • int8uint8

  • int16uint16

  • int32uint32

  • csingle, cdouble

  • cint8, cuint8

  • cint16, cuint16

  • cint32, cuint32

  • целые числа фиксированной точки

  • смешанные типы (другой тип на каждом входе)

1. Откройте и исследуйте файл MATLAB® для этого примера:

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','replace_matrix_ops.m'))

2. Сконфигурируйте генератор кода, чтобы использовать заменяющую библиотеку Matrix Op Replacement Examples кода.

RTW.TargetRegistry.getInstance('reset');
cfg = coder.config('lib','ecoder',true);
cfg.CodeReplacementLibrary = 'Matrix Op Replacement Examples';
cfg.GenerateReport = false;
cfg.LaunchReport = false;

3. Настройте параметры конфигурации, чтобы создать и задать входной тип операции.

t = [1.0 2.0; 3.0, 4.0]; 

4. Исследуйте заменяющий табличный файл определения кода.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','crl_table_matops.m'))

5. Скомпилируйте программу MATLAB® с помощью параметров конфигурации, которые указывают на желаемую заменяющую библиотеку кода и входной класс в качестве примера, заданный на шаге 3 как входные параметры к codegen команда.

codegen('replace_matrix_ops', '-config', cfg, '-args', {t, t});
Code generation successful.

6. Откройте файл replace_matrix_ops.c и исследуйте сгенерированный исходный код.

open(fullfile('codegen','lib','replace_matrix_ops','replace_matrix_ops.c'))

7. Закройте replace_matrix_ops.m.

Для получения дополнительной информации о замене матричного оператора смотрите Маленькую Операцию над матрицей к Замене Процессора Кода.

Замена умножения матриц для BLAS

Этот пример задает и указывает заменяющие отображения кода для стандартных подпрограмм базовых подпрограмм линейной алгебры (BLAS) xGEMM и xGEMV. Можно сопоставить следующие операции со стандартной подпрограммой BLAS:

  • Умножение матриц

  • Умножение матриц с транспонирует на сингле или обоих входных параметрах

  • Умножение матриц с операцией Hermitian на сингле или обоих входных параметрах

1. Откройте и исследуйте файл MATLAB® для этого примера.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','replace_matrix_ops_blas.m'))

2. Сконфигурируйте генератор кода, чтобы использовать заменяющую библиотеку BLAS Replacement Examples кода.

RTW.TargetRegistry.getInstance('reset');
cfg = coder.config('lib','ecoder',true);
cfg.CodeReplacementLibrary = 'BLAS Replacement Examples';
cfg.GenerateReport = false;
cfg.LaunchReport = false;

3. Настройте параметры конфигурации, чтобы создать и задать тип входного параметра функции.

t = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]; 

4. Исследуйте заменяющий табличный файл определения кода.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','crl_table_blas.m'))

5. Скомпилируйте программу MATLAB® с помощью параметров конфигурации, которые указывают на желаемую заменяющую библиотеку кода и входной класс в качестве примера, заданный на шаге 3 как входные параметры к codegen команда.

codegen('replace_matrix_ops_blas', '-config', cfg, '-args', {t, t});
Code generation successful.

6. Откройте файл replace_matrix_ops_blas.c и исследуйте сгенерированный исходный код.

open(fullfile('codegen','lib','replace_matrix_ops_blas','replace_matrix_ops_blas.c'))

7. Закройте replace_matrix_ops_blas.m.

Для получения дополнительной информации о замене умножения матриц для BLAS смотрите Операцию Умножения матриц к MathWorks BLAS Code Replacement.

Замена функции MATLAB Используя Coder.Replace

Заменяющие библиотеки кода поддерживают замену функций MATLAB® со скалярными и матричными вводами и выводами для встроенного, комплексного, и типы данных с фиксированной точкой.

1. Откройте и исследуйте файл MATLAB® для этого примера.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','coder_replace_fcn.m'))

2. Сконфигурируйте генератор кода, чтобы использовать заменяющую библиотеку Coder Replace Examples кода.

RTW.TargetRegistry.getInstance('reset');
cfg = coder.config('lib','ecoder',true);
cfg.CodeReplacementLibrary = 'Coder Replace Examples';
cfg.GenerateReport = false;
cfg.LaunchReport = false;

3. Настройте параметры конфигурации, чтобы создать и задать тип входного параметра функции.

t = [1 2; 3 4];

4. Исследуйте заменяющий табличный файл определения кода.

edit(fullfile(matlabroot,'toolbox','coder','codegendemos','coderdemo_crl','crl_table_coder_replace.m'))

5. Скомпилируйте программу MATLAB® с помощью параметров конфигурации, которые указывают на желаемую заменяющую библиотеку кода и входной класс в качестве примера, заданный на шаге 3 как входные параметры к codegen команда.

codegen('coder_replace_fcn', '-config', cfg, '-args', {t, t});
Code generation successful.

6. Откройте файл coder_replace_fcn.c и исследуйте сгенерированный исходный код.

open(fullfile('codegen','lib','coder_replace_fcn','coder_replace_fcn.c'))

7. Закройте coder_replace_fcn.m.

Для получения дополнительной информации смотрите docid:ecoder_ug.mw_ab7cd3a5 076f 40e4 b8a9 d3357993c100.

Создайте информацию

Для каждой записи в заменяющей таблице кода можно указать информацию сборки, такую как следующее для заменяющих функций:

  • Зависимости от заголовочного файла

  • Зависимости от исходного файла

  • Дополнительный включают пути

  • Дополнительные исходные пути

  • Дополнительные флаги ссылки

Кроме того, можно задать RTW.copyFileToBuildDir скопировать заголовок, источник или объектные файлы, которые требуются, чтобы генерировать заменяющий код к папке сборки перед генерацией кода. Можно задать RTW.copyFileToBuildDir путем установки его как значения:

  • Свойство GenCallback в вызове setTflCFunctionEntryParameters, setTflCOperationEntryParameters, или setTflCSemaphoreEntryParameters.

  • Аргумент genCallback в вызове registerCFunctionEntry, registerCOperationEntry, или registerCSemaphoreEntry.

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

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

Очистка

Удалите файлы и возвратитесь к исходной папке

RTW.TargetRegistry.getInstance('reset');
rtwdemoclean;
clear coderdemo_crl
cd ../