В коде MATLAB®, который вы хотите преобразовать в одинарную точность, это - лучшая практика использовать целые числа для индексных переменных. Однако, если код не использует целые числа для индексных переменных, когда возможное преобразование с одинарной точностью с помощью codegen с -double2single пытается обнаружить индексные переменные и выбрать типы int32 для них.
assertНе используйте операторы assert, чтобы задать свойства входных параметров.
Не используйте операторы assert, чтобы протестировать тип переменной. Например, не использовать
assert(isa(a, 'double'))
Не инициализируйте свойства класса MATLAB в блоке properties. Вместо этого используйте конструктора, чтобы инициализировать свойства класса.
Разделите свой основной алгоритм от другого кода, который вы используете, чтобы протестировать и проверить результаты. Создайте тестовый файл, который вызывает ваш с двойной точностью алгоритм MATLAB. Можно использовать тестовый файл для:
Автоматически задайте свойства входных параметров функции верхнего уровня.
Проверьте, что с двойной точностью алгоритм ведет себя, как вы ожидаете. С двойной точностью поведение является базовой линией, с которой вы сравниваете поведение версий с одинарной точностью вашего алгоритма.
Сравните поведение версии с одинарной точностью вашего алгоритма к с двойной точностью базовая линия.
Для лучших результатов тестовый файл должен осуществить алгоритм в своей полной операционной области значений.
Код MATLAB, который вы хотите преобразовать в одинарную точность, должен выполнить требования генерации кода. Смотрите, что MATLAB Программирует для Генерации кода.
Чтобы помочь вам идентифицировать неподдерживаемые функции или построения в вашем коде MATLAB, добавьте прагму %#codegen к верхней части вашего файла MATLAB. Когда вы редактируете свой код в редакторе MATLAB, функциях флагов Анализатора КОДА MATLAB и построениях, которые не поддержаны для генерации кода. Смотрите Контрольный код с Анализатором кода. Когда вы используете приложение MATLAB Coder™, экраны приложения ваш код для готовности генерации кода. В функциональной строке можно использовать Инструмент Готовности Генерации кода. Смотрите Контрольный код при помощи Инструмента Готовности Генерации кода.
Прежде чем вы начнете процесс преобразования с одинарной точностью, проверите, что можно успешно сгенерировать код от вашего с двойной точностью код MATLAB. Сгенерируйте и запустите версию MEX вашего с двойной точностью код MATLAB так, чтобы вы могли:
Обнаружьте и устраните проблемы компиляции.
Проверьте, что сгенерированный код с одинарной точностью ведет себя то же самое как с двойной точностью код MATLAB.
Когда вы генерируете код C/C++ с одинарной точностью при помощи приложения MATLAB CODER или codegen с опцией -singleC, применяете эти лучшые методы:
Когда вы генерируете библиотеки C/C++ или исполняемые файлы, по умолчанию, генератор кода использует C99 (ISO) математическая библиотека стандарта. Если вы генерируете код C/C++ с одинарной точностью, пользующийся библиотекой C89/C90 (ANSI), генератор кода предупреждает вас, если функция в этой библиотеке использует двойную точность. Чтобы избежать этого предупреждения, установите стандартную математическую библиотеку на C99 (ISO). Смотрите Предупреждения от Преобразования до Кода C/C++ С одинарной точностью.
Для константы, больше, чем 2^24, в вашем оригинале с двойной точностью функция MATLAB, бросает константу к целому типу, который является достаточно большим для постоянного значения. Например:
a = int32(2^24 + 1);
Прежде чем вы сгенерируете код С с одинарной точностью, сгенерируете и запустите версию MEX с одинарной точностью вашего кода MATLAB. Когда вы применяете эту практику, можно обнаружить и устранить проблемы компилятора. Можно проверить, что MEX-функция с одинарной точностью имеет ту же функциональность как код MATLAB.
При использовании codegen с -singleC:
Сгенерируйте MEX с одинарной точностью.
Вызовите coder.runTest, чтобы запустить ваш тестовый файл, заменив вызовы с двойной точностью код MATLAB с вызовами кода MEX с одинарной точностью.
При использовании приложение MATLAB CODER, выполняете Проверку для шага Проблем Во время выполнения с включенным преобразованием с одинарной точностью.
Когда вы будете использовать 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;