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