Два ядра, два гига, игровая видеокарта: как мы получили кучу вычислительных ресурсов в XXI веке

Часть вторая. Интегральные схемы и наши дни

В прошлой части был рассказ про что-то очень древнее. Может, поговорим о дальнейшем прогрессе?

Интегральные схемы

Помните, я там рассказывал про транзисторы и печатные платы, на которые в том числе эти самые транзисторы и наносили? В общем, выглядело это и даже звучало вполне неплохо, но когда у тебя несколько шкафов тупо забиты сплошными транзисторами и резисторами и ещё хер знает чем, внутрь часто смотреть не хочется. Вы когда-нибудь плату вообще неисправную прозванивали? Безумно увлекательное занятие (нет).

Короче, самые пытливые умы как всегда нашли себе развлечений, и к началу 1960х была изобретена интегральная схема. Джек Килби за это даже Нобелевку получил, так-то!

Суть в чем: представьте, что вы можете размещать нужные элементы не на печатной плате, а прямо на кремниевой полупроводниковой подложке? Да, немного надо запариться с тем, чтобы как-то на м-а-а-а-ленькой пластинке разметить и закатать проводники, полупроводники и диэлектрики, но каков результат! Если хочется подробностей, можно почитать про планарную технологию хотя бы в Википедии.

Просто, понятно, высокотехнологично

Впрочем, еще догадались сделать гибридную интегральную схему – это когда у тебя в сборке и кремниевая подложка, и всякие внешние полупроводники. Так сделала компания IBM, потому что сомневалась в надежности и доступности новомодной технологии. Венцом такого подхода стала платформа IBM System/360. В СССР параллельно запустили программу ЕС ЭВМ, и отечественные мейнфреймы были совместимы с этой платформой. Ну вы знаете, как у нас с этим бывает.

Теперь компьютеры стали еще «компактнее», например, блок с центральным процессором занимал всего лишь небольшой шкаф.

System/360. Funny size and great performance, mate!

С характеристиками все как обычно – быстрее, выше, сильнее. Писать код для этого стало приятнее, хочешь – на ассемблере битики перекладывай, хочешь – языки высокого уровня из терминала – вот тебе какой-нибудь PL/1 и функция поиска всех подстрок:

find_strings: procedure options (main);
   declare pattern character (100) varying;
   declare line character (100) varying;
   declare line_no fixed binary;

   on endfile (sysin) stop;

   get edit (pattern) (L);
   line_no = 1;
   do forever;
      get edit (line) (L);
      if index(line, pattern) > 0 then
         put skip list (line_no, line);
      line_no = line_no + 1;
   end;

end find_strings;

Словом, очередной важный виток в технологиях мы прошли.

Микропроцессоры

Вы же не потеряли контекст, какого там размера были процессоры? Сравнительно большие такие, да. С холодильничек. А еще была речь про транзисторы. Угадайте, что произошло? Ну конечно, всё в очередной раз поменялось!

Короче, всё как обычно: прогресс не стоит на месте, и вместо биполярных транзисторов, которые управляются током, появились транзисторы с изолированным затвором. Они управляются напряжением, так как затвор изолирован от стока и истока, и ещё обладают очень высоким входным сопротивлением. Такие транзисторы еще называются МОП-транзисторами («металл-оксид-полупроводник»).

Помните, мы уже взрослые ребята, и транзисторы умеем делать прям на кремниевой подложке! Это очень важный момент.

Охуенно понятная структура МОП-транзистора

Плюс ко всему, создатели МОП-транзистора разработали метод проектирования схем произвольной логики. Если коротко, это когда ты теперь отказываешься от микрокода, находящегося где-то в памяти, а просто фигачишь логические элементы. Было еще много клевых открытий, и в 1971 году появился первый 4-битный микропроцессор: его величество Intel 4004. Создатели смогли уместить весьма сложную логику на одной маленькой интегральной схеме. Успех!

