Размер строки кешей L1 и L2

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

Итак, теперь мой вопрос заключается в том, как определить соответствующую запись в кеше L1 для записи в кеше L2. Единственной информацией, хранящейся в записи L2, является информация тега. Основываясь на информации этого тега, если я повторно создаю addr, он может охватывать несколько строк в кеше L1, если размеры строк в кешках L1 и L2 не совпадают.

Действительно ли архитектура действительно беспокоит промывку обеих линий или просто поддерживает кеши L1 и L2 с одинаковым размером строки.

Я понимаю, что это политическое решение, но я хочу знать часто используемую технику.

В ядре i7 размеры линий в L1, L2 и L3 одинаковы: это 64 байта. Я предполагаю, что это упрощает сохранение инклюзивного свойства и согласованность.

См. Стр. 28 из: https://www.scss.tcd.ie/Jeremy.Jones/CS3021/5%20caches.pdf

Размер Cache-Lines составляет (обычно) 64 байта.

Более того, взгляните на эту очень интересную статью о кэшах процессоров: Галерея эффектов кэша процессора

Вы найдете следующие главы:

  1. Доступ к памяти и производительность
  2. Влияние строк кэша
  3. Размер кеша L1 и L2
  4. Параллелизм на уровне инструкций
  5. Ассоциативность кэша
  6. Ложное совместное использование кеша
  7. Аппаратные сложности

Наиболее распространенная методика обработки размера блока кэша в строго инклюзивной иерархии кэшей – использовать блоки кэша одинакового размера для всех уровней кеша, для которых применяется свойство включения. Это приводит к увеличению накладных расходов на тег, чем при использовании кэша более высокого уровня для больших блоков, который не только использует область чипов, но также может увеличить задержку, поскольку кэши высокого уровня обычно используют поэтапный доступ (где tags проверяются до доступа к части данных). Тем не менее, это также несколько упрощает конструкцию и уменьшает потраченную мощность из неиспользуемых частей данных. В 128-байтных кеш-блоках не требуется значительная часть неиспользуемых 64-байтовых блоков, чтобы компенсировать штраф в размере дополнительного 32-битного тега. Кроме того, эффект более крупного кеш-кода при использовании более широкой пространственной локальности может быть обеспечен относительно простой предварительной выборкой, которая имеет преимущества, заключающиеся в том, что емкость не остается неиспользованной, если соседний fragment не загружен (чтобы сохранить полосу пропускания памяти или уменьшить задержку в конфликтующей памяти read) и что предварительная выборка смежности не должна ограничиваться более крупным выровненным fragmentом.

Менее распространенный метод делит блок кэша на сектора. Если размер сектора такой же, как размер блока для кэшей более низкого уровня, избегает проблемы избыточной обратной аннулированности, поскольку каждый сектор в кэше более высокого уровня имеет свой собственный действительный бит. (Предоставление всех метаданных состояния согласования для каждого сектора, а не просто действительность, может избежать использования чрезмерной полосы пропускания обратной связи, когда по крайней мере один сектор в блоке не загрязнен / изменен и некоторые служебные данные согласования (например, если один сектор находится в состоянии совместного доступа, а другой – в исключительном состоянии запись в сектор в эксклюзивном состоянии может не включать в себя когерентный трафик, если используется сплетение, а не когерентность каталогов].)

Сбережения области из секционированных блоков кэша были особенно важны, когда tags находились на чипе процессора, но данные были вне чипа. Очевидно, что если хранилище данных занимает площадь, сопоставимую с размером процессорного чипа (что не является необоснованным), тогда 32-разрядные tags с 64-байтовыми блоками занимают примерно 16-е (~ 6%) от площади процессора, а 128- байтовые блоки занимали бы половину. (IBM POWER6 +, представленный в 2009 году, является, пожалуй, самым последним процессором для использования тегов с процессорами и чипами процессора. Хранение данных в DRAM с более высокой плотностью и tags в SRAM с более высокой плотностью, как это сделала IBM, преувеличивает этот эффект.)

