Мощность и пределы: почему частота больше не растёт
С середины 1970-х до середины 2000-х тактовая частота массовых процессоров выросла примерно на три порядка. Затем рост практически остановился: частоты ядер общего назначения последние полтора десятилетия держатся в диапазоне единиц гигагерц и меняются от поколения к поколению на проценты. Транзисторы при этом продолжали уменьшаться, их число на кристалле продолжало расти — а частота встала.
Это не инженерный тупик и не отсутствие идей. Это следствие того, что перестало выполняться одно физическое соотношение, на котором держались тридцать лет бесплатного ускорения. Разберём, какое именно, что пришло ему на смену и почему в результате главной метрикой архитектуры стала не производительность, а производительность на ватт.
Глава опирается на устройство КМОП-вентиля из главы про транзистор; физику производства и то, почему «нанометры» давно не являются размером, разбирает глава про производство. Прикладная сторона для батарейных устройств — в главе про энергию и ограничения.
Откуда берётся мощность
Потребление КМОП-схемы складывается из двух принципиально разных частей.
P_общая = P_динамическая + P_статическая
P_динамическая ≈ α · C · V² · f — энергия на перезарядку ёмкостей при переключении
α — доля вентилей, переключающихся за такт (activity factor)
C — суммарная переключаемая ёмкость
V — напряжение питания
f — тактовая частота
P_статическая ≈ V · I_leak — токи утечки, текут всегда, даже без переключений
I_leak растёт экспоненциально при снижении порогового напряжения
и примерно экспоненциально с температурой
Разница между слагаемыми определяет всю инженерную практику.
Динамическая мощность — плата за работу. Каждое переключение вентиля перезаряжает ёмкость нагрузки; энергия одного переключения примерно C·V²/2, а мощность получается умножением на частоту переключений. Отсюда важнейшее наблюдение: энергия на операцию не зависит от частоты, а мощность — зависит линейно. Можно выполнить ту же работу медленнее и потратить столько же энергии, но с меньшим тепловым потоком.
Статическая мощность — плата за существование. Транзистор в закрытом состоянии не идеален: через него течёт подпороговый ток. В 1990-е этим слагаемым можно было пренебречь; к концу 2000-х на передовых техпроцессах оно достигло доли, сопоставимой с динамическим, и стало отдельной проектной проблемой.
Масштабирование Деннарда и почему оно закончилось
В 1974 году Роберт Деннард с соавторами описал правило, которое три десятилетия делало прогресс автоматическим. Если уменьшить все линейные размеры транзистора в k раз и одновременно снизить напряжение питания в те же k раз, то:
- площадь падает как
k²— транзисторов помещается вдвое больше приk = √2; - ёмкость падает как
k; - задержка вентиля падает как
k— частоту можно поднять; - мощность одного транзистора падает как
k²; - плотность мощности остаётся постоянной.
Последний пункт и есть суть: кристалл той же площади с вдвое большим числом транзисторов, работающих на большей частоте, потреблял столько же. Ускорение было бесплатным в буквальном смысле — не требовалось ни менять архитектуру, ни переписывать программы.
Сломалось это на напряжении. Чтобы транзистор надёжно закрывался, пороговое напряжение должно быть заметно выше нуля; чтобы он быстро открывался, напряжение питания должно быть заметно выше порогового. Снижать порог мешает фундаментальная физика: подпороговая крутизна МОП-транзистора при комнатной температуре не может быть лучше примерно 60 мВ на декаду тока. Это означает, что снижение порога на каждые 60 мВ увеличивает ток утечки закрытого транзистора в десять раз.
К середине 2000-х напряжение питания опустилось примерно до одного вольта и дальше почти перестало снижаться. С этого момента:
Деннард работал: V ↓ вместе с размерами → плотность мощности постоянна
Деннард сломался: V ≈ const → плотность мощности растёт как 1/k²
Транзисторы продолжали уменьшаться, их число на квадратный миллиметр — расти, а мощность на квадратный миллиметр начала расти вместе с ними. Дальше кристалл упирается не в количество транзисторов, а в способность отвести тепло.
Кубическая цена частоты
Второе соотношение, которое стоит понимать до конца. Задержка вентиля примерно обратно пропорциональна (V − V_th), поэтому чтобы поднять частоту, надо поднять напряжение. Подставив это в формулу динамической мощности с её квадратом по напряжению, получаем: мощность растёт примерно как куб частоты в рабочем диапазоне.
"""Как мощность и энергия зависят от частоты при связке частота-напряжение.
Модель упрощённая: считаем, что нужное напряжение линейно растёт с частотой
в рабочем диапазоне, а статическая мощность пропорциональна напряжению.
Числа иллюстративные — важна ФОРМА зависимости, а не абсолютные значения.
Сложность: O(n) по времени и O(1) по памяти, где n — число точек по частоте.
"""
V0, F0 = 0.80, 2.0e9 # опорная точка: 0,8 В при 2 ГГц
C_EFF = 8e-9 # эффективная переключаемая ёмкость, условная величина
LEAK_K = 0.9 # коэффициент статической составляющей, условный
def напряжение(f: float) -> float:
"""Грубая модель: чтобы работать быстрее, нужно больше напряжения."""
return V0 * (0.55 + 0.45 * f / F0)
def мощность(f: float) -> tuple[float, float, float]:
v = напряжение(f)
p_dyn = C_EFF * v * v * f
p_leak = LEAK_K * v * v # утечки грубо растут с напряжением
return p_dyn, p_leak, p_dyn + p_leak
print(f"{'ГГц':>5} {'В':>6} {'P дин':>8} {'P утечк':>8} {'P всего':>8} {'нДж/такт':>10}")
for ghz in (1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0):
f = ghz * 1e9
d, l, p = мощность(f)
энергия_на_такт = p / f * 1e9 # наноджоули на такт
print(f"{ghz:5.1f} {напряжение(f):6.2f} {d:8.1f} {l:8.1f} {p:8.1f} {энергия_на_такт:10.3f}")
Из такой таблицы видны две вещи, которые определяют всю современную практику.
- Верхние проценты частоты стоят непропорционально дорого. Прирост частоты на 25% в верхней части диапазона может стоить удвоения мощности. Именно поэтому режим максимальной частоты («турбо») действует ограниченное время и только на части ядер — иначе не отвести тепло.
- Энергия на такт растёт вместе с частотой. То есть быстрый режим не только горячее, но и менее эффективен: та же работа обходится дороже в джоулях.
Обратное тоже верно и лежит в основе DVFS (динамическое управление частотой и напряжением): снижение частоты вдвое с соответствующим снижением напряжения уменьшает мощность примерно вчетверо-ввосьмеро. Но выполнять работу вдвое дольше при вчетверо меньшей мощности — это вдвое меньше энергии, что выгодно… до определённого предела.
Гонка к простою
Предел задаётся статической мощностью. Пока схема включена, утечки текут. Если задача выполняется дольше, утечки текут дольше. Отсюда стратегия «гонка к простою» (race to idle): выполнить работу быстро на высокой частоте и выключить блок целиком, уйдя в глубокое состояние сна.
Какая стратегия выгоднее — зависит от соотношения динамической и статической составляющих и от глубины доступных состояний сна:
| Ситуация | Что выгоднее | Почему |
|---|---|---|
| Динамическая мощность доминирует, глубокого сна нет | работать медленно | квадрат по напряжению перевешивает |
| Утечки заметны, есть глубокие состояния сна | закончить быстро и выключиться | выключенный блок не течёт |
| Нагрузка периодическая, короткие всплески | закончить быстро и выключиться | пробуждение стоит энергии, лучше делать его редко |
| Нагрузка непрерывная, ограничение по теплу | работать на устойчивой частоте | максимум не поддерживается физически |
Правильный ответ находится измерением, а не рассуждением; для микроконтроллеров эта арифметика подробно разобрана в главе про энергию встраиваемых систем.
Тёмный кремний
Сложим два факта: транзисторов на кристалле становится больше по закону Мура, а плотность мощности после конца Деннарда растёт. Получим прямое следствие: не все транзисторы могут переключаться одновременно.
Доля кристалла, которую при фиксированном бюджете мощности приходится держать выключенной или на пониженной частоте, получила название тёмного кремния. Работа Esmaeilzadeh и соавторов (ISCA 2011) показала, что при сохранении тенденций эта доля растёт от поколения к поколению и что простое наращивание числа одинаковых ядер упирается в ту же стену, что и наращивание частоты.
Что из этого сделала индустрия — три ответа, и все три видны в устройстве современных чипов:
- Специализация. Если нельзя держать включённым весь кристалл, пусть на нём будет много разных блоков, из которых в каждый момент работает нужный. Аппаратный кодек видео, блок шифрования, матричный ускоритель, контроллер дисплея — каждый простаивает большую часть времени, но в своей задаче на порядок эффективнее универсального ядра (Ускорители).
- Гетерогенность. Крупные ядра для отзывчивости, компактные — для фоновой работы. Задача планировщика — держать включённым минимально достаточное (Многоядерность).
- Агрессивное управление питанием. Всё, что не используется прямо сейчас, отключается — вплоть до отдельных блоков внутри ядра.
Куда на самом деле уходит энергия
Подробная шкала энергии на операцию — от целочисленного сложения до чтения из внешней памяти — разобрана в главе про ускорители, потому что именно из неё следует смысл специализации. Здесь достаточно запомнить пропорции и понять, откуда они берутся физически.
| Что делаем | Относительно целочисленного сложения | Почему столько |
|---|---|---|
| Целое сложение 32 бита | 1 | десятки вентилей, короткие провода |
| Сложение с плавающей точкой | порядка 10 | выравнивание порядков, нормализация, округление |
| Чтение из регистрового файла | единицы-десятки | многопортовая память, длинные линии выборки |
| Чтение из L1 | десятки | больший массив, сравнение тегов, трансляция адреса |
| Чтение из кэша последнего уровня | сотни | большой массив плюс путь через сеть кристалла |
| Передача через весь кристалл | сотни | ёмкость длинной линии и повторители на пути |
| Чтение из внешней DRAM | тысячи | выход за пределы кристалла, шина, протокол, активация строки |
| Накладные расходы одной команды на универсальном ядре | сотни | выборка, декодирование, переименование, планирование, отставка |
Соотношения — порядки величины для техпроцесса около 45 нм по данным доклада Марка Горовица (ISSCC 2014). Абсолютные значения с тех пор снизились, а пропорции сохранились и даже усилились, и причина физическая: энергия пропорциональна перезаряжаемой ёмкости, ёмкость определяется длиной проводов и размером массива памяти, а провода масштабируются хуже транзисторов (Производство).
Три практических вывода, каждый из которых противоречит «здравому смыслу» из учебников по алгоритмам:
- Пересчитать заново часто дешевле, чем достать из памяти. Классическая оптимизация «сохраним результат, чтобы не считать дважды» может проиграть, если сохранённое значение уходит в память и возвращается оттуда.
- Локальность — это экономия ватт, а не только тактов. При фиксированном бюджете мощности одно эквивалентно другому.
- Ускоритель выигрывает движением данных, а не арифметикой. Систолический массив эффективен потому, что операнд, попав внутрь, переиспользуется много раз, не выезжая наружу.
Управление на кристалле: что происходит каждую миллисекунду
Современный кристалл — это система управления с обратной связью. Частота и напряжение не постоянны: они меняются десятки-сотни раз в секунду по показаниям датчиков.
Механизмы, которыми это реализуется:
- Отключение тактирования (clock gating). Тактовый сигнал не подаётся на неиспользуемый блок. Убирает динамическую мощность, но не утечки. Дёшево и применяется повсеместно, вплоть до отдельных регистров.
- Отключение питания (power gating). Блок обесточивается через транзистор-ключ. Убирает и утечки, но состояние теряется, а включение обратно стоит времени (порядок микросекунд) и энергии.
- Домены питания и тактирования. Кристалл делится на области с независимыми напряжением и частотой: ядра, графика, некэшевая часть, контроллер памяти. Это позволяет не поднимать напряжение всему кристаллу ради одного занятого ядра.
- Датчики и лимиты. Температура в нескольких точках, ток на входе, суммарная мощность в скользящем окне. Логика управления соблюдает несколько лимитов одновременно, и активным оказывается самый жёсткий в данный момент.
поэтому первые секунды теста всегда быстрее S->>P: температура кристалла приближается к пределу P->>C: снизить частоту на шаг C->>H: тепловой поток снизился S->>P: температура стабилизировалась P->>C: удерживать устойчивую частоту Note over W,H: наблюдаемый эффект: короткий бенчмарк показывает одно число,
длинный — другое, и оба верны для своих условий
Из этой петли следует важное методическое правило измерений: короткий и длинный прогон одной и той же нагрузки дают разные результаты, и оба корректны. Прогрев обязателен, а результат нужно сопровождать указанием длительности и условий охлаждения (Бенчмаркинг).
Тепло: почему бюджет измеряется ваттами
Мощность превращается в тепло целиком. Отвод тепла описывается цепочкой тепловых сопротивлений: кристалл → корпус → термоинтерфейс → радиатор → воздух. Каждое звено даёт перепад температуры, пропорциональный потоку:
T_кристалла = T_среды + P · (R_кристалл-корпус + R_корпус-радиатор + R_радиатор-воздух)
Предельная рабочая температура кристалла — порядок 90-105 °C для кремния
в потребительских и серверных устройствах. Выше начинается деградация и отказы.
Отсюда классы устройств и их бюджеты — именно как порядки величины, а не как характеристики моделей:
| Класс устройства | Порядок бюджета мощности | Чем ограничен |
|---|---|---|
| Микроконтроллер на батарейке | микроватты в среднем, милливатты в активном режиме | ёмкость элемента питания и срок службы |
| Мобильный чип в телефоне | единицы ватт, кратковременно больше | пассивное охлаждение и температура корпуса в руке |
| Ноутбучное ядро | десяток-другой ватт на пакет | тонкий радиатор, шум вентилятора |
| Настольный процессор | десятки-сотня ватт | воздушное охлаждение приемлемого размера |
| Серверный процессор | сотня-две ватт | плотность стойки, мощность на юнит, шум и вентиляция |
| Крупный ускоритель | сотни ватт | специализированное охлаждение, иногда жидкостное |
TDP — это не измеренная мощность. Это проектная величина: сколько тепла обязана отводить система охлаждения при заданных условиях, чтобы устройство держало заявленный режим. Реальное потребление бывает и ниже (при простое), и выше (в кратковременном ускорении). Сравнивать устройства по TDP как по потреблению — методическая ошибка.
Отдельная проблема — плотность теплового потока. Даже при умеренной суммарной мощности отдельный участок кристалла (например, векторный блок под непрерывной нагрузкой) может греться намного сильнее остальных. Такие «горячие точки» ограничивают частоту всего ядра и объясняют, почему широкие векторные инструкции на части устройств исполняются на пониженной частоте: они переключают больше вентилей за такт, то есть повышают коэффициент активности α в формуле динамической мощности (SIMD и векторные расширения).
Что делать, когда упёрлись в бюджет мощности
Проектное решение выглядит одинаково на всех уровнях — от кристалла до дата-центра.
самый выгодный ход: экономит и такты, и джоули"] B -- нет --> D{"Работа однотипная и её много?"} D -- да --> E["Специализированный блок или ускоритель
выигрыш за счёт движения данных, см. главу 12"] D -- нет --> F{"Есть параллелизм?"} F -- да --> G["Шире и медленнее: больше ядер или полос
при пониженной частоте и напряжении"] F -- нет --> H{"Нагрузка периодическая?"} H -- да --> I["Гонка к простою: быстро закончить и обесточить блок"] H -- нет --> J["Остаётся только уменьшать движение данных:
локальность, раскладка, компактность"] C --> K["Проверить измерением: энергия на единицу работы, а не мощность"] E --> K G --> K I --> K J --> K
Пункт «шире и медленнее» заслуживает пояснения, потому что он противоречит интуиции. Два ядра на частоте f при напряжении V выполняют вдвое больше работы, чем одно, потребляя примерно 2·C·V²·f. Одно ядро на частоте 2f требует повышенного напряжения V', и его мощность порядка C·V'²·2f, где V' > V. Поскольку напряжение входит в квадрате, широкая медленная конфигурация выигрывает — при условии, что работа распараллеливается. Именно эта арифметика, а не мода, привела к многоядерности, к широким векторам и к тысячам простых ядер в графических процессорах.
Как измерить потребление на своей машине
# Счётчики энергии на уровне пакета и доменов (интерфейс RAPL на x86)
sudo powerstat -R 1 30
cat /sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj # монотонный счётчик микроджоулей
# Через perf: энергия по доменам как обычные события
perf stat -a -e power/energy-pkg/,power/energy-ram/ -- ./prog
# Частоты, состояния сна, температура в динамике
turbostat --interval 1 -- ./prog
cpupower frequency-info
watch -n1 'grep MHz /proc/cpuinfo | head'
# Кто мешает системе уходить в сон
sudo powertop
# Зафиксировать частоту ради повторяемости измерений
sudo cpupower frequency-set -g performance
echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
Методические правила, без которых числа бессмысленны:
- Меряйте энергию на единицу работы, а не мощность. Устройство, потребляющее вдвое больше и работающее втрое быстрее, эффективнее.
- Указывайте длительность прогона. Из-за тепловой инерции короткие тесты систематически завышают результат.
- Фиксируйте условия: температуру среды, состояние охлаждения, число активных ядер, режим управления частотой.
- Учитывайте всю систему. У мобильного устройства экран и радиотракт часто потребляют больше вычислителя, и оптимизация ядра там даёт мало.
Что это значит для кода
1. Меньше данных — меньше ватт. Компактные структуры, правильные типы, отсутствие лишних копий влияют на энергию сильнее, чем выбор арифметических операций.
2. Локальность работает дважды. Каждый промах, который вы устранили, — это и сэкономленные такты, и сэкономленные джоули, а при ограничении по теплу это одно и то же.
3. Пустой цикл ожидания — худшее, что можно сделать. Активное ожидание держит ядро на высокой частоте и не даёт системе уйти в сон. Правильно — блокирующее ожидание с уведомлением или, если крутиться необходимо, с инструкцией-подсказкой (pause на x86, yield или wfe на ARM).
4. Периодические пробуждения дороже, чем кажутся. Таймер, срабатывающий каждые 10 мс, не даёт системе войти в глубокие состояния сна. Объединение таймеров и укрупнение периодов — стандартная практика для мобильных и встраиваемых систем.
5. Не гонитесь за максимальной частотой в бенчмарках. Устойчивый режим — это то, что увидят пользователи. Измеряйте его.
6. Помните про эффект наблюдателя. Профилировщик, работающий рядом, сам потребляет и греет, смещая точку срабатывания тепловых лимитов.
Типичные заблуждения
«Частота не растёт, потому что кончились идеи». Кончилось масштабирование напряжения. Формула мощности с квадратом по напряжению и физический предел подпороговой крутизны — конкретные ограничения, а не отсутствие изобретательности.
«TDP — это сколько потребляет процессор». TDP — проектная величина для системы охлаждения. Реальное потребление зависит от нагрузки и режима и бывает существенно и выше, и ниже.
«Разогнать процессор — почти бесплатно». Мощность растёт примерно как куб частоты в рабочем диапазоне: плюс 20% частоты обходится в заметно больше чем плюс 20% ватт и тепла.
«Понизить частоту — всегда сэкономить энергию». Только если динамическая составляющая доминирует. При заметных утечках выгоднее закончить быстрее и выключиться.
«Многоядерность придумали, чтобы было удобнее программировать». Наоборот: она сделала программирование труднее. Её выбрали потому, что широкая медленная конфигурация укладывается в бюджет мощности, а узкая быстрая — нет.
«Ускоритель экономит энергию, потому что быстрее считает». Он экономит потому, что меньше двигает данные и не платит за универсальность. Скорость — следствие.
«У меня хорошее охлаждение, значит производительность максимальная». Охлаждение снимает тепловой лимит, но остаются токовый и лимит по суммарной мощности; частота может упираться в них.
Мини-итог
- Мощность КМОП складывается из динамической (
α·C·V²·f) и статической (утечки). Первая — плата за работу, вторая — за существование включённой схемы. - Масштабирование Деннарда держало плотность мощности постоянной, пока напряжение снижалось вместе с размерами. Оно сломалось на физическом пределе подпороговой крутизны около 60 мВ на декаду.
- Поскольку рост частоты требует роста напряжения, мощность растёт примерно как куб частоты. Отсюда ограниченное по времени ускорение и постоянно меняющаяся рабочая частота.
- Энергия на такт растёт вместе с частотой: быстрый режим не только горячее, но и менее эффективен по джоулям на единицу работы.
- Тёмный кремний — прямое следствие: транзисторов больше, чем можно одновременно переключать. Ответы индустрии — специализация, гетерогенность и агрессивное управление питанием.
- Энергия уходит преимущественно на движение данных, а не на арифметику; соотношение между сложением и чтением из DRAM — три порядка.
- TDP — проектная величина теплоотвода, а не измеренное потребление. Тепловая инерция делает короткие и длинные прогоны несравнимыми.
- При фиксированном бюджете ватт выигрывает «шире и медленнее» — если работа распараллеливается. Это и есть причина многоядерности, широких векторов и массово-параллельных ускорителей.
Источники
- R. Dennard et al. Design of Ion-Implanted MOSFETs with Very Small Physical Dimensions. IEEE JSSC, 1974 — doi.org/10.1109/JSSC.1974.1050511. Первоисточник правила масштабирования.
- H. Esmaeilzadeh et al. Dark Silicon and the End of Multicore Scaling. ISCA, 2011 — doi.org/10.1145/2000064.2000108.
- M. Horowitz. Computing’s Energy Problem and what we can do about it. ISSCC, 2014 — doi.org/10.1109/ISSCC.2014.6757323. Источник соотношений энергии на операцию.
- J. Hennessy, D. Patterson. Computer Architecture: A Quantitative Approach — раздел про энергию и мощность как первичные ограничения проекта.
- N. Weste, D. Harris. CMOS VLSI Design — схемотехническая сторона: динамическая и статическая мощность, методы их снижения.
- Документация ядра Linux по управлению частотой и энергопотреблением — cpufreq и powercap.
- Руководство по
turbostat— man7.org: как читать реальные частоты, состояния сна и энергию. - G. Moore. Cramming More Components onto Integrated Circuits, 1965 — исходная формулировка закона, который часто путают с масштабированием Деннарда.
Что дальше
Мы разобрали, почему бюджет ватт стал главным ограничением проекта. Но у кристалла есть и второй бюджет — денежный, и он устроен не менее жёстко. Площадь кремния стоит денег, дефекты возникают с определённой плотностью, а стоимость выхода на передовой техпроцесс измеряется величинами, при которых чип обязан продаваться миллионами штук. Следующая глава разбирает, как кристалл физически изготавливают, что на самом деле означают названия техпроцессов и почему выход годных диктует архитектурные решения не меньше, чем физика.