LINUX.ORG.RU
ФорумTalks

stm32f4+dsp+fpu

 ,


0

2

Всех приветствую.

Возникла идея на базе stm32f4 запилить специальную числодробилку.
В связи с чем вопрос есть ли какие-то подводные камни по использованию FPU/DSP из GCC-шного компилятора? Будет ли заиспользован аппаратный блок FPU если я просто напишу перемножение двух float-ов? Или нужен спец компилятор со спецнастройками?

★★★★★

Последнее исправление: yax123 (всего исправлений: 1)

Ответ на: комментарий от yax123

Судя по багрепортам, некоторые инструкции нашептывать будешь ты лично. Большая часть поддерживается, но кое-что отваливается. Так что сам решай.

aiqu6Ait ★★★★
()
Ответ на: комментарий от aiqu6Ait

Большая часть поддерживается, но кое-что отваливается.

Что, даже проприетарщики не осилили? Какой-нидь ментор не запилил полную поддержку stm32?

yax123 ★★★★★
() автор топика

Наверняка это будут какие-то либы, которые ты подключаешь и пользуешься в виде float result = fpu_multiply(a, b);

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

Наверняка это будут какие-то либы, которые ты подключаешь и пользуешься в виде float result = fpu_multiply(a, b);

Как бы это наверняка проверить?

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

В гугле поискать. Вообще, что касается арифметики с флоатами, то это флаг gcc. -mfloat-abi=hard вроде как. Для функций цифровой обработки сигналов надо искать библиотеку на сайте ST, она будет написана с вызовом всех нужных команд на асме.

prischeyadro ★★★☆☆
()
Последнее исправление: prischeyadro (всего исправлений: 1)
Ответ на: комментарий от prischeyadro

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

Да, есть у них такая библиотечка.

А вот еще такая вот темка. Хочется мне вычисления делать не в float, а double (есть уже готовый код, чтобы не переписывать). Можно ли как-то извернуться и максимально его убыстрить использованием FPU. Или если в коде встретился double то автоматом втыкается софт-реализация?

yax123 ★★★★★
() автор топика
Последнее исправление: yax123 (всего исправлений: 1)
Ответ на: комментарий от yax123

STM double не умеет аппаратно. Так что по-любому переписывание. С минимальными затратами — это, по-моему, пройтись автозаменой s/double/float/g.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

STM double не умеет аппаратно.

Это понятно. Хочется чтобы софтовая библиотека для обработки double использовала (и желательно по максимуму) FPU. Чтобы было не так быстро как с чистым float, но быстрей чем полностью софтварно.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Мне кажется, это не взлетит ни в каком виде. float и double с их представлением в виде экспоненты и мантиссы слишком прибиты гвоздями к конкретной аппаратной реализации.

prischeyadro ★★★☆☆
()

Все будет работать как нужно из каробки, нужно только компилятору указать использовать hard ABI и тип FPU.

alexru ★★★★
()

на базе stm32f4 запилить специальную числодробилку.

Я думаю, тебе лучше подыскать специализированный DSP под задачу.

Quasar ★★★★★
()
Ответ на: комментарий от Quasar

Я думаю, тебе лучше подыскать специализированный DSP под задачу.

Это что за читерство. Давайте в каждую дешевую колобашку по шарку впердолим (пофиг что будет стоить как вертолет).

Задача в том чтобы сделать все на конкретном процессоре. Возможно хватит ресурсов чтобы и софтварно сделать (математику подпилить), но хочется иметь запас производительности.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от alexru

Да, но это никак не поможет ускорять вычисления на double при помощи набора команд для float. Если это каким-то образом возможно (да ещё и не в вакууме, а на практике) — с интересом почитаю.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от alexru

Как я понимаю обработка плавающей точки сводится к целочисленной арифметике отдельно над мантиссой и отдельно над порядком, которые потом опять упаковываются в вещественное. Ну и с обработкой всяких «не чисел», бесконечностей и т д. С другой стороны, неужели нет варианта когда зная особенности обработки float, нельзя выдрипнуться так чтобы, условно, один double разложить на пару-тройку float (программно), а потом аппаратно получившиеся float обрабатываются и потом обратно программно пакуются в double. Весьма вероятно, что такой алгоритм будет быстрей чем чисто программная реализация. А может и не быть. Вот я ищу такой вариант.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Я 100% сказать не могу можно так или нельзя. Но то факт, что ничего подобного не существует наводит на мысли, что нельзя.

В противном случае GCC это уже бы поддерживал давно.

Ну и для поддержки double-ов нужно на Cortex-M7 смотреть. Это по сути тот же M4, только с наворотами. Реальных чипов в этим ядром не так много, но они начинают появляться.

alexru ★★★★
()
Ответ на: комментарий от alexru

Ну и для поддержки double-ов нужно на Cortex-M7 смотреть

где cказано, что M7 умеет double?

DocID027590 Rev 1:

Description The STM32F745xx and STM32F746xx devices are based on the high-performance ARM® Cortex®-M7 32-bit RISC core operating at up to 216 MHz frequency. The Cortex®-M7 core features a single floating point unit (SFPU) precision which supports all ARM® single- precision data-processing instructions and data types. It also implements a full set of DSP instructions and a memory protection unit (MPU) which enhances the application security.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Это конфигурируется производителем чипа. Atmel SAM S70/V70 поддерживают и float и double.

alexru ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.