Следует отметить, что Intel использует «линию кэша» для обозначения меньшего блока и «сектора кеша» для большей единицы. (Это одна из причин, почему я использовал «кеш-блок» в своих объяснениях.) Используя терминологию Intel, было бы очень необычно, что строки кэша могут отличаться по размеру среди уровней кеша, независимо от того, были ли уровни строго инклюзивными, строго эксклюзивными или использовались некоторые другие политики включения.

(Строгое исключение обычно использует кеш более высокого уровня в качестве кэша-жертвы, в котором выходы из кэша более низкого уровня вставляются в кеш более высокого уровня. Очевидно, что если размеры блоков были разными, а секционирование не использовалось, то выseleniumие потребовало бы остальной более крупный блок, который нужно прочитать где-то, и недействителен, если он присутствует в кэше нижнего уровня. [ Теоретически строгое исключение можно использовать с негибким кэшем в обход, где выseleniumие L1 будет обходить L2 и перейти к промахам в кешках L3 и L1 / L2 будет только выделенных либо L1, либо L2, минуя L1 для определенных доступов. Наиболее близким к этому, который я знаю, является обход L1 для Itanium для доступа с плавающей точкой, однако, если я правильно помню, L2 включал L1.] )

Как правило, при одном доступе к основной памяти осуществляется доступ к 64 байтам данных и 8 байтам четности / ECC (я не помню, какой именно). И довольно сложно поддерживать разные размеры линий кэша на разных уровнях памяти. Вы должны заметить, что размер строки кеша будет больше соответствовать размеру выравнивания слов в этой архитектуре, чем что-либо еще. Исходя из этого, размер строки кэша вряд ли будет отличаться от размера доступа к памяти. Теперь биты четности предназначены для использования controllerа памяти, поэтому размер строки кэша обычно составляет 64 байта. Процессор действительно очень мало контролирует регистры. Все, что происходит в компьютере, – это больше о том, как получить аппаратное обеспечение для оптимизации производительности процессора. В этом смысле также не имеет смысла импортировать дополнительную сложность, делая размеры строк в кешках различными на разных уровнях памяти.

  • Мусорный коллектор MATLAB?
  • Временная сложность распределения памяти
  • Удалить , равное удалению?
  • Как динамически распределять пространство памяти для строки и получать эту строку от пользователя?
  • Ядро обнуляет память?
  • Где постоянные переменные хранятся в C?
  • Как инициализировать память новым оператором в C ++?
  • Предупреждения памяти iPhone OS. Что означают разные уровни?
  • Чтение больших файлов в Java
  • Как работают realloc и memcpy?
  • Объясните эту реализацию malloc из книги K & R
  • Interesting Posts

    Как избежать уязвимостей XSS в ASP.Net (MVC)?

    Как настроить разделитель таблицы в iPhone

    Такая же функция с const и без – когда и почему?

    Dropbox и Google Диск одновременно синхронизируют одну и ту же папку, возможно ли это?

    $ string.Substring Индекс / длина исключения

    Могу ли я программно очищать уведомления моего приложения от Центра уведомлений iOS 5?

    Стандартное значение переменной PATH Windows 10

    Расширение отказывается загружать скрипт из-за директивы политики безопасности контента

    Является ли лицензия Windows 10 вечной или она устареет в 2025 году?

    Как я могу использовать индексы строковой развертки в Swift 4?

    Учитывая массив, узнайте следующий меньший элемент для каждого элемента

    Как добавить class в @ Html.ActionLink?

    В Excel (или Numbers) какая формула может рассчитать количество дней в определенном месяце за 2 даты

    Каков ваш метод маркировки «folksonomy» для файлов на вашей локальной машине?

    Как найти ярлык «Цель рекламного объявления»?

    Давайте будем гением компьютера.