Для чого призначена кеш-пам’ять процесора?

Для чого потрібна кеш-пам’ять? Як відомо, процесор працює з даними, що зберігаються в оперативній пам’яті. Однак швидкість роботи оперативної пам’яті і процесора істотно різняться: якби процесор безпосередньо спілкувався з оперативною пам’яттю (читав або записував дані), то більшу частину часу просто простоював би. Саме для скорочення затримок доступу до оперативної пам’яті і використовується кеш-пам’ять, яка значно швидкісніша в порівнянні з оперативною. Фактично якщо оперативна пам’ять використовується для того, щоб згладити затримки доступу до даних на накопичувачі (HDD-диску, SSD-накопичувачі або флеш-пам’яті), то кеш-пам’ять процесора застосовується для нівелювання затримок доступу до самої оперативної пам’яті. У цьому сенсі оперативну пам’ять можна розглядати як кеш накопичувача. Однак між оперативною пам’яттю і кешем процесора є одна дуже серйозна відмінність: кеш процесора повністю прозорий для програміста, тобто не можна адресувати дані, що знаходяться в ньому програмним чином.

Зрозуміло, що для того, щоб кеш процесора міг виконувати своє основне завдання, тобто згладжувати доступ до оперативної пам’яті, він повинен працювати набагато швидше, ніж вона. Так, якщо оперативна пам’ять являє собою динамічну пам’ять з довільним доступом (Dynamic Random Access Memory, DRAM), то кеш процесора виконується на базі статичної оперативної пам’яті (Static Random Access Memory, SRAM).

Статична пам’ять SRAM без проблем працює на частотах в декілька гігагерц, тобто кеш на основі такої пам’яті може працювати на тактовій частоті процесора. Динамічна пам’ять DRAM функціонує на частотах істотно нижчих. Наприклад, ефективна частота найпоширенішої сьогодні DRAM-пам’яті DDR3 становить 1600 МГц. Однак це саме ефективна частота пам’яті, тобто частота, з якою дані надходять на зовнішню шину в пакетному режимі доступу, а реальна частота ядра пам’яті становить всього 200 МГц. Звичайно ж, нас цікавить в першу чергу саме ефективна частота пам’яті, тобто 1600 МГц, або 1,6 ГГц. Здавалося б, це немало, але потрібно враховувати і таймінги пам’яті, які характеризують її латентність. Причому таймінги пам’яті визначаються в тактах роботи ядра пам’яті, а не в тактах ефективної частоти, тобто для пам’яті DDR3-1600 c частотою роботи ядра пам’яті 200 МГц кожен такт становить 1/200 МГц = 5 нс. У той же час такт процесора з частотою, наприклад, 3 ГГц триває всього 0,3 нс, тобто в 17 разів менше.

Нагадаємо, що таймінги пам’яті – це затримки, вимірювані в тактах роботи ядра пам’яті, між окремими командами. Виділяють кілька таймінгів пам’яті, відповідних затримок між різними командами. Найбільш важливими є таймінги RAS-to-CAS Delay (tRCD), CAS Latency (tCL), Active-to-precharge delay (tRAS) і RAS Precharge (tRP).
Таймінг tRCD визначає затримку командою активації (ACTIVE) потрібного рядка пам’яті і командою запису (WRITE) або читання (READ) даних.

Від команди читання (запису) даних і до видачі першого елемента даних на шину (запису даних в комірку пам’яті) проходить проміжок часу tCL. Кожен наступний елемент даних з’являється на шині даних в черговому такті (при пакетному доступі).

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

А мінімальний проміжок часу, що триває з моменту подачі команди активації рядка до команди PRECHARGE, яка призводить до закриття рядка пам’яті, називається tRAS. Основні таймінги пам’яті зазвичай записуються у вигляді такої послідовності: tCL-tRCD-tRP-tRAS.

Тепер розглянемо як приклад пам’ять DDR3-1600 з таймінгами 9-9-9-27. Припустимо, що процесор безпосередньо звертається до даних оперативної пам’яті, які потрібно завантажити в його регістри для подальшої обробки. З моменту активації потрібного рядка пам’яті і до появи даних на шині пройде проміжок часу, рівний tRCD + tCL, тобто 18 тактів. З урахуванням того що частота роботи ядра пам’яті DDR3-1600 становить 200 МГц, це час рівний 90 нс. Якщо частота роботи процесора становить 3 ГГц, то це означає, що процесор повинен буде чекати потрібних даних (по-суті простоювати) мінімум 270 тактів! Зрозуміло, що якби сучасні процесори спілкувалися з оперативною пам’яттю безпосередньо, тобто без кешу, то були б вкрай повільні і в їх гігагерцах не було б ніякого сенсу.

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

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

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

SRAM-пам’ять насправді більш швидкодіюча в порівнянні з DRAM-пам’яті, проте якщо кожна комірка DRAM-пам’яті складається з одного польового транзистора і одного конденсатора, то комірка SRAM-пам’яті – як мінімум з шести польових транзисторів (є варіанти з числом транзисторів 8 і 12). Зрозуміло, що при такій кількості транзисторів на одну клітинку мікросхема SRAM-пам’яті просто не може мати такий же обсяг, як мікросхема DRAM-пам’яті. Тобто модулі SRAM-пам’яті, по-перше, були б меншого обсягу в порівнянні з модулями DRAM-пам’яті, а по-друге, коштували б дорожче.

Але і це ще не все. Навіть якщо створити оперативну пам’ять, яка за швидкістю не поступатиметься кешу на основі SRAM-пам’яті, то це не позбавить від необхідності використання кеша в силу того, що зчитувані з пам’яті (або записувані в пам’ять) блоки даних потрібно десь тимчасово розміщувати.

Таким чином, навіть при наявності надшвидкої оперативної пам’яті все одно був би потрібний кеш для проміжного зберігання даних. Звичайно, в цьому випадку кеш був би влаштований зовсім по-іншому і мав би інший розмір.

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

Є і ще одна причина, по якій немає сенсу в застосуванні оперативної пам’яті на основі надшвидкої SRAM-пам’яті. Справа в тому, що в сучасних процесорах кеш настільки добре справляється зі своїм завданням, що від швидкості роботи оперативної пам’яті мало що залежить. Тобто, використовуючи високошвидкісний кеш, який за обсягом суттєво (приблизно в тисячу разів) менший оперативної пам’яті, можна домогтися того, що всі дані, які потрібні процесору, будуть практично завжди перебувати в кеші. Так навіщо ж тоді робити оперативну пам’ять на основі надшвидкої SRAM-пам’яті? Більше того, немає сенсу і в швидкій DRAM-пам’яті. Але чому тоді виробники модулів пам’яті пишаються присутністю високошвидкісної пам’яті в лінійці своєї продукції, орієнтуючи її на геймерів, оверклокерів і комп’ютерних ентузіастів? Дійсно, якщо розглянути пам’ять DDR3, то, крім модулів пам’яті, що працюють на стандартизованій ефективній частоті 1066, 1333 і 1600 МГц, є модулі пам’яті з частотою 1867 2100 і 2400 МГц. Насправді це просто рекламний прийом виробників: між пам’яттю DDR3-1333 і DDR3-2400 ніякої різниці немає, тобто, використовуючи більш швидкісну пам’ять, ви не досягнете відчутного приросту продуктивності системи. Весь фокус у даному випадку в тому, що кеш процесора, основне завдання якого полягає в нівелюванні затримки звернення до оперативної пам’яті, відмінно справляється зі своїм завданням.


Рис. 1. Структура кеш-пам’яті процесора

Оставить ответ

Обязательные поля помечены*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.