Где именно в компьютере расположены кэши L1, L2 и L3?
Я знаю, что мы используем кэш для повышения производительности, выбирая ДАННЫЕ и ИНСТРУКЦИИ из кэша, а не из основной памяти.
Ниже приведены мои вопросы.
- Где именно расположен кэш L1? На чипе ЦП?
Где именно расположен кэш L2?
Где именно расположен кэш L3 на материнской плате?
Я думаю, что новейшие SMP-процессоры используют трехуровневую кэш-память, поэтому я хочу понять иерархию уровней кэш-памяти и их архитектуру.
решение1
Начнем вот с чего:
Я думаю, что новейшие SMP-процессоры используют трехуровневую кэш-память, поэтому я хочу понять иерархию уровней кэш-памяти и их архитектуру.
Чтобы понять, что такое кэши, вам нужно знать несколько вещей:
У ЦП есть регистры. Значения в них можно использовать напрямую. Нет ничего быстрее.
Однако мы не можем добавлять бесконечное количество регистров к чипу. Эти вещи занимают место. Если мы делаем чип больше, он становится дороже. Частично это происходит потому, что нам нужен чип большего размера (больше кремния), но также и потому, что увеличивается количество чипов с проблемами.
(Представьте себе воображаемую пластину площадью 500 см2 . Я отрезаю от нее 10 чипов, каждый размером 50 см2 . Один из них сломан. Я выбрасываю его, и у меня остается 9 рабочих чипов. Теперь беру ту же пластину и отрезаю от нее 100 чипов, каждый в десять раз меньше. Один из них сломан. Я выбрасываю сломанный чип, и у меня остается 99 рабочих чипов. Это лишь малая часть потерь, которые я бы понес в противном случае. Чтобы компенсировать более крупные чипы, мне пришлось бы запросить более высокую цену. Больше, чем просто цена за дополнительный кремний.)
Это одна из причин, почему нам нужны небольшие и доступные по цене чипы.
Однако чем ближе кэш к процессору, тем быстрее к нему можно получить доступ.
Это также легко объяснить: электрические сигналы распространяются со скоростью, близкой к скорости света. Это быстро, но все же конечная скорость. Современные процессоры работают с тактовой частотой ГГц. Это тоже быстро. Если я возьму процессор с частотой 4 ГГц, то электрический сигнал может пройти около 7,5 см за такт. Это 7,5 см по прямой линии. (Микросхемы — это все, что угодно, но только не прямые соединения). На практике вам понадобится значительно меньше этих 7,5 см, поскольку это не дает времени для микросхем представить запрошенные данные и для сигнала на обратное перемещение.
В итоге мы хотим, чтобы кэш был физически как можно ближе. А это значит большие чипы.
Эти два фактора необходимо сбалансировать (производительность и стоимость).
Где именно в компьютере расположены кэши L1, L2 и L3?
Предположим, что речь идет только об аппаратном обеспечении в стиле ПК (мэйнфреймы существенно отличаются, в том числе и по соотношению производительности и стоимости);
IBM XT
Оригинальный 4,77 МГц: кэш отсутствует. ЦП обращается к памяти напрямую. Чтение из памяти будет происходить по такой схеме:
- Процессор помещает адрес, который он хочет прочитать, на шину памяти и устанавливает флаг чтения.
- Память помещает данные на шину данных.
- Процессор копирует данные из шины данных во внутренние регистры.
80286 (1982)
По-прежнему нет кэша. Доступ к памяти не был большой проблемой для версий с более низкой скоростью (6 МГц), но более быстрая модель работала на частоте до 20 МГц и часто требовала задержки при доступе к памяти.
Тогда вы получите такой сценарий:
- Процессор помещает адрес, который он хочет прочитать, на шину памяти и устанавливает флаг чтения.
- Память начинает помещать данные на шину данных. Процессор ждет.
- Память завершила прием данных и теперь они стабильно подключены к шине данных.
- Процессор копирует данные из шины данных во внутренние регистры.
Это дополнительный шаг, потраченный на ожидание памяти.В современной системе это может быть легко 12 шагов, поэтому у нас есть кэш.
80386: (1985)
Процессоры становятся быстрее. Как за такт, так и за счет работы на более высоких тактовых частотах.
ОЗУ становится быстрее, но не настолько, как процессоры.
В результате требуется больше состояний ожидания. Некоторые материнские платы обходят это, добавляя кэш (это будет кэш 1- го уровня) на материнскую плату.
Чтение из памяти теперь начинается с проверки, есть ли данные уже в кэше. Если да, то они считываются из гораздо более быстрого кэша. Если нет, то та же процедура, что описана для 80286
80486: (1989)
Это первый ЦП этого поколения, который имеет кэш на ЦП.
Это унифицированный кэш объемом 8 КБ, что означает, что он используется для данных и инструкций.
Примерно в это время становится обычным размещать 256 КБ быстрой статической памяти на материнской плате в качестве кэша 2 -го уровня. Таким образом, кэш 1- го уровня на ЦП, кэш 2 -го уровня на материнской плате.
80586 (1993)
586 или Pentium-1 использует кэш 1-го уровня, разделенный на 8 КБ для данных и инструкций. Кэш был разделен так, чтобы кэши данных и инструкций можно было индивидуально настраивать для их конкретного использования. У вас по-прежнему есть небольшой, но очень быстрый 1 -й кэш около ЦП и больший, но более медленный 2 -й кэш на материнской плате. (На большем физическом расстоянии).
В той же области, где производился Pentium 1, Intel выпустилаПентиум Про('80686'). В зависимости от модели этот чип имел 256Кб, 512Кб или 1Мб кэша на борту. Он также был намного дороже, что легко объяснить с помощью следующей картинки.
Обратите внимание, что половина пространства в чипе занята кэшем. И это для модели 256 КБ. Больше кэша было технически возможно, и некоторые модели выпускались с кэшами 512 КБ и 1 МБ. Рыночная цена на них была высокой.
Также обратите внимание, что этот чип содержит два кристалла. Один с реальным ЦП и первым кэшем , а второй кристалл с 256 КБ второго кэша .
Пентиум-2
Pentium 2 — это ядро Pentium Pro. По экономическим причинам в ЦП нет 2 -го кэша. Вместо этого то, что продается как ЦП, представляет собой печатную плату с отдельными чипами для ЦП (и 1- го кэша) и 2 -го кэша.
По мере развития технологий и начала создания чипов с меньшими компонентами становится финансово возможным поместить 2 -й кэш обратно в реальный кристалл ЦП. Однако разделение все еще существует. Очень быстрый 1 -й кэш прижимается к ЦП. С одним 1- м кэшем на ядро ЦП и большим, но менее быстрым 2 -м кэшем рядом с ядром.
Пентиум-3
Пентиум-4
Это не относится ни к Pentium-3, ни к Pentium-4.
Примерно в это время мы достигли практического предела того, насколько быстро мы можем тактировать процессоры. 8086 или 80286 не нуждались в охлаждении. Pentium-4, работающий на частоте 3,0 ГГц, производит так много тепла и потребляет так много энергии, что становится более практичным разместить два отдельных процессора на материнской плате, а не один быстрый.
(Два процессора с частотой 2,0 ГГц потребляли бы меньше энергии, чем один идентичный процессор с частотой 3,0 ГГц, но могли бы выполнять больше работы).
Эту проблему можно решить тремя способами:
- Сделайте процессоры более эффективными, чтобы они выполняли больше работы на той же скорости.
- Использовать несколько процессоров
- Используйте несколько процессоров в одном «чипе».
1) Это продолжающийся процесс. Он не новый и не остановится.
2) Было сделано на ранней стадии (например, с двумя материнскими платами Pentium-1 и чипсетом NX). До сих пор это был единственный вариант для создания более быстрого ПК.
3) Требуются процессоры, в которых несколько «ядер процессора» встроены в один чип. (Затем мы назвали такой процессор двухъядерным процессором, чтобы усилить путаницу. Спасибо маркетингу :) )
В наши дни, чтобы избежать путаницы, мы просто называем процессор «ядром».
Теперь существуют такие чипы, как Pentium-D (duo), которые по сути представляют собой два ядра Pentium-4 на одном чипе.
Помните картинку старого pentium-Pro? С огромным размером кэша?
Смотритедвабольшие площади на этой картинке?
Оказывается, мы можем разделить этот кэш 2 -го уровня между двумя ядрами ЦП. Скорость немного упадет, но общий кэш 2 -го уровня размером 512 КБ часто быстрее, чем добавление двух независимых кэшей 2 -го уровня в два раза меньшего размера.
Это важно для вашего вопроса.
Это означает, что если вы что-то читаете из одного ядра ЦП, а затем пытаетесь прочитать это из другого ядра, которое использует тот же кэш, то вы получите кэш-попадание. Доступ к памяти не потребуется.
Поскольку программы мигрируют между ЦП, в зависимости от нагрузки, количества ядер и планировщика, вы можете получить дополнительную производительность, закрепив программы, использующие одни и те же данные, на одном ЦП (попадания в кэш на уровне L1 и ниже) или на одних и тех же ЦП, которые совместно используют кэш L2 (и, таким образом, получать промахи на уровне L1, но попадания на чтения кэша L2).
Таким образом, в более поздних моделях вы увидите общие кэши 2-го уровня.
Если вы программируете для современных процессоров, то у вас есть два варианта:
- Не беспокойтесь. ОС должна уметь планировать вещи. Планировщик оказывает большое влияние на производительность компьютера, и люди потратили много усилий на его оптимизацию. Если вы не делаете что-то странное или не оптимизируете для одной конкретной модели ПК, вам лучше использовать планировщик по умолчанию.
- Если вам нужна максимальная производительность, а более быстрое оборудование недоступно, попробуйте оставить потоки, которые обращаются к одним и тем же данным, на одном ядре или на ядре с доступом к общему кэшу.
Я понимаю, что я еще не упомянул кэш L3, но они не отличаются. Кэш L3 работает так же. Больше, чем L2, медленнее, чем L2. И он часто используется совместно ядрами. Если он присутствует, он намного больше, чем кэш L2 (иначе его наличие не имело бы смысла), и он часто используется совместно всеми ядрами.
решение2
Что кэши являются внутренними компонентами процессора. Некоторые из них являются общими для ядер, некоторые — индивидуальными, в зависимости от реализации. Но все они находятся на чипе. Некоторые подробности: Процессор Intel Intel® Core™ i7, взятыйздесь:
- Кэш первого уровня (L1) объемом 32 КБ для инструкций и 32 КБ для данных для каждого ядра
- Общий кэш второго уровня (L2) для инструкций и данных объемом 256 КБ для каждого ядра
- 8 МБ общего кэша инструкций/данных последнего уровня (L3), общего для всех ядер
Фотография чипа процессора (извините, точную модель не знаю). Видно, что кэш занимает значительную площадь на чипе:
решение3
Кэш почти всегда находится на чипе для быстрого доступа. Вот хорошая диаграмма, показывающая четырехъядерный кристалл процессора Intel с выделенным кэшем L3. Когда вы смотрите на такие изображения кристалла процессора, большие однородные области обычно являются банками памяти на чипе, используемыми в качестве кэша.
решение4
Я не уверен насчет L3, но L1/L2 всегда находится на CPU. С точки зрения иерархии, в основном, L1 — это обычно кэш инструкций, L2 и L3 — кэши данных.