Розмір рядків кешів L1 та L2


78

З попереднього запитання на цьому форумі я дізнався, що в більшості систем пам'яті кеш-пам'ять L1 є підмножиною кеш-пам'яті L2, тобто будь-який запис, видалений з L2, також видаляється з L1.

Отже, тепер моє питання полягає в тому, як мені визначити відповідний запис у кеші L1 для запису в кеші L2. Єдиною інформацією, що зберігається у записі L2, є інформація про теги. Виходячи з цієї інформації про теги, якщо я повторно створюю аддр, він може охоплювати кілька рядків у кеші L1, якщо розміри рядків кешу L1 та L2 не однакові.

Чи справді архітектура турбується про змивання обох рядків, або вона просто підтримує кеш L1 та L2 з однаковим розміром рядка.

Я розумію, що це політичне рішення, але я хочу знати загальновживану техніку.


Чи існує процесор з різними розмірами ліній для L1 та L2?
Олівер Чарлсворт

3
Оригінальний Pentium 4 мав 64-байтові рядки кешу L1 та 128-байтові рядки кешу L2, очевидно.
Paul R

може хтось прокоментувати архітектуру nehalem ??? Я пройшов статтю "Організація кеш-пам’яті та управління пам’яттю в архітектурі комп’ютера Intel Nehalem". Тут вони просто згадують розмір рядка кешу один раз (64 байта) ??
prathmesh.kallurkar

1
@PaulR: Pentium 4 мав незалежні кеші L1 та L2. Я вважаю, що конструкції, які вимагають, щоб кеш L1 був підмножиною кешу L2, зберігали б розмір рядків однаковими.
Девід Шварц

Якщо ви працюєте на x86, інструкція CPUID повертає остаточну інформацію про розмір рядка кешу. Google для CPUID та розміру лінії кешу для деяких прикладних прикладів.
серкінг 01.03.13

Відповіді:


79

У ядрі i7 розміри рядків у L1, L2 та L3 однакові: це 64 байти. Я думаю, це спрощує підтримку інклюзивної власності та узгодженість.

Див. Сторінку 10: https://www.aristeia.com/TalkNotes/ACCU2011_CPUCaches.pdf


1
Залишається знати, в чому полягає асоціативність кешу.
Фелікс Краццолара,

@FelixCrazzolara: Це залежить від процесора. Див ., Наприклад, en.wikichip.org/wiki/intel/microarchitectures/skylake_(client) . Також Яка техніка відображення кешу використовується в процесорі intel core i7? містить деякі подробиці щодо політик кешування (наприклад, включно з L3) та кілька конкретних прикладів у розділі Чому розмір кешу L1 менший, ніж розмір кешу L2 у більшості процесорів?
Пітер Кордес,

82

Розмір кеш-рядків (зазвичай) становить 64 байти.

Більше того, погляньте на цю дуже цікаву статтю про кеші процесорів: Галерея ефектів кешу процесора

Ви знайдете наступні глави:

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

22
+1 за посилання. Зазвичай я не переходжу за посиланнями з відповідей SO та віддаю перевагу вбудованій конденсації. На щастя, цього разу я таки дотримувався цього, і це, безумовно, коштувало!
Давіде

25

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

Менш поширена техніка ділить блок кешу на сектори. Якщо розмір сектора збігається з розміром блоку для кешів нижчого рівня, це дозволяє уникнути проблеми надмірної зворотної інвалідності, оскільки кожен сектор у кеші вищого рівня має свій дійсний біт. (Забезпечення всіх метаданих стану когерентності для кожного сектора, а не просто достовірності, може уникнути надмірного використання смуги пропускання зворотного зв’язку, коли щонайменше один сектор у блоці не забруднений / модифікований і певні накладні витрати на когерентність [наприклад, якщо один сектор знаходиться у спільному стані, а інший - в ексклюзивному стані запис у сектор у ексклюзивному стані не може включати трафік когерентності - якщо використовується snoopy, а не когерентність каталогів].)

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

Слід зазначити, що Intel використовує "лінію кешу" для позначення меншого блоку, а "сектор кешу" для більшого блоку. (Це одна з причин, чому я використовував "кеш-блок" у своєму поясненні.) Використовуючи термінологію Intel, було б дуже незвично, щоб рядки кеш-пам’яті змінювались за розмірами між рівнями кешу, незалежно від того, були рівні суворо включеними, суворо ексклюзивними або використовуваними якась інша політика включення.

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


2

Зазвичай в одному доступі до основної пам'яті здійснюється доступ до 64 байт даних та 8 байт паритету / ECC (я не пам’ятаю, який саме). І досить складно підтримувати різні розміри ліній кешу на різних рівнях пам'яті. Потрібно зауважити, що розмір рядка кеш-пам'яті більше відповідав би розміру вирівнювання слів у цій архітектурі, ніж будь-що інше. Виходячи з цього, розмір рядка кешу навряд чи буде відрізнятися від розміру доступу до пам'яті. Тепер біти парності призначені для використання контролера пам'яті, тому розмір рядка кешу, як правило, становить 64 байти. Процесор насправді дуже мало контролює поза регістрами. Все інше, що відбувається в комп’ютері, стосується більше залучення апаратного забезпечення для оптимізації продуктивності процесора. У цьому сенсі також

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.