АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Кеш-память

 

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

Є два шляхи рішення цієї проблеми. Найпростіший з

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

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

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

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

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

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

То, що при послідовних відсиланнях до пам'яті протягом деякого проміжку часу використовується тільки невелика її ділянка, називається принципом локальності. Цей принцип складає основу всіх систем кеш-пам'яті. Ідея полягає в наступному: коли визначене слово викликається з пам'яті, воно разом із сусідніми словами переноситься в кеш-пам'ять, що дозволяє при черговому запиті швидко звертатися до наступних слів. Загальний пристрій процесора, кеш-пам'яті й основній пам'яті показане на рис. 3.2. Кеш-пам'ять по логіці речей повинна знаходитися між процесором і ocнoвною пам'яттю. У дійсності існує три можливих варіанти розташування

кеш-пам'яті.

 

Центральний процесор
Основна

пам’ять

 

               
       
 


Кеш-пам’ять

 

       
 
   
 

 


Шина

 

Рис.3.2. Загальна схема взаємозв’язку між процесором, пам’яттю і кешем

 

Якщо слово зчитується або записується k раз, комп'ютеру знадобиться зробити 1 звертання до повільної основної пам'яті і k-1 звертань до швидкої кеш-пам'яті. Чим більше k, тим вище загальна продуктивність.

Нехай с – час доступу до пам'яті, m – час доступу до основної пам'яті і h – коефіцієнт спів падань, який показує співвідношення числа посилань до кеш-пам'яті і загального числа посилань. У нашому прикладі h=(k-l)/k. Таким чином, можна обчислити середній час доступу:

середній час доступу =c+(l-h)m.

Якщо h→ 1 всі звертання здійснюються тільки до кеш-пам'яті, то час доступу наближається до с. З іншого боку, якщо h → 0, то щораз потрібно звертатися до основної пам'яті, тоді час доступу наближається до с+т: спочатку потрібен час с для перевірки кеш-пам'яті (у даному випадку безуспішної), а потім час m для звертання до основної пам'яті. У деяких системах звертання до основної пам’яті може починатися паралельно з дослідженням кеш-пам'яті, щоб у випадку невдалого пошуку цикл звертання до основної пам'яті вже почався. Однак ця стратегія вимагає здатності зупиняти процес звертання до основної пам’яті у випадку результативного звертання до кеш-пам'яті, що робить розробку такого комп'ютера більш складною.

Основна пам'ять і кеш-пам'ять поділяються на блоки фіксованого розміру з врахуванням принципу локальності. Блоки всередині кеш-пам'яті звичайно називають рядками кеш-пам'яті (cache lines). Якщо звертання до кеш-пам'яті не результативне, то з основної пам'яті в кеш-пам'ять завантажується весь рядок, а не тільки необхідне слово. Наприклад, якщо рядок складається з 64 байтів, звертання до адреси 260 спричинить завантаження в кеш-пам'ять усього рядка, тобто з 256-го по 319-й. Можливо, через якийсь час знадобляться інші слова з цього рядка. Taкий шлях звертання до пам'яті більш ефективний, чим виклик кожного слова окремо, тому що викликати k слів 1 раз можна набагато швидше, ніж 1 слово k раз. Якщо вхідні повідомлення кеш-пам'яті містять більше одного слова, це значить що буде менше таких вхідних повідомлень і, отже, менше невиробничих витрат.

Розробка кеш-пам'яті дуже важлива для процесорів з високої продуктивністю. Перше питання – розмір кеш-пам'яті. Чим більше розмір, тим краще працює пам'ять, але тем дорожче вона коштує. Друге питання – розмір рядка пам'яті. Кеш-пам'ять об’ємом 16 Кбайт можна розділити на 1К рядків по 16 байт, 2К рядків по 8 байтів і т.д. Третє питання – як побудована кеш-пам'ять, тобто вона визначає, які саме слова утримуються в ній у даний момент.

Четверте питання – чи належні команди і дані знаходяться разом у загальній кеш-пам'яті. Простіше розробити суміжну кеш-пам'ять, у якій зберігаються і дані, і команди. При цьому виклик команд і даних автоматично врівноважується. Проте в даний час існує тенденція до використання розділеної кеш-пам'яті, коли команди зберігаються в одній кеш-пам'яті, а дані – в іншій. Така структура також називається Гарвардською (Harvard Architecture), оскільки ідея використання окремої пам'яті для команд і окремої пам'яті для даних уперше втілилася в комп'ютері Магу III, що був створений Говардом Айкеном у Гарварді. Сучасні розробники пішли цим шляхом, оскільки зараз широко використовуються процесори з конвеєрами, а при такій організації повинна бути можливість одночасного доступу і до команд, і до даних (операндів). Розділена кеш-пам'ять дозволяє здійснювати паралельний доступ, а загальна – ні. До того ж, оскільки команди звичайно не міняються під час виконання, зміст командної кеш-пам'яті ніколи не приходиться записувати назад в основну пам'ять.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)