Начнем с этого:
Я думаю, что последние процессоры SMP используют 3-уровневые кэши, поэтому я хочу понять иерархию уровней кэша и их архитектуру.
Чтобы понять кеши, вам нужно знать несколько вещей:
Процессор имеет регистры. Значения в этом могут быть непосредственно использованы. Нет ничего быстрее.
Однако мы не можем добавлять бесконечные регистры в чип. Эти вещи занимают место. Если мы сделаем чип больше, он станет дороже. Частично это связано с тем, что нам нужен чип большего размера (больше кремния), а также потому, что количество проблемных чипов увеличивается.
(Представьте себе воображаемую пластину размером 500 см 2. Я нарезал из нее 10 фишек, каждая из которых имеет размер 50 см 2. Одна из них сломана. Я выбрасываю ее и оставляю ей 9 рабочих фишек. Теперь возьмите ту же пластину и нарежу 100 чипов от него, каждый в десять раз меньше. Один из них сломан. Я выбрасываю сломанный чип, и у меня остается 99 рабочих чипов. Это часть потерь, которые в противном случае были бы у меня. Чтобы компенсировать больший чипсы мне нужно было бы спросить более высокие цены. Больше, чем просто цена на дополнительный кремний)
Это одна из причин, почему нам нужны маленькие, доступные по цене чипы.
Однако чем ближе кэш-память к процессору, тем быстрее он может быть доступен.
Это также легко объяснить; Электрические сигналы распространяются со скоростью, близкой к скорости света. Это быстро, но все же конечная скорость. Современный процессор работает с тактовой частотой ГГц. Это тоже быстро. Если я возьму процессор 4 ГГц, то электрический сигнал может проходить около 7,5 см за такт. Это 7,5 см по прямой. (Чипсы - это не прямые соединения). На практике вам понадобится значительно меньше этих 7,5 см, поскольку это не дает чипам времени на представление запрошенных данных и обратного сигнала.
Суть в том, что мы хотим, чтобы кэш был максимально приближен к физическому. Что означает большие фишки.
Эти два должны быть сбалансированы (производительность против стоимости).
Где именно кэш-память L1, L2 и L3 находится в компьютере?
Предполагается, что стиль ПК только аппаратный (мэйнфреймы довольно разные, в том числе в соотношении производительности и стоимости);
IBM XT
Оригинальный 4.77Mhz один: без кеша. Процессор обращается к памяти напрямую. Чтение из памяти будет следовать этой схеме:
- Процессор помещает адрес, который он хочет прочитать, на шину памяти и устанавливает флаг чтения.
- Память помещает данные на шину данных.
- ЦП копирует данные с шины данных во свои внутренние регистры.
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 выпустила Pentium Pro ('80686'). В зависимости от модели этот чип имел 256 КБ, 512 КБ или 1 МБ кэш-памяти. Это было также намного дороже, что легко объяснить с помощью следующей картины.
Обратите внимание, что половина места в чипе используется кешем. И это для модели 256 КБ. Технически возможно увеличить объем кэша, а некоторые модели выпускаются с 512 КБ и 1 МБ кэшей. Рыночная цена на них была высокой.
Также обратите внимание, что этот чип содержит две матрицы. Один с реальным процессором и 1- м кешем, а второй - с 256-Кбайтным 2- м кешем.
Pentium-2
Pentium 2 является ядром Pentium Pro. По соображениям экономии нет 2 - го кэша не находится в CPU. Вместо того, что продается как процессор, мы используем печатную плату с отдельными чипами для процессора (и 1- го кеша) и 2- го кеша.
По мере развитие технологий , и мы начинаем ставить создавать чипы с более мелкими компонентами он получает финансовую возможность поставить 2 - й кэш обратно в реальной матрице процессора. Однако есть еще раскол. Очень быстрый 1- й кеш прижался к процессору. С одним 1- м кешем на ядро ЦП и большим, но менее быстрым 2- м кешем рядом с ядром.
Pentium-3
Pentium-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 - й кэш между двумя ядрами процессора. Скорость снизится незначительно, но 512KiB общей 2 - й кэш часто быстрее , чем добавление два независимых 2 - го уровня кэши половины размера.
Это важно для вашего вопроса.
Это означает, что если вы читаете что-то из одного ядра процессора, а затем пытаетесь прочитать это из другого ядра, которое использует тот же самый кеш, то вы получите попадание в кеш. Память не должна быть доступна.
Поскольку программы переносятся между процессорами в зависимости от нагрузки, количества ядер и планировщика, вы можете повысить производительность, закрепляя программы, использующие одни и те же данные, на одном и том же процессоре (попадание в кэш на уровне L1 и ниже) или на тех же процессорах, которые делить кеш L2 (и, таким образом, получать пропуски на L1, но попадания в кэш L2 читает)
Таким образом, на более поздних моделях вы увидите общие кэши 2-го уровня.
Если вы программируете для современных процессоров, то у вас есть два варианта:
- Не беспокойся. ОС должна иметь возможность планировать вещи. Планировщик оказывает большое влияние на производительность компьютера, и люди потратили немало усилий на его оптимизацию. Если вы не делаете что-то странное или не оптимизируете под одну конкретную модель ПК, вам лучше использовать планировщик по умолчанию.
- Если вам нужен каждый последний бит производительности, а более быстрое аппаратное обеспечение недоступно, попробуйте оставить шаги, которые обращаются к одним и тем же данным на том же ядре или на ядре, с доступом к общему кешу.
Я понимаю, что я еще не упомянул кэш L3, но они не отличаются. Кэш L3 работает таким же образом. Больше, чем L2, медленнее, чем L2. И это часто распределяется между ядрами. Если он присутствует, он намного больше, чем кэш L2 (иначе иметь его не имеет смысла), и он часто используется всеми ядрами.