Почему кэш память быстрее оперативной памяти
Запоминающее устройство КЭШ (cache) таит в себе много загадок. Увеличенное количество КЭШ-памяти характерно для топовых моделей CPU. Чем его больше, тем дороже процессор. Однако что же это дает? Давай попробуем разобраться!
SRAM и DDR SDRAM
Возникает вопрос: чем же отличаются оперативная память и КЭШ? Одно из таких различий – тип памяти. SRAM (Static Random Access Memory) – статическая память со случайным доступом. DDR SDRAM (Double Data Rate Synchronous Dynamic RAM) – синхронная динамическая память с удвоенной скоростью передачи данных. SDRAM сделана по принципу больше и дешевле. Поэтому на одну ячейку памяти приходится только один транзистор с конденсатором. Однако данные, хранящиеся в виде заряда на обкладках конденсатора, требуют частой регенерации, что замедляет доступ к ним. Чтение ячейки SDRAM происходит обычно в несколько тактов. Хоть рекламные проспекты и заявляют о том, что данные передаются с двойной частотой (DDR) 400 МГц, после адресации данные появляются только через несколько тактов работы системной шины. А процессор тем временем успевает отработать где-то в 10 раз тактов больше.
Ячейка SRAM состоит из нескольких транзисторов, образующих триггер, который не требует цикла регенерации. Благодаря чему адресация проходит намного быстрее - за один такт.
Содержание:
ОЗУ против кэш-памяти
Память компьютера организована в виде иерархии, и они организованы с учетом времени, необходимого для доступа к ним, стоимости и емкости. ОЗУ и кэш-память - два элемента в этой иерархии памяти. RAM (оперативная память) - это основная память, используемая в компьютере. Доступ к ее отдельным ячейкам памяти можно получить в любой последовательности, поэтому она называется оперативной памятью. ОЗУ делятся на две категории: статическое ОЗУ (SRAM) и динамическое ОЗУ (DRAM). Кэш-память - это специальная память, используемая ЦП (центральным процессором) компьютера с целью уменьшения среднего времени, необходимого для доступа к памяти.
Что такое оперативная память?
Что такое кэш-память?
Кэш-память - это специальная память, используемая ЦП с целью уменьшения среднего времени, затрачиваемого на доступ к памяти. Кэш-память относительно меньше по размеру, а также является более быстрой памятью, в которой хранятся наиболее часто используемые данные основной памяти. Когда есть запрос на чтение памяти, кеш-память проверяется, чтобы увидеть, существуют ли эти данные в кэш-памяти. Если эти данные находятся в кэш-памяти, тогда нет необходимости обращаться к основной памяти (для доступа к которой требуется больше времени), что снижает среднее время доступа к памяти. Как правило, для данных и инструкций используются отдельные кеши. Кэш данных обычно создается в виде иерархии уровней кеширования (иногда называемых многоуровневыми кэшами). L1 (уровень 1) и L2 (уровень 2) являются самыми верхними кэшами в этой иерархии кешей. L1 - это ближайший к основной памяти кэш, который проверяется первым. Кэш второго уровня является следующим в очереди и вторым по величине с основной памятью. L1 и L2 различаются по скорости доступа, местоположению, размеру и стоимости.
В чем разница между ОЗУ и кэш-памятью?
В иерархии памяти кеш-память ближе к ЦП по сравнению с ОЗУ. Кэш-память намного быстрее и дороже по сравнению с ОЗУ. Но емкость оперативной памяти больше, чем емкость кэш-памяти. Кроме того, кэш-память также организована в виде иерархии кешей L1, L2 и L3, которые различаются по скорости, стоимости и емкости.
Во всех центральных процессорах любого компьютера, будь то дешёвый ноутбук или сервер за миллионы долларов, есть устройство под названием «кэш». И с очень большой вероятностью он обладает несколькими уровнями.
Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Что такое кеш
Кэш хранит часто используемые данные ЦП. Процессор сначала проверяет кеш на наличие необходимых данных. Хотя оперативная память быстрая, она не такая быстрая, как кеш. Следовательно, хранение обычно требуемых данных в кеше выгодно для увеличения скорости вычислений.
Рисунок 1: Кэш и ОЗУ
Есть три типа кеша. Кэш 1 уровня самый маленький. Он расположен внутри процессора или процессора. Таким образом, он работает с той же скоростью, что и процессор. Кэши уровня 2 и уровня 3 являются внешними. Уровень 2 кеша больше, чем уровень 1 кеша. Если требуемые данные недоступны в кэше уровня 1, ЦП проверяет кэш уровня 2. Если требуемые данные недоступны как в кэшах уровня 1, так и уровня 2, ЦП проверяет кэш уровня 3. Если требуемые данные недоступны ни в одном из этих кэшей, ЦП получит доступ к ОЗУ. Кэш 1-го уровня - самый быстрый кеш из всех. Процессор может иметь несколько ядер. Ядро - это исполнительная единица ЦП. Каждое ядро может иметь отдельные кэши уровня 1 и уровня 2. Кеш уровня 3 распределяется между всеми ядрами.
Не только числа
Кэш повышает производительность, ускоряя передачу данных в логические блоки и храня поблизости копию часто используемых инструкций и данных. Хранящаяся в кэше информация разделена на две части: сами данные и место, где они изначально располагаются в системной памяти/накопителе — такой адрес называется тег кэша (cache tag).
Когда процессор выполняет операцию, которой нужно считать или записать данные из/в память, то он начинает с проверки тегов в кэше Level 1. Если нужные данные там есть (произошло кэш-попадание (cache hit)), то доступ к этим данным выполняется почти сразу же. Промах кэша (cache miss) возникает, если требуемый тег не найден на самом нижнем уровне кэша.
В кэше L1 создаётся новый тег, а за дело берётся остальная часть архитектуры процессора выполняющая поиск в других уровнях кэша (при необходимости вплоть до основного накопителя) данных для этого тега. Но чтобы освободить пространство в кэше L1 под этот новый тег, что-то обязательно нужно перебросить в L2.
Это приводит к почти постоянному перемешиванию данных, выполняемому всего за несколько тактовых циклов. Единственный способ добиться этого — создание сложной структуры вокруг SRAM для обработки управления данными. Иными словами, если бы ядро процессора состояло всего из одного ALU, то кэш L1 был бы гораздо проще, но поскольку их десятки (и многие из них жонглируют двумя потоками инструкций), то для перемещения данных кэшу требуется множество соединений.
Для изучения информации кэша в процессоре вашего компьютера можно использовать бесплатные программы, например CPU-Z. Но что означает вся эта информация? Важным элементом является метка set associative (множественно-ассоциативный) — она указывает на правила, применяемые для копирования блоков данных из системной памяти в кэш.
Представленная выше информация кэша относится к Intel Core i7-9700K. Каждый из его кэшей Level 1 разделён на 64 небольших блока, называемые sets, и каждый из этих блоков ещё разбит на строки кэша (cache lines) (размером 64 байта). «Set associative» означает, что блок данных из системы привязывается к строкам кэша в одном конкретном сете, и не может свободно привязываться к какому-то другому месту.
Инклюзивный кэш L1+L2, victim cache L3, политики write-back, есть даже ECC. Источник: Fritzchens Fritz
Ещё один аспект сложности кэша связан с тем, как хранятся данные между разными уровнями. Правила задаются в inclusion policy (политике инклюзивности). Например, процессоры Intel Core имеют полностью инклюзивные кэши L1+L3. Это означает, что одни данные в Level 1, например, могут присутствовать в Level 3. Может показаться, что это пустая трата ценного пространства кэша, однако преимущество заключается в том, что если процессор совершает промах при поиске тега в нижнем уровне, ему не потребуется обыскивать верхний уровень для нахождения данных.
В тех же самых процессорах кэш L2 неинклюзивен: все хранящиеся там данные не копируются ни на какой другой уровень. Это экономит место, но приводит к тому, что системе памяти чипа нужно искать ненайденный тег в L3 (который всегда намного больше). Victim caches (кэши-жертвы) имеют похожий принцип, но они используются для хранения информации, переносимой с более низких уровней. Например, процессоры AMD Zen 2 используют victim cache L3, который просто хранит данные из L2.
Существуют и другие политики для кэша, например, при которых данные записываются и в кэш, и основную системную память. Они называются политиками записи (write policies); большинство современных процессоров использует кэши write-back — это означает, что когда данные записываются на уровень кэшей, происходит задержка перед записью их копии в системную память. Чаще всего эта пауза длится в течение того времени, пока данные остаются в кэше — ОЗУ получает эту информацию только при «выталкивании» из кэша.
Графический процессор Nvidia GA100, имеющий 20 МБ кэша L1 и 40 МБ кэша L2
Для проектировщиков процессоров выбор объёма, типа и политики кэшей является вопросом уравновешивания стремления к повышению мощности процессора с увеличением его сложности и занимаемым чипом пространством. Если бы можно было создать 1000-канальные ассоциативные кэши Level 1 на 20 МБ такими, чтобы они при этом не занимали площадь Манхэттена (и не потребляли столько же энергии), то у нас у всех бы были компьютеры с такими чипами!
Самый нижний уровень кэшей в современных процессорах за последнее десятилетие практически не изменился. Однако кэш Level 3 продолжает расти в размерах. Если бы десять лет назад у вас было 999 долларов на Intel i7-980X, то вы могли бы получить кэш размером 12 МБ. Сегодня за половину этой суммы можно приобрести 64 МБ.
Подведём итог: кэш — это абсолютно необходимое и потрясающее устройство. Мы не рассматривали другие типы кэшей в CPU и GPU (например, буферы ассоциативной трансляции или кэши текстур), но поскольку все они имеют такую же простую структуру и расположение уровней, разобраться в них будет несложно.
Был ли у вас компьютер с кэшем L2 на материнской плате? Как насчёт слотовых Pentium II и Celeron (например, 300a) на дочерних платах? Помните свой первый процессор с общим L3?
На правах рекламы
Наша компания предлагает в аренду серверы с процессорами от Intel и AMD. В последнем случае — это эпичные серверы! VDS с AMD EPYC, частота ядра CPU до 3.4 GHz. Максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.
использование
Кэш содержит часто используемые данные ЦП. ОЗУ содержит программы и данные, которые в данный момент выполняются ЦП.
Оперативная память
Похожая ситуация сложилась и с оперативной памятью: при переходе от SDRAM к DDR SDRAM каких-то фантастических изменений в скорости работы не наблюдается. Не спасает положение и двухканальный режим работы DDR. Наши исследования в предыдущих номерах показали, что новый стандарт DDR II тоже не даст ощутимого прироста скорости.
При увеличении частоты работы памяти и уменьшении таймингов (количества тактов, которые требуются для доступа к ячейке) финансовые затраты намного более ощутимы, чем прирост производительности.
И, наконец, КЭШ. Его производительность должна расти вместе с процессором, поскольку теперь он располагается на кристалле и работает, как утверждают разработчики, на частоте CPU. Однако рекламные проспекты почему-то говорят нам об увеличении его объема!
скорость
ОЗУ быстрее, чем вторичные носители, но не так быстро, как кеш.
Видео: Разница между ОЗУ и кэш-памятью | Сравните разницу между похожими терминами
Заключение
И кеш, и оперативная память являются энергозависимой памятью. Разница между кешем и оперативной памятью заключается в том, что кеш - это быстрый компонент памяти, который хранит часто используемые данные ЦПУ, а оперативная память - это вычислительное устройство, которое хранит данные и программы, используемые в настоящее время ЦПУ. Вкратце, кеш быстрее и дороже оперативной памяти.
Ссылка:
1. Объяснение кэш-памяти процессора - что такое кэш-память ?, анимированные видеоролики PowerCert, 27 ноября 2016 г.
Что такое оперативная память
RAM также известен как основная память или первичная память, Обычно программы хранятся на жестком диске. Процессору требуется больше времени для доступа к жесткому диску. Поэтому программы, которые должны выполняться, заносятся в оперативную память, чтобы они могли выполняться быстрее. Для доступа к данным из ОЗУ требуется всего короткое время по сравнению с доступом к данным со вторичного носителя данных, такого как жесткий диск и твердотельный накопитель.
Рисунок 1: RAM
RAM означает Оперативная память, Это энергозависимая память, которая требует постоянного потока энергии для поддержания данных. Прерывания или сбои питания могут удалить данные, хранящиеся в оперативной памяти. Он может иметь 32-битные или 64-битные пути данных. Это относится к числу битов, которые передаются за 1 тактовый цикл. Компьютер с большим объемом оперативной памяти будет иметь более высокую производительность.
Существует в основном два типа оперативной памяти: SRAM (статическая RAM) и DRAM (динамическая RAM). DRAM состоит из конденсатора и транзистора. Конденсатор может меняться, разряжаться и представлять логический и логический ноль. Из-за конденсатора возникает ток утечки, который приводит к потере заряда конденсатора. Это может удалить контент в DRAM. Следовательно, DRAM требует постоянных циклов обновления для сохранения данных. Кроме того, SRAM содержит триггеры для хранения данных. Для сохранения данных не требуется циклов обновления, как в DRAM. SRAM быстрее и дороже, чем DRAM.
Множественно-ассоциативный КЭШ
N-Way Set Associative cache получил наибольшее распространение в «настольных» процессорах. В нем память, так же, как в КЭШ прямого отображения, разбита на жесткие области, поэтому по начальным битам адреса сразу можно обнаружить область, где примерно может находиться нужная ячейка. Однако в каждой области находится не одна строка из ОП, а несколько. Ими управляют маленькие модули ассоциативного КЭШа. В рамках каждой области хранится небольшое количество адресов оперативной памяти, значит и тегов тоже немного, следовательно и поиск по ним организовать несложно. То есть не требуется каких-то навороченных технических решений, зато теперь есть возможность записывать в КЭШ по небольшому куску последовательных данных из каждой области памяти. А именно на последовательных данных небольшого размера КЭШ и дает преимущества в производительности!
Стоимость
Хотя ОЗУ стоит дорого, оно не дорого в качестве кеша.
Как работает КЭШ
Намного быстрее загрузить текст из Интернета, чем вбивать на клавиатуре. Если программа находится в оперативной памяти, то она быстрее развернется и будет доступней, чем если грузить ее с HDD. Если нужной программулины нет в памяти, то операционная система довольно долго будет ее вылавливать, скрипя винчестером. КЭШ хранит часто используемые данные из оперативки, и если нужной инфы в КЭШ не оказалось, приходится обращаться в оперативку, а если ее нет и там, то к HDD. При этом скорость все меньше и меньше.
Вот и стремятся разработчики к тому, чтобы на каждом уровне иерархии памяти ее было побольше. Чтобы загрузил один раз, и не пришлось больше обращаться на нижний уровень по тормозным каналам. То есть вместо того чтобы стремиться увеличить скорости между ступенями, они стараются воткнуть побольше памяти, которая и так уже быстрая. Больше винчестер, больше оперативки, больше КЭШ. А как же эффективность?
Exclusive vs. Inclusive
В иерархии памяти обычно более быстрые уровни хранят избранные копии содержимого более медленных уровней. Например, в L2 КЭШе хранятся области из оперативной памяти, а в L1 хранятся области из L2. Такая архитектура называется инклюзивной (Inclusive).
Однако! Места на кристалле процессора мало, и приходится платить за каждый квадратный миллиметр кремниевой пластины. Несколько расточительно хранить на этом ограниченном пространстве две копии одних и тех же данных. Поэтому в эксклюзивной (Exclusive) архитектуре КЭШ после того как данные переданы из L2 в L1, их копия в L2 уничтожается. То есть в эксклюзивном КЭШе мы можем хранить объем информации L2+L1, а в инклюзивном только L2, так как в L1 находятся копии L2. Хотя в таком случае скорость КЭШа может уменьшаться, но эффективность увеличивается, по мнению компании AMD. Благодаря, кроме всего прочего, эксклюзивности КЭШ, процессоры AMD с меньшими тактовыми частотами смогли конкурировать с CPU Intel с более высокими частотами.
Ключевые области покрыты
1. Что такое кеш
- определение, функциональность
2. Что такое оперативная память
- определение, функциональность
3. Разница между кешем и оперативной памятью
- Сравнение основных различий
Влияние КЭШ на внешний вид CPU
Возьмем три процессора AMD K7, вот как зависит степень интеграции процессоров этого поколения от объема КЭШ L2:
- 25.2 миллионов транзисторов (152 Кб L1, 64 Кб L2)
- 37.2 миллионов транзисторов (152Кб L1, 256 Кб L2)
- 54.3 миллионов транзисторов (152Кб L1, 512 Кб L2)
Нетрудно посчитать, что один килобайт КЭШ L2 увеличивает степень интеграции процессора примерно на 66 тысяч транзисторов. Причем 512 Кб КЭШ L2 занимает больше половины площади кристалла. Что хорошо видно на фотографиях ядер с большим объемом КЭШ. То есть вместо этого дополнительного КЭШ мы бы вполне могли вместить второй процессор!
Похожая ситуация наблюдается и у двух процессоров Intel Pentium 4:
- 42 миллионов транзисторов (12 Кб L1tc + 8 Кб L1d, 256 Кб L2)
- 55 миллионов транзисторов (12 Кб L1tc + 8 Кб L1d, 512 Кб L2)
Здесь на каждый дополнительный килобайт приходится где-то 50 тысяч транзисторов.
Обрати внимание, кстати, что у процессоров AMD Athlon XP КЭШ L1 значительно больше L1 у Intel Pentium 4.
Вот здесь-то и виден ответ на вопрос, почему процессоры с большим КЭШ - дороже. Ведь с его увеличением растет степень интеграции и площадь кристалла, на одну пластину влезает меньше кристаллов, уменьшается выход годных.
Хотя производители часто предпочитают продавать процессоры с отключенным дополнительным объемом КЭШ. То есть ты имеешь, например, Intel Pentium 4 55 миллионов транзисторов с КЭШ L2 всего 256 Мб, при этом он греется сильнее, чем CPU со степенью интеграции 42 миллиона транзисторов.
Жесткие диски
Скорость передачи данных с жесткого диска ограничена скоростью его вращения, плотностью записи и количеством головок. Появление новых HDD с интерфейсом SATA и с частотой вращения 10000 оборотов в минуту не сильно изменило ситуацию. Параметры передачи данных улучшились не более чем на 50%.
Вместимость
Емкость кеша меньше, чем у ОЗУ, которое имеет большую емкость.
Иерархия памяти
Прежде чем добраться до АЛУ (Арифметико-Логического Устройства), данные и команды проходят долгий путь. А до АЛУ им нужно добежать поскорее, поскольку там-то и происходят все полезные вычисления. АЛУ – сердце любого процессора.
Основные условия
Кэш, основная память, первичная память, оперативная память
L1, L2, L3
Часто приходится видеть в прайсах, что один и тот же процессор с одинаковой тактовой частотой поставляется в двух вариантах, например с КЭШ L2 256 Кб и 512 Кб. Отсюда и цена разнится. Оказывается, внутри процессора есть также многоступенчатая иерархия памяти. L1 (Level 1) – это уровень самый близкий непосредственно к АЛУ. L2 обычно кэширует оперативную память, а L1 кэширует L2. В некоторых версиях процессоров между L2 и оперативной памятью добавляют уровень L3. Но в «настольных» процессорах на сегодняшний день чаще всего встречаются только два уровня: L1 и L2.
Чем же они отличаются? Последнее время производители в один голос утверждают, что оба уровня, а если есть третий, то и он тоже, работают на частоте ядра процессора. Однако L1, как правило, меньше по объему, чем L2. Раньше L2 выносился рядом с процессором на модуль для установки в SLOT 1. Перекочевав на кристалл CPU, L2 первоначально работал не на полной скорости процессора.
Производители не сознаются, но есть все основания предполагать, что L2 все же работает медленнее, чем L1. Ведь из-за увеличенного объема адресация должна идти дольше и сложнее. Как мы уже выяснили выше, в некоторых случаях оперативка может тормозить работу КЭШ, поэтому разумно разделить L2 и L1.
Но самое главное архитектурное различие в том, что L1 делится на КЭШ команд и КЭШ данных, в то время как в L2 находятся избранные копии содержимого оперативной памяти. Тут-то и начинаются игры производителей с производительностью. Например, на уровне L1 в процессоре Intel Pentium 4 находится Execution Trace cache, участвующий в работе разрекламированной технологии Hyper-Threading, которая превращает один физический процессор в два логических. У CPU AMD поколений K7 и K8 на уровне L1 происходит Predecode – предварительное декодирование команды, ускоряющее процесс ее выдачи.
Расположение
КЭШ быстрее оперативной памяти, отчасти благодаря своему положению. Ведь линии связи, идущие по материнской плате, и разъем пагубно влияют на скорость. КЭШ современного персонального компьютера расположен прямо на процессоре, благодаря чему удалось сократить линии связи и улучшить их параметры. Однако на первых PC КЭШ тоже устанавливался на материнской плате и выигрывал только за счет преимуществ SRAM и работы с процессорной шиной. Кстати такой тип памяти более дорогой и энергоемкий, именно поэтому он до сих пор не вытеснил DDR SDRAM, даже в видеоадаптерах.
Начиная с Intel Pentium II, микросхемы КЭШ-памяти перекочевали поближе к процессору, на отдельную плату, которая вставлялась в Slot 1. А в Intel Pentium Pro они в виде отдельного кристалла монтировались вместе с процессором в одном корпусе. И вот совсем недавно КЭШ стали делать полностью на одном кристалле с процессором.
Стало заметно, что теперь оперативная память тоже подбирается поближе к CPU: например, в процессорах AMD Athlon 64 контроллер оперативной памяти находится на кристалле, что, конечно, улучшает работу всей иерархии памяти. Ведь до этого контроллер располагался в чипсете материнской платы. Налицо и архитектурные изменения: некоторые модели AMD Athlon 64 имеют два независимых порта для DDR, что позволяет ощутимо увеличить скорость обмена с оперативкой.
Кэш: многоуровневая парковка
На приведённом выше изображении процессор (CPU) обозначен прямоугольником с пунктирной границей. Слева расположены ALU (arithmetic logic units, арифметико-логические устройства); это структуры, выполняющие математические операции. Хотя строго говоря, они не являются кэшем, ближайший к ALU уровень памяти — это регистры (они упорядочены в регистровый файл).
Каждый из них хранит одно число, например, 64-битное целое число; само значение может быть элементом каких-нибудь данных, кодом определённой инструкции или адресом памяти каких-то других данных.
Регистровый файл в десктопных процессорах довольно мал, например, в каждом из ядер Intel Core i9-9900K есть по два банка таких файлов, а тот, который предназначен для целых чисел, содержит всего 180 64-битных целых чисел. Другой регистровый файл для векторов (небольших массивов чисел) содержит 168 256-битных элементов. То есть общий регистровый файл каждого ядра чуть меньше 7 КБ. Для сравнения: регистровый файл потоковых мультипроцессоров (так в GPU называются аналоги ядер CPU) Nvidia GeForce RTX 2080 Ti имеет размер 256 КБ.
Регистры, как и кэш, являются SRAM, но их скорость не превышает скорость обслуживаемых ими ALU; они передают данные за один тактовый цикл. Но они не предназначены для хранения больших объёмов данных (только одного элемента), поэтому рядом с ними всегда есть более крупные блоки памяти: это кэш первого уровня (Level 1).
Одно ядро процессора Intel Skylake. Источник: Wikichip
На изображении выше представлен увеличенный снимок одного из ядер десктопного процессора Intel Skylake.
ALU и регистровые файлы расположены слева и обведены зелёной рамкой. В верхней части фотографии белым обозначен кэш данных первого уровня (Level 1 Data cache). Он не содержит много информации, всего 32 КБ, но как и регистры, он расположен очень близко к логическим блокам и работает на одной скорости с ними.
Ещё одним белым прямоугольником справа показан кэш инструкций первого уровня (Level 1 Instruction cache), тоже имеющий размер 32 КБ. Как понятно из названия, в нём хранятся различные команды, готовые к разбиению на более мелкие микрооперации (обычно обозначаемые μops), которые должны выполнять ALU. Для них тоже существует кэш, который можно классифицировать как Level 0, потому что он меньше (содержит всего 1 500 операций) и ближе, чем кэши L1.
Вы можете задаться вопросом: почему эти блоки SRAM настолько малы? Почему они не имеют размер в мегабайт? Вместе кэши данных и инструкций занимают почти такую же площадь на чипе, что основные логические блоки, поэтому их увеличение приведёт к повышению общей площади кристалла.
Но основная причина их размера в несколько килобайт заключается в том, что при увеличении ёмкости памяти повышается время, необходимое для поиска и получения данных. Кэшу L1 нужно быть очень быстрым, поэтому необходимо достичь компромисса между размером и скоростью — в лучшем случае для получения данных из этого кэша требуется около 5 тактовых циклов (для значений с плавающей запятой больше).
Кэш L2 процессора Skylake: 256 КБ SRAM
Но если бы это был единственный кэш внутри процессора, то его производительность наткнулась бы на неожиданное препятствие. Именно поэтому в ядра встраивается еще один уровень памяти: кэш Level 2. Это обобщённый блок хранения, содержащий инструкции и данные.
Он всегда больше, чем Level 1: в процессорах AMD Zen 2 он занимает до 512 КБ, чтобы кэши нижнего уровня обеспечивались достаточным объёмом данных. Однако большой размер требует жертв — для поиска и передачи данных из этого кэша требуется примерно в два раза больше времени по сравнению с Level 1.
Во времена первого Intel Pentium кэш Level 2 был отдельным чипом, или устанавливаемым на отдельной небольшой плате (как ОЗУ DIMM), или встроенным в основную материнскую плату. Постепенно он перебрался в корпус самого процессора, и, наконец, полностью интегрировался в кристалл чипа; это произошло в эпоху таких процессоров, как Pentium III и AMD K6-III.
За этим достижением вскоре последовал ещё один уровень кэша, необходимый для поддержки более низких уровней, и появился он как раз вовремя — в эпоху расцвета многоядерных чипов.
Чип Intel Kaby Lake. Источник: Wikichip
На этом изображении чипа Intel Kaby Lake в левой части показаны четыре ядра (интегрированный GPU занимает почти половину кристалла и находится справа). Каждое ядро имеет свой «личный» набор кэшей Level 1 и 2 (выделены белыми и жёлтым прямоугольниками), но у них также есть и третий комплект блоков SRAM.
Кэш третьего уровня (Level 3), хоть и расположен непосредственно рядом с одним ядром, является полностью общим для всех остальных — каждое ядро свободно может получать доступ к содержимому кэша L3 другого ядра. Он намного больше (от 2 до 32 МБ), но и намного медленнее, в среднем более 30 циклов, особенно когда ядру нужно использовать данные, находящиеся в блоке кэша, расположенного на большом расстоянии.
Ниже показано одно ядро архитектуры AMD Zen 2: кэши Level 1 данных и инструкций по 32 КБ (в белых прямоугольниках), кэш Level 2 на 512 КБ (в жёлтых прямоугольниках) и огромный блок кэша L3 на 4 МБ (в красном прямоугольнике).
Увеличенный снимок одного ядра процессора AMD Zen 2. Источник: Fritzchens Fritz
Но постойте: как 32 КБ могут занимать больше физического пространства чем 512 КБ? Если Level 1 хранит так мало данных, почему он непропорционально велик по сравнению с кэшами L2 и L3?
КЭШ прямого отображения
Direct Mapped cache – частный случай ассоциативного КЭШ. Только, чтобы избежать сложного поиска, разработчики разбили оперативную память на жесткие участки, по начальным битам адреса. То есть теперь оперативная память прямо отображается в КЭШ. А по начальным битам адреса можно точно узнать, где именно может находиться нужная ячейка. Естественно, данные хранятся не одни, а вместе с тегом, в котором есть остаток адреса. С помощью этого тега можно точно определить, какой именно адрес из жесткой области находится в КЭШ прямого отображения.
Такой КЭШ очень прост, но главный недостаток в том, что в него нельзя записать несколько последовательных массивов из оперативки. Из каждой области памяти может храниться только одна строка (несколько двоичных слов).
Это приводит к тому, что часть областей КЭШ пустует, в то время как другая постоянно обновляется из-за недостатка места.
Типы КЭШ
Выше мы уже разобрались, что процессор сначала обращается к КЭШ, а если нужных данных там нет, то задействуется медленная оперативная память. Давай рассмотрим происходящее подробнее.
Буфер записи
Из КЭШ можно не только читать данные, но и записывать их туда. Но тогда в оперативной памяти и в КЭШ будут разные значения. Для этого все изменения в КЭШ должны отражаться и на оперативке. Однако если после каждого изменения в КЭШ ждать пока они будут внесены в ОП (write-through), то прирост скорости сводится на нет. Поэтому используются буферы, в которых выставляются изменения. КЭШ продолжает нормально работать дальше, в то время как с буфера данные переписываются в оперативную память. Такой режим называется «write-back» (WB).
Ассоциативный КЭШ
Fully Associative cache называется так благодаря своей организации. Допустим, что у тебя 512 Мб оперативки (ОП), а КЭШ всего 512 Кб. Как определить, какие именно адреса из ОП хранятся в КЭШ? Очень просто: их надо сохранять. Когда какие-то данные подкачиваются в КЭШ, сохраняется не только содержимое ячейки оперативной памяти но и ее адрес. Ячейка, где хранится адрес, называется тегом. То есть содержимое полностью ассоциативного КЭШ представляет собой набор избранных адресов из оперативки и данные, которые по ним хранятся.
Процессор такой КЭШ практически не замечает - он отсылает запросы по адресам в оперативной памяти, и если их копия имеется в КЭШ, то тег совпадает с адресом ОП, и очень быстро нужная инфа предоставляется для обработки. Если нужного тега с адресом ОП нет, значит нужно лезть в оперативку, теряя драгоценные кванты процессорного времени.
Однако у такого великолепного КЭШ есть и недостатки: теги занимают много полезного места, довольно сложно проводить в них поиск нужного адреса. Необходимо запрашиваемый адрес сравнить с каждым тегом, в котором есть данные. Хотя в плане эффективности использования процессорного времени полностью ассоциативный КЭШ – одно из лучших решений.
Отношения между кешем и оперативной памятью
- Тип оперативной памяти, называемый SRAM, используется для кэширования.
Устройства ввода/вывода
Вначале данные хранятся на бумаге или в голове. Их вводят посредством клавиатуры, мыши, сканера. Устройства ввода/вывода – самые медлительные. Довольно медленно работают сети. Но тут уже проблема не технологическая, а финансовая. Быстрые каналы связи стоят очень дорого, поэтому многие используют модемы и домашние сети, которые никак не могут сравниться по скорости работы с оперативной памятью. Чуть лучше дело обстоит с высокоскоростными интерфейсами типа USB 2.0 и FireWire, однако они передают данные на небольшие расстояния, ограниченные несколькими метрами.
Выводы
К сожалению, трудно влезть в процессорное ядро и попытаться там что-либо включить или отключить. А потому зачастую сложно в тестах на пользовательских приложениях объективно судить о чистом влиянии КЭШ на производительность. Однако даже делая поправку на другие нововведения в архитектуре процессоров, уже сейчас видно, что для мультимедийных домашних задач объем КЭШ L2 и L3 не так уж и критичен. А работа в офисных приложениях вообще не требует от него большой производительности.
Однако разработчики, несмотря на явные тестовые результаты, будут рекламировать увеличенный объем КЭШ. Будут вынуждать нас приобретать новые еще более сильно греющиеся процессоры. Или, еще хуже того, появится тяжелый софт, требующий 1 Мб, а затем и 4 Мб КЭШ L2.
Хотя есть и другие пути развития: например, несколько процессоров на кристалле, или интеграция графического процессора с центральным.
Ну, чувак! Тут все просто. Оператива неизменно обращается к процу через контроллер памяти, который помимо ограничений по шине вынужден еще проводить кучу алгоритмов как то установка бита четности на каждом из тактов и синхронизировать это все с частотой CPU. Другое дело кэш. Эта ерунда служит буфером и стоком (для каждого из ядер проца, например) . Проц напрямую обращается в кэш со считыванем - записью типичных тактовых циклов (это в общем. На деле кэш подразделяется на уровни использующие отдельно команды, данные, инструкции)
1.Кеш память (любого уровня) работает на больших частотах в разы чем оперативная
2.Находится на одном кристале с процессором.
Потому что динамическиая память (то что оперативкой называете) конденсаторная. Ей нужны циклы регенерации и считывания строки и потом подача даных пользователю проге. КЭШ память хранит часть образа кусочками нужными из денамической. Самая быстрая полно ассоциативнная. Кэж может быт полуассоциативным и быть медленее. Но основной КЭШ всегда полно ассоциативен. Затраты в транзисторах более чем 6 раз. Да мощности они жрут мног коль транзюков много и скорость обращения больше. А первые процы обходились без КЭШа. максимум была очередь команд. Даже своп это тоже память только на диске. Вот и считайте цепочку КЭШ 1 уровня самый быстрый, КЭШ второго уровня чуть помедленее, КЭШ 3 уровня ущё медленее , оперативная память и далее диск. В итоге получается куча памяти по обьёму с разно скоростью. Но КЭШ всегда синхронизирован с оперативкой. Нет изменений нет изменений в оперативке. Чем короче код чтоб сдаными лёг в КЭШ тем быстрее прога. А теперь ещё смешнее. У многоядерных были КЭШи одним размером на ядро, а потом появился динамический размер. Если одному ядру много не надо , то другое забирает свободное. Ускорение существеное. Если физических процов многоядерных много, то это происходит внутри аждого проца между ядрами. Жаль не помните пенёк первый с отдельной статическими микрухами и микросхемой тегов памяти.
главное отличие между кешем и оперативной памятью в том, что кеш - это быстрый компонент памяти, который хранит часто используемые данные ЦП, в то время как ОЗУ является вычислительным устройством, которое хранит данные и программы, используемые в настоящее время ЦП.
Кэш-память - это меньший и быстрый компонент памяти в компьютере. Он содержит копии данных, которые обычно используются процессором. С другой стороны, ОЗУ является основной памятью, в которой хранятся программы и данные, используемые в текущий момент. Это помогает процессору получить доступ к данным за минимальное время. Кеш быстрее, чем ОЗУ. Если данные недоступны в кеше, ЦП получит доступ к ОЗУ.
Определение
Кэш-память - это компонент компьютера, который хранит данные, чтобы в будущем запросы на эти данные могли обслуживаться быстрее. ОЗУ - это форма хранения компьютерных данных, в которой хранятся данные и машинный код, используемые в данный момент.
Разница между кешем и оперативной памятью
Что такое кэш?
TL;DR: это небольшая, но очень быстрая память, расположенная в непосредственной близости от логических блоков центрального процессора.
Однако мы, разумеется, можем узнать о кэше гораздо больше…
Давайте начнём с воображаемой волшебной системы хранения: она бесконечно быстра, может одновременно обрабатывать бесконечное количество операций передачи данных и всегда обеспечивает надёжное и безопасное хранение данных. Конечно же, ничего подобного и близко не существует, однако если бы это было так, то структура процессора была бы гораздо проще.
Процессорам бы тогда требовались только логические блоки для сложения, умножения и т.п, а также система управления передачей данных, ведь наша теоретическая система хранения способна мгновенно передавать и получать все необходимые числа; ни одному из логических блоков не приходится простаивать в ожидании передачи данных.
Но, как мы знаем, такой волшебной технологии хранения не существует. Вместо неё у нас есть жёсткие диски или твердотельные накопители, и даже самые лучшие из них далеки от возможностей обработки, необходимых для современного процессора.
Великий Т'Фон хранения данных
Причина этого заключается в том, что современные процессоры невероятно быстры — им требуется всего один тактовый цикл для сложения двух 64-битных целочисленных значений; если процессор работает с частотой 4 ГГЦ, то это составляет всего 0,00000000025 секунды, или четверть наносекунды.
В то же время, вращающемуся жёсткому диску требуются тысячи наносекунд только для нахождения данных на дисках, не говоря уже об их передаче, а твердотельным накопителям — десятки или сотни наносекунд.
Очевидно, что такие приводы невозможно встроить внутрь процессоров, поэтому между ними будет присутствовать физическое разделение. Поэтому ещё добавляется время на перемещение данных, что усугубляет ситуацию.
Увы, но это Великий А'Туин хранения данных
Именно поэтому нам нужна ещё одна система хранения данных, расположенная между процессором и основным накопителем. Она должна быть быстрее накопителя, способна одновременно управлять множеством операций передачи данных и находиться намного ближе к процессору.
Ну, у нас уже есть такая система, и она называется ОЗУ (RAM); она присутствует в каждом компьютере и выполняет именно эту задачу.
Почти все такие хранилища имеют тип DRAM (dynamic random access memory); они способны передавать данные гораздо быстрее, чем любой накопитель.
Однако, несмотря на свою огромную скорость, DRAM не способна хранить такие объёмы данных.
Одни из самых крупных чипов памяти DDR4, разработанных Micron, хранят 32 Гбит, или 4 ГБ данных; самые крупные жёсткие диски хранят в 4 000 раз больше.
Итак, хоть мы и повысили скорость нашей сети данных, нам потребуются дополнительные системы (аппаратные и программные), чтобы разобраться, какие данные должны храниться в ограниченном объёме DRAM, готовые к обработке процессором.
DRAM могут изготавливаться в корпусе чипа (это называется встроенной (embedded) DRAM). Однако процессоры довольно малы, поэтому в них не удастся поместить много памяти.
10 МБ DRAM слева от графического процессора Xbox 360. Источник: CPU Grave Yard
Подавляющее большинство DRAM расположено в непосредственной близости от процессора, подключено к материнской плате и всегда является самым близким к процессору компонентом. Тем не менее, эта память всё равно недостаточно быстра…
DRAM требуется примерно 100 наносекунд для нахождения данных, но, по крайней мере, она способна передавать миллиарды битов в секунду. Похоже, нам нужна ещё одна ступень памяти, которую можно разместить между блоками процессора и DRAM.
На сцене появляется оставшаяся ступень: SRAM (static random access memory). DRAM использует микроскопические конденсаторы для хранения данных в виде электрического заряда, а SRAM для той же задачи применяет транзисторы, которые работают с той же скоростью, что и логические блоки процессора (примерно в 10 раз быстрее, чем DRAM).
Разумеется, у SRAM есть недостаток, и он опять-таки связан с пространством.
Память на основе транзисторов занимает гораздо больше места, чем DRAM: в том же размере, что чип DDR4 на 4 ГБ, можно получить меньше 100 МБ SRAM. Но поскольку она производится по тому же технологическому процессу, что и CPU, память SRAM можно встроить прямо внутрь процессора, максимально близко к логическим блокам.
С каждой дополнительной ступенью мы увеличивали скорость перемещаемых данных ценой хранимого объёма. Мы можем продолжить и добавлять новые ступени,, которые будут быстрее, но меньше.
И так мы добрались до более строгого определения понятия кэша: это набор блоков SRAM, расположенных внутри процессора; они обеспечивают максимальную занятость процессора благодаря передаче и сохранению данных с очень высокими скоростями. Вас устраивает такое определение? Отлично, потому что дальше всё будет намного сложнее!
Объем и скорость
Чем больше памяти, тем она медленнее. Окружающий мир хранит бесконечное количество информации, и тебе не хватит жизни, чтобы это все сфотографировать, нарисовать или описать. Весь Интернет за день не скачаешь. Чем ближе к АЛУ, тем меньше памяти: окружающий мир – сеть – HDD – оперативная память – КЭШ.
За последнее десятилетие частоты процессоров возросли от считанных мегагерц до нескольких гигагерц. Частоты оперативной памяти с трудом достигают 200 МГц, если не учитывать всевозможные дуальные режимы (типа DDR и Dual Channel DDR), что является в некотором роде рекламным трюком.
А вот объемы памяти возросли. Винчестеры от нескольких десятков мегабайт увеличились в объеме до сотен гигабайт. От нескольких мегабайт до нескольких о8габайт прибавила в весе оперативка. КЭШ увеличился от нескольких килобайт до нескольких мегабайт. То есть в индустрии памяти производители делают ставку совсем не на скорость работы памяти, а на ее объем. И вот почему.
Эффективность КЭШ
КЭШ эффективен на небольших последовательных объемах данных. Если процессор обращается в КЭШ и не находит там нужной ячейки, то из оперативной памяти подгружается целая строка. То есть не только искомая ячейка, но и все, что были по соседству. За счет этого повышается вероятность того, что при следующем запросе нужные данные окажутся в КЭШ, и не нужно тратить время на обращение к медленной оперативной памяти. И действительно, если мы запросили первые три байта программы из памяти, то нам понадобятся и следующие шестьсот.
Потому-то бюджетные процессоры (например, Intel Celeron) с урезанным КЭШем так популярны, что на производительность в мультимедийных задачах (связанных с обработкой больших массивов данных) объем КЭШа сильно не влияет, даже несмотря на урезанную частоту работы шины Intel Celeron.
Показательны тут и результаты нашего тестирования в DOOM III. Выяснилось, что при увеличении объема оперативной памяти от 256 Мб до 1 Гб производительность выросла с 34 до 54 FPS (Frame Per Second). То есть всего в полтора раза, хотя объем памяти вырос в 4 раза! Использование DDR в двуканальном режиме дало жалкие 2 FPS против одноканального режима.
Тяжело КЭШ-памяти приходится, если обращения идут не к последовательным адресам, а к случайным. Тут вероятность того, что нужных данных не окажется, повышается. И снова CPU приходится простаивать в ожидании загрузки нужной ячейки из оперативки.
Итак, становится понятно, что увеличить быстродействие КЭШ и его объем недостаточно - нужно реформировать всю иерархию памяти ПК. А 1 Мб L2 КЭШ, или 1 Гб DDR погоды не сделают. Для большинства пользовательских приложений, включая самые современные игры, хватит и меньшего объема памяти!
Читайте также: