Як L1 і L2 працюють на кеш-пам'яті процесора, і чому вони є важливою частиною сучасних чіпів

Як L1 і L2 працюють на кеш-пам'яті процесора, і чому вони є важливою частиною сучасних чіпів

Розробка кеш-пам'яті та кешування є однією з найважливіших подій в історії обчислень. Практично кожен сучасний процесорний процесор з чіпів з наднизькими енергоспоживаннями, такими як ARM Cortex-A5, до найвищого класу Intel Core i7 використовують кеш-пам'ять. Навіть більш високопоставлені мікроконтролери часто мають малі кеш-пам'ять або пропонують їх як варіанти - переваги продуктивності є занадто великими, щоб ігнорувати їх навіть у надвисоких енергіях.

Кешування було винайдено для вирішення значної проблеми. На перших десятиліттях обчислень основна пам'ять була надзвичайно повільною та неймовірно дорогою, але процесор не був особливо швидким. Починаючи з 1980-х років, розрив почав швидко розширюватися. Мікропроцесорні тактові частоти зникли, але час доступу до пам'яті поліпшився набагато менш різко. Оскільки цей розрив збільшувався, стало все зрозуміло, що для подолання розриву потрібен новий тип швидкої пам'яті.

Хоча воно працює лише до 2000 років, зростаючі розбіжності 1980-х років призвели до розробки перших кеш-пам'яті процесора
Хоча воно працює лише до 2000 років, зростаючі розбіжності 1980-х років призвели до розробки перших кеш-пам'яті процесора

Як працює кешування

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

Прогана кеш-пам'яті, з іншого боку, означає, що центральний процесор повинен піти відкопатися, щоб знайти дані в іншому місці. Саме тут вступає в дію кеш L2 - поки це повільніше, воно також значно більше. Деякі процесори використовують інклюзивний дизайн кеш-пам'яті (тобто дані, що зберігаються в кеші L1, також дублюються в кеш-пам'яті L2), а інші - ексклюзивними (це означає, що два кеша ніколи не діляться даними). Якщо дані не можуть бути знайдені в кеш-пам'яті L2, ЦП продовжує вниз ланцюжок до L3 (типово все ще в режимі очікування), потім L4 (якщо він існує) та основна пам'ять (DRAM).

Як L1 і L2 працюють на кеш-пам'яті процесора, і чому вони є важливою частиною сучасних чіпів

Ця діаграма показує взаємозв'язок між кешем L1 з постійною швидкістю удару, але більшим є кеш L2. Зауважте, що загальна швидкість поступу різко зростає, оскільки збільшується розмір L2. Більше, повільніше, дешевше L2 може забезпечити всі переваги великого L1 - але без величини розміру і споживання електроенергії. Більшість сучасних темпів кеш-пам'яті L1 набагато перевищують теоретичні 50%, показані тут - Intel та AMD, як правило, швидкість попадання кешу на поле становить 95% або вище.

Наступною важливою темою є встановлена ​​асоціативність. Кожен процесор містить певний тип оперативної пам'яті, званий тегом RAM. Теговий RAM - це запис усіх місць пам'яті, які можуть відображатись до будь-якого заданого блоку кеш-пам'яті. Якщо кеш-пам'ять повністю асоціативна, це означає, що будь-який блок даних оперативної пам'яті може бути збережений в будь-якому блоці кеш-пам'яті. Перевага такої системи полягає в тому, що швидкість удару висока, але час пошуку надзвичайно довгий - ЦП повинен переглядати весь його кеш, щоб з'ясувати, чи є дані, перш ніж шукати основну пам'ять.

На протилежному кінці спектра ми маємо прямі кешування. Кеш-пам'ять з прямим накладом є кешем, де кожен кеш-блок може містити один і тільки один блок основної пам'яті. Цей тип кешу можна шукати надзвичайно швидко, але оскільки він відображає 1: 1 у місцях пам'яті, він має низьку швидкість. Між цими двома крайнощами є n-way асоціативні кеші. 2-х сторонний асоціативний кеш (Pileіriver's L1 - двосторонній) означає, що кожен блок основної пам'яті може картувати до одного з двох кеш-блоків. Восьмисторонній асоціативний кеш означає, що кожен блок основної пам'яті може бути в одному з восьми кеш-блоків.

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

Як L1 і L2 працюють на кеш-пам'яті процесора, і чому вони є важливою частиною сучасних чіпів

Чому кеш процесора продовжує збільшуватися

Тож чому додавати постійно більші кеші в першу чергу? Оскільки кожен додатковий пул пам'яті відновлює необхідність доступу до основної пам'яті і може підвищити продуктивність у конкретних випадках.

Як L1 і L2 працюють на кеш-пам'яті процесора, і чому вони є важливою частиною сучасних чіпів

Цей графік з огляду Anandtech на Haswell є корисним, оскільки він фактично ілюструє ефективність роботи додавання величезного (128 МБ) кешу L4, а також звичайних структур L1 / L2 / L3. Кожен сходинка представляє новий рівень кеш-пам'яті. Червона лінія - це чіп з L4 - зауважте, що для великих розмірів файлів вона майже в два рази швидше, ніж у двох інших чіпів Intel.

