-пам'яті. Природно, цей варіант забезпечує найбільшу швидкодію, так як при перевірці наявності інформації контролеру доведеться В«заглянутиВ» лише в один рядок кеша, але і найменш ефективний, оскільки при записі контролер не буде вибирати В«оптимальнеВ» місце. При однаковому обсязі кешу схема з повною асоціативністю буде найменш швидкої, але найбільш ефективною.
Повністю асоціативний кеш зустрічається на практиці, але, як правило, у нього дуже невеликий обсяг. Наприклад, у ЦП Cyrix 6x86 використовувалося 256 байт такого кеша для команд перед уніфікованим 16-або 64-Кбайт кешем L1. Часто полноассоціатівную схему застосовують при проектуванні TLB (про них буде розказано нижче), кешей адрес переходів, буферів читання-запису і т. д. Як правило, рівні асоціативності I-cache і D-cache досить низькі (до чотирьох каналів) - їх збільшення недоцільно, оскільки призводить до збільшення затримок доступу і в підсумку негативно відбивається на продуктивності. У якості деякої компенсації збільшують асоціативність S-cache (зазвичай до 16 каналів), оскільки затримки при доступі до цього кешу неважливі. Наприклад, згідно з результатами досліджень часто використовуваних цілочислових задач, у Intel Pentium III 16 Кбайт чотириканального D-cache було достатньо для покриття близько 93% запитів, а 16-Кбайт чотириканального I-cache - 99% запитів.
Розмір рядки і тега кеш-пам'яті
Важлива характеристика кеш-пам'яті - розмір рядка. Як правило, на один рядок покладається один запис адреси (так званий тег), яка вказує, якому адресою в оперативній пам'яті відповідає дана лінія. Очевидно, що нумерація окремих байтів недоцільна, оскільки в цьому випадку обсяг службової інформації в кеші в кілька разів перевищить обсяг самих даних. Тому один тег зазвичай покладається на один рядок, розмір якої зазвичай 32 або 64 байта (Реально існуючий максимум 1024 байти), і еквівалентний чотирьом (іноді восьми) Розрядному системної шини даних. Крім того, кожен рядок кеш-пам'яті супроводжується деякою інформацією для забезпечення відмовостійкості: одним або декількома бітами контролю парності (parity) або вісьмома і більше байтами виявлення і корекції помилок (ЕСС, Error Checking and Correcting), хоча в масових рішеннях часто не використовують ні того, ні іншого. p> Розмір тега кеш-пам'яті залежить від трьох основних чинників: обсягу кеш-пам'яті, максимального кешувального об'єму оперативної пам'яті, а також асоціативності кеш-пам'яті. Математично цей розмір розраховується за формулою
Smg - Розмір одного тега кеш-пам'яті, в бітах; Smem - максимальний Кешована обсяг оперативної пам'яті, в байтах; Scache - об'єм кеш-пам'яті, в байтах; А - асоціативність кеш-пам'яті, в каналах.
Звідси випливає, що для системи з 1-Гбайт оперативної пам'яттю і 1-Мбайт кеш-пам'яттю з двоканальної асоціативністю потрібно 11 біт для кожного тега. Примітно, що власне розмір рядка кеш-пам'яті нія...