Почему размер кэша L1 меньше, чем размер кеша L2 в большинстве процессоров?

Почему размер кэша L1 меньше, чем размер кеша L2 в большинстве процессоров?


person Karthik Balaguru    schedule 12.01.2011    source источник
comment
Вопрос по теме SuperUser: Что такое многоуровневый кеш в процессорах?   -  person Paul A. Clayton    schedule 02.09.2014
comment
По теме: electronics.stackexchange.com/questions/104759/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 23.07.2016


Ответы (7)


На то есть разные причины.

L2 существует в системе для ускорения случая, когда происходит промах кэша L1. Если бы размер L1 был таким же или больше, чем размер L2, тогда L2 не мог бы разместить больше строк кэша, чем L1, и не смог бы справиться с промахами кэша L1. С точки зрения дизайна / стоимости кэш L1 привязан к процессору и работает быстрее, чем L2. Вся идея кешей заключается в том, что вы ускоряете доступ к более медленному оборудованию, добавляя промежуточное оборудование, которое более производительно (и дорого), чем самое медленное оборудование, но при этом дешевле, чем более быстрое оборудование, которое у вас есть. Даже если вы решили удвоить кэш L1, вы также увеличите L2, чтобы ускорить промахи кеша L1.

Так зачем вообще нужен кеш L2? Что ж, кеш L1 обычно более производительный и дорогой в сборке, и он привязан к одному ядру. Это означает, что при увеличении размера L1 на фиксированную величину эта стоимость умножается на 4 в двухъядерном процессоре или на 8 в четырехъядерном. L2 обычно используется разными ядрами - в зависимости от архитектуры он может быть разделен на пару или все ядра в процессоре, поэтому стоимость увеличения L2 будет меньше, даже если цена L1 и L2 будет одинаковой - что нет.

person David Rodríguez - dribeas    schedule 12.01.2011
comment
Я знаю, что это старый ответ, но удвоение кеша L1 удвоит стоимость независимо от количества кеша или количества ядер. - person Fascia; 08.08.2012
comment
@Fascia: Вы совершенно правы (что бы сказали сегодня мои учителя математики!). Я попытался перефразировать это в предполагаемом значении: стоимость увеличения L1 умножается на количество ядер, поскольку он не используется совместно. - person David Rodríguez - dribeas; 08.08.2012
comment
@ DavidRodríguez-dribeas: Я не хотел сказать, что вы ошибались. «L2 существует для ускорения случая, когда пропуски кэша L1» более понятны, чем L2 exists in the system to speedup cache misses in L1. Я думал, что speedup cache misses вводит в заблуждение. - person arunmoezhi; 13.08.2012
comment
@arunmoezhi: Я понимаю, я надеялся на предложения, как его переписать, не понимая, что в комментарии уже было одно такое предложение. Я обновил ответ. - person David Rodríguez - dribeas; 13.08.2012
comment
Какова физическая конструкция L1 и что делает его более дорогим / быстрым, чем L2? Этот ответ немного объясняет это: superuser.com/a/724537/128124 - person Ciro Santilli 新疆再教育营六四事件ۍ 23.07.2016

L1 очень тесно связан с ядром ЦП и доступен при каждом обращении к памяти (очень часто). Таким образом, он должен возвращать данные очень быстро (обычно в пределах одного такта). Задержка и пропускная способность (пропускная способность) критичны к производительности для кэша данных L1. (например, задержка в четыре цикла и поддержка двух операций чтения и одной записи ядром ЦП за каждый такт). Для поддержки этой высокой пропускной способности требуется множество портов чтения / записи. Построение большого кеша с этими свойствами невозможно. Таким образом, дизайнеры стараются сохранить его маленьким, например 32 КБ в большинстве современных процессоров.

Доступ к L2 осуществляется только при промахах L1, поэтому обращения случаются реже (обычно 1/20 от L1). Таким образом, L2 может иметь более высокую задержку (например, от 10 до 20 циклов) и иметь меньше портов. Это позволяет дизайнерам делать его больше.


