Ім'я файлу: Реферат Архітектура Комп'ютерів.docx
Розширення: docx
Розмір: 63кб.
Дата: 24.11.2022
скачати

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Черкаський державний бізнес-коледж

Циклова комісія природничо-математичних та гуманітарних дисциплін.

РЕФЕРАТ

з предмету: ”Архітектура програмного забезпечення”

на тему:

« Для чого використовується кешування даних?»

Виконав:

Студент 4 курсу

групи №3П-20

Волошко М. В.

Перевірив викладач:

Житнич К.Г

Черкаси 2022

Вступ

Вперше слово «кеш» у комп'ютерному контексті було використано в 1967 році під час підготовки статті для публікації в журналі «IBM Systems Journal». Стаття стосувалася удосконалення пам'яті в розробляється моделі 85 із серії IBM System/360. Редактор журналу Лайл Джонсон попросив придумати більш описовий термін, ніж «високошвидкісний буфер», але через відсутність ідей сам запропонував слово «кеш». Стаття була опублікована в початку 1968 року, автори були премійовані IBM, їхня робота набула поширення і згодом була покращена, а слово «кеш» скоро стала використовуватися в комп'ютерній літературі як бщепрінятий термін.

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

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

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

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

Наприклад, веб-браузер перевіряє локальний кеш на диску на наявність локальної копії веб-сторінки, відповідної запрошенням URL. У цьому прикладі URL - це ідентифікатор, а вміст веб-сторінки - це елементи даних.

Якщо кеш обмежений в обсязі, то при промаху може бути прийнято рішення відкинути деякий запис для звільнення простору. Для вибору відкидаємо запису використовується так званий алгоритм витіснення (див. Алгоритми витіснення).

При модифікації елементів даних в кеші виконується їх оновлення в основній пам'яті. Затримка в часі між модифікацією даних у кеші та оновленням основної пам'яті управляється так званої політикою запису.

У кеші з негайною записом кожна зміна викликає синхронне оновлення даних в основній пам'яті.

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

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

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

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

Архітектура сучасних 32-розрядних процесорів включає ряд засобів кешування пам'яті: два рівні кешу інструкцій і даних (L1 Cache і L2 Cache), буфери асоціативної трансляції (TLB) блоку сторінкової переадресації та буфери запису. Ці кошти в різних варіаціях (на кристалі, картриджі процесора або на системній платі) представлені в системах з процесорами 486, Pentium і Р6. У процесорі 80386 (Intel) був тільки TLB, a кеш-пам'ять, встановлювана на системній платі, не мала підтримки з боку процесора.

1.Опис пристрою. Принципи кешування

Основна пам'ять комп'ютерів реалізується на відносно повільної динамічної пам'яті (DRAM), звернення до неї призводить до простою процесора - з'являються такти чекання (wait states). Статична пам'ять (SRAM), побудована, як і процесор, на тригерних осередках, за своєю природою здатна наздогнати сучасні процесори по швидкодії і зробити непотрібними такти чекання (або хоча б скоротити їх кількість). Розумним компромісом для побудови економічних і продуктивних систем з'явився ієрархічний спосіб організації оперативної пам'яті. Ідея полягає в поєднанні основної пам'яті великого обсягу на DRAM з відносно невеликою кеш-пам'яттю на швидкодіючих мікросхемах SRAM.

У перекладі слово кеш (cache) означає «таємний склад», «тайник» («заначка»). Таємниця цього складу полягає в його «прозорості» - для програми він не являє собою додаткової адресуемой області пам'яті. Кеш є додатковим швидкодіючим сховищем копій блоків інформації з основної пам'яті, ймовірність звернення до яких найближчим часом велика. Кеш не може зберігати копію всієї основної пам'яті, оскільки його обсяг у багато разів менше основної пам'яті. Він зберігає лише обмежена кількість блоків даних і каталог (cache directory) - список їх поточного відповідності областям основної пам'яті. Крім того, кешуватися може не вся пам'ять, доступна процесору.