Дальше дело завертелось. Вслед за 4-битными микропроцессорами пошли восьмибитки. Intel 8080, его братишка Zilog Z80, на котором твой батя собрал свой первый клон Spectrum’а, MOS 6502, на котором Стив Возняк собрал Apple I. Все эти процессоры позволили создавать действительно персональные микрокомпьютеры, на которых, что очень важно, можно было решать свои личные задачи. Для конца 1970-х это было вообще чем-то крышесносным.

ZX Spectrum, подключенный к телику. Ставь лайк если тебе за 50 и ты вспомнил юность

Очевидно, усложнение и расширение архитектуры продолжалось: вот процессор начинает жевать по 16-разрядов, и у тебя 8086й, потом по 32, и это i386.

4 бита, 8 бит, 16, да какая разница?

Чем больше бит за один раз может прогрузить или обработать в памяти у себя процессор, тем большее количество данных он сможет обработать за одну операцию.

Фрагмент данных фиксированного размера, который можно обработать как единое целое, называется машинным словом. Именно величина машинного слова и подразумевается под разрядностью процессора.

Кстати, знаете вот это словосочетание «IBM PC»? Его изображение идет обложкой к этой статье. Первую версию сея компьютера компания IBM создала на базе процессора Intel 8088 и сделала настолько массовым, что наши нынешние железки – прямые его потомки. Разве что вместо MS-DOS теперь стоит винда.

Автор текста хардкорит за IBM PC XT в далеком 1996м

В i486 уже не стали выносить отдельно математический сопроцессор, а разместили его прям в CPU, кроме совсем уж бичевой SX-серии.

Что такое математический сопроцессор?

Удивительно, но как-то из коробки процессор не умеет прям делить и умножать числа, считать синусы/косинусы и прочую хуйню. Потому что что ты можешь изначально в двоичной системе сделать? Сложение, вычитание, и побитовые сдвиги. Маловато.

Кто smart cookie и не прогуливал уроки информатики, тот помнит, что бывает форма представления числа в виде мантиссы и порядка – такое число называется числом с плавающей точкой.

Чтобы выписывать всякие математические кренделясы над такими числами было как-то попроще, рядом с CPU как раз и размещали FPU (floating-point unit), то бишь математический сопроцессор, который был заточен под это непотребство.

Как прогали?

Ой, ну тут началось прямо массовое увлечение! Тут были те самые вещи, которые наверняка помнят деды из курилки.

Кто-то просто писал на QBasic, кто-то хардкорил низкоуровневые вещи на Ассемблере и Си. То самое настоящее программирование, про которое любят рассказывать олдфаги. Появлялись солидные IDE, чтобы писать на всякой всячине типа Borland C++. Прям с дебагом и подсветкой кода, ага!

Тогда же стало прям модным лабать на под DOS на Паскале, снова привет компании Borland. Короче, настоящий кайф. Ресурсов стало дохрена, но (сюрприз!) все равно иногда не хватало. 

Советую, кстати, посмотреть офигенную кулстори от Вадима Башурова, это он написал те самые игры «Поле чудес» и «Морской бой». 10 девелоперских историй из 10!

На домашнем компукторе стало простым писать документы и считать таблички, иногда даже смотреть видосики и слушать музычку, хоть и переносить ее чаще всего приходилось на дискетах и компакт-дисках. Такие вот файлообменники своего времени, да.

Короче, все стало похожим на то, чем мы занимаемся сейчас. Только JSON-ы не перекладывали.

Pentium и его друзья 💻

Последний пункт, после которого уже проблемно рассказывать дальше. Потому что эволюционные изменения стали сложнее – раз, и многое это просто улучшения техпроцесса – два. Можете со мной не согласиться, тогда пишите текст для третьей части статьи, лол.

Спойлер:
Вообще можно приплести достаточно рассказов про другие архитектуры, поколения процессоров и их производителей, но тут довольно обывательский текст, так что технарям-душнилам отдельный сорян.

В общем, еще один важный момент в эволюции микропроцессоров – это кэш-память. Если ты покупал процессор в магазине, то наверняка замечал всякие L1/L2/L3 кэши в характеристиках. Че это за херня вообще?

