AlexeyT 0 July 1, 2018 Posted July 1, 2018 · Report post Всем доброго дня! Есть вопрос: какие операции с плавающей точкой выполняются быстрее - умножение или деление? То есть, как эффективней считать нормировку на ядре 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 не поможет) Спасибо Quote Share this post Link to post Share on other sites More sharing options...
aaarrr 29 July 1, 2018 Posted July 1, 2018 · Report post Умножение быстрее. Но на фоне sqrt() вряд ли заметите разницу. Quote Share this post Link to post Share on other sites More sharing options...
AlexeyT 0 July 1, 2018 Posted July 1, 2018 · Report post Умножение быстрее. Но на фоне sqrt() вряд ли заметите разницу. Ну у Уоррена есть примеры сверхбыстрого вычисления sqrt для float. А на сколько быстрее? Сам пока оценить не могу, нет ни компилятора, чтобы ассемблерный листинг посмотреть, ни само собой отладочной платы. Может кто-нибудь дать оценку? Quote Share this post Link to post Share on other sites More sharing options...
aaarrr 29 July 1, 2018 Posted July 1, 2018 · Report post А на сколько быстрее? В разы быстрее. Quote Share this post Link to post Share on other sites More sharing options...
Den64 0 July 1, 2018 Posted July 1, 2018 · Report post Попробуйте в симуляторе проверить или в железе. Должно быть примерно одинаково, но как правило деление медленнее. Quote Share this post Link to post Share on other sites More sharing options...
Forger 15 July 2, 2018 Posted July 2, 2018 · Report post нет ни компилятора Компилятор вместе со средой можно скачать бесплатно, для маленького кода можно использовать также бесплатно: https://www.keil.com/download/product/ https://www.iar.com/iar-embedded-workbench/ Есть и другие среды, целиком бесплатные (на базе компилятора GCC). Внутри любой нормальной среды есть симулятор, тогда отладочная плата для данной ситуации не обязательна. Quote Share this post Link to post Share on other sites More sharing options...
BioWolf2000 2 July 5, 2018 Posted July 5, 2018 · Report post Компилятор вместе со средой можно скачать бесплатно, для маленького кода можно использовать также бесплатно: https://www.keil.com/download/product/ https://www.iar.com/iar-embedded-workbench/ Есть и другие среды, целиком бесплатные (на базе компилятора GCC). Внутри любой нормальной среды есть симулятор, тогда отладочная плата для данной ситуации не обязательна. С осциллографом измерения уже делали ) https://blog.classycode.com/esp32-floating-...ce-6e9f6f567a69 В микросекундах Ядрa: Cortex-M1 и Cortex-M4F (что не особо важно, т.к. расчеты должны быть в формате double и плавающая запятая в Cortex-M4F не поможет) Спасибо Можно попробовать использовать ядро Cortex-M7 с double precission FPU Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 55 July 5, 2018 Posted July 5, 2018 · Report post Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU... Quote Share this post Link to post Share on other sites More sharing options...
jcxz 81 July 5, 2018 Posted July 5, 2018 · Report post Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU... Ну как откуда? Некий автор в очередной раз успешно измерил скорость работы GPIO :laughing: Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 55 July 5, 2018 Posted July 5, 2018 (edited) · Report post Ну как откуда? Некий автор в очередной раз успешно измерил скорость работы GPIO :laughing: Надеюсь все-таки что измерения не верны... Не шибко верю что скорость аппаратных модулей FPU и DPFPU вообще различна (хотя раза в 2 я еще поверю, из-за двойного чтения слов для double вместо одного для float, но и то это мои догадки)... :crying: Edited July 5, 2018 by Arlleex Quote Share this post Link to post Share on other sites More sharing options...
jcxz 81 July 5, 2018 Posted July 5, 2018 · Report post Надеюсь все-таки что измерения не верны... То что там написано, вообще можно воспринимать как написанное на заборе. Обратите хотя-бы внимание на длительность сложения float и doublle. Не находите странным что float получилось медленнее? :biggrin: При этом никакие попытки измерить скорость GPIO (и учесть её влияние) не произведены. Не произведены также попытки учесть влияние кешей и пр. В мусорку такие "результаты". Quote Share this post Link to post Share on other sites More sharing options...
scifi 0 July 5, 2018 Posted July 5, 2018 · Report post Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU... Вангую кривую библиотеку. Аффтар даже не пишет, чем собирает. У того же GNU Arm Embedded иногда бывают чудеса в библиотеке (newlib). Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 55 July 5, 2018 Posted July 5, 2018 · Report post В общем в очередной раз "не железо виновато..."(с) :rolleyes: Quote Share this post Link to post Share on other sites More sharing options...
GenaSPB 5 July 5, 2018 Posted July 5, 2018 (edited) · Report post Неделю назад выложили (arm.com) очередную версию arm-none-eabi-gcc с поправленной библиотекой в части тормозовы вычисления функций с одинарной точностью на процессорах без DP FPU. ◦Fixed powf/expf/exp2f/logf/log2f performance regression Edited July 5, 2018 by Genadi Zawidowski Quote Share this post Link to post Share on other sites More sharing options...
AVI-crak 0 July 5, 2018 Posted July 5, 2018 · Report post Неделю назад выложили (arm.com) очередную версию arm-none-eabi-gcc с поправленной библиотекой в части тормозовы вычисления функций с одинарной точностью на процессорах без DP FPU. Какое странное совпадение, неделю назад я выловил последний баг в собственной библиотеке стандартных математических функций для одинарной точности. Но у меня была задача сделать минимальную ошибку вычислений. Значит зря старался? Кстати - дай плиз ссылку для особоленивых... А то у них там обе ноги сломать можно, пока найдёшь то что нужно. И ещё. Вычисление квадратного корня на arm чипе с аппаратной поддержкой 14тиков для одинарной точности, и кажется 36тиков для двойной(не уверен в точности). Это аппаратные инструкции для Cortex-M4-7, которых естественно нету в Cortex-Axx - потому как это отдельная ветка развития ядра, и у них вроде как война. Quote Share this post Link to post Share on other sites More sharing options...