При кожному зверненні до пам'яті контролер кеш-пам'яті за каталогом перевіряє, чи є дійсна копія витребуваних даних в кеші. Якщо вона там є, то це випадок кеш-влучення (cache hit), і дані беруться з кеш-пам'яті. Якщо дійсної копії там немає, це випадок кеш-промаху (cache miss), і дані беруться з основної пам'яті. Відповідно до алгоритму кешування блок даних, лічений з основної пам'яті, за певних умов заместит один із блоків кеша. Від інтелектуальності алгоритму заміщення залежить відсоток влучень і, отже, ефективність кешування. Пошук блоку в списку повинен проводитися досить швидко, щоб «задумою» у прийнятті рішення не звести нанівець виграш від застосування швидкодіючої пам'яті.

Звернення до основної пам'яті може починатися одночасно з пошуком в каталозі, а в разі потрапляння - перериватися (архітектура Look aside). Це економить час, але зайві звернення до основної пам'яті ведуть до збільшення енергоспоживання. Інший варіант: звернення до зовнішньої пам'яті починається тільки після фіксації промаху (архітектура Look Through), при цьому втрачається принаймні один такт процесора, зате економиться енергія.

У сучасних комп'ютерах кеш зазвичай будується за дворівневою схемою. Первинний кеш (L1 Cache) вбудований у всі процесори класу 486 і старше; це внутрішній кеш. Обсяг цього кеша невеликий (8-32 Кбайт). Для підвищення продуктивності для даних і команд часто використовується роздільний кеш (так звана Гарвардська архітектура - протилежність Прінстонський, що використовує загальну пам'ять для команд і даних). Вторинний кеш (L2 Cache) для процесорів 486 і Pentium є зовнішнім (встановлюється на системній платі), а у Р6 розташовується в одній упаковці з ядром і підключається до спеціальної внутрішній шині процесора.

Кеш-контролер повинен забезпечувати когерентність (coherency) - узгодженість даних кеш-пам'яті обох рівнів з даними в основній пам'яті, за тієї умови, що звернення до цих даних може проводитися не тільки процесором, але й іншими активними (busmaster) адаптерами, підключеними до шин (PCI, VLB, ISA і т. д.). Слід також врахувати, що процесорів може бути декілька, і в кожного може бути свій внутрішній кеш.

Контролер кеша оперує рядками (cache line) фіксованої довжини. Рядок може зберігати копію блоку основної пам'яті, розмір якого, природно, збігається з довжиною рядка. З кожним рядком кеша пов'язана інформація про адресу скопійованого в неї блоку основної пам'яті і про її стані. Рядок може бути дійсною (valid) - це означає, що в поточний момент часу вона достовірно відображає відповідний блок основної пам'яті, або недійсною. Інформація про те, який саме блок займає даний рядок (тобто старша частина адреси або номер сторінки), і про її стан називається тегом (tag) і зберігається в пов'язаної з даною рядком комірці спеціальної пам'яті тегів (tag RAM). В операціях обміну з основною пам'яттю зазвичай рядок бере участь цілком (несекторірованний кеш), для процесорів 486 і старше довжина рядка збігається з обсягом даних, переданих за один пакетний цикл (для 486 це 4х4=16 байт, для Pentium 4x8=32 байт). Можливий і варіант секторірованного (sectored) кешу, при якому один рядок містить кілька суміжних осередків - секторів, розмір яких відповідає мінімальній порції обміну даних кеша з основною пам'яттю. При цьому в записі каталогу, відповідної кожному рядку, повинні зберігатися біти дійсності для кожного сектора даного рядка. Секторірованіе дозволяє економити пам'ять, необхідну для зберігання каталогу при збільшенні обсягу кешу, оскільки більшу кількість біт каталогу відводиться під тег і вигідніше використовувати додаткові біти дійсності, ніж збільшувати глибину індексу (кількість елементів) каталогу.

Рядки кеша під відображення блоку пам'яті виділяються при промахах операцій читання, в Р6 рядки заповнюються і при записі. Запис блоку, що не має копії в кеші, проводиться в основну пам'ять (для підвищення швидкодії запис може вироблятися через буфер відкладеного запису). Поведінка кеш-контролера при операції запису в пам'ять, коли копія затребуваної області знаходиться в деякій рядку кеша, визначається його алгоритмом, або політикою запису (Write Policy). Існують дві основні політики запису даних з кеша в основну пам'ять: наскрізна запис WT (Write Through) і зворотний запис WB (Write Back).

