реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Умножение и деление в ядрах АРМ
AlexeyT
сообщение Jul 1 2018, 20:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-06-07
Пользователь №: 28 207



Всем доброго дня!

Есть вопрос: какие операции с плавающей точкой выполняются быстрее - умножение или деление?
То есть, как эффективней считать нормировку на ядре Arm:

double a;
double b, c, d;//значения присваиваются в ходе выполнения программы

a = sqrt(b*b + c*c + d*d);

b /= a;
c /= a;
d /= a;

Или:
double a;
double b, c, d;//значения присваиваются в ходе выполнения программы

a = 1./sqrt(b*b + c*c + d*d);

b *= a;
c *= a;
d *= a;

Ядрa: Cortex-M1 и Cortex-M4F (что не особо важно, т.к. расчеты должны быть в формате double и плавающая запятая в Cortex-M4F не поможет)

Спасибо
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 1 2018, 20:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Умножение быстрее. Но на фоне sqrt() вряд ли заметите разницу.
Go to the top of the page
 
+Quote Post
AlexeyT
сообщение Jul 1 2018, 21:48
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-06-07
Пользователь №: 28 207



Цитата(aaarrr @ Jul 1 2018, 23:37) *
Умножение быстрее. Но на фоне sqrt() вряд ли заметите разницу.



Ну у Уоррена есть примеры сверхбыстрого вычисления sqrt для float.

А на сколько быстрее? Сам пока оценить не могу, нет ни компилятора, чтобы ассемблерный листинг посмотреть, ни само собой отладочной платы. Может кто-нибудь дать оценку?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 1 2018, 22:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AlexeyT @ Jul 2 2018, 00:48) *
А на сколько быстрее?

В разы быстрее.
Go to the top of the page
 
+Quote Post
Den64
сообщение Jul 1 2018, 22:56
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Попробуйте в симуляторе проверить или в железе. Должно быть примерно одинаково, но как правило деление медленнее.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 2 2018, 05:21
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(AlexeyT @ Jul 2 2018, 00:48) *
нет ни компилятора

Компилятор вместе со средой можно скачать бесплатно, для маленького кода можно использовать также бесплатно:
https://www.keil.com/download/product/
https://www.iar.com/iar-embedded-workbench/

Есть и другие среды, целиком бесплатные (на базе компилятора GCC).

Внутри любой нормальной среды есть симулятор, тогда отладочная плата для данной ситуации не обязательна.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
BioWolf2000
сообщение Jul 5 2018, 10:27
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 89
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 897



Цитата(Forger @ Jul 2 2018, 08:21) *
Компилятор вместе со средой можно скачать бесплатно, для маленького кода можно использовать также бесплатно:
https://www.keil.com/download/product/
https://www.iar.com/iar-embedded-workbench/

Есть и другие среды, целиком бесплатные (на базе компилятора GCC).

Внутри любой нормальной среды есть симулятор, тогда отладочная плата для данной ситуации не обязательна.


С осциллографом измерения уже делали )

https://blog.classycode.com/esp32-floating-...ce-6e9f6f567a69

В микросекундах



Цитата(AlexeyT @ Jul 1 2018, 23:21) *
Ядрa: Cortex-M1 и Cortex-M4F (что не особо важно, т.к. расчеты должны быть в формате double и плавающая запятая в Cortex-M4F не поможет)

Спасибо


Можно попробовать использовать ядро Cortex-M7 с double precission FPU


--------------------
ex740104/103 БГУИР
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 5 2018, 10:48
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 5 2018, 11:11
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Arlleex @ Jul 5 2018, 13:48) *
Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU...

Ну как откуда? Некий автор в очередной раз успешно измерил скорость работы GPIO laughing.gif
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 5 2018, 11:16
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(jcxz @ Jul 5 2018, 15:11) *
Ну как откуда? Некий автор в очередной раз успешно измерил скорость работы GPIO laughing.gif

Надеюсь все-таки что измерения не верны... Не шибко верю что скорость аппаратных модулей FPU и DPFPU вообще различна (хотя раза в 2 я еще поверю, из-за двойного чтения слов для double вместо одного для float, но и то это мои догадки)... crying.gif

Сообщение отредактировал Arlleex - Jul 5 2018, 11:18
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 5 2018, 11:41
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Arlleex @ Jul 5 2018, 14:16) *
Надеюсь все-таки что измерения не верны...

То что там написано, вообще можно воспринимать как написанное на заборе. Обратите хотя-бы внимание на длительность сложения float и doublle. Не находите странным что float получилось медленнее? biggrin.gif
При этом никакие попытки измерить скорость GPIO (и учесть её влияние) не произведены. Не произведены также попытки учесть влияние кешей и пр.
В мусорку такие "результаты".
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 5 2018, 11:54
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Arlleex @ Jul 5 2018, 13:48) *
Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU...

Вангую кривую библиотеку. Аффтар даже не пишет, чем собирает. У того же GNU Arm Embedded иногда бывают чудеса в библиотеке (newlib).
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 5 2018, 12:01
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



В общем в очередной раз "не железо виновато..."(с) rolleyes.gif
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jul 5 2018, 12:21
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Неделю назад выложили (arm.com) очередную версию arm-none-eabi-gcc с поправленной библиотекой в части тормозовы вычисления функций с одинарной точностью на процессорах без DP FPU.
Цитата
◦Fixed powf/expf/exp2f/logf/log2f performance regression


Сообщение отредактировал Genadi Zawidowski - Jul 5 2018, 12:26
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Jul 5 2018, 16:09
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(Genadi Zawidowski @ Jul 5 2018, 18:21) *
Неделю назад выложили (arm.com) очередную версию arm-none-eabi-gcc с поправленной библиотекой в части тормозовы вычисления функций с одинарной точностью на процессорах без DP FPU.

Какое странное совпадение, неделю назад я выловил последний баг в собственной библиотеке стандартных математических функций для одинарной точности. Но у меня была задача сделать минимальную ошибку вычислений. Значит зря старался?
Кстати - дай плиз ссылку для особоленивых... А то у них там обе ноги сломать можно, пока найдёшь то что нужно.

И ещё.
Вычисление квадратного корня на arm чипе с аппаратной поддержкой 14тиков для одинарной точности, и кажется 36тиков для двойной(не уверен в точности). Это аппаратные инструкции для Cortex-M4-7, которых естественно нету в Cortex-Axx - потому как это отдельная ветка развития ядра, и у них вроде как война.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 10:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016