Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какие математические операции в программировании самые ресурсоёмкие для компьютеров? Для софта и для железа.

ТехнологииПрограммирование+2
  · 6,3 K
Пишу код и записываю подкаст  · 22 июн 2022  · dreamsorder.simplecast.com
Софт
Все компьютерные программы одинаково простые (или сложные, как посмотреть), потому что состоят из довольно ограниченного набора элементарных операций. Их традиционно делят на следующие группы:
  • 📼 сохранения и загрузки из памяти 
  • 🦘перехода между разными частями программы в зависимости от условий 
  • 🧮 собственно математических операций изменения данных: от очевидных сложения-умножения-деления, до более экзотических вроде «исключающего ИЛИ» и векторизованного умножения с накоплением и насыщением.
Каждую из таких операций производитель процессора сопровождает маленькой электрической схемой (или микропрограммой прямо внутри процессора), позволяющей эту операцию произвести. Это называется аппаратной поддержкой. И поскольку изготовитель процессора решает чтó именно он добавит внутрь своей новой железки, то спектр поддерживаемых операций в зависимости от устройства очень разнится. В особо запущенном случае мне приходилось программировать на процессоре, у которого даже операции деления не было. Если бы такая операция была, то разделить одно число на другое — плёвое дело, микросекунда работы. А вот если её нет… Придётся конвертировать одно деление в сотни, а то и тысячи инструкций сложения-вычитания-умножения.
Так что с точки зрения софта ответ простой: если в процессоре нет соответствующего аппаратного блока, который может выполнить нужную операцию, то, кажется, у программиста проблемы.
Железо
Однако производители железа обычно добренькие и прислушиваются к желаниям потребителей и со временем добавляют всё больше и больше фишек прямиком в процессор. Вот лишь несколько вещей, которые на моей памяти нашли свою путь под одну крышку с центральным процессором:
  • быстрая кэш-память. Да, когда-то внутри процессора было памяти не больше, чем в бухгалтерском калькуляторе, и приходилось за любым чихом ходить «наружу».
  • со-процессор для операций с дробными числами (Floating Point Unit, FPU). Процессор моего первого ПК был из первой серии Intel, в которой они сумели запихнуть целый FPU внутрь процессора, вместо отдельной микросхемы серии x87.
  • встроенная внутрь процессора видеокарта может и не впечатлит привередливого геймера, но будет достаточна для большинства пользователей ПК. AMD настолько довольна получившимся результатом, что теперь называет свои процессоры не иначе как APU (Accelerated processor unit, разогнанный процессор 🤷‍♂️)
  • аудио-видео кодеки. Я застал времена, когда единственное ядро процессора разгонялось до 80%-нагрузки, проигрывая свежий MP4-рип роскошных 720 на 480 пикселей качества. Мой нынешний ноутбук может декодировать 30 (!) 4K видео потоков в реальном времени. А нагрузка всех остальных отделов процессора останется на нуле.
  • нейронные процессоры. Это такие специализированные железки, чтобы энергоэффективно исполнять некоторые матричные операции, используемые для задач распознавания картинок и текста. Их интеграция как раз сейчас в процессе, и в массовый сегмент они заходят в первую очередь на мобильных устройствах.
Бесконечная специализация
Как видно из этого рассказа, софт и железо на всём протяжении истории вычислительной техники идут рука об руку. Когда-то в основе любого компьютера был простейший калькулятор, умеющий только в плюс-минус-умножить. С годами процессоры обрастают всё большим количеством узкоспециализированных узлов: от аппаратных шейдеров и трассировщиков лучей, до видео-кодеков H265 и нейро-сетевых моделей. В наиболее общем виде процесс взаимного влияния (или «программно-аппаратной конвергенции», если хочется звучать красиво) выглядит так:
  1. появляется сложная математическая теория, которая решает насущную практическую задачу, кто-то получает (не одну) докторскую
  2. программисты превращают теорию в программу, которая исполняется целиком на ЦПУ и съедает все его ресурсы (или память, или и то, и другое)
  3. специалисты по железу выпускают (относительно) внешнее устройство, внутрь которого зашито аппаратное решение этой задачи
  4. на следующем цикле аппаратное решение появляется в виде опции прямо внутри ЦПУ и за бóльшие деньги, в сравнении с обычной версией
  5. наконец, подавляющее большинство ЦПУ выпускается с аппаратным модулем и это воспринимается как норма.