Так вышло, что процессоры стали невъебенно быстрыми, единицы и нули стали перемещаться с такой бешеной скоростью, что оперативная память за этим особо не поспевала. Процессор тратит драгоценное время на то чтобы из этой медленной памяти вычитать данные. Накладно. Поэтому инженеры догадались поставить небольшую прокладку, которая самые важные данные где-то хранила, и процессор смог достать их быстрее.

Изначально кэш размещался между процессором и оперативкой тупо на материнской плате, но затем его смогли запихать прямо на кристалл микропроцессора. Затем процесс немного усложнился, и таких уровней стало несколько – чем данные нужнее, тем ближе они к процессору. Отсюда вот эти уровни кэшей.

Кэш L2 (4 микросхемы справа вверху) находится на материнской плате у процессора, а L1 прям на кристалле. Технологии!

Первым процессором, в который запихали кэш, был вышеупомянутый i486, а совсем уж сочно и здорово сделали его наследник – тот самый Pentium, про который все ну точно наслышаны.

Кстати кулстори, с Pentium сперва умудрились налажать

Чуваки из Intel ошиблись с работой FPU – в результате вычисления с плавающей запятой бывали не очень точными. Ну вот например:

4195835.0/3145727.0 = 1.333 820 449 136 241 002 (правильное значение)
4195835.0/3145727.0 = 1.333 739 068 902 037 589 (ошибочное значение, возвращаемое процессором, содержащим дефект)

Из-за этого дефекта в сложном софте приходилось писать костыли

Все что было дальше – просто навороты. Так, например, с данными в 64 разряда начали работать аж в 60е, а вообще таких процессоров для разных персоналок было наделано как грязи. Если совсем нечего делать и очень интересно, можно почитать статью Джона Машеи про долгий путь к 64-разрядной архитектуре. Но да, со временем 64 разряда запихали и в Pentium в том числе.

К чему это, короче – сраный Pentium D из нашей юности и два-ядра-два-гига-игровая-видеокарта со всеми Готиками, Crysis’ами или в че ты там еще играл – продукт вот этой вот эволюции.

Кстати, я обосрался с заголовком – в рекламе было три(!) гига. Качество картинки уровня «ебучий шакал» прилагается

Дальше можно рассказывать про всякие двух-четырех-стопицотъядерные процики, докатиться до микроархитектур Haswell/Broadwell/Skylake, но это будет уже настолько специфическая хуйня, что лучше туда не лезть.

На мой скромный и поверхностный взгляд, как-то так человечество доросло до современного представления персонального конплюхтера. И сегодня ты можешь играть в свои YOBA-игрульки с графонием вместо мыла, считать абсолютно ебанутейшие расчеты в MathCad/MATLAB/etc., прогать любой софт клепать очередной JS-фреймворк в окошке IntellijIDEA и параллельно палить ролики Вероники Степановой в ютьюбе. Тишь, гладь, божья благодать.

Ну и к чему мы пришли? 🤔

А пришли мы к тому, что в маленьком лэптопе, греющим твои нежные коленочки, сосредоточено лютое нечто, гоняющее совершенно впечатляющее количество информации: интересные (нет) JSON’ы, математические задачи, монтаж видеороликов – и вся эта шняга просто и легко умещается в рюкзак.

Компьютер для массового потребителя стал совсем доступным, как, кстати, и разработка софта. Пишут все, пишут всё, от мала до велика, от простецкого «Hello World» до какого-то откровенного rocket-science.

И получается вот какая история: раньше процессорное время было дорогим – это ведь её величество релейно-ламповая ЭВМ, не мешай ей работать, мразь, сиди и набивай свои сраные программы на перфокартах. Время программиста по сравнению с этими машинами стоило копейки. Теперь же мы имеем охуенный плот-твист в стиле Netflix: кожаные мешки победили, и джуны могут купить условный MacBook Pro с одной-двух зарплат.

Единственная просьба, дорогой читатель – помни хоть иногда, какой долгий путь проделало человечество, и стыдись, если будут, своих неэффективных алгоритмов в O(n3). Вот когда изобретут квантовый компьютер – тогда и поговнокодим!

А пока будем обновлять железо раз в три года и рыдать от кривого софта, который руинит весь перформанс.