Понимание кеша процессора и строки кеша - PullRequest
24 голосов
/ 15 февраля 2011

Я пытаюсь понять, как работает кэш процессора.Допустим, у нас есть эта конфигурация (в качестве примера).

  • Размер кэша 1024 байта
  • Строка кэша 32 байта
  • 1024/32 = 32 строки кэша все вместе.
  • В строке одиночного кэша может храниться 32/4 = 8 дюймов.

1) В соответствии с этими настройками длина тега должна составлять 32-5 = 27 бит, а размер индекса5 бит (2 ^ 5 = 32 адреса для каждого байта в строке кэша).

Если общий размер кэша равен 1024, и в нем 32 строки кэша, где хранятся теги + индексы?(Существует еще 4 * 32 = 128 байт.) Означает ли это, что фактический размер кэша равен 1024 + 128 = 1152?

2) Если в этом примере строка кэша составляет 32 байта, это означает, что 32Байты копируются в кеш, когда ЦП требуется новый байт из ОЗУ.Правильно ли я предположить, что позиция строки кэша запрашиваемого байта будет определяться его адресом?

Вот что я имею в виду: если процессор запрашивает байт на [FF FF 00 08], тогда доступная строка кэша будет заполнена байтами от [FF FF 00 00] до [FF FF 00 1F].И наш реквизированный одиночный байт будет в позиции [08].

3) Если предыдущий оператор верен, означает ли это, что 5 битов, которые используются для индекса, технически не нужны, так как все 32 байта находятся в кешев любом случае?

Пожалуйста, дайте мне знать, если я что-то не так.Спасибо

Ответы [ 3 ]

17 голосов
/ 15 февраля 2011

Кэш состоит из данных и меток ОЗУ, расположенных как компромисс между временем доступа и эффективностью, а также физической структурой. Вам не хватает важной характеристики: количество способов (сетов). У вас редко бывают односторонние кэши, потому что они патологически плохо работают с простыми шаблонами. В любом случае:

1) Да, теги занимают дополнительное место. Это является частью компромисса проекта - вы не хотите, чтобы он составлял большую часть общей площади, и почему размер строки не просто 1 байт или 1 слово. Кроме того, все теги для индекса доступны одновременно, и это может повлиять на эффективность и структуру, если существует большое количество способов. Размер немного больше, чем вы оцениваете. Также обычно есть несколько битов, чтобы отметить правильность, а иногда и подсказки. Большее количество путей и меньшие строки требуют большей доли, занимаемой тегами, поэтому обычно строки большие (32+ байта), а пути маленькие (4-16).

2) Да. Некоторые кэши также выполняют выборку «сначала критическое слово», где они начинаются со слова, вызвавшего заполнение строки, а затем выбирают остальные. Это уменьшает количество циклов, в течение которых процессор ожидает данные, которые он фактически запрашивал. Некоторые кэши «записывают через» и не выделяют строку, если вы пропустите запись, что избавляет от необходимости сначала читать всю строку кэша перед записью в нее (это не всегда выигрыш).

3) Теги не будут хранить младшие 5 бит, так как они не нужны для соответствия строке кэша. Они просто индексируются в отдельные строки.

В Википедии есть довольно хорошая, хотя и немного напряженная, запись о кешах: http://en.wikipedia.org/wiki/CPU_cache - см. «Реализация». Есть диаграмма того, как данные и теги разделены. Я думаю, что все должны изучить этот материал, потому что вы действительно можете улучшить производительность кода, когда знаете, на что способна базовая машина.

3 голосов
/ 15 февраля 2011

Это основано на моей смутной памяти, вы должны читать такие книги, как "Компьютерная архитектура: количественный подход" Хеннесси и Паттерсона.Отличная книга.

Предполагается, что 32-битный процессор ... (в противном случае ваши цифры должны были бы использовать> 4 байта (может быть, <8 байтов, так как некоторые / большинство 64-битных процессоров не имеют все 64 бит)используется адресная строка)) для адреса. </p>

1) Я считаю, что это как минимум 4 * 32 байта.В зависимости от процессора, чип-архитекторы, возможно, решили отслеживать другую информацию помимо полного адреса.Но обычно это не считается частью кеша.

2) Да, но то, как выполняется это отображение, отличается.См. Википедия - Кэш процессора - ассоциативность Существует простой кэш с прямым отображением и более сложный кэш с ассоциативным отображением.Вы хотите избежать случая, когда некоторый код требует двух частей информации, но эти два адреса отображаются на одну и ту же строку кэша.

3 голосов
/ 15 февраля 2011
  1. Метаданные кеша обычно не считаются частью самого кеша. Он может даже не храниться в той же части ЦП (это может быть в другом кэше, реализованном с использованием специальных регистров ЦП и т. Д.).
  2. Это зависит от того, будет ли ваш процессор извлекать невыровненные адреса. Если он будет выбирать только выровненные адреса, то приведенный вами пример будет верным. Если процессор выбирает невыровненные адреса, он может выбрать диапазон от 0xFFFF0008 до 0xFFFF0027.
  3. Байты индекса по-прежнему полезны, даже если доступ к кэшу выровнен. Это дает ЦПУ сокращенный метод ссылки на байт в строке кэша, который он может использовать во внутренней бухгалтерии. Вы можете получить ту же информацию, зная адрес, связанный со строкой кэша, и адрес, связанный с байтом, но это намного больше информации для переноса.

Разные процессоры по-разному реализуют кеширование. Для лучшего ответа на ваш вопрос, пожалуйста, дайте некоторые дополнительные сведения о конкретном процессоре (тип, модель и т. Д.), О котором вы говорите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...