
Недавно я читал о процессорах (в основном многопроцессорных) и наткнулся на концепцию многоуровневых кэшей. В этом случае эти конструкции имеют несколько уровней кэша для повышения производительности.
Однако я не мог понять, как дополнительный кэш увеличивает производительность процессора? Почему бы просто не увеличить размер существующих кэшей?
решение1
Использование нескольких уровней кэша частично является механизмом координации многоядерных процессоров, а частично — компромиссом между ценой и производительностью.
В процессоре с несколькими ядрами каждое ядро имеет свой собственный кэш L1. Это позволяет ядру читать и писать из кэша и в него, не беспокоясь о помехах для других ядер. Однако ядрам необходимо общее хранилище, чтобы они могли легко обмениваться определенной информацией. Кэш L2 используется всеми ядрами, поэтому он используется как своего рода общее пространство хранения, где информация доступна для всех потоков.
Разница между кэшами L2 и L3 заключается в компромиссной части. Кэши состоят из статической оперативной памяти (SRAM). Это отличается от динамической оперативной памяти (DRAM), которая составляет вашу основную память. Динамическую оперативную память необходимо периодически «обновлять», то есть со временем ячейки DRAM теряют свое значение, если их не считывать и не перезаписывать. Контроллер памяти делает это автоматически, но каждый раз, когда контроллер памяти должен это сделать (тысячи раз в секунду), он не может считывать/записывать значения для процессора, пока это не будет сделано. Это замедляет работу DRAM. У SRAM нет такого ограничения, SRAM будет сохранять свое значение бесконечно, пока у нее есть рабочее питание, что делает ее намного быстрее. Итак, ваши кэши (как L2, так и L3) состоят из SRAM. Проблема в том, что SRAMоченьдорого; в то время как 4 ГБ высокоскоростной DRAM немного дороговаты, но доступны, 4 ГБ SRAM выходят далеко за рамки вашего бюджета.
Итак, всякий раз, когда производитель процессора решает добавить больше SRAM в конструкцию, это становится заметно дороже. SRAM поставляется с несколькими скоростями, и, как вы могли ожидать, более быстрая SRAM дороже, чем более медленная SRAM. Таким образом, производитель вашего процессора попытался оптимизировать его для обоихскоростьирасходыиспользуя как более скоростную SRAM, так и более скоростную SRAM. Процессор затем проектируется таким образом, что он будет помещать наиболее необходимые ему значения в более быстрый кэш (L2), а информацию, которая ему нужна меньше, в более медленный кэш (L3). Тщательное управление этой памятью в микрокоде процессора создает даже компромисс: кэша больше, и часть кэша (надеюсь, кэш, который процессору нужен больше всего) очень быстрая.
Итак, подведем итог: процессоры имеют многоуровневые кэши, чтобы увеличить емкость кэша процессора, не увеличивая при этом радикально цену процессора. Эта осторожная смесь позволяет процессорам быть быстрее и дешевле.
решение2
Многоуровневые кэши — это прежде всего компромисс между емкостью и стоимостью доступа (как задержками/временем, так и энергопотреблением).
Это можно сравнить с покупкой инструмента. Поход в местный хозяйственный магазин (сопоставимый с кэшем L1) будет быстрым и потребует меньше энергии, но местный хозяйственный магазин небольшой и, скорее всего, не будет иметь конкретного инструмента, который вы ищете. Поход в большой хозяйственный магазин (сопоставимый с кэшем L2) займет больше времени и энергии (он дальше и искать инструмент будет дольше), но инструмент, скорее всего, будет в наличии. Если даже в большом хозяйственном магазине нет инструмента, можно пойти на склад производителя (сопоставимый с основной памятью), где инструмент почти наверняка есть. Если даже на складе нет инструмента, то ожидается еще большее ожидание, пока завод производителя (сопоставимый с диском) произведет больше инструмента.
Проживание рядом с большим хозяйственным магазином (имеющим очень большой кэш L1) сэкономит время, если разнообразие искомых аппаратных расходных материалов обычно велико (некоторые процессоры PA-RISC, предназначенные для коммерческих рабочих нагрузок, делают это), но обычно используется небольшое разнообразие расходных материалов, поэтому в небольшом местном магазине товар с большой вероятностью будет в наличии (высокая вероятность попадания в кэш), а найти часто используемый товар в небольшом магазине можно быстрее.
Как отметил jcrawfordor, есть некоторые преимущества в совместном использовании уровня кэша несколькими ядрами, поскольку это позволяет: избежать повторного хранения одного и того же содержимого памяти, обеспечить несбалансированное использование емкости хранилища (например, одно ядро может использовать все хранилище L2 с общим L2, в то время как при использовании кэшей L2 для каждого ядра ядро будет ограничено своим собственным кэшем L2), а также упростить и ускорить взаимодействие между ядрами (один и тот же L2 будет доступен в любом случае при промахе L1, и не будет необходимости проверять, есть ли данные в других кэшах L2).
(Аналогичные преимущества совместного использования могут применяться в отношении кэшей инструкций и данных L2 и отдельных кэшей инструкций и данных L1, но такое совместное использование контента обычно избегается (т. е. строка кэша обычно содержит только код или данные) и, за исключением менее распространенных действий, таких как самомодифицирующийся код и JIT-компиляция, связь между кэшем инструкций и кэшем данных встречается редко.)
Однако совместное использование имеет накладные расходы. Можно сравнить это с покупками в универмаге. Чем больше покупателей пользуются магазином, тем больше вероятность, что на любой кассе будет очередь (сравнимая с банками в кэше L2). Кроме того, общий вход/выход вносит задержки (сравнимые с задержками арбитража для доступа к кэшу), предоставляя возможность нескольким дверям поддерживать более высокую пропускную способность, но увеличивая время, необходимое для выбора двери — накладные расходы на выбор могут быть крайне малы (но не отсутствуют), когда никто другой не входит/не выходит, но когда магазин занят, выбор двери становится более сложным. Если предположить, что магазин будет занят, можно избежать некоторой задержки принятия решения; Однако использование наиболее удобной двери будет быстрее, если хранилище не занято (аналогично кэшу может потребоваться дополнительное время для выделения буфера для хранения информации о запросе памяти, даже если такой буфер не нужен, если кэш не занят. Без такой оптимизации, если кэш занят, два шага определения того, занят ли кэш, и выделения записи буфера будут выполняться последовательно, поэтому общее время будет суммой этих двух, но если кэш не занят, шаг выделения буфера пропускается).
Совместное использование также может увеличить частоту промахов конфликта, учитывая ограниченную ассоциативность кэша, и может привести к неудачному выбору замены кэша (например, одно ядро, использующее потоковый шаблон доступа с небольшим повторным использованием данных, будет склонно использовать емкость, которую другое ядро с частым повторным использованием данных имело бы большую выгоду от использования). Существуют методы для уменьшения таких недостатков, но они добавляют сложности и имеют другие издержки.
решение3
Ближайшие тайники гораздо меньше по размеру.Вот немного об этом, Я не могу найти ничего о скорости, но она, вероятно, ограничена (выше этого бессмысленно и дорого) скоростью процессора или материнской платы.
Существует три уровня кэша процессора (два в одноядерном процессоре), оперативная память (вторичная) и жесткие диски (третичная).
решение4
Процессоры имеют многоуровневый кэш, такой как L1, L2 и L3.
L1 — самый быстрый кэш, но и самый дорогой. L2 идет вторым и обсуждается чаще всего. А затем L3, который идет после L2.
Чем быстрее кэш, тем быстрее процессор считывает из него данные и записывает в него.
Но компаниям приходится делать выбор между производительностью и стоимостью каждого процессора, поэтому они внедряют в процессоры многоуровневую кэш-память в соответствии с их ценой.