Політика WT передбачає виконання кожної операції запису (навіть однобайтном), що потрапляє в кешированний блок, одночасно і в рядок кеша, і в основну пам'ять. При цьому процесору при кожній операції запису доведеться виконувати відносно тривалу запис в основну пам'ять. Алгоритм досить простий в реалізації і легко забезпечує цілісність даних за рахунок постійного збігу копій даних в кеші і основної пам'яті. Для нього не потрібно зберігати ознаки присутності і модифікування - цілком достатньо тільки інформації тега (при цьому вважається, що будь-який рядок завжди відображає якийсь блок, а який саме - вказує тег). Але ця простота обертається низькою ефективністю запису. Існують варіанти цього алгоритму із застосуванням відкладеної буферирован записи, при якій дані в основну пам'ять переписуються через FIFO-буфер під час вільних тактів шини.

Політика WB дозволяє зменшити кількість операцій запису на шині основної пам'яті. Якщо блок пам'яті, в який повинен робитися запис, відображений в кеші, то фізична запис спочатку буде проведена в цю дійсну рядок кеша, і вона буде відзначена як брудна (dirty), або модифікована, тобто вимагає вивантаження в основну пам'ять. Тільки після цієї вивантаження (записи в основну пам'ять) рядок стане чистою (clean), і її можна буде використовувати для кешування інших блоків без втрати цілісності даних. В основну пам'ять дані переписуються тільки цілої рядком. Ця вивантаження контролером може відкладатися до настання крайньої необхідності (звернення до кешированной пам'яті іншим абонентом, заміщення в кеші новими даними) або виконуватися у вільний час після модифікації всього рядка. Даний алгоритм складніше в реалізації, але істотно ефективніше, ніж WT. Підтримка системною платою кешування зі зворотним записом вимагає обробки додаткових інтерфейсних сигналів для вивантаження модифікованих рядків в основну пам'ять, якщо до цієї області здійснюється поводження з боку таких контролерів шини, як інші процесори, графічні адаптери, контролери дисків, мережеві адаптери і т. П.

Залежно від способу визначення взаємної відповідності рядка кеша і області основної пам'яті розрізняють три архітектури кеш-пам'яті: кеш прямого відображення (direct-mapped cache), повністю асоціативний кеш (fully associative cache) та їх комбінація -частково- або набірний-асоціативний кеш (set-associative cache).

2. Основні режими роботи

2.1 Кеш прямого відображення
У кеш-пам'яті прямого відображення адреса пам'яті, по якому відбувається звернення, однозначно визначає рядок кеша, в якій може перебувати необхідний блок. Принцип роботи такого кеша пояснимо на прикладі несекторірованного кеша обсягом 256 Кбайт з розміром рядка 32 байта і обсягом Кешована основної пам'яті 64 Мбайт - типовий кеш системної плати для Pentium. Структуру пам'яті в такій системі ілюструє рис. 2.

кешувального основна пам'ять умовно розбивається на сторінки (в даному випадку 256), розмір яких збігається з розміром кеш-пам'яті (256 Кбайт). Кеш-пам'ять (і умовно сторінки основної пам'яті) ділиться на рядки (256К/32=8К рядків). Архітектура прямого відображення увазі, що кожен рядок кеша може відображати з будь-якої сторінки Кешована пам'яті тільки відповідну їй рядок (на малюнку вони знаходяться на одному горизонтальному рівні). Оскільки обсяг основної пам'яті багато більше об'єму кеша, на кожну рядок кеша може претендувати безліч блоків пам'яті з однаковою молодшої частиною адреси (зміщенням всередині сторінки). Один рядок в певний момент може, природно, містити копію тільки одного з цих блоків. Номер (адреса) рядки в кеш-пам'яті називається індексом (index). Тег несе інформацію про те, який саме блок займає даний рядок (тобто старша частина адреси або номер сторінки). Пам'ять тегів повинна мати кількість осередків, рівне кількості рядків кеша, а її розрядність повинна бути достатньою, щоб вмістити старші біти адреси Кешована пам'яті, що не потрапили на шину адреси кеш-пам'яті. Крім адресної частини тега з кожним рядком кеша пов'язані біти ознак дійсності і модифікування даних.

