Закон Мура больше не выполняется — есть ли еще способы поднять производительность компьютеров?

Егор


В первые годы развития авиации было очевидно, что скорости самолетов будут только расти. Так, собственно, и произошло: от смешных 50 километров в час для самолета братьев Райт в 1903 году мы пришли к 800-900 км/ч для различных Boeing и Туполевых в середине 1960-ых. И с тех пор рост скорости коммерческих самолетов застопорился: да, были попытки создания сверхзвуковых пассажирских самолетов, и Конкорды вместе с Ту-144 даже летали около двух десятилетий. Но из-за не самой высокой безопасности, а главное неэффективности с точки зрения траты энергии при столь высоких скоростях, мы на данный момент тратим на путешествия по воздуху столько же времени, сколько и наши родители 50 лет назад.

Современные компьютеры подошли очень близко к той же проблеме. На протяжении десятилетий наша способность миниатюризировать компоненты приводила к тому, что мы удваивали количество транзисторов на кремниевом чипе каждые два года или около того. Это явление, известное как закон Мура (названный в честь соучредителя Intel Гордона Мура), позволяло создавать все более дешевые и мощные процессоры на протяжении десятилетий. Но сейчас мы почти достигли пределов миниатюризации, и поэтому производительность вычислений скоро начнет стагнировать.

Да, на бумаге все хорошо: от 40-нанометровых процессоров в конце нулевых мы перешли к 7-нанометровым решениям, а в конце этого года нам обещают уже 5 нм. Однако стоит понимать, что эти нанометры — мнимые, и достигаются они благодаря трехмерному расположению транзисторов и прочим хитростям. На деле ключевые части транзисторов, такие как затвор, за последние 10 лет уменьшились лишь на несколько десятков процентов. И именно поэтому современные 14-нанометровые процессоры от Intel выступают не особо хуже 7-нанометровых решений AMD, хотя на деле разница должна быть близка к двукратной.


Красивая табличка, демонстрирующая рост эффективности процессоров при переходе на более тонкие техпроцессы. Увы, она уже не выполняется.

И это проблема. Представим на минуту, что закон Мура прекратил работать 20 лет назад. Мы жили бы в мире, где процессоры в десятки раз слабее тех, что мы имеем на самом деле. У нас не было бы смартфонов с их компьютерными возможностями — мы бы пользовались телефонами с базовым функционалом типа звонков и сообщений. У нас не было бы потокового видео — процессоры просто не вытянули бы его. Это же касается и красивейших современных игр и многого другого. Даже интернет был бы в виде простых текстовых сайтов с редкими картинками. Поэтому легко представить, какие инновации мы можем пропустить через те же 20 лет, если не сможем продолжать повышать производительность вычислений теми же темпами.

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

Чарльз Лейзерсон, профессор компьютерных наук и инженерии в MIT, отметил в своей последней статье на Science, что в течение многих лет программистам не приходилось беспокоиться о том, чтобы заставить код работать быстрее, потому что закон Мура делал это для них. Поэтому они выбрали простой путь, отдавая приоритет своей способности быстро писать код над способностью компьютеров выполнять этот код как можно быстрее.


Хорошо заметно, что последние годы рост замедлился.

Например, многие разработчики используют такие методы, как «редукция»: берется код, который решает задачу А, и используется для решения задачи Б, даже если это неэффективный способ ее выполнения. Предположим, вы хотите построить систему, подобную Siri, чтобы отвечать на голосовые команды «да» или «нет». Вместо того чтобы создавать специальную программу для этого, вы можете использовать существующую программу, которая имеет широкий спектр всевозможных ответов — ту же Siri — и настроить ее так, чтобы она отвечала на вопросы только «да» или «нет».

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

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


Современные процессоры имеют огромное количество инструкций, но далеко не весь софт ими пользуется.

Одна из стратегий повышения производительности заключается в распараллеливании кода. Достаточное количество существующих программ были разработаны с использованием алгоритмов десятилетней давности и нередко не используют современные инструкции типа AVX. Более того, если ПО в целом уже научилось работать с многоядерными CPU, то части программ все еще могут быть «одноядерными», причем это касается даже таких известных утилит, как Photoshop. Поэтому распараллеливание и использование современных инструкций может позволить ускорить выполнение некоторых сложных задач в десятки и даже сотню раз, или же можно пойти другим путем и делать все с той же скоростью, но гораздо энергоэффективнее.