L1 и L2 играют очень разные роли. Если L1 сделать больше, это увеличит задержку доступа L1, что резко снизит производительность, потому что это сделает все зависимые нагрузки медленнее и сложнее скрыть выполнение вне очереди. Размер L1 практически не обсуждается.

Если мы удалим L2, промахи L1 перейдут на следующий уровень, скажем, на память. Это означает, что к памяти будет осуществляться большой доступ, что означает, что нам потребуется больше пропускной способности памяти, что уже является узким местом. Таким образом, поддержание L2 является благоприятным.

Эксперты часто называют L1 фильтром задержки (поскольку он делает общий случай, когда L1 достигает более быстрого попадания), а L2 - фильтром полосы пропускания, поскольку он снижает использование полосы пропускания памяти.

Примечание. Я предположил двухуровневую иерархию кеша в своих аргументах, чтобы сделать это проще. Во многих современных многоядерных чипах есть кэш L3, совместно используемый всеми ядрами, в то время как каждое ядро ​​имеет свои собственные частные L1 и, возможно, L2. В этих микросхемах общий кэш последнего уровня (L3) играет роль фильтра пропускной способности памяти. L2 играет роль встроенного фильтра полосы пропускания, то есть сокращает доступ к внутреннему межсоединению и L3. Это позволяет разработчикам использовать межсоединение с меньшей пропускной способностью, например кольцо, и медленный однопортовый L3, что позволяет им увеличивать L3.

Возможно, стоит упомянуть, что количество портов является очень важным моментом при проектировании, поскольку от него зависит, сколько площади кристалла занимает кэш. Порты добавляют провода к кэш-памяти, что потребляет много энергии и площади кристалла.

person Aater Suleman    schedule 18.05.2011
comment
Я отредактировал поправку для чисел в двух местах (задержка в один цикл L1 должна быть VIVT и намного проще), но в итоге написал свой собственный ответ, чтобы сказать все, что я хотел. См. мой ответ для получения более подробной информации, а также реальные цифры задержки / размера / ассоциативности для реальных процессоров AMD и Intel. Их иерархии кеша очень разные. - person Peter Cordes; 24.07.2016

Ответ @Aater объясняет некоторые основы. Я добавлю еще несколько деталей + примеры реальной организации кеша на Intel Haswell и AMD Piledriver, с задержками и другими свойствами, а не только размером.

Для получения дополнительной информации об IvyBridge см. мой ответ о том, как можно кешировать так быстро?, с некоторым обсуждением общей задержки использования нагрузки, включая время вычисления адреса и ширину шин данных между различными уровнями кеша.


L1 должен быть очень быстрым (задержка и пропускная способность), даже если это означает ограниченную частоту попаданий. L1d также должен поддерживать однобайтовые хранилища почти на всех архитектурах и (в некоторых проектах) невыровненный доступ. Это затрудняет использование ECC (коды исправления ошибок) для защиты данных, и на самом деле некоторые конструкции L1d (Intel) просто используют четность, с лучшим ECC только на внешних уровнях кеша (L2 / L3), где ECC может быть выполнен на больших кусках для снижения накладных расходов.

Невозможно разработать единый уровень кеша, который мог бы обеспечить низкую среднюю задержку запроса (усредненную по всем попаданиям и промахам) современного многоуровневый кеш. Поскольку современные системы имеют несколько очень "голодных" ядер, все они используют соединение с одной и той же DRAM с относительно высокой задержкой, это очень важно.

Каждому ядру нужен собственный частный L1 для скорости, но, по крайней мере, последний уровень кеша обычно является общим, поэтому многопоточная программа, которая считывает одни и те же данные из нескольких потоков, не должна обращаться к DRAM на каждом ядре. (И действовать как ограничитель для данных, записываемых одним ядром и считываемых другим). Для нормальной многоядерной системы требуется как минимум два уровня кеша, и это является частью мотивации для более чем двух уровней в текущих проектах. Современные многоядерные процессоры x86 имеют быстрый двухуровневый кеш в каждом ядре и более медленный кеш, общий для всех ядер.

