Железо и архитектуры Мощность и пределы: почему частота больше не растёт
0%

Мощность и пределы: почему частота больше не растёт

Мощность и пределы: почему частота больше не растёт

С середины 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 = √2;
  • ёмкость падает как 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}")

Из такой таблицы видны две вещи, которые определяют всю современную практику.

  1. Верхние проценты частоты стоят непропорционально дорого. Прирост частоты на 25% в верхней части диапазона может стоить удвоения мощности. Именно поэтому режим максимальной частоты («турбо») действует ограниченное время и только на части ядер — иначе не отвести тепло.
  2. Энергия на такт растёт вместе с частотой. То есть быстрый режим не только горячее, но и менее эффективен: та же работа обходится дороже в джоулях.

Обратное тоже верно и лежит в основе DVFS (динамическое управление частотой и напряжением): снижение частоты вдвое с соответствующим снижением напряжения уменьшает мощность примерно вчетверо-ввосьмеро. Но выполнять работу вдвое дольше при вчетверо меньшей мощности — это вдвое меньше энергии, что выгодно… до определённого предела.

Гонка к простою

Предел задаётся статической мощностью. Пока схема включена, утечки текут. Если задача выполняется дольше, утечки текут дольше. Отсюда стратегия «гонка к простою» (race to idle): выполнить работу быстро на высокой частоте и выключить блок целиком, уйдя в глубокое состояние сна.

Какая стратегия выгоднее — зависит от соотношения динамической и статической составляющих и от глубины доступных состояний сна:

Ситуация Что выгоднее Почему
Динамическая мощность доминирует, глубокого сна нет работать медленно квадрат по напряжению перевешивает
Утечки заметны, есть глубокие состояния сна закончить быстро и выключиться выключенный блок не течёт
Нагрузка периодическая, короткие всплески закончить быстро и выключиться пробуждение стоит энергии, лучше делать его редко
Нагрузка непрерывная, ограничение по теплу работать на устойчивой частоте максимум не поддерживается физически

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

Тёмный кремний

Сложим два факта: транзисторов на кристалле становится больше по закону Мура, а плотность мощности после конца Деннарда растёт. Получим прямое следствие: не все транзисторы могут переключаться одновременно.

Доля кристалла, которую при фиксированном бюджете мощности приходится держать выключенной или на пониженной частоте, получила название тёмного кремния. Работа Esmaeilzadeh и соавторов (ISCA 2011) показала, что при сохранении тенденций эта доля растёт от поколения к поколению и что простое наращивание числа одинаковых ядер упирается в ту же стену, что и наращивание частоты.

Что из этого сделала индустрия — три ответа, и все три видны в устройстве современных чипов:

  • Специализация. Если нельзя держать включённым весь кристалл, пусть на нём будет много разных блоков, из которых в каждый момент работает нужный. Аппаратный кодек видео, блок шифрования, матричный ускоритель, контроллер дисплея — каждый простаивает большую часть времени, но в своей задаче на порядок эффективнее универсального ядра (Ускорители).
  • Гетерогенность. Крупные ядра для отзывчивости, компактные — для фоновой работы. Задача планировщика — держать включённым минимально достаточное (Многоядерность).
  • Агрессивное управление питанием. Всё, что не используется прямо сейчас, отключается — вплоть до отдельных блоков внутри ядра.

Бюджет мощности кристалла и путь тепла наружу

Куда на самом деле уходит энергия

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

Что делаем Относительно целочисленного сложения Почему столько
Целое сложение 32 бита 1 десятки вентилей, короткие провода
Сложение с плавающей точкой порядка 10 выравнивание порядков, нормализация, округление
Чтение из регистрового файла единицы-десятки многопортовая память, длинные линии выборки
Чтение из L1 десятки больший массив, сравнение тегов, трансляция адреса
Чтение из кэша последнего уровня сотни большой массив плюс путь через сеть кристалла
Передача через весь кристалл сотни ёмкость длинной линии и повторители на пути
Чтение из внешней DRAM тысячи выход за пределы кристалла, шина, протокол, активация строки
Накладные расходы одной команды на универсальном ядре сотни выборка, декодирование, переименование, планирование, отставка

