Существует три типа промахов кеша: принудительный, емкий и конфликтный.Теперь мне нужно добавить функцию классификации пропусков в кеше.
Предположим, мы получили ошибку чтения или записи, помеченную tag .Я использую глобальный вектор V1 для имитации бесконечного кэша, другой вектор V2 для имитации полностью ассо.кэш. В V2 наименее использованный элемент (LRU) - это элемент head, который будет выгружаться, если V2 заполнен, и поддерживать размер V2 в реальном размере кеша CacheSize .
Моя идея ниже:
if (V1 does not contain tag):
it is compulsory miss.
add tag to V1.
if (V2's size == CacheSize):
remove head element of V2.
add tag to V2 tail.
if not compulsory miss:
if V2 does not contain tag:
it is capacity miss.
if (V2's size == CacheSize):
remove head element of V2.
add tag to V2 tail.
else: // V2 contains tag, rearrange tag's position
remote tag from V2 then add tag to V2 tail.
if this miss is not compulsory miss or capacity miss, then it is conflict miss.
Я реализовал эту идею в своем коде, и принудительные пропуски верны, но нет пропусков пропускной способности.Где я сделал это неправильно?Благодаря.