Частота попаданий L1 по-прежнему очень важна, поэтому кеши L1 не такие маленькие / простые / быстрые, как могли бы, потому что это снизит частоту попаданий. Таким образом, для достижения той же общей производительности потребуется более высокий уровень кеша, чтобы быть быстрее. Если более высокие уровни обрабатывают больше трафика, их задержка является большей составляющей средней задержки, и они чаще ограничивают свою пропускную способность (или нуждаются в более высокой пропускной способности).

Высокая пропускная способность часто означает возможность обрабатывать несколько операций чтения и записи в каждом цикле, то есть несколько портов. Это требует большей площади и мощности для той же емкости, что и кэш с меньшей пропускной способностью, так что это еще одна причина, по которой L1 должен оставаться маленьким.


L1 также использует уловки скорости, которые не сработали бы, если бы он был больше. т.е. в большинстве проектов используется виртуально-индексированный, физически тегированный (VIPT) L1, но со всеми биты индекса поступают из-под смещения страницы, поэтому они ведут себя как PIPT (потому что младшие биты виртуального адреса такие же, как и в физическом адресе). Это позволяет избежать синонимов / омонимов (ложные совпадения или одни и те же данные, находящиеся в кеше дважды, и см. Подробный ответ Пола Клейтона на связанный вопрос), но по-прежнему позволяет выполнять часть проверки попадания / промаха параллельно с поиском TLB. Кэш VIVT не должен ждать TLB, но он должен быть признан недействительным при каждом изменении таблиц страниц.

На x86 (который использует страницы виртуальной памяти 4 КБ) 8-полосные ассоциативные кэши L1 размером 32 КБ являются обычным явлением в современных проектах. 8 тегов могут быть выбраны на основе младших 12 бит виртуального адреса, потому что эти биты одинаковы в виртуальных и физических адресах (они ниже смещения страницы для страниц размером 4 КБайт). Это ускорение для кешей L1 работает только в том случае, если они достаточно малы и достаточно ассоциативны, чтобы индекс не зависел от результата TLB. 32 КБ / 64Б линий / 8-сторонняя ассоциативность = 64 (2 ^ 6) наборов. Таким образом, младшие 6 бит адреса выбирают байты в строке, а следующие 6 бит индексируют набор из 8 тегов. Этот набор из 8 тегов выбирается параллельно с поиском TLB, поэтому теги могут быть проверены параллельно с битами выбора физической страницы результата TLB, чтобы определить, какой (если есть) из 8 способов хранения данных в кэше. . (Минимум ассоциативность для кеша PIPT L1 также должна быть VIPT, доступ к набору без преобразования индекса в физический)

Создание большего кеша L1 означало бы, что ему пришлось либо ждать результата TLB, прежде чем он мог даже начать выборку тегов и загружать их в параллельные компараторы, либо ему пришлось бы увеличить ассоциативность, чтобы сохранить log2 (sets) + log2 (line_size) ‹= 12. (Больше ассоциативности означает больше способов на набор =› меньше общих наборов = меньше битов индекса). Так, например, кэш размером 64 КБ должен быть ассоциативным с 16 путями: по-прежнему 64 набора, но каждый набор имеет в два раза больше способов. Это делает увеличение размера L1 сверх текущего размера непомерно дорогим с точки зрения мощности и, возможно, даже задержки.

Расходование большей части бюджета мощности на логику кеш-памяти L1D оставит меньше энергии для выполнения вне очереди, декодирования и, конечно же, кеш-памяти L2 и т. д.. Чтобы все ядро ​​работало на частоте 4 ГГц и выдерживало ~ 4 инструкции за такт (на коде с высоким уровнем ILP) без плавления, требуется сбалансированная конструкция. См. Эту статью: Современные микропроцессоры: 90-минутное руководство!.

Чем больше кеш, тем больше вы теряете, очищая его, поэтому большой кеш VIVT L1 будет хуже, чем текущий VIPT-that-works-like-PIPT. И L1D большего размера, но с большей задержкой, вероятно, также будет хуже.

Согласно @PaulClayton, L1 часто кеширует получить все данные в наборе параллельно с тегами, чтобы он был готов для выбора после обнаружения правильного тега. Энергозатраты на выполнение этого масштабируются с ассоциативностью, поэтому большой высокоассоциативный L1 будет действительно плохим для использования энергии, а также для площади кристалла (и задержки). (По сравнению с L2 и L3, это не будет большой площадью, но физическая близость важна для задержки. Задержки распространения света имеют значение, когда тактовые циклы составляют 1/4 наносекунды.)

Более медленные кеши (например, L3) могут работать при более низком напряжении / тактовой частоте, чтобы меньше нагреваться. Они даже могут использовать разное расположение транзисторов для каждой ячейки памяти, чтобы сделать память более оптимизированной для мощности, чем для высокой скорости.

Есть много причин, связанных с потреблением энергии для многоуровневых кешей. Электропитание / тепло - одно из самых важных ограничений в современной конструкции ЦП, потому что охлаждение крошечного чипа затруднено. Все - это компромисс между скоростью и мощностью (и / или площадью кристалла). Кроме того, многие процессоры питаются от батарей или находятся в центрах обработки данных, которым требуется дополнительное охлаждение.


L1 почти всегда разделяется на отдельные кэши инструкций и данных. Вместо дополнительного порта чтения в унифицированном L1 для поддержки выборки кода мы можем иметь отдельный кэш L1I, привязанный к отдельному I-TLB. (Современные процессоры часто имеют L2-TLB, который является вторым уровнем кеша для трансляций, который совместно используется L1 I-TLB и D-TLB, а НЕ TLB, используемым обычным кешем L2). Это дает нам 64 КБ кэша L1, статически разделенного на кеши кода и данных, что намного дешевле (и, вероятно, с меньшей задержкой), чем монстр 64 КБ унифицированного кеша L1 с той же общей пропускной способностью. Поскольку обычно между кодом и данными очень мало совпадений, это большая победа.

L1I может быть размещен физически близко к логике выборки кода, в то время как L1D может быть физически близко к модулям загрузки / сохранения. Задержки линии передачи скорости света имеют большое значение, когда тактовый цикл длится всего 1/3 наносекунды. Прокладка проводки также имеет большое значение: например, Intel Broadwell имеет 13 слоев меди над кремнием.

Разделение L1 очень помогает в увеличении скорости, но унифицированный L2 - лучший выбор. Некоторые рабочие нагрузки содержат очень маленький код, но обрабатывают большое количество данных. Имеет смысл объединить кеши более высокого уровня для адаптации к различным рабочим нагрузкам вместо статического разделения на код и данные. (например, почти весь L2 будет кэшировать данные, а не код, при выполнении большого матричного умножения, вместо того, чтобы иметь много горячего кода при запуске раздутой программы C ++, или даже эффективную реализацию сложного алгоритма (например, запуск gcc) ). Код можно копировать как данные, а не всегда просто загружать с диска в память с помощью DMA.


Кэшам также нужна логика для отслеживания невыполненных промахов (поскольку выполнение вне очереди означает, что новые запросы могут продолжать генерироваться до того, как будет разрешен первый промах). Наличие большого количества невыполненных промахов означает, что вы перекрываете задержку промахов, достигая более высокой пропускной способности. Дублирование логики и / или статическое разделение между кодом и данными в L2 не годится.

Кеши большего размера с меньшим трафиком также являются хорошим местом для размещения логики упреждающей выборки. Аппаратная предварительная выборка обеспечивает хорошую производительность для таких вещей, как цикл по массиву, при этом каждый фрагмент кода не требует программных инструкций предварительной выборки. (Предварительная выборка SW была важна какое-то время, но предварительные выборки HW умнее, чем раньше, поэтому совет в Отличная в остальном статья Ульриха Дреппера Что каждый программист должен знать о памяти устарела для многих случаев использования.)

Кеши более высокого уровня с низким трафиком могут позволить себе задержку для таких умных вещей, как использование адаптивной политики замены вместо обычного LRU. Это делают процессоры Intel IvyBridge и более поздние версии , чтобы противостоять шаблонам доступа, которые не получают попаданий в кеш для рабочего набора, который немного превышает размер кеша. (например, повторение некоторых данных в одном и том же направлении дважды означает, что они, вероятно, будут выселены непосредственно перед тем, как они будут повторно использованы.)


Реальный пример: Intel Haswell. Источники: анализ микроархитектуры Дэвида Кантера и Результаты тестирования Агнера Фога (microarch pdf). См. Также руководства Intel по оптимизации (ссылки в теге x86 вики).

Кроме того, я написал отдельный ответ на тему: Какой метод сопоставления кэша используется в процессоре Intel Core i7?

Современные разработки Intel используют большой инклюзивный кэш L3, общий для всех ядер в качестве поддержки для трафика согласованности кеша. Он физически распределен между ядрами, с 2048 наборами * 16-канальный (2 МБ) на ядро ​​(с политика адаптивной замены в IvyBridge и более поздних версиях).

Нижние уровни кеша относятся к числу ядер.

  • L1: 32 КБ на ядро ​​для каждой инструкции и данных (разделение), 8-сторонняя ассоциативная связь. Задержка = 4 цикла. Как минимум 2 порта чтения + 1 порт записи. (Может быть, еще больше портов для обработки трафика между L1 и L2, или, возможно, получение строки кэша от L2 конфликтует с удалением хранилища.) Может отслеживать 10 невыполненных промахов кеша (10 буферов заполнения).
  • L2: единый на ядро ​​256 КБ, 8-процессорный ассоциативный. Задержка = 11 или 12 циклов. Пропускная способность чтения: 64 байта / цикл. Основная логика предварительной выборки выполняет предварительную выборку в L2. Может отслеживать 16 выдающихся промахов. Может подавать 64B за цикл на L1I или L1D. Фактическое количество портов неизвестно.
  • L3: унифицированный, общий (для всех ядер) 8 МБ (для четырехъядерного i7). Включительно (из всех кешей L2 и L1 на ядро). 12-ти или 16-ти позиционный ассоциативный. Задержка = 34 цикла. Действует как ограничитель согласованности кеша, поэтому измененные общие данные не должны выходить в основную память и обратно.

Другой реальный пример: AMD Piledriver. Текст в основном скопирован из microarch pdf Агнера Фога, с дополнительную информацию из некоторых слайдов, которые я нашел, и более подробную информацию о кеш-памяти L1 + 4k со сквозной записью в блоге Агнера, с комментарием, что только L1 является WT, а не L2.

  • L1I: 64 КБ, двусторонний, совместно используется парой ядер (версия SMD AMD имеет больше статических разделов, чем Hyperthreading, и они называют каждое из них ядром. Каждая пара разделяет вектор / блок FPU. , и другие ресурсы конвейера.)
  • L1D: 16 КБ, 4 канала на ядро. Задержка = 3–4 с. (Обратите внимание, что все 12 бит ниже смещения страницы по-прежнему используются для индекса, поэтому обычный трюк VIPT работает.) (Пропускная способность: две операции за такт, причем одна из них является хранилищем). Политика = сквозная запись с кешем с объединением записи 4 КБ.
  • L2: 2 МБ, 16 каналов, совместно используется двумя ядрами. Задержка = 20 часов. Пропускная способность чтения 1 за 4 такта. Пропускная способность записи 1 за 12 тактов.
  • L3: 0–8 МБ, 64-разрядный, общий для всех ядер. Задержка = 87 часов. Пропускная способность чтения 1 за 15 часов. Пропускная способность записи 1 за 21 такт

Агнер Фог сообщает, что с активными обоими ядрами пары пропускная способность L1 ниже, чем когда другая половина пары находится в режиме ожидания. Неизвестно, что происходит, поскольку кеши L1 должны быть отдельными для каждого ядра.

person Peter Cordes    schedule 24.07.2016
comment
Я просмотрел описание листа 0x02 из cpuid и заметил, что не было никакого разделения данных / инструкций для 2-го и 3-го кешей. Итак, все современные процессоры x86 имеют унифицированные 2-й и 3-й кеши? - person St.Antario; 16.10.2019
comment
@ Сент-Антарио: да, конечно. Я думал, что это общеизвестный факт. Вот почему в этом ответе используется L1I / L1D, но только когда-либо L2 или L3. Разделение L1 дает вам большую пропускную способность для кода и выборки данных и, по сути, является фильтром пропускной способности для более крупных и медленных внешних кешей. Я никогда не слышал о процессорах, использующих разделенные кеши дальше, чем L1, даже за пределами x86. например Что означает «разделенный» кеш. И насколько это полезно (если это так)? определяет модифицированный Гарвард с точки зрения разделения L1 и единой остальной иерархии памяти, потому что никто не использует разделение L2. - person Peter Cordes; 16.10.2019

Тем, кто интересуется такими вопросами, мой университет рекомендует Архитектура компьютера : Количественный подход и Организация и дизайн компьютера: Аппаратно-программный интерфейс. Конечно, если у вас нет на это времени, краткий обзор доступен в Википедии .

person Ilia K.    schedule 13.02.2012
comment
Могу я также порекомендовать компьютерную организацию и архитектуру, восьмое издание. Уильяма Столлингса (глава 4). - person Lyuben Todorov; 03.05.2012

В других ответах здесь приводятся конкретные и технические причины, по которым L1 и L2 имеют такой размер, и хотя многие из них являются мотивирующими соображениями для конкретных архитектур, на самом деле они не нужны: лежащее в основе архитектурное давление, ведущее к увеличению (частных) размеров кеша когда вы уходите от ядра, довольно универсален и совпадает с рассуждениями о множестве кешей в первую очередь.

Три основных факта:

  1. Доступ к памяти для большинства приложений демонстрирует высокую степень временной локальности с неравномерным распределением.
  2. При большом разнообразии процессов и конструкций размер и скорость кэша (задержка и пропускная способность) могут быть противопоставлены друг другу 1.
  3. Каждый отдельный уровень кэша требует дополнительных затрат на проектирование и производительность.

Таким образом, на базовом уровне вы могли бы сказать, что удвоить размер кеша, но понести штраф за задержку в 1,4 по сравнению с меньшим кешем.

Таким образом, возникает проблема оптимизации: сколько кешей должно быть у вас и какого размера они должны быть? Если бы доступ к памяти был полностью однородным в пределах размера рабочего набора, вы, вероятно, получили бы один довольно большой кеш или вообще не получили бы кеша. Однако доступ сильно неоднороден, поэтому небольшой и быстрый кеш может захватывать большое количество обращений, несоразмерных его размеру.

Если бы факт 2 не существовал, вы бы просто создали очень большой и очень быстрый кэш L1 с другими ограничениями вашего чипа и не нуждались бы в каких-либо других уровнях кеша.

Если бы факт 3 не существовал, вы бы получили огромное количество мелкозернистых «кешей», более быстрых и маленьких в центре, и более медленных и больших снаружи, или, возможно, один кеш с переменным временем доступа: быстрее для детали, наиболее близкие к сердцевине. На практике правило 3 означает, что каждый уровень кеша имеет дополнительную стоимость, поэтому обычно вы получаете несколько квантованных уровней кеша 2.

Другие ограничения

Это дает базовую основу для понимания решений о количестве и размере кеша, но есть и второстепенные факторы. Например, Intel x86 имеет размер страницы 4K, а их кеш-память L1 использует архитектуру VIPT. VIPT означает, что размер кеша, разделенный на количество способов, не может быть больше 3, чем 4 КиБ. Таким образом, 8-процессорный кэш L1, используемый в полудюжине проектов Intel, может составлять не более 4 КиБ * 8 = 32 КиБ. Вероятно, не случайно, что это именно размер кэша L1 в этих проектах! Если бы не это ограничение, вполне возможно, что вы бы увидели более низкую ассоциативность и / или большие кеши L1 (например, 64 КиБ, 4-полосный).