Соотношения — порядки величины для техпроцесса около 45 нм по данным доклада Марка Горовица (ISSCC 2014). Абсолютные значения с тех пор снизились, а пропорции сохранились и даже усилились, и причина физическая: энергия пропорциональна перезаряжаемой ёмкости, ёмкость определяется длиной проводов и размером массива памяти, а провода масштабируются хуже транзисторов (Производство).

Три практических вывода, каждый из которых противоречит «здравому смыслу» из учебников по алгоритмам:

  1. Пересчитать заново часто дешевле, чем достать из памяти. Классическая оптимизация «сохраним результат, чтобы не считать дважды» может проиграть, если сохранённое значение уходит в память и возвращается оттуда.
  2. Локальность — это экономия ватт, а не только тактов. При фиксированном бюджете мощности одно эквивалентно другому.
  3. Ускоритель выигрывает движением данных, а не арифметикой. Систолический массив эффективен потому, что операнд, попав внутрь, переиспользуется много раз, не выезжая наружу.

Управление на кристалле: что происходит каждую миллисекунду

Современный кристалл — это система управления с обратной связью. Частота и напряжение не постоянны: они меняются десятки-сотни раз в секунду по показаниям датчиков.

Механизмы, которыми это реализуется:

  • Отключение тактирования (clock gating). Тактовый сигнал не подаётся на неиспользуемый блок. Убирает динамическую мощность, но не утечки. Дёшево и применяется повсеместно, вплоть до отдельных регистров.
  • Отключение питания (power gating). Блок обесточивается через транзистор-ключ. Убирает и утечки, но состояние теряется, а включение обратно стоит времени (порядок микросекунд) и энергии.
  • Домены питания и тактирования. Кристалл делится на области с независимыми напряжением и частотой: ядра, графика, некэшевая часть, контроллер памяти. Это позволяет не поднимать напряжение всему кристаллу ради одного занятого ядра.
  • Датчики и лимиты. Температура в нескольких точках, ток на входе, суммарная мощность в скользящем окне. Логика управления соблюдает несколько лимитов одновременно, и активным оказывается самый жёсткий в данный момент.

Из этой петли следует важное методическое правило измерений: короткий и длинный прогон одной и той же нагрузки дают разные результаты, и оба корректны. Прогрев обязателен, а результат нужно сопровождать указанием длительности и условий охлаждения (Бенчмаркинг).

Тепло: почему бюджет измеряется ваттами

Мощность превращается в тепло целиком. Отвод тепла описывается цепочкой тепловых сопротивлений: кристалл → корпус → термоинтерфейс → радиатор → воздух. Каждое звено даёт перепад температуры, пропорциональный потоку:

T_кристалла = T_среды + P · (R_кристалл-корпус + R_корпус-радиатор + R_радиатор-воздух)

Предельная рабочая температура кристалла — порядок 90-105 °C для кремния
в потребительских и серверных устройствах. Выше начинается деградация и отказы.

Отсюда классы устройств и их бюджеты — именно как порядки величины, а не как характеристики моделей:

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

TDP — это не измеренная мощность. Это проектная величина: сколько тепла обязана отводить система охлаждения при заданных условиях, чтобы устройство держало заявленный режим. Реальное потребление бывает и ниже (при простое), и выше (в кратковременном ускорении). Сравнивать устройства по TDP как по потреблению — методическая ошибка.

Отдельная проблема — плотность теплового потока. Даже при умеренной суммарной мощности отдельный участок кристалла (например, векторный блок под непрерывной нагрузкой) может греться намного сильнее остальных. Такие «горячие точки» ограничивают частоту всего ядра и объясняют, почему широкие векторные инструкции на части устройств исполняются на пониженной частоте: они переключают больше вентилей за такт, то есть повышают коэффициент активности α в формуле динамической мощности (SIMD и векторные расширения).

Что делать, когда упёрлись в бюджет мощности

Проектное решение выглядит одинаково на всех уровнях — от кристалла до дата-центра.

Пункт «шире и медленнее» заслуживает пояснения, потому что он противоречит интуиции. Два ядра на частоте 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.
  • Руководство по turbostatman7.org: как читать реальные частоты, состояния сна и энергию.
  • G. Moore. Cramming More Components onto Integrated Circuits, 1965 — исходная формулировка закона, который часто путают с масштабированием Деннарда.

Что дальше

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

Производство: литография, техпроцессы, выход годных

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов