ТехнологииПрограммирование+2
Машинное обучение и Нейронные сети
22 февраля 2022 · 7,3 K
Борис Державец
Openstack DevOps and IBM/Informix Certified DBA . Phd in Math (Duality of spaces of... · 23 февр 2022
Что тормозит любой даже очень дорогой десктоп ( задача локализована для проблем менее глобальных ) - это HDD любой самый наилучший. HDD (WD,Seagate or whichever you choose ) есть единственное в серверном десктопе механическое вращение не считая куллеров ( где оно во благо ) . Но любой компьютер будет работать со скоростью обусловленной самой медленной своей компоненты - это есть HDD даже с супер кэш-контроллером. По факту дисковое I/O есть наиболее тяжелая и медленная подсистема ЛЮБОГО компьютера на сегодняшний день. Решение стоит недешево , но оно того стоит.
========================================
Понимание технологии SSD: NVMe,SATA,M.2
========================================
NVMe (Non-Volatile Memory Express) — это коммуникационный интерфейс и драйвер, который определяет набор команд и набор функций для твердотельных накопителей на основе PCIe с целью повышения и эффективности производительности и взаимодействия в широком диапазоне корпоративных и клиентских систем.
NVMe был разработан для SSD. Он обменивается данными между интерфейсом хранилища и системным ЦП с помощью высокоскоростных разъемов PCIe, независимо от форм-фактора хранилища. Задачи ввода-вывода, выполняемые с использованием драйверов NVMe, начинаются быстрее, передаются больше данных и завершаются быстрее, чем более старые модели хранения, использующие более старые драйверы, такие как AHCI (расширенный интерфейс хост-контроллера) — функция твердотельных накопителей SATA. Поскольку он был разработан специально для твердотельных накопителей, NVMe становится новым отраслевым стандартом как для серверов в центре обработки данных, так и для клиентских устройств, таких как ноутбуки, настольные ПК и даже игровые консоли следующего поколения. Технология NVMe доступна в нескольких форм-факторах, таких как слот для карты PCIe, M.2 и U.2. Хотя есть твердотельные накопители, использующие SATA, слот PCIe и M.2, которые являются AHCI, а не NVMe.
U.2 — это форм-фактор, который использует исключительно протокол NVMe. Приведенная ниже инфографика поможет вам понять, как все разные форм-факторы и протоколы встречаются в разных типах твердотельных накопителей и в чем разница в производительности.
Повторюсь - NVMe (энергонезависимая память Express) — это интерфейс хост-контроллера и протокол хранения, созданный для ускорения скорости передачи данных между корпоративными и клиентскими системами и твердотельными накопителями по высокоскоростной шине Peripheral Component Interconnect Express компьютера.
Детально см. https://www.kingston.com/en/community/articledetail/articleid/48543
1 эксперт не согласен
Марк Сафронов
возражает
4 июля 2022
Это хороший ответ, но на другой вопрос, который автор вопроса не задавал.
Андрей Бахматов
2 марта 2022
Автор так-то задал вопрос про математические операции, производительность ПЗУ тут каким боком?
Борис Державец
2 марта 2022
@Андрей Бахматов, Во многих случаях операция Диск I/O есть вызов фунции ядра пользовательским процессом либо вход Qemu-kvm процесса в нулевое кольцо защиты. Смотри
QEMU Internals: Big picture overview
Андрей Бахматов
3 марта 2022
@Борис Державец, операции ввода-вывода не образуют подмножество математических операций.
Борис Державец
3 марта 2022
@Андрей Бахматов, Значит сервера СУБД работатют вне связи с дисковой подсистемой Сервера , выполняя весьма сложные математические операции SQL или No-SQL операции. Это новость для Computer Science.
Андрей Бахматов
3 марта 2022
@Борис Державец, вам бы в торговле Amway себя попробовать.
Борис Державец
3 марта 2022
@Андрей Бахматов, Я не знаю , что такое Amway , но у саппорта IBM,Verizon,Reebok ко мне (как Senior DBA ) претензий не было. Пользователи и разработчики часто не понимают, когда достаточно закрытые сервисы обращаются к дисковой подсистеме. Но от них этого никто не требует. Перемножая большие матрицы OS очень часто своппингует, просто Вы не в курсе этого процесса.
Андрей Бахматов
3 марта 2022
@Борис Державец, вопрос : КАКИЕ математические операции являются ресурсоёмкими для компьютеров? Вы сами себе придумали свою версию вопроса и отвечаете на неё.
Борис Державец
3 марта 2022
@Андрей Бахматов, Без понимания архитектуры ОС и ее ассемблера - ответа на этот вопрос дать НЕ ВОЗМОЖНО. Я очень сожалею.
Алексей
5 апреля 2022
@Борис Державец, архитектура ОС не имеет абсолютно никакого значения в данном вопросе! Все арифметические операции сводятся к битовым операциям выполняемым ядром процессора. Операция сложения и операция деления будут занимать разное количество циклов, а стало быть, и разное время. Причем здесь вообще ОС?
Марк Сафронов
Веб-разработчик, геймер, специалист по этике · 5 июл 2022
Классический традиционный ответ конкретно на этот вопрос такой.
Сложение, вычитание и побитовый сдвиг - считаем элементарными в один такт.
Умножение очень дорогое. Целочисленное умножение на степени двойки можно и нужно заменить на побитовый сдвиг.
Деление настолько дорогое, что если существует трюк, чтобы его избежать, стоит применить этот трюк. Целочисленное деление на степени двойки можно и нужно заменить на побитовый сдвиг.
Любая другая математическая операция раскладывается на предыдущие три и нужно смотреть на конкретный алгоритм, чтобы оценить скорость работы. Но вы уже проиграли.
Однако, на современных процессорах, в 2022 году, это больше не такой простой вопрос, как может показаться, а уж ответ на него может быть за пределами понимания обывателя, если честно. Дело в том, что все без исключения современные процессоры - суперскалярные, и операции в них происходят не последовательно, а конвейерами в несколько накладывающихся друг на друга потоков. Плюс к этому сказываются особенности каждой конкретной архитектуры.
Например, для процессоров ARM в разделе Instruction Cycle Timings - Data Operations из ARM7TDMI Technical Reference Manual r4p1 написано, что на ARM операции с данными выполняются за один цикл, "если не происходит сдвигов". И целая таблица прилагается с разными вариантами того, что происходит, если сдвиги приходится делать. (Я невеликий спец по настолько низкоуровневому программированию, но подозреваю, что Data operations включают в себя базовые ADD и тому подобное). Для умножения прямым текстом написано "инструкция умножения использует специальное аппаратное обеспечение", это на тему того, насколько умножение дорогое на процессоре.
На 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.
Это я к тому, что в случае с конкретными архитектурами процессоров понятие "математической операции" может быть размыто. На каких-то процессорах нам придётся сложную операцию делать алгоритмом из нескольких базовых операций, а на каких-то процессорах вся операция уже реализована в камне, и её можно вызвать как единое целое. Со своей собственной латентностью.
И всё это выполняется на конвейере с вероятностью branch misprediction'а, когда процессор потратит время на операцию, которая окажется ненужной.
1 эксперт согласен
Владимир Козлов
подтверждает
13 марта 2023
Вот это правильный ответ.
Денис Васильковский
Пишу код и записываю подкаст · 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).
«Порядок снов» в Телеграме
Перейти на t.me/dreamsorder
Alex_soldier
Простые числа. Преподаватель с 2001, к.т.н. Яндекс.Директ. Интернет-маркетинг с 1997... · 27 февр 2022
Из простейших математических операций главная "боль" разработчиков - деление с плавающей запятой/точкой. На нее даже завязали показатель производительности ЭВМ - FLOPS.
От традиционной схемы "столбиком" отказались, т.к. она чрезмерно расточительная. В свое время процессору в помощь даже добавили дополнительное устройство - математический сопроцессор, который взял на себя эту тяжелую ношу.
Разработчики пытались разными программными и аппаратными ухищрениями ускорить алгоритм. Одно из интересных решений - хранить небольшую таблицу начальных разрядов обратных величин. Правда, в 1994 году в Intel с ней "начудили" и получили Ошибку Pentium FDIV, что обошлось компании почти в полмиллиарда долларов убытка.
3 эксперта согласны
Dmitry Maslov
Инженер путей сообщения – строитель · 23 февр 2022
Поиск решения систем линейных алгебраических уравнений. На больших задачах, размерностью в десятки миллионов, даже на самых современных компьютерах может занимать несколько часов. Ну и разложение на простые множители. На практической невыполнимости этой задачи за рациональное время построена вся современная криптография. Типа, ты можешь расшифровать вообще всё, но у тебя уйдёт на это столько времени, что расшифрованная информация тебе больше уже не понадобится.
3 эксперта согласны
Александр Сотников
Математика физика история · 23 июн 2022
Для железа всё довольно просто : все зависит от процесса - каждая команда имеет определённое время выполнения. При программировании может потребоваться использовать типы данных, с которыми процессор не умеет работать. Понятно, что умножение сводится к циклу сложения и сдвигов, а деление к циклу вычитаний и сдвигов. Поэтому деление и умножение будут более ресурсоемкие, чем сложение и вычитание.
2 эксперта согласны
Пётр Артемьев
ИБ специалист, web разработчик · 24 июн 2022
Поиск определителя матрицы + их перемножение, факторизация целых чисел. Над созданием быстрых алгоритмов для решения этих задач не одна сотня математиков и инженеров трудится. Даже аналоговые вероятностные машины разрабатывают под них до сих пор…
1 эксперт согласен
Алексей Грин
подтверждает
24 июня 2022
Хороший ответ. Дополню ещё тем, что ещё для компьютеров составляют проблему те операции, которые плохо поддаются распаралеливанию.