AlexeyT 0 1 июля, 2018 Опубликовано 1 июля, 2018 · Жалоба Всем доброго дня! Есть вопрос: какие операции с плавающей точкой выполняются быстрее - умножение или деление? То есть, как эффективней считать нормировку на ядре 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 не поможет) Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 1 июля, 2018 Опубликовано 1 июля, 2018 · Жалоба Умножение быстрее. Но на фоне sqrt() вряд ли заметите разницу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexeyT 0 1 июля, 2018 Опубликовано 1 июля, 2018 · Жалоба Умножение быстрее. Но на фоне sqrt() вряд ли заметите разницу. Ну у Уоррена есть примеры сверхбыстрого вычисления sqrt для float. А на сколько быстрее? Сам пока оценить не могу, нет ни компилятора, чтобы ассемблерный листинг посмотреть, ни само собой отладочной платы. Может кто-нибудь дать оценку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 1 июля, 2018 Опубликовано 1 июля, 2018 · Жалоба А на сколько быстрее? В разы быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 1 июля, 2018 Опубликовано 1 июля, 2018 · Жалоба Попробуйте в симуляторе проверить или в железе. Должно быть примерно одинаково, но как правило деление медленнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 2 июля, 2018 Опубликовано 2 июля, 2018 · Жалоба нет ни компилятора Компилятор вместе со средой можно скачать бесплатно, для маленького кода можно использовать также бесплатно: https://www.keil.com/download/product/ https://www.iar.com/iar-embedded-workbench/ Есть и другие среды, целиком бесплатные (на базе компилятора GCC). Внутри любой нормальной среды есть симулятор, тогда отладочная плата для данной ситуации не обязательна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BioWolf2000 3 5 июля, 2018 Опубликовано 5 июля, 2018 · Жалоба Компилятор вместе со средой можно скачать бесплатно, для маленького кода можно использовать также бесплатно: 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 5 июля, 2018 Опубликовано 5 июля, 2018 · Жалоба Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 5 июля, 2018 Опубликовано 5 июля, 2018 · Жалоба Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU... Ну как откуда? Некий автор в очередной раз успешно измерил скорость работы GPIO :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 5 июля, 2018 Опубликовано 5 июля, 2018 (изменено) · Жалоба Ну как откуда? Некий автор в очередной раз успешно измерил скорость работы GPIO :laughing: Надеюсь все-таки что измерения не верны... Не шибко верю что скорость аппаратных модулей FPU и DPFPU вообще различна (хотя раза в 2 я еще поверю, из-за двойного чтения слов для double вместо одного для float, но и то это мои догадки)... :crying: Изменено 5 июля, 2018 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 5 июля, 2018 Опубликовано 5 июля, 2018 · Жалоба Надеюсь все-таки что измерения не верны... То что там написано, вообще можно воспринимать как написанное на заборе. Обратите хотя-бы внимание на длительность сложения float и doublle. Не находите странным что float получилось медленнее? :biggrin: При этом никакие попытки измерить скорость GPIO (и учесть её влияние) не произведены. Не произведены также попытки учесть влияние кешей и пр. В мусорку такие "результаты". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 5 июля, 2018 Опубликовано 5 июля, 2018 · Жалоба Интересно откуда такая разница в вычислениях корня float и double с аппаратным double-precision FPU... Вангую кривую библиотеку. Аффтар даже не пишет, чем собирает. У того же GNU Arm Embedded иногда бывают чудеса в библиотеке (newlib). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 5 июля, 2018 Опубликовано 5 июля, 2018 · Жалоба В общем в очередной раз "не железо виновато..."(с) :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 5 июля, 2018 Опубликовано 5 июля, 2018 (изменено) · Жалоба Неделю назад выложили (arm.com) очередную версию arm-none-eabi-gcc с поправленной библиотекой в части тормозовы вычисления функций с одинарной точностью на процессорах без DP FPU. ◦Fixed powf/expf/exp2f/logf/log2f performance regression Изменено 5 июля, 2018 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 5 июля, 2018 Опубликовано 5 июля, 2018 · Жалоба Неделю назад выложили (arm.com) очередную версию arm-none-eabi-gcc с поправленной библиотекой в части тормозовы вычисления функций с одинарной точностью на процессорах без DP FPU. Какое странное совпадение, неделю назад я выловил последний баг в собственной библиотеке стандартных математических функций для одинарной точности. Но у меня была задача сделать минимальную ошибку вычислений. Значит зря старался? Кстати - дай плиз ссылку для особоленивых... А то у них там обе ноги сломать можно, пока найдёшь то что нужно. И ещё. Вычисление квадратного корня на arm чипе с аппаратной поддержкой 14тиков для одинарной точности, и кажется 36тиков для двойной(не уверен в точности). Это аппаратные инструкции для Cortex-M4-7, которых естественно нету в Cortex-Axx - потому как это отдельная ветка развития ядра, и у них вроде как война. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться