Як працюють кеші процесорів L1 та L2 та чому вони є важливою частиною сучасних чіпів
Розвиток кеш-пам’яті та кешування є однією з найважливіших подій в історії обчислювальної техніки. Практично кожне сучасне ядро процесора, починаючи від мікросхем з наднизькою потужністю, таких як ARM Cortex-A5, і закінчуючи кеш-пам'яттю Intel Core i9 найвищого класу. Навіть мікроконтролери вищого класу часто мають невеликі кеш-пам’яті або пропонують їх як опцію - переваги продуктивності занадто великі, щоб їх ігнорувати навіть у конструкціях з наднизькою потужністю.
Кешування було винайдено для вирішення значної проблеми. У перші десятиліття обчислень основна пам’ять була надзвичайно повільною і неймовірно дорогою, але процесори теж не були особливо швидкими. Починаючи з 1980-х, розрив почав швидко збільшуватися. Тактові частоти мікропроцесорів злетіли, але час доступу до пам'яті покращився значно менше. У міру зростання цього розриву ставало все більш очевидним, що для подолання розриву потрібен новий тип швидкої пам'яті.
Як працює кешування
Кеші центрального процесора - це невеликі пули пам’яті, які зберігають інформацію, яка, швидше за все, буде потрібна наступному процесору. Яка інформація завантажується в кеш, залежить від складних алгоритмів та певних припущень щодо програмного коду. Мета кеш-системи полягає в тому, щоб забезпечити, щоб центральний процесор мав наступний біт даних, який йому знадобиться, вже завантажений у кеш на той час, коли він піде шукати його (також званий кешовим зверненням).
З іншого боку, пропуск кеш-пам'яті означає, що центральний процесор повинен піти на скремпінг, щоб знайти дані в іншому місці. Тут починає діяти кеш-пам’ять L2 - хоча він повільніший, але набагато більший. Деякі процесори використовують інклюзивний дизайн кешу (тобто дані, що зберігаються в кеші L1, також дублюються в кеші L2), тоді як інші є ексклюзивними (тобто два кеші ніколи не діляться даними). Якщо дані не вдається знайти в кеш-пам'яті L2, процесор продовжує рух по ланцюжку до L3 (як правило, все ще в режимі вмирання), а потім до L4 (якщо він існує) та основної пам'яті (DRAM).
Ця діаграма показує взаємозв'язок між кешем L1 з постійною швидкістю потрапляння, але більшим кешем L2. Зауважте, що загальний показник потрапляння різко зростає із збільшенням розміру L2. Більший, повільніший, дешевший L2 може забезпечити всі переваги великого L1, але без покарання за розмір матриці та споживання енергії. Більшість сучасних швидкостей кешування L1 мають показники, які значно перевищують теоретичні 50 відсотків, показані тут - як Intel, так і AMD, як правило, польові показники кешу в 95 відсотків або вище.
Наступною важливою темою є множина-асоціативність. Кожен процесор містить певний тип оперативної пам'яті, який називається тег-оперативною пам'яттю. Тег оперативної пам'яті - це запис усіх розташувань пам'яті, які можна зіставити з будь-яким даним блоком кешу. Якщо кеш повністю асоціативний, це означає, що будь-який блок даних оперативної пам'яті може зберігатися в будь-якому блоці кешу. Перевага такої системи полягає в тому, що швидкість потрапляння висока, але час пошуку надзвичайно довгий - процесору доводиться переглядати весь кеш, щоб з’ясувати, чи є дані перед пошуком в основній пам'яті.
На протилежному кінці спектра ми маємо прямі карти кешу. Кеш із прямою картою - це кеш, де кожен блок кешу може містити один і тільки один блок основної пам'яті. Цей тип кеш-пам’яті можна шукати надзвичайно швидко, але оскільки він співвідносить 1: 1 до місць пам'яті, він має низьку швидкість потрапляння. Поміж цими двома крайнощами знаходяться n-шляхові асоціативні кеші. Двосторонній асоціативний кеш (L1 Piledriver є двостороннім) означає, що кожен основний блок пам'яті може зіставитись з одним із двох блоків кешу. Восьмисторонній асоціативний кеш означає, що кожен блок основної пам'яті може бути в одному з восьми блоків кешу. Кеш-пам’ять інструкцій Ryzen L1 є 4-сторонньою асоціативною, тоді як кеш даних L1 8-сторонньою асоціативною.
Наступні два слайди показують, як швидкість потрапляння покращується із заданою асоціативністю. Майте на увазі, що такі речі, як частота потрапляння, дуже особливі - різні програми матимуть різну частоту потрапляння.
Чому кеші процесора постійно збільшуються
То навіщо спочатку додавати постійно більші кеші? Оскільки кожен додатковий пул пам'яті відсуває потребу у доступі до основної пам'яті та може покращити продуктивність у конкретних випадках.
Ця діаграма з огляду Haswell від Anandtech корисна, оскільки вона ілюструє вплив на ефективність додавання величезного (128 МБ) кешу L4, а також звичайних структур L1 / L2 / L3. Кожна сходинка представляє новий рівень кеш-пам’яті. Червона лінія - це чіп з L4 - зауважте, що для великих розмірів файлів він все ще майже вдвічі швидший, ніж інші два чіпи Intel.
Тоді може здатися логічним виділити величезну кількість поточних ресурсів на кешування - але виявляється, що це зменшується гранична віддача. Більші кеші є як повільнішими, так і дорожчими. При шести транзисторах на біт SRAM (6T) кеш-пам’ять також дорога (з точки зору розміру штампа, а отже, і вартості в доларах). Минуло певний момент, має сенс витратити бюджет енергопостачання мікросхеми та розрахунок транзисторів на більшу кількість одиниць виконання, краще прогнозування гілок або додаткові ядра. У верхній частині історії ви можете побачити зображення мікросхеми Pentium M (Centrino / Dothan); вся ліва сторона матриці присвячена масивному кешу L2. Так було в останні дні однопоточних процесорів, тепер, коли у нас є багатоядерні мікросхеми та вбудовані графічні процесори, у багатьох випадках менший відсоток загального процесора відводиться на кеш.
Як дизайн кешу впливає на продуктивність
Вплив продуктивності додавання кеша центрального процесора безпосередньо залежить від його ефективності або швидкості звернень; повторні помилки кешу можуть мати катастрофічний вплив на продуктивність процесора. Наступний приклад значно спрощений, але повинен слугувати ілюстрацією суті.
Уявіть, що центральний процесор повинен завантажувати дані з кешу L1 100 разів поспіль. Кеш-пам'ять L1 має затримку доступу до 1ns і 100-відсоткову частоту звернень. Тому для виконання цієї операції нашому процесору потрібно 100 наносекунд.
Тепер припустимо, що кеш має 99-відсоткову частоту звернень, але дані, які CPU насправді потребує для свого 100-го доступу, знаходяться в L2, із 10-цикловою (10ns) затримкою доступу. Це означає, що для виконання перших 99 зчитувань процесору потрібно 99 наносекунд, а для 100-го - 10 наносекунд. Зниження швидкості звернень на 1 відсоток лише сповільнило процессор на 10 відсотків.
У реальному світі кеш-пам'ять L1 зазвичай має коефіцієнт звернення від 95 до 97 відсотків, але вплив продуктивності цих двох значень у нашому простому прикладі становить не 2 відсотки - це 14 відсотків. Майте на увазі, ми припускаємо, що пропущені дані завжди містяться в кеші L2. Якщо дані були вилучені з кеш-пам’яті і знаходяться в основній пам’яті із затримкою доступу 80-120ns, різниця в продуктивності між 95 і 97 відсотками швидкості звернення може майже вдвічі перевищити загальний час, необхідний для виконання коду.
Тоді, коли сімейство бульдозерів AMD порівнювали з процесорами Intel, тема дизайну кешу та впливу на продуктивність з’явилася дуже багато. Незрозуміло, наскільки невисокою продуктивністю бульдозера може бути винна його відносно повільна підсистема кешування - окрім порівняно високих затримок, сім'я бульдозерів також страждала від великої кількості суперечок у кеші. Кожен модуль Bulldozer / Piledriver / Steamroller ділив свій кеш інструкцій L1, як показано нижче:
Кеш обговорюється, коли два різні потоки записують і перезаписують дані в одному і тому ж просторі пам'яті. Це шкодить продуктивності обох потоків - кожне ядро змушене витрачати час на запис власних бажаних даних у L1, лише для іншого ядра негайно перезаписує цю інформацію. AMD’S OLDER Steamroller все ще вражений цією проблемою, навіть незважаючи на те, що AMD збільшила кеш-пам’ять L1 до 96 КБ і зробила його тристороннім асоціативним замість двох. Пізніше центральні процесори Ryzen не діляться кешем таким чином і не страждають від цієї проблеми.
Цей графік показує, як частота потрапляння Opteron 6276 (оригінального процесора Bulldozer) падала, коли обидва ядра були активними, принаймні в деяких тестах. Очевидно, однак, суперечка в кеші - це не єдина проблема - 6276 історично намагався перевершити 6174, навіть коли обидва процесори мали однакові показники відвідування.
Сьогодні Zen 2 не має таких слабких сторін, і загальна продуктивність кеш-пам’яті Zen і Zen 2 набагато краща за попередню архітектуру Piledriver.
Сучасні центральні процесори також часто мають дуже невеликий кеш-пам’ять “L0”, який часто має лише кілька КБ і використовується для зберігання мікро-операційних систем. AMD та Intel використовують цей тип кеш-пам’яті; Zen мав 2048 µOP кеш-пам'яті, тоді як Zen 2 має 4096 µOP кеш-пам’яті. Ці крихітні пули кеш-пам'яті працюють за тими ж загальними принципами, що і L1 та L2, але представляють ще менший пул пам'яті, до якого центральний процесор може отримати доступ навіть із меншими затримками, ніж L1. Часто компанії пристосовують ці можливості один до одного. Zen 1 і Zen + (Ryzen 1xxx, 2xxx, 3xxx APU) мають кеш інструкцій L1 обсягом 64 КБ, який є 4-стороннім асоціативним набором, і кеш L0 2,048 µOP. Zen 2 (настільні центральні процесори Ryzen 3xxx, Ryzen Mobile 4xxx) має кеш інструкцій L1 розміром 32 КБ, який має 8-сторонній асоціативний набір та кеш-пам’ять 4096 мкОп. Подвоєння встановленої асоціативності та розміру кешу µOP дозволило AMD зменшити розмір кешу L1 навпіл. Подібні компроміси є типовими для процесорів.
Кешування
Структура та дизайн кеш-пам'яті все ще уточнюються, оскільки дослідники шукають шляхи витиснення більш високої продуктивності з менших кеш-пам’яті. На сьогоднішній день такі виробники, як Intel і AMD, ще не вимагали більших кеш-пам’яті та не брали дизайнів до L4. Є кілька процесорів Intel з вбудованою EDRAM, які мають обсяг кешу L4, але такий підхід незвичний. Ось чому ми використовували приклад Haswell вище, навіть якщо цей процесор застарілий. Імовірно, переваги великого кешу L4 ще не перевищують витрат для більшості випадків використання.
Незважаючи на це, дизайн кеш-пам’яті, енергоспоживання та продуктивність будуть мати вирішальне значення для роботи майбутніх процесорів, і суттєві вдосконалення поточних конструкцій можуть підвищити статус будь-якої компанії, яка може їх впровадити.
Читати далі
SpaceX запускає бета-версію "Краще від нічого"
Тим нечисленним щасливчикам, які отримали запрошення спробувати послугу, доведеться заплатити неабияку попередню вартість, і швидкість руху не вражає. Все-таки це супутникове Інтернет нового покоління.
Чому чіп M1 від Apple загрожує Intel та AMD
Власна історія Intel говорить про це, і AMD повинна дуже серйозно поставитися до нового SoC M1 від Apple.
4K проти UHD: в чому різниця?
Терміни UHD та 4K стали настільки суперечливими, що виробники телевізійних програм, мовники та технічні блоги використовують їх взаємозамінно - але це не одне й те саме.
Cyberpunk 2077: CDPR «вибачається» за випуск непрацюючої гри, пропонує відшкодування
Версія для PS4 та Xbox One S для Cyberpunk 2077 настільки погана, що компанія зараз пропонує відшкодування. Ми рекомендуємо гравцям консолі останнього покоління взяти їх на себе, а не чекати.