В коде 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;