Веб-разработчик, геймер, специалист по этике · 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 . Phd in Math (Duality of spaces of... · 23 февр 2022
Что тормозит любой даже очень дорогой десктоп ( задача локализована для проблем менее глобальных ) - это HDD любой самый наилучший. HDD (WD,Seagate or whichever you choose ) есть единственное в серверном десктопе механическое вращение не считая куллеров ( где оно во благо ) . Но любой компьютер будет работать со скоростью обусловленной самой медленной своей... Читать далее
Простые числа. Преподаватель с 2001, к.т.н. Яндекс.Директ. Интернет-маркетинг с 1997... · 27 февр 2022
Из простейших математических операций главная "боль" разработчиков - деление с плавающей запятой/точкой. На нее даже завязали показатель производительности ЭВМ - FLOPS.
От традиционной схемы "столбиком" отказались, т.к. она чрезмерно расточительная. В свое время процессору в помощь даже добавили дополнительное устройство - математический сопроцессор, который взял на... Читать далее
Инженер путей сообщения – строитель · 23 февр 2022
Поиск решения систем линейных алгебраических уравнений. На больших задачах, размерностью в десятки миллионов, даже на самых современных компьютерах может занимать несколько часов. Ну и разложение на простые множители. На практической невыполнимости этой задачи за рациональное время построена вся современная криптография. Типа, ты можешь расшифровать вообще всё, но у... Читать далее
Для железа всё довольно просто : все зависит от процесса - каждая команда имеет определённое время выполнения. При программировании может потребоваться использовать типы данных, с которыми процессор не умеет работать. Понятно, что умножение сводится к циклу сложения и сдвигов, а деление к циклу вычитаний и сдвигов. Поэтому деление и умножение будут более ресурсоемкие... Читать далее
Поиск определителя матрицы + их перемножение, факторизация целых чисел. Над созданием быстрых алгоритмов для решения этих задач не одна сотня математиков и инженеров трудится. Даже аналоговые вероятностные машины разрабатывают под них до сих пор…