![Clocking PC](https://habrastorage.org/storage3/73e/797/546/73e797546fcee6894e88cb302926d662.jpg)
Но последние несколько лет частота уже не растет так быстро. От десятка гигагерц мы сейчас почти так же далеки, как и 5 лет назад. Так куда же исчез прежний темп? Что препятствует, как и раньше, «задирать» частоту вверх?
Текст ниже ориентирован на людей, не знакомых или слабо знакомых с архитектурой микропроцессора. Для подкованных читателей рекомендуются соответствующие посты yurav
«Горячие» гигагерцы
Бытует мнение, что дальнейший рост тактовой частоты непременно связан с увеличением тепловыделения. То есть, вроде как, ничего не мешает просто повернуть в нужную сторону некоторый «рубильник», отвечающий за увеличение частоты, – и частота пойдет вверх. Но процессор при этом нагреется настолько, что расплавится.
Это мнение поддерживается множеством людей, имеющих какое-то отношение к компьютерной технике. К тому же подтверждается успехами оверклокеров, разгоняющих процессоры в два и более раз. Главное – поставить систему охлаждения помощнее.
Хотя упомянутый «рубильник» и связанная с ним проблема тепловыделения действительно существуют, — это только часть битвы за гигагерцы…
Главный тормоз
У различных микропроцессорных архитектур могут быть различные сложности с «разгоном». Для определенности, мы здесь будем говорить о суперскалярных архитектурах. К таковым относится, например, архитектура x86 – самая популярная среди разработок компании Интел.
Чтобы понять проблемы, связанные с подъемом тактовой частоты, необходимо сначала определить, во что упирается ее рост. На разных уровнях рассмотрения архитектуры можно выделить различные наборы параметров, ограничивающих частоту. Однако оказывается, что существует такой уровень, на котором есть только один такой параметр. То есть можно выделить всего один тормоз, который надо дополнительно приотпускать каждый раз, когда охота разогнаться.
Конвейер
Главный тормоз лежит на уровне конвейера. Конвейер – это сердце суперскалярной архитектуры. Его суть состоит в том, что исполнение каждой инструкции микропроцессора разбивается на стадии (см. рисунок).
![Stages](https://habrastorage.org/storage3/31e/543/733/31e543733d22088892490dc148ae124e.jpg)
Стадии следуют друг за другом во времени, причем каждая из них исполняется на отдельном вычислительном устройстве.
Как только исполнение некоторой стадии завершается, освободившееся вычислительное устройство может быть задействовано для исполнения аналогичной стадии, но уже другой инструкции.
![image](https://habrastorage.org/storage3/207/b66/53b/207b6653b7cd656e7c5028500b94b44b.jpg)
На рисунке показано, как в период времени t1 на первом вычислительном устройстве исполняется первая стадия первой инструкции. К началу периода t2 первая стадия уже выполнена, и поэтому можно переходить к исполнению второй стадии на втором устройстве. Первое устройство при этом освобождается, и его можно отдать под первую стадию уже другой инструкции. И так далее. В период времени t4 на конвейере одновременно будут исполняться различные стадии четырех инструкций.
Но какое отношение все это имеет к частоте? Оказывается, что самое непосредственное. В действительности различные стадии могут отличаться по длительности исполнения. При этом разные стадии одной и той же инструкции исполняются в отдельных тактах. Продолжительность такта (а с ней и частота) микропроцессора должна быть такой, чтобы в него уместилась самая длинная стадия. На рисунке, приведенном ниже, самой длинной изображена стадия 3.
![image](https://habrastorage.org/storage3/b90/67d/208/b9067d2086c2d9f8a2ee44efce522bbb.jpg)
Делать такт короче самой долгой стадии не имеет смысла. Технически это возможно, однако не приведет к реальному ускорению работы микропроцессора.
Предположим, что самая длинная стадия требует для исполнения 500пс (пикосекунд) времени. Это длительность такта в машине с частотой 2ГГц. Допустим теперь, что мы хотим сделать такт в два раза короче – 250пс. Просто так… Ничего, кроме частоты, менять не собираемся. Такой ход приведет только к тому, что проблемная стадия будет исполняться два такта, но по времени это будут все те же 500пс. К тому же значительно возрастут сложности проектирования и увеличится тепловыделение процессора.
Можно было бы возразить, что благодаря более короткому такту, быстрее начнут «пролетать» короткие стадии, и значит, возрастет средняя скорость вычислений. Однако это не так (см. рисунок).
![image](https://habrastorage.org/storage3/1bf/4a0/09b/1bf4a009b06a0428940ab10bb209d98b.jpg)
Поначалу вычисления действительно пойдут быстрее. Но уже с четвертого такта третья стадия и любые следующие за ней (в нашем примере – только четвертая) начнут задерживаться. Это произойдет из-за того, что третье вычислительное устройство будет освобождаться не каждый такт, а каждые два такта. Пока оно занято третьей стадией одной инструкции, аналогичная стадия другой инструкции не может быть исполнена. Таким образом, наш гипотетичский процессор с длиной такта в 250пс эффективно будет работать как процессор с тактом в 500пс, хотя формально его частота будет в два раза выше.
Чем мельче, тем лучше
Итак, с точки зрения конвейера, тактовая частота может быть повышена только одним способом – за счет уменьшения длительности самой долгой стадии. Если удается сократить самую долгую стадию, появляется возможность уменьшить такт до размера той стадии, которая станет самой длинной после проведенного сокращения. А чем короче такт, тем выше частота.
В рамках современных технологий, существует не так много способов, которыми можно воздействовать на размер стадии.
Один из таких способов – переход к более совершенному технологическому процессу. Грубо говоря, очередное уменьшение количества нанометров. Чем мельче составные части процессора, тем быстрее он работает. Происходит это за счет того, что сокращаются расстояния, которые необходимо преодолевать электрическим импульсам, сокращается время переключения транзисторов и пр. Упрощенно можно считать, что всё равномерно ускоряется. Примерно равномерно сокращаются длительности всех стадий, в том числе и самой долгой. Частоту после этого можно поднять.
Звучит довольно просто, однако продвижение вниз по шкале нанометров – процесс очень непростой. Он очень сильно зависит от современного уровня технологий, и дальше, чем позволяет этот уровень, шагнуть нельзя. Тем не менее, производители микропроцессоров постоянно совершенствуют технологический процесс, и частота за счет этого постепенно ползет вверх.
Порезать пациента
Другой способ поднять частоту – это «порезать» самую проблемную стадию на более мелкие. Ведь когда-то инструкции уже удавалось мельчить на стадии. И удавалось многократно. Почему бы не продолжить нарезку? Процессор после этого будет работать только быстрее!
Будет. Однако резать очень сложно.
Приведем аналогию со строительством домов. Дома строятся этаж за этажом. Пусть этаж будет аналогией инструкции. Мы хотим разбить строительство этажа на стадии. Для начала, пусть это будут две стадии: собственно строительство и отделка. Пока происходит отделка на последнем построенном этаже, ничто не мешает приступить к строительству нового этажа. Главное, чтобы строительством и отделкой занимались две разные бригады. Вроде, все хорошо.
Теперь мы хотим пойти дальше и помельчить уже имеющиеся две стадии. Отделку, допустим, можно разбить на поклейку обоев и покраску потолков. С таким разделением нет никаких проблем. После того, как маляры покрасили один этаж, они могут идти на следующий, даже если на предыдущем все еще идет поклейка обоев.
А что со строительством? Допустим, мы хотим разбить строительство на возведение стен и укладывание перекрытий. Такое разделение можно сделать, но толку от него не будет. После того, как на одном этаже возведены стены, вы не можете отправить бригаду возводить их на следующем этаже, пока не будет перекрытий. Несмотря на то, что формально нам удалось разбить строительство на две стадии, нам не удалось полностью занять отдельные бригады, специализирующиеся на стенах и потолках. В любой момент времени будет работать только одна из них!
Та же самая проблема имеется и в микропроцессорах. Существуют стадии, которые цепляют инструкции друг за друга. Дробить такие стадии на более мелкие очень тяжело. Для этого нужны очень серьезные изменения в архитектуре процессора. Точно так же, как серьезные изменения нужны в строительстве для того, чтобы одновременно строить несколько этажей одного дома.
Повернуть рубильник
Вот мы и добрались до того, чем занимаются оверклокеры. Они поднимают напряжение, под которым работает процессор. За счет этого быстрее начинают переключаться транзисторы (основные элементы, из которых состоит процессор), и длины всех стадий более-менее равномерно сокращаются. Появляется возможность поднять частоту.
Очень просто! Но есть большие проблемы с тепловыделением. Упрощенно, выделяемая процессором мощность описывается следующим образом:
P ~ Cdyn*V2*f
Здесь Cdyn – динамическая емкость, V – напряжение, f – частота процессора.
Неважно, если вы не знаете, что такое динамическая емкость. Главное здесь – напряжение. Оно в квадрате! Выглядит ужасно…
На самом деле, все еще хуже. Как я уже сказал, напряжение нужно, чтобы заставить быстрее работать транзисторы. Транзистор – это своеобразный переключатель. Для того, чтобы переключиться, ему необходимо накопить достаточный заряд. Время такого накопления пропорционально току: чем он больше, тем быстрее на транзистор приходит заряд. Ток, в свою очередь, пропорционален напряжению. Таким образом, скорость срабатывания транзистора пропорциональна напряжению. Теперь обратим внимание на то, что частоту процессора мы можем увеличить лишь пропорционально увеличению скорости срабатывания транзисторов. Суммируя сказанное, имеем:
f ~ V и P ~ Cdyn*V3
С линейным ростом частоты тепловыделение будет увеличиваться по кубическому закону! При увеличении частоты в 2 раза, необходимо будет отвести от процессора в 8 раз больше тепла. Иначе он расплавится.
Очевидно, такой способ увеличения частоты не очень подходит для производителей процессоров из-за низкой энергоэффективности, хотя и используется разгонщиками-экстремалами.
И это все?
И это все. Ну или почти все. Кто-то мог бы вспомнить, что ему удавалось слегка увеличить тактовую частоту микропроцессора даже без поднятия напряжения.
Такое тоже возможно, однако в очень ограниченных пределах. Процессоры рассчитаны производителем на то, чтобы эксплуатироваться в широком диапазоне внешних условий (которые влияют на длину стадии), поэтому производятся с некоторым запасом по частоте. Например, самая длинная стадия может занимать не целый такт работы процессора, а скажем, 95% такта. Отсюда и возможность незначительно повысить частоту.
Кстати, я ни в коем случае не призываю никого заниматься самостоятельным разгоном процессоров. Все, кто им занимается, делают это на свой страх и риск. Неправильно проводимый разгон опасен не только для ваших процессоров, но и для вас лично!
Отмечу также, что помимо описанных, существуют и другие способы воздействовать на длину стадии. Но они гораздо менее существенны, чем представленные здесь. Например, изменение температуры влияет на работу электроники в целом. Однако серьезные эффекты достигаются только при очень низких температурах.
В общем и целом, получается, что за повышение частоты бороться очень тяжело… Тем не менее, эта битва постепенно ведется, и частота потихонечку ползет вверх. При этом грустить из-за того, что процесс замедлился, не приходится. Ведь появилась такая штука как многоядерность. И какая, в сущности, нам разница, стал наш компьютер работать быстрее из-за того, что поднялась его частота, или потому, что задачи стали исполняться в параллель? Тем более что во втором случае мы получаем дополнительные возможности и бОльшую гибкость…