Некоторые встроенные аппаратные цели исходно поддерживают специальные типы для половины точности, такие как _Float16
и _fp16
типы данных для ARM® компиляторы. Можно использовать MATLAB® Coder™, чтобы сгенерировать нативный код С полуточности для Коры ARM®- Процессоры, которые исходно поддерживают половину точности типы данных с плавающей точкой.
Процесс, чтобы сгенерировать нативную половину кода С следующие:
Укажите новое аппаратное целевое устройство, которое исходно поддерживает половину точности с помощью target
пакет.
Сконфигурируйте настройку генерации кода для половины точности.
Сгенерируйте нативную половину кода типа.
Fixed-Point Designer™ и MATLAB Coder включают предварительно сконфигурированные реализации языка для компиляторов Armclang и GCC. Для других аппаратных целей можно задать пользовательскую реализацию языка на основе спецификаций оборудования.
В этом примере процессор ARM Cortex®-A используется в качестве аппаратной цели. Модель сконфигурирована, чтобы использовать эту цель ARM и GNU набор инструментальных средств компилятора GCC.
Укажите целевой компьютер
Используйте функцию target.create, чтобы создать цель процессора ARM, которая совместима с половиной точности.
arm_half = target.create('Processor','Manufacturer',"Broadcom",'Name','BCM2711 ARM Cortex A72');
Добавьте реализацию языка. Используйте функцию target.get, чтобы получить целевой объект из внутренней базы данных.
li = target.get('LanguageImplementation',"GNU GCC ARM 32-bit");
Замените реализацию языка по умолчанию для Коры ARM с Armclang.
arm_half.LanguageImplementations = li;
Используйте функцию target.add, чтобы добавить целевой объект во внутреннюю базу данных.
target.add(arm_half);
target.add summary: Objects added to internal database for current MATLAB session: target.Processor "Broadcom-BCM2711 ARM Cortex A72" 1 object not added because they already exist.
Откройте код MATLAB который Тип данных Полуточности Использования
edit testNativeHalffp16.m
Сконфигурируйте настройку генерации кода для половины точности
Создайте объект настройки генерации кода.
cfg = coder.config('lib');
Задайте производственный тип аппаратного устройства.
cfg.HardwareImplementation.ProdHWDeviceType = 'Broadcom->BCM2711 ARM Cortex A72';
Выберите набор инструментальных средств, совместимый с выбранным оборудованием.
cfg.Toolchain = 'GNU Tools for ARM Embedded Processors';
Добавьте флаги полуточности для компиляции.
cfg.BuildConfiguration = 'Specify'; cfg.CustomToolchainOptions{4} = '-c -MMD -MP -MF"$(@:%.o=%.dep)" -MT"$@" -O0 -mfp16-format=ieee -mfpu=neon-fp16';
Сгенерируйте код
codegen testNativeHalffp16 -args {half(3)} -launchreport -config cfg
Можно смотреть отчет генерации кода подтвердить, что пользовательские определения типа полуточности используются.
Константы полуточности используют f16
суффикс.
В этом примере процессор ARM Cortex-A используется в качестве аппаратной цели. Модель сконфигурирована, чтобы использовать эту цель ARM и набор инструментальных средств компилятора Armclang.
Используйте target.create
функция, чтобы создать цель процессора ARM, которая совместима с половиной точности.
arm_half = target.create('Processor','Manufacturer',"Broadcom",'Name','ARM Cortex A75');
Добавьте реализацию языка. Используйте target.get
функция, чтобы получить целевой объект из внутренней базы данных.
li = target.get('LanguageImplementation',"Clang ARM 32-bit");
Замените реализацию языка по умолчанию для Коры ARM с Armclang.
arm_half.LanguageImplementations = li;
Используйте target.add
функция, чтобы добавить целевой объект во внутреннюю базу данных.
target.add(arm_half);
Создайте объект настройки генерации кода.
cfg = coder.config('lib');
Задайте производственный тип оборудования.
cfg.HardwareImplementation.ProdHWDeviceType = 'Broadcom->ARM Cortex A75';
Выберите набор инструментальных средств, совместимый с выбранным оборудованием.
cfg.Toolchain = 'Armclang Compiler';
Добавьте флаги полуточности для компиляции.
cfg.BuildConfiguration = 'Specify'; cfg.CustomToolchainOptions{4} = '-c -MMD -MP -MF"$(@:%.o=%.dep)" -MT"$@" -O0 --target=arm-arm-none-eabi -march=armv8.2-a+fp16';
codegen testNativeHalffp16 -args {half(3)} -launchreport -config cfg
В этом примере создайте новую пользовательскую реализацию языка с половиной точности для совместимой цели ARM.
Используйте target.create
функционируйте, чтобы скопировать реализацию языка Коры совместимого ARM ARM.
languageImplementation = target.create('LanguageImplementation','Name','ARM with half',... 'Copy','ARM Compatible-ARM Cortex');
Укажите пользовательскую половину информации и предназначайтесь для определенных заголовков, как дано вашей документацией целевого компьютера. Для получения дополнительной информации смотрите Регистр Новые Аппаратные устройства. Например,
customHalf = target.create('FloatingPointDataType','Name','BCM2711 Half Type', ... 'TypeName','_Float16','LiteralSuffix','f16','Size',16, ... 'SystemIncludes',["arm_fp16.h" "arm_neon.h"]); languageImplementation.DataTypes.NonStandardDataTypes = customHalf;
Предоставьте информацию о своем целевом процессоре. Например,
% Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC pi4a72 = target.create('Processor','Manufacturer','Broadcom','Name','BCM2711');
Добавьте пользовательскую реализацию языка полуточности.
pi4a72.LanguageImplementations = languageImplementation;
Используйте target.add
функция, чтобы добавить целевой объект во внутреннюю базу данных.
target.add(pi4a72);
half
| target.FloatingPointDataType
| target.add
| target.create
| target.get
| target.remove