Другими словами, обычный цикл внедрения инновации. Интересно в этой истории то, что старые инновации зачастую остаются с нами и обогащают пространство возможностей компьютеров.
Так что самая трудная задача и для софта, и для железа эта та, которую ещё не успели решить (то есть, та, что на этапах 1-2-3).
«Порядок снов» в ТелеграмеПерейти на t.me/dreamsorder
Веб-разработчик, геймер, специалист по этике  · 5 июл 2022
Классический традиционный ответ конкретно на этот вопрос такой. 1. Сложение, вычитание и побитовый сдвиг - считаем элементарными в один такт. 2. Умножение очень дорогое. Целочисленное умножение на степени двойки можно и нужно заменить на побитовый сдвиг. 3. Деление настолько дорогое, что если существует трюк, чтобы его избежать, стоит применить этот трюк. Целочисленное... Читать далее
1 эксперт согласен
Вот это правильный ответ.
Openstack DevOps and IBM/Informix Certified DBA . Phd in Math (Duality of spaces of...  · 23 февр 2022
Что тормозит любой даже очень дорогой десктоп ( задача локализована для проблем менее глобальных ) - это HDD любой самый наилучший. HDD (WD,Seagate or whichever you choose ) есть единственное в серверном десктопе механическое вращение не считая куллеров ( где оно во благо ) . Но любой компьютер будет работать со скоростью обусловленной самой медленной своей... Читать далее
1 эксперт не согласен
Это хороший ответ, но на другой вопрос, который автор вопроса не задавал.
Простые числа. Преподаватель с 2001, к.т.н. Яндекс.Директ. Интернет-маркетинг с 1997...  · 27 февр 2022
Из простейших математических операций главная "боль" разработчиков - деление с плавающей запятой/точкой. На нее даже завязали показатель производительности ЭВМ - FLOPS. От традиционной схемы "столбиком" отказались, т.к. она чрезмерно расточительная. В свое время процессору в помощь даже добавили дополнительное устройство - математический сопроцессор, который взял на... Читать далее
3 эксперта согласны
Инженер путей сообщения – строитель  · 23 февр 2022
Поиск решения систем линейных алгебраических уравнений. На больших задачах, размерностью в десятки миллионов, даже на самых современных компьютерах может занимать несколько часов. Ну и разложение на простые множители. На практической невыполнимости этой задачи за рациональное время построена вся современная криптография. Типа, ты можешь расшифровать вообще всё, но у... Читать далее
3 эксперта согласны
Математика физика история   · 23 июн 2022
Для железа всё довольно просто : все зависит от процесса - каждая команда имеет определённое время выполнения. При программировании может потребоваться использовать типы данных, с которыми процессор не умеет работать. Понятно, что умножение сводится к циклу сложения и сдвигов, а деление к циклу вычитаний и сдвигов. Поэтому деление и умножение будут более ресурсоемкие... Читать далее
2 эксперта согласны
ИБ специалист, web разработчик  · 24 июн 2022
Поиск определителя матрицы + их перемножение, факторизация целых чисел. Над созданием быстрых алгоритмов для решения этих задач не одна сотня математиков  и инженеров трудится. Даже аналоговые вероятностные машины разрабатывают под них до сих пор…
1 эксперт согласен
Хороший ответ. Дополню ещё тем, что ещё для компьютеров составляют проблему те операции, которые плохо поддаются ра... Читать дальше