2017-01-19 17 views
0

Мне интересно, где хранятся теги. Я видел несколько комбинированных кэшей тегов-тегов, где теги и данные хранятся вместе и где только часть тега обращается к доступу к части данных, когда есть соответствующий тег с адресом памяти. С другой стороны, тогда я видел полностью разделенные тэги и кеши данных с выделенными действительными битами и другими битами.Разделимый массив тегов в сравнении с массивом данных

Мне интересно, какой из этих подходов обычно используется, и есть ли разница в производительности или энергоэффективности между этими двумя структурами?

Заранее спасибо.

ответ

1

Кэш первого уровня обычно реализуется как фактически индексированный и физически помеченный. Это означает, что вы берете виртуальный адрес, получаете индексные биты и начинаете поиск записи, индексированной по индексным битам, в кеше. В то же время вы отправляете виртуальный адрес в блок виртуального физического перевода - (например: TLB) и получаете физический адрес.

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

Подумайте о реализации тега cacheline + в виде кортежей списка (например, в python), который может быть проиндексирован битами индекса. После того, как вы найдете запись в списке, отметьте 0-ю запись для тега и 1-й записи для данных в выбранном кортеже.

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

Теперь подумайте, что часть тегов и данных является двумя отдельными блоками, и они могут включаться или выключаться (не выключаясь, только DVFS).

Если ваше приложение имеет более высокое соотношение (число операций с доступом к кеш-керам/num), имеет смысл сохранить как включенное, так и связанное, так как вы с большей вероятностью получите запрос на кеш, и когда тег указывает данные об ударе жить и готово к работе.

Если ваше приложение имеет низкое соотношение (количество операций доступа к кеш-керам/num), нет смысла тратить энергию, поддерживая питание. Вы можете просто активировать тег и нажать на тег, вы активировали часть данных и отвечали.

+0

Спасибо за ответ. В моем случае кеш L1 реализован как фактически индексированный и фактически помеченный (VIVT), поэтому я не использую TLB для получения физического адреса. Изменит ли это некоторые из преимуществ/недостатков, используя тег и данные, физически разделенные в кеше? – Mrchacha

+0

Я так не думаю. Поскольку ваши кеши VIVT, вам понадобится TLB в случае промаха в кеше. Поэтому, какие бы преимущества у вас не были, если разделить тег и данные, будет независимо от того, используете ли вы физический адрес виртуальных адресов. –

+0

Я вижу, и, наконец, размер массива тегов и массива данных будет равен, правильно? Я всегда использую индексные биты для поиска в массивах тегов и данных? – Mrchacha