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


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

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

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

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

4 58

4 ответа:

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

смотрите страницу 28 из : https://www.scss.tcd.ie/Jeremy.Jones/CS3021/5%20caches.pdf

размер строк кэша составляет (обычно) 64 байта.

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

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

  1. доступ к памяти и производительности
  2. влияние кэш-строк
  3. размеры кэша L1 и L2
  4. параллелизм на уровне инструкций
  5. кэш ассоциативность
  6. False cache line sharing
  7. сложности оборудования

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

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

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

Это следует отметить, что Intel использует "cache line "для обозначения меньшего блока и" Cache sector " для большего блока. (Это одна из причин, почему я использовал "блок кэша" в моем объяснении.) Используя терминологию Intel, было бы очень необычно, чтобы строки кэша различались по размеру между уровнями кэша независимо от того, были ли уровни строго инклюзивными, строго эксклюзивными или использовали какую-либо другую политику включения.

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

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