STM32F4 — модуль с плавающей запятой (FPU)

Я хотел бы знать, какова цель специального блока FPU, который рекламируется с микроконтроллерами STM32F4?

Цитирую этот сайт :

«Ядро Cortex-M4 оснащено модулем с плавающей запятой (FPU) одинарной точности, который поддерживает все инструкции и типы данных ARM по обработке данных одинарной точности».

Какая была бы разница, если бы этого блока не было в архитектуре? Означает ли это, что мне нужно использовать некоторые специальные библиотеки/функции при выполнении арифметических операций с переменными с плавающей запятой? Спасибо.

Ответы (3)

Да, если у вас нет аппаратного модуля с плавающей запятой, то операции с плавающей запятой должны выполняться с использованием библиотечных функций. Это то, что делается с типичными процессорами Cortex-M3, которые не имеют аппаратной поддержки операций с плавающей запятой, и время выполнения этих операций значительно увеличивается.

Это ключ, производительность повышается, когда есть аппаратный блок, обрабатывающий точки с плавающей запятой, а не просто программная реализация.
Спасибо. Итак, чтобы использовать FPU на STM32F4, мне не нужно писать какой-то специальный код, я просто пишу арифметические операции в обычном стиле C, используя переменные с плавающей запятой?
Да, если ваш компилятор знает, что вы программируете Cortex-M4 с FPU.
@JoeHass Джо, это 1000: 1 или 100: 1 из официального теста или предположения? Цифры, которые я видел, далеко не так высоки (скорее ~ 10: 1).
Это из моих собственных наблюдений на очень небольшой выборке, поэтому я готов признать, что, возможно, видел патологические случаи. Я отредактирую ответ.
Не совсем. Без FPU операции с плавающей запятой должны выполняться программно. Это программное обеспечение не должно исходить из библиотеки.

Если вам нужно выполнять простые операции с плавающей запятой одинарной точности, FPU (при условии, что ваш компилятор поддерживает его и вы его правильно настроили) может ускорить эти операции как минимум на порядок.

Имейте в виду, что если вам нужна двойная точность, SPFPU не поможет. На практике 24 бита мантиссы (32-битное число с плавающей запятой) недостаточно для многих реальных приложений (точный сбор и фильтрация данных, навигация, высококачественное аудио), тогда как двойной или часто даже 32-битной фиксированной точки достаточно. .

Не уверен, ускоряет ли это трансцендентальные SP или нет, я хотел бы увидеть некоторые тесты.

32-битный ARM довольно эффективен в программном обеспечении с плавающей запятой. Набор инструкций позволяет любой инструкции включать сдвиг ствола вправо или влево произвольной длины за 1 цикл. Прирост скорости за счет аппаратного обеспечения FP составляет от 5 до 50 в зависимости от операции и того, как обрабатываются такие вещи, как триггерные функции. Аппаратный DSP с фиксированной точкой в ​​F4 может повысить скорость DSP примерно в 2-4 раза. Звучит не так уж много, но это разница между обновлением скорости двигателя 16 раз в секунду по сравнению с 4. Среди прочего, у него есть MAC (умножитель-накопитель), который выполняет 32x32 + 64 --> 64-битный аккумулятор, и некоторые процессы, которые будут выполнять пару MAC-адресов от 16 до 32 бит. MAC является основой DSP.

Также имеется аналоговый генератор случайных чисел и 3 12-битных АЦП, которые могут обрабатывать 7,2 МГц (я предполагаю, что это плата Discovery). Я предполагаю, что мы увидим много таких вариантов с "-uino".

Re: Преимущество в скорости, когда-то я провел большой анализ. Это было 1 МГц 65C02 по сравнению с тем же с добавленным FPU ADM9511. Несколько вещей в трансценденталах были в 1000 раз быстрее, но многое было только в диапазоне от 10 до 50. В качестве вдохновения для ARM неудивительно, что 6502 был довольно эффективным. Возняк написал всю систему Apple II FP в 256 байт. Числа от 100 до 1000X были хороши для некоторых других 8-битных 8080/Z80. У AVR в Arduino есть несколько приятных трюков с набором инструкций, благодаря которым он намного опережает толпу 8080 в старые времена.