|
Умножение и деление в ядрах АРМ |
|
|
|
Jul 1 2018, 20:21
|
Участник

Группа: Участник
Сообщений: 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 не поможет)
Спасибо
|
|
|
|
|
Jul 1 2018, 21:48
|
Участник

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

|
Цитата(aaarrr @ Jul 1 2018, 23:37)  Умножение быстрее. Но на фоне sqrt() вряд ли заметите разницу. Ну у Уоррена есть примеры сверхбыстрого вычисления sqrt для float. А на сколько быстрее? Сам пока оценить не могу, нет ни компилятора, чтобы ассемблерный листинг посмотреть, ни само собой отладочной платы. Может кто-нибудь дать оценку?
|
|
|
|
|
Jul 2 2018, 05:21
|

Профессионал
    
Группа: Свой
Сообщений: 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). Внутри любой нормальной среды есть симулятор, тогда отладочная плата для данной ситуации не обязательна.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 5 2018, 10:27
|
Частый гость
 
Группа: Свой
Сообщений: 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 БГУИР
|
|
|
|
|
Jul 5 2018, 16:09
|
Частый гость
 
Группа: Участник
Сообщений: 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 - потому как это отдельная ветка развития ядра, и у них вроде как война.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|