Лучшые практики преобразования с одинарной точностью

Используйте Целые числа для индексных переменных

В коде MATLAB®, который вы хотите преобразовать в одинарную точность, это - лучшая практика использовать целые числа для индексных переменных. Однако, если код не использует целые числа для индексных переменных, когда возможное преобразование с одинарной точностью с помощью codegen с -double2single пытается обнаружить индексные переменные и выбрать типы int32 для них.

Ограничьте использование операторов assert

  • Не используйте операторы assert, чтобы задать свойства входных параметров.

  • Не используйте операторы assert, чтобы протестировать тип переменной. Например, не использовать

    assert(isa(a, 'double'))

Initialize MATLAB Class Properties в конструкторе

Не инициализируйте свойства класса MATLAB в блоке properties. Вместо этого используйте конструктора, чтобы инициализировать свойства класса.

Обеспечьте тестовый файл, который вызывает вашу функцию MATLAB

Разделите свой основной алгоритм от другого кода, который вы используете, чтобы протестировать и проверить результаты. Создайте тестовый файл, который вызывает ваш с двойной точностью алгоритм MATLAB. Можно использовать тестовый файл для:

  • Автоматически задайте свойства входных параметров функции верхнего уровня.

  • Проверьте, что с двойной точностью алгоритм ведет себя, как вы ожидаете. С двойной точностью поведение является базовой линией, с которой вы сравниваете поведение версий с одинарной точностью вашего алгоритма.

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

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

Подготовьте свой код к генерации кода

Код MATLAB, который вы хотите преобразовать в одинарную точность, должен выполнить требования генерации кода. Смотрите, что MATLAB Программирует для Генерации кода.

Чтобы помочь вам идентифицировать неподдерживаемые функции или построения в вашем коде MATLAB, добавьте прагму %#codegen к верхней части вашего файла MATLAB. Когда вы редактируете свой код в редакторе MATLAB, функциях флагов Анализатора КОДА MATLAB и построениях, которые не поддержаны для генерации кода. Смотрите Контрольный код с Анализатором кода. Когда вы используете приложение MATLAB Coder™, экраны приложения ваш код для готовности генерации кода. В функциональной строке можно использовать Инструмент Готовности Генерации кода. Смотрите Контрольный код при помощи Инструмента Готовности Генерации кода.

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

Прежде чем вы начнете процесс преобразования с одинарной точностью, проверите, что можно успешно сгенерировать код от вашего с двойной точностью код MATLAB. Сгенерируйте и запустите версию MEX вашего с двойной точностью код MATLAB так, чтобы вы могли:

  • Обнаружьте и устраните проблемы компиляции.

  • Проверьте, что сгенерированный код с одинарной точностью ведет себя то же самое как с двойной точностью код MATLAB.

Видеть почему тестовые MEX-функции в MATLAB?.

Лучшые практики для генерации кода C/C++ с одинарной точностью

Когда вы генерируете код C/C++ с одинарной точностью при помощи приложения MATLAB CODER или codegen с опцией -singleC, применяете эти лучшые методы:

Пользуйтесь стандартной математической библиотекой C99

Когда вы генерируете библиотеки C/C++ или исполняемые файлы, по умолчанию, генератор кода использует C99 (ISO) математическая библиотека стандарта. Если вы генерируете код C/C++ с одинарной точностью, пользующийся библиотекой C89/C90 (ANSI), генератор кода предупреждает вас, если функция в этой библиотеке использует двойную точность. Чтобы избежать этого предупреждения, установите стандартную математическую библиотеку на C99 (ISO). Смотрите Предупреждения от Преобразования до Кода C/C++ С одинарной точностью.

Бросьте большую двойную константу к целому числу

Для константы, больше, чем 2^24, в вашем оригинале с двойной точностью функция MATLAB, бросает константу к целому типу, который является достаточно большим для постоянного значения. Например:

a = int32(2^24 + 1);

Сгенерируйте и запущенный MEX с одинарной точностью прежде, чем сгенерировать код C/C++ с одинарной точностью

Прежде чем вы сгенерируете код С с одинарной точностью, сгенерируете и запустите версию MEX с одинарной точностью вашего кода MATLAB. Когда вы применяете эту практику, можно обнаружить и устранить проблемы компилятора. Можно проверить, что MEX-функция с одинарной точностью имеет ту же функциональность как код MATLAB.

При использовании codegen с -singleC:

  1. Сгенерируйте MEX с одинарной точностью.

  2. Вызовите coder.runTest, чтобы запустить ваш тестовый файл, заменив вызовы с двойной точностью код MATLAB с вызовами кода MEX с одинарной точностью.

При использовании приложение MATLAB CODER, выполняете Проверку для шага Проблем Во время выполнения с включенным преобразованием с одинарной точностью.

Лучшые практики для генерации КОДА MATLAB С одинарной точностью

Когда вы будете использовать codegen с опцией -double2single, чтобы сгенерировать код MATLAB с одинарной точностью, примените эти лучшые методы:

Используйте опцию -args, чтобы задать входные свойства

Когда вы генерируете код MATLAB с одинарной точностью, если вы задаете тестовый файл, вы не должны задавать свойства аргумента с опцией -args. В этом случае генератор кода запускает тестовый файл, чтобы определить свойства входных типов. Однако выполнение тестового файла может замедлить генерацию кода. Это - лучшая практика определить входные свойства одно время с coder.getArgTypes. Затем передайте свойства опции -args. Например:

types = coder.getArgTypes('myfun_test', 'myfun');
scfg = coder.config('single');
codegen -double2single scfg -args types myfun -report

Когда вы повторяете генерацию кода в том же сеансе работы с MATLAB, эта практика экономит вам время.

Протестируйте численные данные и регистрируйте данные ввода-вывода

Когда вы будете использовать функцию codegen с опцией -double2single, чтобы сгенерировать код MATLAB с одинарной точностью, включите тестирование численных данных и регистрацию данных ввода-вывода для графиков сравнения. Чтобы использовать тестирование численных данных, необходимо обеспечить тестовый файл, который вызывает функцию MATLAB. Чтобы включить тестирование численных данных и регистрацию данных ввода-вывода, создайте объект coder.SingleConfig. Установите TestBenchName, TestNumerics и свойства LogIOForComparisonPlotting. Например:

scfg = coder.config('single');
scfg.TestBenchName = 'mytest';
scfg.TestNumerics = true;
scfg.LogIOForComparisonPlotting = true;

Похожие темы

Была ли эта тема полезной?