Однако на этом благом пути по оптимизации производительности будут встречаться и чисто земные проблемы. Во-первых, никто не отменял «индусский код», в котором исправление одной проблемы тянет за собой ворох новых, и в итоге зачастую проще, но отнюдь не дешевле, переписать программу с нуля. А заниматься этим в случае с тяжелым современным софтом хотят и могут далеко не все компании. Во-вторых, существует понятие институциональной инерцией, когда программисты (и не только) продолжают делать все так, как привыкли, неохотно переходя к более новым вещам.


Классический пример индусского кода, для понимания которого не нужно быть программистом.

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

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

Разумеется, стоит понимать, что это не поможет кремниевым чипам вечно править балом — рано или поздно цена за получение лишнего процента производительности при оптимизации софта станет слишком высока. Но, по крайней мере, это вполне может позволить софту еще несколько лет становиться быстрее на том же «железе», чего вполне может хватить для разработки и выведения на рынок абсолютно новых компьютеров.
23
iGuides в Яндекс.Дзен —  zen.yandex.ru/iguides.ru
iGuides в Telegram — t.me/igmedia

Будь в курсе последних новостей из мира гаджетов и технологий

Мы в соцсетях

Комментарии

Ikarus
+662
Держу вот свой iPhone 8 и понимаю:
«индусский код» есть. «20ти уровневая редукция, есть. Институциональная иннерция, есть.
Все норм, епте.

А статья отличная.
8 июня 2020 в 21:07
#
Егор Морозов
+1765
Шутки шутками, но iOS это тоже касается. Вспомните, во сколько раз вырос вес популярных приложений за последние пару лет — и это при том, что нового функционала обычно добавляют немного. И я уже молчу про кроссплатформу на электроне, которая одинаково плохо работает везде.
8 июня 2020 в 22:42
#
Grigory Boyko
+276
Да, сейчас вес некоторых приложений больше чем вес прошивки iphone 3g. Вот смотрю сейчас вес Сбербанк онлайн почти 300 мб, что там на 300 мб может быть?!
8 июня 2020 в 23:06
#
Ikarus
+662
Да, это так конечно. И вспоминать не надо. Это каждодневная боль :)
Мой первый Айфон была четверка на 16 гб. Сегодня 64гб, а кэш с протоколами 12 гб, системные 6 гб
Первые 30 приложений в списке используемой памяти, от 120 до 700 мб. Какого они кэш не чистят, не понятно.
8 июня 2020 в 23:35
#
Oskarr
+369
Раньше было выгодно писать тяжелые приложения и повышать требования к ресурсам ( сговор производителей железа и софта ). Сейчас уже не выгодно, пора оптимизировать.
8 июня 2020 в 23:02
#
Cyberika
+365
Пока еще есть запас GPU и параллельные вычисления.
8 июня 2020 в 23:22
#
¯\_(ツ)_/¯
+1703
«....в течение многих лет программистам не приходилось беспокоиться о том, чтобы заставить код работать быстрее»