На початку кожного звернення до Кешована пам'яті контролер першим ділом зчитує осередок каталогу з заданим індексом, порівнює біти адреси тега зі старшими бітами адреси пам'яті та аналізує ознака дійсності. Цей аналіз виконується в спеціальному циклі стеження (snoop cycle), іноді його називають циклом запиту (inquire). Якщо в результаті аналізу з'ясовується, що необхідний блок не знаходиться в кеші, то генерується (або продовжується) цикл звернення до основної пам'яті (випадок кеш-промаху). У разі потрапляння запит обслуговується кеш-пам'яттю. У разі промаху після зчитування основної пам'яті приймачем інформації нові дані поміщаються в рядок кеша (якщо вона чиста), а в її тег поміщаються старші біти адреси і встановлюється ознака дійсності даних. Незалежно від обсягу витребуваних даних з основної пам'яті рядок переписується в кеш вся цілком (оскільки ознака дійсності відноситься до всіх її байтам). Якщо контролер кеша реалізує випереджаюче зчитування (read ahead), то в наступні вільні цикли шини оновиться і наступна рядок (якщо вона була чистою). Читання «про запас» дозволяє при необхідності здійснювати пакетний цикл читання кеш через кордон рядка.

Такий кеш має найпростішу апаратну реалізацію і застосовується у вторинному кеші більшості системних плат. Однак йому притаманний серйозний недолік, цілком очевидний при розгляді рис. 2. Якщо в процесі виконання програми процесору почергово будуть вимагатися блоки пам'яті, зміщені відносно один одного на величину, кратну розміром сторінки (на малюнку це будуть блоки, розташовані на одній горизонталі в різних сторінках), то кеш буде працювати інтенсивно, але вхолосту (cache trashing). Чергове звернення буде заміщати дані, лічені в попередньому і зажадають в подальшому зверненні, - тобто буде суцільна низка кеш-промахів. Перемикання сторінок в багатозадачних ОС також знижує кількість кеш-влучень, що відбивається на продуктивності системи. Збільшення розміру кеша при збереженні архітектури прямого відображення дасть не дуже суттєвий ефект, оскільки різні завдання будуть претендувати на одні й ті ж рядка кеша. Не збільшуючи обсягу, можна підвищити ефективність кешування зміною структури кешу, про що піде мова далі.

Обсяг Кешована пам'яті (M CACHED) при архітектурі прямого відображення визначається об'ємом кеш-пам'яті (V CACHE) і розрядністю пам'яті тегів (N): CACHED=V CACHE x 2 N, в нашому випадку M CACHED= 256 Кбайт х 2 8=64 Мбайт.

Іноді в описі кеша прямого відображення фігурує поняття набір (set), що може збити з пантелику. Воно застосовується замість терміна рядок (line) в секторірованном кеші прямого відображення, а сектор тоді називають рядком.

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

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

У найпростішому випадку кожен блок пам'яті може поміщатися в одну з двох рядків (Two Way SetAssociative Cache). Такий кеш повинен містити два банки пам'яті і тегів.

Номер набору (індекс), в якому може відображатися викликана блок даних, однозначно визначається середньою частиною адреси (як номер рядка в кеші прямого відображення). Рядок набору, що відображає необхідний блок, визначається порівнянням тегів (як і в асоціативному кеші), паралельно виконуваних для всіх каналів кеша. Крім того, з кожним набором повинен бути пов'язаний ознака, що визначає рядок набору, що підлягає заміщенню новим блоком даних у разі кеш-промаху (на рис. 4 в її бік вказує стрілка). Кандидатом на заміщення зазвичай вибирається рядок, до якої найдовше не зверталися (алгоритм LRU - Least Recently Used). При відносно великій кількості каналів (рядків у наборі) вдаються до деякого спрощення - алгоритм PseudoLRU для чотирьох рядків (Four Way Set Associative Cache) дозволяє приймати рішення, використовуючи всього 3 біта. Можливо також застосування алгоритму заміщення FIFO (першим увійшов - першим і вийшов) або навіть випадкового (random) заміщення, що простіше, але менш ефективно.

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

2.3 Асоціативний кеш

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

3. Алгоритми і принцип дії

3.1 Алгоритми заміщення даних

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

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

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

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

Таблиця. Порівняння часткою промахів для алгоритму LRU і випадкового алгоритму заміщення при декількох розмірах кеша і різних асоціативних при розмірі блоку 16 байт

