В MATLAB® код, который вы хотите преобразовать в одинарную точность, это лучшая практика, чтобы использовать целые числа для индексных переменных. Однако, если код не использует целые числа для индексных переменных, по возможности одноточное преобразование с использованием codegen
с -double2single
пытается обнаружить индексные переменные и выбрать int32
типы для них.
assert
ОператорыНе используйте assert
операторы для определения свойств входных параметров.
Не используйте assert
операторы для тестирования типа переменной. Для примера не используйте
assert(isa(a, 'double'))
Не инициализируйте свойства класса MATLAB в properties
блок. Вместо этого используйте конструктор, чтобы инициализировать свойства класса.
Отделите свой основной алгоритм от другого кода, который вы используете для тестирования и проверки результатов. Создайте тестовый файл, который вызывает ваш алгоритм MATLAB с двойной точностью. Можно использовать тестовый файл для:
Автоматически задайте свойства входных параметров функции верхнего уровня.
Проверьте, что алгоритм двойной точности ведет себя, как вы ожидаете. Поведение с двойной точностью является базовой линией, с которой вы сравниваете поведение версий алгоритма с одной точностью.
Сравните поведение версии алгоритма с одной точностью с базовой линией с двойной точностью.
Для достижения наилучших результатов в тестовом файле должен быть реализован алгоритм в полной рабочей области значений.
Код MATLAB, который вы хотите преобразовать в одинарную точность, должен соответствовать требованиям генерации кода. Смотрите MATLAB Programming для генерации кода.
Чтобы помочь вам идентифицировать неподдерживаемые функции или конструкции в коде MATLAB, добавьте %#codegen
прагма в верхнюю часть файла MATLAB. При редактировании кода в редакторе MATLAB КОД MATLAB Analyzer помечает функции и конструкции, которые не поддерживаются для генерации кода. См. раздел «Проверка кода» в анализаторе кода. Когда вы используете приложение MATLAB Coder™, приложение просматривает ваш код на предмет готовности генерации кода. В функциональной линии можно использовать Генерацию кода Инструмента Readiness. См. Раздел «Проверка кода при помощи инструмента подготовки генерации кода».
Прежде чем вы начнете процесс преобразования с одной точностью, проверьте, что вы можете успешно сгенерировать код из вашего кода MATLAB с двойной точностью. Сгенерируйте и запустите версию MEX своего кода MATLAB с двойной точностью, чтобы вы могли:
Обнаружение и устранение проблем с компиляцией.
Проверьте, что сгенерированный код с одной точностью ведет себя так же, как и код MATLAB с двойной точностью.
Смотрите, зачем тестировать MEX-функции в 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;