1 Конечно, есть и другие факторы, влияющие на компромисс, такие как площадь и мощность, но при сохранении постоянства этих факторов применяется компромисс между размером и скоростью, и даже если он не остается постоянным, основное поведение таково: такой же.

2 В дополнение к этому давлению, есть преимущество планирования для кешей с известной задержкой, как и в большинстве проектов L1: а внеочередной планировщик может оптимистично выполнять операции, которые зависят от нагрузки на память в цикле. что кэш L1 вернется, считывая результат из обходной сети. Это снижает конкуренцию и, возможно, сокращает цикл задержки на критическом пути. Это оказывает некоторое давление на самый внутренний уровень кэша, чтобы иметь равномерную / предсказуемую задержку и, вероятно, приводит к меньшему количеству уровней кеша.

3 В принципе, вы можете использовать кеши VIPT без этого ограничения, но только при необходимости поддержки ОС (например, раскраски страниц) или с другими ограничениями. Архитектура x86 этого не сделала и, вероятно, не может сейчас запуститься.

person BeeOnRope    schedule 16.04.2018

Я думаю, что основная причина этого в том, что L1-Cache быстрее и дороже.

https://en.wikichip.org/wiki/amd/microarchitectures/zen#Die

Сравните, например, физический размер кешей L1, L2 и L3 для ядра AMD Zen. Плотность резко возрастает с увеличением уровня кеша.

person basti    schedule 12.01.2011
comment
@Chiffre: Вы хотите сказать, что L1-cache и L2-cache сделаны с использованием разных технологий памяти? - person Karthik Balaguru; 12.01.2011
comment
@ S.Man: Да, стоимость каждого типа кеша отличается от остальных. В целом производительность и стоимость следующие: L1 ›L2› [L3 ›] основная память. В противном случае вы бы построили все, используя самые быстрые технологии, которые у вас есть, по той же цене. Это не сделает размер L1 больше, чем L2, а просто удалите L2 полностью и создайте L1 с совокупным размером L1 + L2. - person David Rodríguez - dribeas; 12.01.2011
comment
@ S.Man: для одного ядра, если производительность (и стоимость, которую вы заплатили бы за более дешевую технологию, обеспечивающую производительность) L1 и L2 были одинаковыми, то стоимость 1M L1 и 2M L2 была такой же, как и у с 3M L1 и без L2. При увеличении втрое размера кэша количество промахов кэша будет меньше, а система будет работать быстрее при тех же затратах. - person David Rodríguez - dribeas; 12.01.2011
comment
Если вы хотите потратить некоторое время на эту тему, я бы порекомендовал вам прочитать эту статью в википедии: secure.wikimedia.org/wikipedia/en/wiki/ есть даже неплохая диаграмма многоуровневых структур памяти! - person basti; 12.01.2011
comment
@David: Если для L1 и L2 используется самая быстрая технология, неплохо было бы полностью удалить L2 и оставить только L1 большего размера! - person Karthik Balaguru; 13.01.2011
comment
@ S.Man: Но во времена многоядерных процессоров вам понадобится L2-кеш для управления распределением нагрузки по разным ядрам. Потому что, насколько мне известно, L1 рассчитан на ядро, а L2 - на процессор. - person basti; 13.01.2011

логически вопрос дает ответ сам.

Если бы L1 был больше, чем L2 (вместе взятый), тогда не было бы необходимости в кэше L2.

Зачем вам хранить свои вещи на магнитной ленте, если вы можете хранить все на жестком диске?

person Ajeet Ganga    schedule 08.02.2013
comment
-1 Ваш ответ предполагает базовое понимание кэширования ЦП, что может не подходить для многих заинтересованных читателей. Более того, это не добавляет никакой дополнительной ценности текущим ответам. - person FreeAsInBeer; 29.08.2014
comment
L2 может быть высокоассоциативным кешем жертвы, чтобы уменьшить штраф за пропуски конфликта в L1. (Особенно, если L1 простой, например, с прямым отображением). В этом случае L2 может быть полезен, даже если он значительно меньше L1. - person Peter Cordes; 17.10.2017