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