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