Биты кэша на строку и общая длина

если у меня есть

32-битный адрес

,

размер кэша(с) 8 КБ

,

Размер блока(б) 16 Б

,

Установить Ассоциативность(а) 1

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

некоторая идея, которую я получил через поиск в Интернете,

offset bits = log b = 4 bits
index bits = log c/b * 1024 = 9 bits
tag bits = 32 - offset - index = 19 bits
validity and dirty would have 1, 1 bit

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


person Dingling    schedule 25.10.2014    source источник


Ответы (1)


Ваш поиск в Интернете дал вам правильный ответ.

  • Размер блока 16 байт -> нужно 4 бита, чтобы указать смещение внутри блока.
  • 8К байт кэша и 16 байт строк -> 512 блоков. (8К / 16 = 512)
  • Кэш с прямым отображением -> 512 / односторонняя ассоциативность набора = 512 наборов
  • 512 наборов -> нужно 9 бит для индекса (512 = 2 ^ 9)

При 32-битном адресе, если 4 бита используются для смещения блока и 9 для индекса, это означает, что оставшиеся 19 бит необходимы для тега.

Поскольку это кэш прямой карты, для политики замены (например, LRU) биты не нужны. Вам понадобится хотя бы один бит для достоверности. С помощью 2 бит вы можете реализовать алгоритм когерентности кеша, такой как MESI. Таким образом, на блок требуется от 20 до 21 бита.

person Craig S. Anderson    schedule 25.10.2014
comment
бит на набор будет (размер блока + тег + достоверность + грязный) (16 * 8 = 128 + 19 + 1 + 1) = 149, верно? и 128/4 = 32 бита на слово из основной памяти? - person Dingling; 25.10.2014
comment
Биты на набор = (биты на блок * блоки на набор) + биты, используемые для политики замены. Для вопроса OP это (20 или 21 * 1) + 0. Обратите внимание, что если кеш является сквозной записью, грязный бит не нужен. - person Craig S. Anderson; 26.10.2014