Кэш процессора — что это такое и как он заставляет ваш компьютер работать быстрее (часть 1)

Кэш-память: что это такое и как она заставляет ваш компьютер работать быстрее
Представьте, что вы гениальный учёный, который решает в уме сложнейшие задачи. Но у вас катастрофически короткая память. Каждый раз, когда вам понадобится формула или число, вам придётся бежать к справочнику. Вы бегаете туда-сюда, и большую часть времени тратите не на решение, а на дорогу. Какой бы гениальный ни был ваш мозг, эффективность его работы будет слабая.
реклама
Именно так и «чувствовал» себя процессор компьютера к середине 1970-х годов. Инженеры научились делать очень быстрые процессоры, которые могли щёлкать операции как орехи. Но оперативная память (ОЗУ), где хранятся все данные и программы, просто не поспевала за ними. Процессор простаивал, ожидая, когда память «подаст» ему следующую порцию информации. Возник разрыв в производительности.
Нужно было простое, но гениальное решение. И оно нашлось. Инженеры предложили дать процессору его собственную, очень маленькую, но невероятно быструю память. Своего рода блокнот, куда он будет записывать самые нужные на данный момент данные. Так, чтобы к ним можно было обратиться мгновенно, не бегая каждый раз к огромному «справочнику». Этот «блокнот» и есть кэш-память процессора.
Пройдёмся по истории этого изобретения: от первых попыток в громоздких мэйнфреймах до сложнейших многоуровневых структур внутри современных чипов. Мы разберёмся, как работает кэш, почему без него невозможен ни один современный процессор и какие проблемы инженерам приходится решать до сих пор.
Место кэша в системе памяти
Глава 1: Рождение идеи (1970-е — 1980-е)
реклама
Чтобы понять, насколько революционной была идея кэша, нужно мысленно перенестись в эпоху, когда компьютеры были размером со шкаф, а их вычислительная мощность — меньше, чем у сегодняшнего MP3-плеера.
Первые предпосылки: ускорение мэйнфреймов
В 1960-х годах царствовали мэйнфреймы. Это были огромные, дорогие и относительно медленные машины. Но даже тогда инженеры заметили неприятную тенденцию: процессоры начинали тратить впустую всё больше тактов в ожидании данных из основной памяти. Память на ферритовых сердечниках (которая была стандартом в то время) была надёжной, но не особо быстрой. Нужен был буфер. Промежуточный этап. И первыми его реализовали в компании IBM.
Первый коммерческий кэш: IBM System/360 Model 85
реклама
В 1969 году IBM представила мэйнфрейм System/360 Model 85. Это был один из первых коммерческих компьютеров, в котором использовалось то, что мы сейчас называем кэш-памятью. Правда, тогда она называлась «высокоскоростным буферным хранилищем» (high-speed buffer storage).
System/360 Model 85
Как это выглядело? Это была не часть процессора, а отдельный модуль, собранный на быстрой, по тем временам, полупроводниковой памяти. Его объём был крошечным — всего 16 или 32 килобайт (в зависимости от модификации). Этот буфер был промежуточным звеном между быстрым процессором и медленной основной памятью. Если процессор запрашивал данные, которые уже находились в этом буфере, то получал их в разы быстрее.
В результате производительность системы взлетела. Это был громкий успех и доказательство того, что сама идея промежуточного накопителя работает. Однако такая память была очень дорогой и потому оставалась уделом лишь самых мощных и дорогих моделей.
реклама
Революция: кэш переезжает «поближе к дому»
В 1980-х на сцену вышли персональные компьютеры. Процессоры вроде Intel 80286 и 80386 стали ещё быстрее, и проблема «голодания» стала актуальной и для них.
Первым шагом к массовости стало появление внешнего кэша. Поскольку разместить быструю память прямо на кристалле процессора было ещё технологически сложно и дорого, инженеры пошли на хитрость. Они разместили специальные микросхемы быстрой памяти (SRAM) прямо на материнской плате, рядом с процессором.
Pentium II («Tonga») с распаянным на плате кэшем L2 (процессор более современный, фото для примера)
Этот кэш работал на частоте материнской платы, что было медленнее, чем частота самого CPU, но всё равно гораздо быстрее основной оперативной памяти (DRAM). Уже тогда это было серьёзное улучшение, но главный прорыв ждал своего часа.
Этим прорывом стал процессор Intel 80486DX, вышедший в 1989 году. В отличие от своего предшественника (386-го), «четыреста восемьдесят шестой» был не просто усовершенствованной версией. Это была принципиально новая архитектура.
Intel 80486DX
Инженеры Intel впервые разместили кэш первого уровня (L1) на одном кристалле с самим процессором. Объём этого кэша был всего 8 КБ, по 4 КБ для данных и для инструкций. Но эффект был ошеломляющим. Теперь процессор мог обращаться к самым нужным данным с той же скоростью, с которой работал он сам. Не было никаких задержек на общение по внешней шине. «Совмещение» памяти и процессора позволило реализовать более сложные механизмы предсказания и упреждающей загрузки данных. Наконец-то кэш перестал быть эксклюзивной технологией для серверов и мэйнфреймов. Он пришёл в каждый дом.
Процессор 80486 был гораздо быстрее 386-го при сравнимой тактовой частоте. Превосходство во многом обеспечивалось наличием встроенного кэша. Это был момент, когда кэш-память доказала свою абсолютную необходимость. Дорога в будущее, где кэш станет многоуровневым и сложным, была открыта.
Глава 2: Как это работает? Логика, а не магия
Итак, у процессора появился этот быстрый «блокнот». Но как им пользоваться? Как решить, что в него записать? Ведь он очень маленький, а данных в оперативной памяти - гигабайты (по сегодняшним меркам).
Здесь всё строится на одной ключевой идее, которую вы на себе испытываете постоянно. Она называется принципом локальности. Это не какой-то закон физики, а просто наблюдение за тем, как программы (и люди) обычно работают с данными.
Вы сейчас читаете эту статью. Вы, скорее всего, читаете её по порядку, предложение за предложением. Это называется пространственная локальность. Если вы прочитали одно слово, следующее, с огромной вероятностью, находится рядом. Программы ведут себя так же. Если процессор обработал команду по одному адресу памяти, следующая команда, скорее всего, лежит по соседнему адресу. Или если он взял элемент из массива данных, ему, вероятно, скоро понадобятся и соседние элементы.
Ещё существует временна́я локальность. Представьте, что вам нужно перемножить два числа, пусть это будет 7x8. Немного посчитав, вы ответите: 56. Скорее всего, вы будете помнить этот ответ ещё пару минут. И если вам снова нужно будет перемножить эти числа вы сразу же скажете, что их произведение равно 56, не проводя вычисления заново. Так и процессор: если он один раз обратился к каким-то данным (например, к переменной в цикле), высока вероятность, что он обратится к ним снова в ближайшем будущем. Ему не придётся искать их в основной памяти, ведь они записаны у него в кэше. Может пример не совсем корректен, но главное, что вы уловили смысл.
Вот и весь секрет. Кэш работает на этих простых принципах. Когда процессор вынужден пойти в медленную оперативную память за каким-то байтом, он не берёт его один. Он забирает сразу целый «блок» (или строку) данных вокруг этого байта. И помещает эту копию в свой быстрый кэш. Дальше начинается обыденная магия. Процессор снова и снова проверяет: а есть ли нужные мне данные в кэше?
Рассмотрим два варианта:
- Попадание (Cache Hit): Данные в кэше есть. Всё происходит мгновенно. Процессор счастлив и работает на полной скорости.
- Промах (Cache Miss): Данных в кэше нет. Приходится снова идти в основную память. Это медленно. Процессор скучает.
Вся логика кэша — это искусство максимизировать количество попаданий и минимизировать промахи. Чем точнее кэш предсказывает, какие данные понадобятся процессору, тем быстрее работает вся система.
Надеюсь, что основная идея стала вам понятна. На этом пока закончим. В следующей части разберёмся зачем понадобилось делать многоуровневую иерархию кэш-памяти и как она работает. Узнаем, какую цену пришлось заплатить за высокую скорость и при чём здесь когерентность. А также порассуждаем, в каком направлении будет двигаться технология, когда упрётся в физические ограничения.
Теги
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.


Комментарии Правила