Розмір кеш-памятіLRURandomLRURandomLRURandom16 KB5.18% 5.69% 4.67% 5.29% 4.39% 4.96% 64 KB1.88% 2.01% 1.54% 1.66% 1.39% 1.53% 256 KB1.15% 1.17% 1.13% 1.13% 1.12% 1.12%

3.2 Алгоритми псевдо-LRU

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

Позначимо рядки в безлічі через L0, L1, L2 і L3. Кожному безлічі в блоці LRU відповідають три біта В0, В1 і В2, які модифікуються при кожному попаданні і заповненні наступним чином:

якщо останнє звернення в парі L0-L1 було до рядка L0, то біт В1 встановлюється в стан 1, а при зверненні до рядку L1 біт В1 скидається в 0;

якщо останнє звернення в парі L2-L3 було до рядка L2, то біт В2 встановлюється в стан 1, а при зверненні до рядку L3 біт В2 скидається в 0. Вибір замінної рядки (коли всі рядки в безлічі достовірні) визначає вміст біт В0, В1 і В2: Таблиця

В0В1В200Xзаменяется рядок L001Xзаменяется рядок L11X0заменяется рядок L21X1заменяется рядок L3

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

4. Недоліки роботи пристрою при кешуванні

Недоліки розглянемо на прикладі трьох видів процесорів: Intel, AMD, IBM. Більшість недоліків процесора P - 4 є наслідком нововведень, спрямованих на досягнення високої продуктивності - підвищеної тактової частоти і збільшеної довжини конвеєра, а також спекулятивного характеру багатьох дій і оптимізації виконання «типових» операцій на шкоду «нетиповим». Основними недоліками є:

· гостра проблема аліасинга при вибірці даних з L1-кеша і, як наслідок, значні втрати на репло (у початковому процесорі P - 4);

· половинна частота запуску скалярних операцій SSE;

· неефективна реалізація деяких операцій зсуву (всіх зрушень в процесорі P - 4, зрушень вправо і циклічних в 64-бітному режимі в процесорі P - 4E);

· висока латентність інструкцій, що працюють з прапором перенесення CF (ADC, SBB);

· велика довжина конвеєра непредсказанного переходу;

· недостатня ефективність Т-кеша для погано структурованих кодів;

· малий розмір L1-кеша і висока латентність доступу до L2-кешу.

Архітектурі процесора K8 (AMD) є і кілька недоліків, частина з яких обумовлена ??базовими обмеженнями мікроархітектури:

· статичну розбиття потоку МОПов на групи по 3 елементи з прив'язкою черг і функціональних пристроїв ALU/AGU до позицій цих елементів;

· слабка система передбачення переходів, що використовує застарілі алгоритми;

· недостатньо досконала апаратна предвибірки з пам'яті;

· відсутність механізмів переупорядковування звернень до пам'яті;

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

· недостатня асоціативність L1-кешей, що знижує їх ефективність.

У мікроархітектурі PPC970 до основних обмеженням і недоліків можна віднести:

· статичну розбиття потоку МОПов на групи по 4-5 елементів з прив'язкою черг і функціональних пристроїв до позицій цих елементів;

· наявність безлічі обмежувальних умов, що знижують число МОПов в формованої групі (на виході з декодера);

· недостатньо ефективна реалізація L1-кешей, що мають низький рівень асоціативності і занадто великий розмір блоку;

· завищене час виконання передвіщеного переходу (3 такту проти 2 тактів у інших процесорів);

· висока латентність виконання цілочислових операцій (2 такту) та операцій з плаваючою крапкою (6 тактів);

· недостатня пропускна здатність пам'яті через обмежену швидкості шини.

5. Пропозиції щодо підвищення ефективності доступу до даних

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

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

Існують різні варіанти інструкцій передвибірки - зчитування з пам'яті в L2-кеш, зчитування з пам'яті чи з L2-кеша в L1-кеш, зчитування блоку для його подальшої модифікації, або для одноразового використання. У процесорі P - 4 реалізована предвибірки тільки в L2-кеш.

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

Найбільш досконалі механізми програмної та апаратної передвибірки реалізовані в новому процесорі P8 (Intel Core).

