Веб-разработчик, геймер, специалист по этике · 5 июл 2022
Классический традиционный ответ конкретно на этот вопрос такой.
Сложение, вычитание и побитовый сдвиг - считаем элементарными в один такт.
Умножение очень дорогое. Целочисленное умножение на степени двойки можно и нужно заменить на побитовый сдвиг.
Деление настолько дорогое, что если существует трюк, чтобы его избежать, стоит применить этот трюк. Целочисленное деление на степени двойки можно и нужно заменить на побитовый сдвиг.
Любая другая математическая операция раскладывается на предыдущие три и нужно смотреть на конкретный алгоритм, чтобы оценить скорость работы. Но вы уже проиграли.
Однако, на современных процессорах, в 2022 году, это больше не такой простой вопрос, как может показаться, а уж ответ на него может быть за пределами понимания обывателя, если честно. Дело в том, что все без исключения современные процессоры - суперскалярные, и операции в них происходят не последовательно, а конвейерами в несколько накладывающихся друг на друга потоков. Плюс к этому сказываются особенности каждой конкретной архитектуры.
На Intel x86_64 документ по производительности под названием Intel® 64 and IA-32 Architectures Optimization Reference Manual почти что засекречен, но если до него добраться вот с этой страницы, то в разделе Appendix D.3.1 Latency and Throughput with Register Operands можно увидеть таблицу, которая полностью совпадает с примерными правилами, которые я выше указал.
При этом учтите, что предыдущие таблицы от D-1 до D-16 упоминают невероятное количество различных оптимизированных инструкций для конкретных математических операций - векторизированное сложение, умножение, SSE-шные расширения для всего подряд и тому подобное. Например, на интеловской архитектуре есть инструкция, которая может быть использована для перемножения комплексных чисел. Да, это всё равно четыре умножения и два сложения, вот только реализованы они на кристалле, и выполнятся быстрее чем четыре IMUL и два ADC.
Это я к тому, что в случае с конкретными архитектурами процессоров понятие "математической операции" может быть размыто. На каких-то процессорах нам придётся сложную операцию делать алгоритмом из нескольких базовых операций, а на каких-то процессорах вся операция уже реализована в камне, и её можно вызвать как единое целое. Со своей собственной латентностью.
Софт
Все компьютерные программы одинаково простые (или сложные, как посмотреть), потому что состоят из довольно ограниченного набора элементарных операций. Их традиционно делят на следующие группы:
- 📼 сохранения и загрузки из... Читать далее
Openstack DevOps and IBM/Informix Certified DBA... · 23 февр 2022
Что тормозит любой даже очень дорогой десктоп ( задача локализована для проблем менее глобальных ) - это HDD любой самый наилучший. HDD (WD,Seagate or whichever you choose ) есть единственное в серверном десктопе... Читать далее
Из простейших математических операций главная "боль" разработчиков - деление с плавающей запятой/точкой. На нее даже завязали показатель производительности ЭВМ - FLOPS.
От традиционной схемы "столбиком" отказались, т.к. она... Читать далее
Инженер путей сообщения – строитель · 23 февр 2022
Поиск решения систем линейных алгебраических уравнений. На больших задачах, размерностью в десятки миллионов, даже на самых современных компьютерах может занимать несколько часов. Ну и разложение на простые множители. На... Читать далее
Для железа всё довольно просто : все зависит от процесса - каждая команда имеет определённое время выполнения. При программировании может потребоваться использовать типы данных, с которыми процессор не умеет работать. Понятно... Читать далее
Поиск определителя матрицы + их перемножение, факторизация целых чисел. Над созданием быстрых алгоритмов для решения этих задач не одна сотня математиков и инженеров трудится. Даже аналоговые вероятностные машины разрабатывают... Читать далее