определить спецификации кеша через доступ к кешу - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь определить следующие спецификации кеша имитируемых кеш-файлов:

  • размер кеша
  • размер блока / размер строки
  • ассоциативность
  • политика замены (прямое сопоставление / LRU / Random)

Что я подразумеваю под "имитацией кеш-файлов", так это то, что мне даны объектные файлы (= кеши).Единственное взаимодействие, которое я могу иметь с этими объектными файлами, - через запросы доступа.Мне даны решения.

функция: int access(unsigned long address)

return: 0 (Miss) / 1 (Hit)

Я уже нашел способ определить размер блока с помощьюдоступ.Зная размер блока, я не уверен, что делать дальше.

Cache size = block size * #blocks = block size * associativity * sets

associativity = blocks/set

Чтобы определить ассоциативность, я собирался дважды обратиться к одному и тому же блоку через два разных адреса и проверить, когда первый тег доступа имеетперезаписаны.Я предполагаю, что это не будет работать, так как каждый адрес будет иметь уникальное расположение в кэше.

Адрес будет иметь формат: tag + set + word (unsigned long = 32-bit)

Размер блока известен => количество битов, зарезервированных для индекса слова, также известно.

Работа в обратном направлении из раствора:

  • Block size = 8 bytes
  • Word = 1 byte

--- (взяты данные нижеиз раствора) ---

  • Cache Size = 4096 bytes
  • n-way: 2
  • Replacement: LRU

2-way => 2 blocks/set => 2*8 bytes/set = 16 bytes/set 16 bytes/set => 4096 bytes/cache / 16 bytes/set = 256 sets/cache Это даетмне информацию об адресе, которая может помочь мне в дальнейшем, а именно: 32-bit address = (tag + 8-bit setnumber + 3-bit wordindex) => 21-bit tag

Есть ли способ получить этот формат адреса через доступ к кэшу, а затем использовать формат адреса как способ получения дополнительной информации?

При нахождении этого формата адреса я запутался из-за 21-битного тега.Для 2 блоков / набора требуется только 1 бит, чтобы определить, к какому из двух блоков следует получить доступ.Что произойдет, если тег станет больше 1?Это способ доступа к одному и тому же блоку кэша через разные адреса?Или, возможно, тег будет пропущен через функцию модуля (например, %2 для приведенного выше примера), чтобы он соответствовал n-образной ассоциативности?

Каким образом я должен получить доступ к кешу для получения необходимой информации о кеше?

Что касается политики замены, я понятия не имею, как я могу увидеть это через доступ или работу в обратном направлении.из решений.

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