Смекни!
smekni.com

Огляд архітектури IBM PC-сумісного компютера (стр. 8 из 11)

Оскільки підвищення швидкодії є головною причиною появи ієрархії пам‘яті, коефіцієнти попадань та промахів є важливими характеристиками. Час звернення при попаданні (hit time) є час звернення до більш високого рівня ієрархії, яке включає до себе час, необхідний для з‘ясування того, наявний блок у даному рівні ієрархії чи ні. Втрати при промаху (miss penalty) є час для заміщення блоків у більш високому рівні на блок з нижчого рівня + час для пересилки цього блока в пристрій (як правило, процесор). Втрати на промах також включають у себе дві компоненти: час доступу (access tine) – час звернення до першого слова при промаху, та час пересилки (transfer tine) – додатковий час для пересилки решти слів блоку. Час доступу пов‘язаний з затримкою пам‘яті більш низького рівня, у той час як час для пересилки пов’язаний зі смугою пропускання каналу між двома рівнями ієрархії.

Для того щоб описати деякий рівень ієрархії пам‘яті треба відповісти на такі питання:

1.Де може розміщуватися блок на вищому рівні ієрархії (розміщення блока);

2.Як знайти блок, коли він знаходиться на верхньому рівні (ідентифікація блока);

3.Який блок повинен бути замінений у випадку промаху (заміщення блоків);

4.Що відбувається під час запису (стратегія запису).

2.1 Організація кеш-пам‘яті

Концепція кеш-пам‘яті виникла раніше ніж архітектура IBM/360, та сьогодні присутня практично у всіх типах комп‘ютерів.

Всі визначення, які було визначено раніше можуть бути використані і для кеш-пам‘яті, хоча слово "рядок" (line) часто вживається замість слова "блок".

Як правило, для опису кеш-пам‘яті використовуються такі характеристики:


Розмір блока (рядка) 4-128 КБайт

Втрати при промаху

Час доступу

Час пересилки

8-32 такти синхронізації

6-10 тактів синхронізації

2-22 такти синхронізації

Коефіцієнт промахів 1%-20%
Час попадання 1-4 тактів синхронізації
Розмір кеш-пам‘яті 4КБайт-16МБайт

У таблиці наведені типові значення параметрів сучасних систем кеш-пам‘яті для різних моделей комп‘ютерів. Розглянемо організацію кеш-пам‘яті більш докладно, відповідаючи на 4 раніше поставлені питання

1. Де може бути розміщений блок у кеш-пам‘яті

Принципи розміщення блоків в кеш-пам‘яті визначають три основних типи їх організації:

- Якщо кожний блок основної пам‘яті має тільки одне фіксоване місце, на якому він може з‘явитися в кеш-пам‘яті, то така кеш-пам‘ять називається кешем з прямим відображенням (direct mapping). Це найпростіша організація кеш-пам‘яті, при якій для відображення адрес блоків основної пам‘яті на адреси кеш-пам‘яті просто використовуються молодші розряди адреси блока. Таким чином, всі блоки основної пам‘яті що мають однакові молодші розряди адреси опиняються в одному блоку кеш-пам‘яті, тобто (адреса блоку в кеш-пам‘яті) = (адреса блоку основної пам‘яті)%(число блоків в кеш-пам‘яті);

- Якщо деякий блок основної пам‘яті може розташовуватись у будь-якому місці кешу, то кеш називається повністю асоціативним;

- Якщо деякий блок основної пам‘яті може розташовуватися на обмеженій множині місць кешу, то кеш називається множинно-асоціативним. Часто множина представляє собою групу з двох або більшого числа блоків в кеші. Якщо множина складається з n блоків, то таке розміщення називається множинно-асоціативним з n каналами. Для розміщення блока перш за все необхідно з‘ясувати номер множини. Множина визначаються молодшими розрядами адреси пам‘яті: (адреса множини кешу) = (адреса блоку основної пам‘яті) % (кількість множин в кеш-пам‘яті). Далі, блок може розміщуватись у довільному місці множини.

Діапазон можливих реалізацій кеш-пам‘яті охоплює багато рішень: кеш з прямим відображенням представляє собою просто одноканальну множинно-асоціативну кеш-пам‘ять, а повністю асоціативна кеш-пам‘ять з m блоками може бути названа m-канальною множино-асоціативною. У сучасних процесорах як правило використовується кеш-пам‘ять з прямим відображенням або чотирьох-(двух-)канальна множинно-асоціативна кеш-пам‘ять.

2. Як знайти блок, що знаходиться в кеш-пам‘яті

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

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

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

3. Який блок кеш-пам‘яті повинен бути замінений при промаху

При виникненні промаху, контролер кеш-пам‘яті повинен вибрати блок для заміни. Користь від використання організації з прямим відображенням полягає у тому, що апаратні засоби при ньому дуже прості. Обирати просто нема чого: на попадання перевіряється тільки один блок і тільки цей блок може бути замінений. При повністю асоціативній чи множинно-асоціативній організації кешу маємо декілька блоків, з яких потрібно обирати кандидата у випадку промаху. Як правило для заміщення блоків застосовується дві основні стратегії: випадкова та LRU. У першому випадку, щоб мати рівномірний розподіл, блоки-кандидати обираються випадково. У деяких системах, для того щоб отримати відновлювальну поведінку яка корисна при налагодженні апаратури, використовують псевдовипадковий генератор випадкових чисел.

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

Перевага випадкового метода полягає у тому, що його простіше реалізувати в апаратурі. Коли кількість блоків для підтримки траси збільшується, алгоритм LRU стає все більш дорогим та часто тільки наближеним. У таблиці наведені відміни у промахах при використанні алгоритму LRU та випадкового алгоритму:

Асоціативність 2-канальна 4-канальна 8-канальна
Розмір кеш-пам‘яті LRURandom LRURandom LRURandom
16КБ 5.18%5.69% 4.67%5.29% 4.39%4.96%
64КБ 1.88%2.01% 1.54%1.66% 1.39%1.53%
256КБ 1.15%1.17% 1.13%1.13% 1.12%1.12%

4. Що відбувається під час запису

При зверненні до кешу на реальних програмах переважають операції читання. Всі звернення за командами є зверненнями по читанню та більшість команд не записують в пам‘ять. Як правило, операції запису складають 10% загального числа операцій з пам’яттю. Бажання зробити загальний випадок більш швидким означає оптимізацію кешу для виконання операцій по читанню, але при реалізації високопродуктивної обробки даних не можна нехтувати швидкістю операцій запису.

Загальний випадок є більш простим. Блок з кеш-пам‘яті може бути прочитаний у той самий час, коли читається та порівнюється його тег. Таким чином, читання блоку починається відразу як тільки стає доступною адреса блока. Якщо читання проходить з попаданням, блок надходить до процесора без затримок. Якщо виникає промах, то від заздалегідь прочитаного блоку нема ніякого ефекту затримки або прискорення.

Але при виконанні операції запису ситуація повністю змінюється. Саме процесор визначає розмір запису (часто від 1 до 8 байт) та тільки ця частина блоку може бути змінена. У загальному випадку це передбачає виконання над блоком послідовності операцій читання-модифікація-запис: читання оригіналу блока, модифікація його частини та запис нового значення блоку. Більш того, модифікація блоку не може починатись до тих пір, доки перевіряється тег, щоб впевнитись у тому, що звернення є попаданням. Оскільки перевірка тегів не може виконуватись паралельно з іншою роботою, операції запису займають більше часу, ніж операції читання.

Дуже часто організація кешу на різних машинах відрізняється саме стратегією виконання запису. Коли виконується запис до кешу, маємо 2 базові можливості:

- наскрізна запис (write through) – інформація записується у два місця: у блок кеш-пам‘яті та у блок більш низького рівня пам‘яті;

- запис із зворотнім копіюванням (write back) – інформація записується тільки у блок кеш-пам‘яті. Модифікований блок кешу записується в основну пам‘ять тільки коли він заміщується. Для скорочення частоти копіювання блоків при заміні часто з кожним блоком кешу пов‘язується так званий біт модифікації. Цей біт стану показує чи був змінений блок, що знаходиться в кеш-пам‘яті. Якщо він не модифікувався, то зворотне копіювання відміняється, оскільки більш низький рівень пам‘яті містить ту саму інформацію що і блок в кеші.

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