Заставить код работать быстрее — это одна из главных задач нормального программиста. Медленный код, по сути называется «говнокод», потому что пишется а-бэ как...
9 июня 2020 в 09:28
#
melissa
–21
25 июня 2020 в 16:15
#
Олег Маслов
+1
индусский код что я должен понять на той картинке.я нихера не понял или я один долбаёб а ?
28 июля 2020 в 11:36
#
0
Уже лет 10 – 15 назад процессоры упёрлись в непреодолимый предел производительности: их рабочая тактовая частота редко превышает 3 ГГц. Ни уменьшение технологического процесса (14 нм., 10 нм., 7 нм., перспективные 3 нм. и менее), ни использование самых быстро переключающихся транзисторов в электро-схемах, ни увеличение напряжения, не дают ощутимой прибавки быстродействия современным процессорам…
Нынешний процессор – квадратная пластинка кристалла кремния размером в 2,5 сантиметров, на которую в несколько десятков тончайших строго упорядоченных слоёв нанесено примерно от 100 миллионов до 700 миллионов микроскопических транзисторов и других элементов электрической вычислительной системы.
При тактовой частоте процессора – 3 ГГц., за время одного такта электрический ток-сигнал (либо «1» — есть ток, либо «0» — нет тока), успевает пройти в проводнике расстояние всего лишь десять сантиметров, учитывая, что скорость электрического тока – 300 тысяч километров секунду. Если процессор – квадрат со сторонами 2,5 см., то по диагонали этот квадрат будет уже более 3,5 сантиметров. И если какому-либо из многочисленных электрических сигналов потребуется пройти из одного угла электрической цепи процессора в другой, то он может просто не успеть до начала следующего электрического такта процессора, учитывая, что электрическому сигналу нужно не только совершить множество транзисторных переходов коллектор-эмиттер-база с накоплениями нужных для срабатывания электрических зарядов, но ещё и пройти эти самые 3,5 сантиметров не по кратчайшей прямой линии, а по миллионам изгибов проводников, поворотов, обходов…
Но если какой-либо сигнал не успевает прийти из одной части процессора в другой, то процессор вынужден принудительно уменьшать тактовую частоту, чтобы избежать ошибок при наслоениях следующего сигнала на незаконченный предшествующий, из-за чего компьютер зависает и требует остановки и перезагрузки.
Спрямление проводников между дальними транзисторами в плоском чипе не всегда возможно, так как, при высоких частотах электричества, любой относительно прямой провод становится излучающей антенной, теряющей высокочастотный электрический ток, нарушающей электромагнитными помехами и чрезмерным разогревом работу близко расположенных в процессоре соседних таких же проводников. Чтобы высокочастотные импульсы тока всё-таки доходили до относительно отдалённых транзисторов, приходится увеличивать электрическое напряжение в проводниках тока между этими транзисторами, что приводит перегреву процессора и даже к его разрушению. Перегревы проводников при передаче высокочастотных импульсов в процессоре можно снизить увеличением толщины этих проводников электричества, отведением от них сильно выделяющегося тепла в систему охлаждения и защитой соседних элементов микросхемы многослойной термостойкой изоляцией или экранированием.
Другим способом борьбы с перегревом и потерей электрических сигналов внутри процессора служит применение проводов с большим количеством изгибов. Каждый электрический импульс в проводе образует гребень высокочастотной электрической волны. Чтобы этот провод не стал излучающей антенной, его длина должна быть короче длины волны электрического колебания (тактовой частоты). Если расстояние между транзисторами в высокочастотном процессоре большое, то их специально соединяют не кратчайшим прямым проводком, а зигзагообразным, со множеством поворотов. Но по удлинённым проводкам сигналы доходят с заметной задержкой, что не позволяет повысить тактовую частоту процессоров.
Кроме того, огромное количество близко расположенных параллельных и пересекающихся микроскопических проводков между транзисторами в процессоре в некоторых случаях могут сработать как катушка индуктивности с опасными электрическими и магнитными токами, или пластинки конденсатора, губительно накапливающие электрические заряды и затем выплёскивающие их в самый неподходящий момент, или соленоид, превращающий электричество в тепло, способное расплавить часть элементов процессора, и резисторы, которые ослабляют электрические сигналы.
Чтобы уменьшить длину множества проводников электрического тока в процессоре, нужно радикально уменьшить расстояние между всеми транзисторами процессора и расположить их не на распластанной плоскости квадратного кристалла, а плотнее сгруппировать транзисторы в маленький плотный равносторонний объёмный кубик или в шарик.
На обычном кристалле 2,5х2,5=6,25 см2 двухмерного процессора умещается около миллиарда транзисторов – в среднем по 33 тыс. транзисторов вдоль каждой из четырёх сторон квадратного кристалла (1320 на каждый миллиметр). Но если эти транзисторы расположить компактнее – по пространственной форме ближе к трёхмерному и равностороннему кубу, то миллиард транзисторов, тех же размеров, легко уместится в крохотный кубик, размером всего лишь 1 миллиметр3, в каждой грани которого будет в среднем по 1000 транзисторов в длину этого кубика, по 1000 транзисторов в его ширину, и по 1000 транзисторов в его высоту.
Расстояние между самыми дальними транзисторами в крохотном кубовидном процессоре не будет превышать двух миллиметров. С учётом того, что между более плотно размещёнными транзисторами значительно сократится длина проводников с их достаточно толстыми изоляторами, то между этими транзисторами места в кубике-процессоре освободится ещё очень много, и транзисторы можно будет располагать в несколько раз плотнее. Более того, с уменьшением расстояния между транзисторами в процессоре и с последующим уменьшением электрического напряжения, открываются возможности дальнейшего уменьшения размеров транзисторов. Все эти меры позволят увеличить рабочую тактовую частоту трёхмерного объёмного процессора в сотни раз по сравнению с плоской микросхемой, и отказаться от её охлаждения.
Для получения каждого очередного слоя транзисторов в изготавливаемом кубическом процессоре, на предыдущие готовые слои следует сначала расположить в нужных местах чипа пылинки монокристаллического кремния (образующиеся после его распила) подходящих размеров. Затем кратковременными импульсами лазера припаять их к микросхеме, а излишки испарить или удалить травлением.
Быстродействие компактного объёмного чипа ещё больше явит своё превосходство перед плоской микросхемой, если объёмный микроскопический процессор снабдить такой же объёмной компактной и быстрой кэш памятью.
27 августа 2020 в 23:38
#