Тоді може здатися логічним присвятити кешу величезні обсяги ресурсів в режимі on-die, але, як виявляється, це зменшується граничний приріст. Більші кеші є повільнішими та дорожчими. У шести транзисторах на біт SRAM (6T), кеш також дорожче (з точки зору розміру і, отже, вартістю долара). Останній певний момент, має сенс витрачати енергетичний бюджет на мікросхеми, і транзистор розраховується на більшу кількість виконавчих одиниць, краще прогнозування галузей або додаткові ядра. У верхній частині сюжету ви можете побачити зображення чіпа Pentium M (Centrino / Dothan); вся ліва сторона шаблону присвячена масованій кеш-пам'яті L2.

Яким чином дизайн кеш-пам'яті впливає на продуктивність

Вплив додавання кеш-пам'яті на процесор безпосередньо пов'язаний з його ефективністю або швидкістю попадання; Повторна помилка кеша може мати катастрофічний вплив на продуктивність ЦП. Наступний приклад значно спрощений, але повинен слугувати ілюстрацією цієї точки.

Уявіть, що процесор повинен завантажувати дані з кешу L1 100 разів поспіль. Кеш L1 має затримку доступу до 1ns і швидкість 100%. Тому для виконання цієї операції для нашого процесора потрібно 100 наносекунд.

Haswell-E постріл (натисніть, щоб збільшити). Повторні структури в середині чіпа складають 20 Мб загальної кеш-пам'яті L3.
Haswell-E постріл (натисніть, щоб збільшити). Повторні структури в середині чіпа складають 20 Мб загальної кеш-пам'яті L3.

Тепер припустимо, що кеш-пам'ять має швидкість на 99 відсотків, але дані, які ЦП справді потребує для свого 100-го доступу, сидять у L2 із затримкою доступу до 10-циклів (10-тинансовий). Це означає, що процесор займає 99 наносекунд, щоб виконати перші 99 слів і 10 наносекунд для виконання 100-го. 1-відсоткове зниження швидкості удару лише уповільнило процесор на 10 відсотків.

У реальному світі кеш L1 зазвичай має швидкість удару в межах від 95 до 97 відсотків, однак ефект від ефективності цих двох значень у нашому простому прикладі не становить 2 відсотки - це 14 відсотків. Майте на увазі, ми припускаємо, що пропущені дані завжди зберігаються в кеші L2. Якщо дані було виселено з кеш-пам'яті і вони сидять у основній пам'яті, із затримкою доступу 80-120 у.о., різниця в продуктивності між швидкістю 95-97% може майже вдвічі перевищити загальний час, необхідний для виконання коду.

Назад, коли сім'я бульдозера AMD була порівняна з процесорами Intel, тема дизайну кеш-пам'яті та продуктивності вплинула на багато. Незрозуміло, наскільки непогана продуктивність бульдозера може бути звинувачена в її відносно повільній підсистемі кешу - крім відносно високої затримки, сім'я Бульдозера також страждала від великої суперечності щодо кешу. Кожен модуль Bulldozer / Piledriver / Steamroller ділиться своїм кешем інструкцій L1, як показано нижче:

Як L1 і L2 працюють на кеш-пам'яті процесора, і чому вони є важливою частиною сучасних чіпів

Кеш спотворюється, коли дві різні потоки записують та перезаписують дані в тій же пам'яті. Це завдає шкоди продуктивності обох потоків - кожне ядро ​​вимушено витрачати час на створення власних бажаних даних у L1, тільки для іншого ядра оперативно перезаписують цю інформацію. Проблема AMD'S OLDER Steamroller все ще вирвана з цієї проблеми, хоча AMD збільшила кеш-пам'ять L1 до 96 Кб і зробила її асоціативною замість двох. Пізніше процесори Ryzen не поділяють кеш таким чином і не страждають від цієї проблеми.

Як L1 і L2 працюють на кеш-пам'яті процесора, і чому вони є важливою частиною сучасних чіпів

Цей графік показує, як швидкість попадання Opteron 6276 (оригінальний процесор Bulldozer) випала, коли обидва сердечника були активними, принаймні в деяких тестах. Зрозуміло, що суперечка щодо кешу не єдина проблема - 6276 історично намагався перевершити 6174, навіть коли обидва процесори мали рівні показники.

Кешування з

Структура та дизайн кешу все ще ретельно відрегульовані, оскільки дослідники шукають способи витримувати більшу продуктивність за рахунок зменшення кеш-пам'яті. Поки що виробники, такі як Intel та AMD, не суттєво підштовхнули більші кеш-пам'ять або зроблені конструкції все ще до L4. Є кілька процесорів Intel із бортовим EDRAM, які мають кеш-пам'ять L4, але такий підхід є незвичним (саме тому ми використовували приклад Haswell вище, навіть якщо цей процесор старий на даному етапі, мабуть, переваги кешу L4 ще не перевищують витрати.

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

Перевірте наш wfoojjaec пояснює серію для більш поглибленого висвітлення сьогоднішніх гарячих технологічних тем.