Краха закона Мура ждут чуть ли не столь же фанатично, как краха доллара, и столь же рьяно его отстаивают "технофанаты", дескать, до сих пор жив курилка, вон на 3 нм вышли и останавливаться не собираются! Но и здесь большинство, как с одной, так и с другой стороны, не вполне понимают, как должен выглядеть этот крах. Крах доллара не в том, что он станет продаваться по курсу 1 рубль/$ или 10 копеек/$, а в том, что всем вообще станет плевать на его курс. Подобным образом и крах закона Мура не в том, что не удастся более плотно "утрамбовывать" транзисторы на кристалл, а в том, что выгоды от дополнительных транзисторов становится всё меньше и меньше...
И если посмотреть под этим ракурсом, становятся понятны капризы компьютерной "моды".
Закон масштабирования Деннарда
Закон Мура гласил, что каждые 2 года количество транзисторов, упихиваемых в чип, будет удваиваться. Сначала темп был чуть выше, потом замедлился, сейчас замедлился ещё сильнее, но худо-бедно пока действует. Закон Деннарда известен куда меньше, вот одна из его формулировок: при переходе на следующий техпроцесс (в 1,5 раза меньше "нанометров"), на ту же площадь получится разместить вдвое больше транзисторов, при этом мы можем поднять тактовую частоту на 40% и остаться при том же тепловыделении на единицу площади! Именно это мы наблюдали поначалу: росли тактовые частоты, но также росли возможности процессоров - с 8- и 16-битных переходили на 32-битные и потом на 64-битные, появлялись всё новые и новые команды: плавающая запятая, всевозможные MMX, 3DNow, SSE, AVX и пр. Компьютер, которому исполнилось хотя бы несколько лет, уже казался безнадёжно устаревшим, поскольку новый был по всем параметрам лучше.
Ещё одним признаком, что закон масштабирования Деннарда был "в деле" - уменьшалось напряжение питания ядра. Когда-то КМОП-логика (она же CMOS) работала от 9 или даже 15 вольт (старые добрые серии 176 и 561), потом напряжение опустили до "ТТЛ-ного" 5 вольт, а затем и 3,3, 2,5, 1,8, вплоть до 1,2. Собственно, энергия, теряемая при переключении одного элемента, равна CU2/2, ёмкость C уменьшали с помощью новых техпроцессов, и они же позволяли снизить питающее напряжение, за счёт всё более и более тонкого диэлектрика при затворе. Именно эта закономерность и позволяла закону Деннарда выполняться.
Но увы, именно здесь быстрее всего упёрлись в предел: если истончить диэлектрик ещё сильнее, уже начинается квантовое туннелирование, затворы начинают невообразимо много потреблять, поэтому пришлось выбрать некоторое компромиссное значение - и на нём остановиться. Дальше напряжения уже практически не падали, из-за чего закон Деннарда приказал долго жить.
Конечный компьютер
Станислав Лем в романе "Фиаско" описал "компьютер поколения, называемого конечным, так как оно достигло теоретического предела мощности":
Границы ее определялись свойствами материи, такими, как постоянная Планка и скорость света. <…> Дилемма конструкторов проистекала из обязательных, но взаимопротиворечивых условий: как можно большее число нейронов заключить в как можно меньший объем. Время прохождения сигналов не должно превышать времени реакции элементов компьютера. В противном случае время прохождения ограничивает скорость расчетов. Новейшие датчики реагировали за одну стомиллиардную долю секунды. Они были размером с атом. Поэтому диаметр компьютера не превышал трех сантиметров. Будь он больше — работал бы медленней.
И по крайней мере, для технологии КМОП, по которой сейчас делается почти вся цифровая электроника, такой предел для одного ядра наступил.
Вот у нас был отличный процессор по старому техпроцессу. Появился новый техпроцесс, и мы можем его же упихать на половину кристалла. Пока действовал закон Деннарда, мы могли сохранить тактовую частоту прежней, понизить напряжение, и мощность на единицу площади даже упадёт, т.е отводить тепло становится только проще. Можно ещё и частоту поднять... Но закон приказал долго жить. Теперь можно лишь ожидать: если по новому техпроцессу изготовить старый процессор, то общая потребляемая мощность немного снизится. Мощность на единицу площади скорее возрастёт, и чтобы микросхема не сгорела, придётся тактовую частоту даже снизить! Можно, конечно, не ужиматься в половину кристалла, а разместить более мелкие транзисторы "как прежде", оставив большие расстояния между ними. Тогда тактовую частоту можно будет поднять, и процессор в какой-то степени ускорится, но на удивление немного! Ведь и дорожки между транзисторами нужно непрерывно укорачивать. Если мы самые классные маленькие транзисторы расставим подальше, ёмкость дорожек съест весь выигрыш!
Поэтому пошли по пути многоядерности: пусть вместо одного мощного и очень прожорливого ядра будет несколько более слабых, при этом общая вычислительная мощь увеличится. Пока работал закон Деннарда, многоядерность была не шибко привлекательна: одно ядро, работающее на максимальной частоте, потребляло бы столько же, сколько и два, работающих на половинной, зато его всегда можно было использовать на 100%, и программировать легко. Многоядерность была нужна не потому, что "её жаждали широкие народные массы", а потому что по-другому повышать быстродействие уже не могли, предельное быстродействие одного ядра практически наступило.
Но и увеличивать количество ядер без конца не имеет смысла, как следует из закона Амдала. Он, грубо говоря, утверждает: если в нашей программе есть 10% кода, который распараллелить не получится, то ставить сильно больше 10 ядер нет никакого смысла, скорость работы будет определяться этим "бутылочным горлышком". А таких горлышек довольно-таки много в реальном коде. Взять хотя бы ввод-вывод - здесь потоки будут "наступать друг другу на пятки". Или чисто последовательные процессы, вроде распаковки сжатого файла, где значение следующего бита становится понятно только после декодирования предыдущих.
Вот и наступила "эпоха тёмного кремния".
Новые техпроцессы позволяют запихать на кристалл миллиарды транзисторов, и они достаточно быстродействующие, чтобы работать на единицах, если не десятках гигагерц, но если мы попытаемся задействовать их все на такой частоте, кристалл мгновенно сгорит, и никакое, даже самое навороченное охлаждение ему не поможет! Поэтому львиная доля этих транзисторов должна оказаться "тёмной", т.е переключаться гораздо реже, чем они могли бы.
В общем-то, уже переход на многоядерность был "первым звоночком". Вместе с ним и тактовые частоты, которые "замерли" на 3 ГГц и поползли назад.
Ясно, что эти "лишние" транзисторы постарались пустить в ход, хотя бы как кэш-память. Память хороша в этом плане, она "тёмная": имеем миллионы транзисторов (мегабайты памяти), но в каждый момент времени записываем или читаем буквально несколько слов, остальные "сидят без дела". Но и здесь есть свои лимиты: с какого-то момента добавление кэш-памяти не сильно улучшает быстродействие.
Тема про тёмный кремний была довольно популярна в 2012..2014 году, писали научные и научно-популярные статьи, "4 всадников" перевели чуть ли не на каждый язык. Предлагалось чуть ли не "с нуля" начать проектирование программно-аппаратных систем, исходя из новой постановки задачи, создавать специализированные ядра, каждое под свою задачу, поскольку универсальные процессоры "родились", когда транзисторы приходилось экономить, а теперь транзисторы "бесплатны", денег стоит потребляемая ими мощность (поскольку вместе с ней растёт и размер кристалла), поэтому десяток узкоспециализированных ядер оказывается лучше одного универсального.
Но потом тема как-то взяла и затихла. Поискать dark silicon в том же ютубе - все лекции и материалы будут 10-летней давности. Именно среди научных статей можно найти и более новые, но по пальцем одной руки сосчитать. Похоже, нашёлся более простой путь развития...
Машинное обучение, нейросети, рейтрейсинг
Если произвольную задачу не удаётся распараллелить до конца, а существенно убыстрить одиночное ядро уже не удаётся, то что же делать? Элементарно: придумать такие задачи, которые на обычных процессорах решаются очень печально, но в которых допустимо массивное распараллеливание! И кто бы мог подумать, такие задачи резко нашлись и начали проталкиваться очень агрессивно. С одного конца, это нейросети. В них множество "параллельных ветвей", которые могут вычисляться независимо друг от друга, на разных ядрах, а вычислений нужна тьма тьмущая, особенно во время "обучения" этих сетей.
Со стороны видеокарт придумали рейтрейсинг. Раньше его применяли только для самых качественных рендеров, выполняемых далеко от реального времени. Но в данную канву он ложится идеально: каждый луч можно рассчитывать независимо от остальных, и рассчитать их нужно МНОГО, чтобы из этого получилось что-то красивое. Как будто снова решение подогнали под ответ.
Тайваньские нанометры
Надо сказать, что и транзисторы уменьшаться, по большому счёту, перестали, нельзя им уменьшаться, начинаются нехорошие квантовые эффекты, утечки и неуправляемость. А когда говорят к переходу к новому техпроцессу, заметно лукавят. По сути, совершенствуется методика "упаковки" транзисторов в стеснённых объёмах. Раньше они "лежали плашмя", потом их поставили на попа (бедный Шлаг, подумал Штирлиц), изгаляются, как могут. По сути, новая цифра техпроцесса означает: "мы смогли вместить на ту же площадь вдвое больше транзисторов", вот и всё. Цифра, как говорится, "маркетинговая".
Итоги
В общем-то, оно и невооружённым глазом заметно: сижу за компьютером 14-летней давности, и он нормально работает, жгучего желания бежать в магазин за новым не испытываю. Когда-то и за год-другой компьютеры успевали "морально устареть". Прогресс пока что продолжается, но "процессорам общего назначения" ловить практически нечего. Все преимущества новых техпроцессов проявляются только при выпуске сильно распараллеленных вычислителей, и, вот же совпадение, именно такие вычисления сейчас "на слуху".
Экстенсивное развитие цифровой техники (больше гигагерц, гигабайт, ядер), пожалуй, завершилось, теперь гораздо больше результатов даёт "вылизывание" имеющегося - более удачные архитектуры, а главное, более заточенные под конкретную задачу. Ну и пора отвыкать от 6-7 уровней абстракции между кодом и "железом", это теперь будет куда выгоднее, чем затариваться самым свежим "железом" - совсем недавно всё было наоборот.
https://aftershock.news/?q=node%2F1107058