Ще один механізм роботи з пам'яттю пов'язаний з особливостями завантаження і вивантаження в умовах позачергового виконання. У зв'язку з тим, що операція може вважатися коректно виконаної тільки до моменту відходу у відставку і не раніше, ніж буде відставлені всі попередні операції, фізичний запис в кеші або в пам'ять не може бути проведена до цього моменту. З цієї причини всі результати вивантаження (записи) в пам'ять накопичуються в спеціальному буфері впорядкування звернень до пам'яті MOB (Memory Order Buffer). Фізична запис даних з цього буфера в кеш проводиться тільки в момент відставки відповідної інструкції. Якщо операція завантаження (читання) з пам'яті адресує елемент даних, який опинився в цьому буфері, то він зчитується безпосередньо з буфера.

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

На практиці ймовірність конфліктів за адресами такого роду зазвичай невелика. Тому за наявності в процесорі механізму відновлення у разі виконання некоректної операції звернення в пам'ять можна було б відмовитися від заборони на виконання ризикованих операцій. У процесорі P8 (Intel Core) такий механізм реалізований - він ідентичний механізму відновлення після неправильно передвіщеного переходу, коли в момент відставки інструкції переходу проводиться остаточна перевірка правильності передбачення.

Крім механізму відновлення, в процесорі P8 є також додатковий «провісник», призначення якого полягає в зниженні ймовірності виконання ризикованої операції завантаження з пам'яті. Якщо такий завантаженні передує операція вивантаження з не обчисленим (на даний момент) адресою пам'яті, проводиться пророкування конфлікту за адресами на основі інформації про попередньому поведе?? ії цієї операції завантаження. Якщо передвіщається відсутність конфлікту, операція завантаження запускається на виконання. Якщо в момент відставки цієї інструкції з'ясується, що пророкування було невірним, і стався конфлікт за адресами з операцією вивантаження, то операція завантаження буде скасована разом з усіма подальшими операціями, і буде вироблено її повторне виконання. Описаний механізм отримав назву «усунення неоднозначностей в пам'яті» (Memory Disambiguation).

На закінчення розглянемо ще один мікроархітектурнимі механізм, який пов'язаний з обчисленням адрес для звернень в пам'ять - роботу з апаратним стеком. Адреса вершини апаратного стека зберігається в регістрі ESP. Зміна цього регістра може відбуватися як неявно, при приміщенні або видалення даних з стека (інструкції PUSH і POP) або при вході або виході в підпрограму (інструкції CALL і RET), так і явно, у звичайній целочисленной інструкції. Традиційно інструкції, що використовують регістр ESP і неявно змінюють його, перетворювалися декодером в два Мопа, один з яких виробляв змістовне дію, а інший - виконував операцію складання або віднімання для регістра ESP.

У процесорах PM, P-M2 і P8 введено спеціальний механізм під назвою «Dedicated Stack Engine». Цей механізм відстежує (на етапі декодування інструкцій) поточне положення вершини стека і замінює в породжуваних МОПах адресацію даних по «мінливого» регістру ESP на суму деякого «постійного» базового адреси стека і відслідковується зсуву. Таким чином, відпадає необхідність постійно модифікувати регістр ESP - тепер його потрібно обчислювати тільки в разі явного використання в якості операнда або індексу. Завдяки цьому зникають непотрібні залежності між операціями за цим регістру, знижується число МОПов у зазначених інструкціях (з двох до одного), підвищується ефективність роботи декодера і збільшується загальна продуктивність процесора.

Список використаної літератури

Гук М., Апаратні засоби IBM PC, Енциклопедія - СПб: ПЕТРУК, 1999. - 816с .: ил. Е.Танненбаум, Сучасні операційні системи, СПб: Питер, 2002. - 1024 с. Григор'єв В.А., Мікропроцесор i486. Архітектура та програмування (в 4-х книгах). Книга 2. Внутрішня архітектура М., Гранал, 1993. - с. 382, іл. 54. Марголіс А., Пошук і усунення несправностей в персональних комп'ютерах.- К .: «Діалектика», 1994. - 368с., Іл. Конспект лекцій. Петровський І.І., Прібильскій А.В., Логічні ІС КР1533, КР1554. Довідник. Частина 2. «Біном», 1993. Шульгін О.А. та ін., Довідник по цифровим логічним мікросхемам, Частина 1 і 2, М .: ИДДК, 1998.



скачати

© Усі права захищені
написати до нас