Подтвердить что ты не робот

Понимание кэша ЦП и строки кэша

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

  • Размер кэша 1024 байта
  • Линия кэша 32 байта
  • 1024/32 = 32 строки кэша вместе.
  • Строка кэша Singel может хранить 32/4 = 8 ints.

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

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

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

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

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

Пожалуйста, дайте мне знать, если у меня что-то не так. Благодаря

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Различные CPU реализуют кэширование по-разному. Чтобы получить наилучший ответ на ваш вопрос, просьба дать дополнительную информацию о конкретном процессоре (тип, модель и т.д.), О котором вы говорите.

Ответ 3

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

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

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

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