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

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

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

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

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

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

    assert(isa(a, 'double'))

Инициализируйте свойства класса MATLAB в конструкторе

Не инициализируйте свойства класса 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, выполняете шаг Check for Run-Time Issues с включенным преобразованием с одинарной точностью.

Лучшые практики для генерации кода 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;

Похожие темы