Многоуровневые кэши - это, прежде всего, компромисс между емкостью и стоимостью доступа (задержка / время и энергия).
Это может помочь сравнить его с покупкой инструмента. Переход в локальное хранилище оборудования (сравнимое с кешем L1) будет быстрым и потреблять меньше энергии, но локальное хранилище оборудования невелико и, скорее всего, не будет иметь нужного инструмента. Переход в большой аппаратный магазин (сравнимый с кэш-памятью второго уровня) займет больше времени и энергии (он еще дальше, а поиск инструмента займет больше времени), но инструмент, скорее всего, будет в наличии. Если даже в крупногабаритном магазине нет такого инструмента, можно пойти на склад производителя (сравнимый с основной памятью), в котором почти наверняка есть инструмент. Если даже на складе нет инструмента, то ожидается еще более долгое ожидание, пока фабрика производителя (сравнимая с диском) не произведет больше инструмента.
Проживание рядом с большим хранилищем оборудования (имеющим очень большой кэш L1) сэкономило бы время, если бы разнообразие запрашиваемых аппаратных ресурсов было, как правило, велико (некоторые процессоры PA-RISC, предназначенные для коммерческих рабочих нагрузок, делали это), но обычно небольшое разнообразие расходных материалов поэтому в небольшом локальном магазине очень вероятно, что товар будет в наличии (высокая вероятность попадания в кэш), а поиск часто используемого товара происходит быстрее в небольшом магазине.
Как упомянул jcrawfordor, есть несколько преимуществ совместного использования уровня кэша между несколькими ядрами, поскольку это позволяет: избежать повторного хранения одного и того же содержимого памяти, разрешить несбалансированное использование емкости хранения (например, одно ядро может использовать все хранилище L2 с общим L2 в то время как при использовании кэш-памяти L2 для каждого ядра ядро будет ограничено собственным кешем L2), что упростит и ускорит обмен данными между ядрами (к тому же L2 в любом случае будет осуществляться доступ при пропадании L1, и не будет необходимости проверять наличие других кеш-памяти L2). были данные).
(Подобные преимущества совместного использования могут применяться в отношении L2 и отдельных кэшей команд и данных L1, но такого совместного использования контента обычно избегают (т. Е. Строка кэша обычно содержит только код или данные) и исключают менее распространенные действия, такие как самоизменяющийся код и JIT-компиляция, редко есть связь между кэшем команд и кэшем данных.)
Совместное использование имеет накладные расходы, однако. Можно сравнить с покупками в универмаге. Чем больше покупателей использует магазин, тем больше вероятность того, что на любой данной кассе будет очередь (сопоставимая с банками в кеше L2). Кроме того, общий вход / выход вводит задержки (сравнимые с задержками арбитража для доступа к кэшу), обеспечивая несколько дверей для поддержки более высокой пропускной способности, но увеличивает время, необходимое для выбора двери - накладные расходы на выбор могут быть чрезвычайно малыми (но не чрезмерными). существует), когда никто не входит / выходит, но когда магазин занят, выбор дверей становится более сложным. Если предположить, что магазин будет занят, можно избежать некоторой задержки принятия решения; но просто использование наиболее удобной двери будет быстрее, если хранилище не занято (аналогично, кэш может, например, занять дополнительное время, чтобы выделить буфер для хранения информации запроса памяти, даже если такой буфер не будет необходим, если кэш не занят - без такой оптимизации, если кэш занят, два шага определения того, был ли кэш занят, и выделение записи в буфере будут происходить последовательно, поэтому общее время будет суммой двух, но если кэш не занят, шаг выделения буфера исключается).
Совместное использование может также увеличить частоту пропусков конфликтов, учитывая ограниченную ассоциативность кэша, и может привести к неправильному выбору замены кэша (например, одно ядро, использующее шаблон потокового доступа с небольшим повторным использованием данных, будет склонно использовать емкость, которую другое ядро с частым повторным использованием данные будут иметь большую выгоду в использовании). Существуют методы для уменьшения таких недостатков, но они добавляют сложность и имеют другие затраты.