exponenta event banner

Рекомендации по преобразованию с одной точностью

Использовать целые числа для переменных индекса

В коде MATLAB ®, который требуется преобразовать в единичную точность, рекомендуется использовать целые числа для индексных переменных. Однако, если код не использует целые числа для индексных переменных, когда возможно преобразование с одной точностью с использованиемcodegen с -double2single пытается обнаружить переменные индекса и выбрать int32 типы для них.

Предельное использование assert Заявления

  • Не использовать assert для определения свойств входных аргументов.

  • Не использовать assert для проверки типа переменной. Например, не использовать

    assert(isa(a, 'double'))

Инициализация свойств класса MATLAB в конструкторе

Не инициализировать свойства класса MATLAB в properties блок. Вместо этого используйте конструктор для инициализации свойств класса.

Предоставить тестовый файл, вызывающий функцию MATLAB

Отделите основной алгоритм от другого кода, используемого для тестирования и проверки результатов. Создайте тестовый файл, вызывающий алгоритм MATLAB двойной точности. Тестовый файл можно использовать для:

  • Автоматически определять свойства входов функций верхнего уровня.

  • Убедитесь, что алгоритм двойной точности работает так, как ожидалось. Поведение двойной точности - это базовая линия, по которой сравнивается поведение версий алгоритма с одной точностью.

  • Сравните поведение версии алгоритма с одной точностью с базовой линией с двойной точностью.

Для достижения наилучших результатов тестовый файл должен использовать алгоритм в полном рабочем диапазоне.

Подготовка кода для создания кода

Код MATLAB, который требуется преобразовать в единую точность, должен соответствовать требованиям к созданию кода. См. раздел Программирование MATLAB для генерации кода.

Чтобы определить неподдерживаемые функции или конструкции в коде MATLAB, добавьте %#codegen pragma в верхней части файла MATLAB. При редактировании кода в редакторе MATLAB анализатор кода MATLAB помечает функции и конструкции, которые не поддерживаются при создании кода. См. раздел Проверка кода с помощью анализатора кода. При использовании приложения MATLAB Coder™ приложение просматривает код для обеспечения готовности к созданию кода. В строке функции можно использовать инструмент готовности к созданию кода. См. раздел Проверка кода с помощью инструмента готовности к созданию кода.

Проверка кода с двойной точностью перед преобразованием с одной точностью

Перед началом процесса преобразования с одинарной точностью убедитесь в том, что можно успешно создать код из кода MATLAB с двойной точностью. Создайте и запустите MEX-версию кода MATLAB с двойной точностью, чтобы можно было:

  • Обнаружение и устранение проблем компиляции.

  • Убедитесь, что созданный код с одинарной точностью ведет себя так же, как код MATLAB с двойной точностью.

См. раздел Зачем тестировать функции MEX в MATLAB?.

Рекомендации по созданию кода C/C + + с одинарной точностью

При создании кода C/C + + с одной точностью с помощью приложения MATLAB Coder илиcodegen с -singleC , следуйте следующим передовым практикам:

Использование библиотеки стандартных математических данных C99

При создании библиотек C/C + + или исполняемых файлов по умолчанию генератор кода использует стандартную математическую библиотеку C99 (ISO). При создании кода C/C + + с одинарной точностью с использованием библиотеки C89/C90 (ANSI) генератор кода предупреждает, если функция в этой библиотеке использует двойную точность. Чтобы избежать этого предупреждения, задайте для стандартной библиотеки формул значение C99 (ISO). См. раздел Предупреждения от преобразования в код C/C + + с одинарной точностью.

Литая большая двойная константа в целое число

Для константы, превышающей 2^24, в исходной функции MATLAB с двойной точностью приведите константу к целому типу, который достаточно велик для значения константы. Например:

a = int32(2^24 + 1);

Создание и выполнение MEX с одинарной точностью перед созданием кода C/C + + с одинарной точностью

Перед созданием кода С с одной точностью создайте и запустите версию кода MATLAB с одной точностью MEX. Следуя этой практике, можно обнаруживать и исправлять проблемы компилятора. Можно проверить, что функция MEX с одной точностью имеет те же функциональные возможности, что и код MATLAB.

Если вы используете codegen с -singleC:

  1. Создайте MEX с одинарной точностью.

  2. Звонить coder.runTest чтобы запустить тестовый файл, замените вызовы кода MATLAB с двойной точностью вызовами кода MEX с одной точностью.

При использовании приложения MATLAB Coder выполните шаг Проверка ошибок времени выполнения с включенным преобразованием с одинарной точностью.

Рекомендации по созданию кода MATLAB с одинарной точностью

При использовании 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;

Связанные темы