Я пытаюсь определить следующие спецификации кеша имитируемых кеш-файлов:
- размер кеша
- размер блока / размер строки
- ассоциативность
- политика замены (прямое сопоставление / 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-образной ассоциативности?
Каким образом я должен получить доступ к кешу для получения необходимой информации о кеше?
Что касается политики замены, я понятия не имею, как я могу увидеть это через доступ или работу в обратном направлении.из решений.