Интернет магазин китайских планшетных компьютеров



Компьютеры - Кэш процессора - Реализации

23 января 2011


Оглавление:
1. Кэш процессора
2. Принцип работы
3. Структура записи в кэше
4. Виды промахов
5. Трансляция адресов
6. Иерархия кэшей в современных микропроцессорах
7. Реализации



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

Простейшим кэшем является виртуально индексируемый кэш прямого отображения. Виртуальный адрес подсчитывается при помощи сумматора, соответствующая часть адреса выделяется и используется для индексирования SRAM, который вернет загружаемые данные. Данные могут быть выровнены по байтовым границам в байтовом сдвигателе и затем переданы следующей операции. При таком чтении не требуется какая-либо проверка тегов, фактически, нет даже необходимости считывать тег. На более поздних стадиях конвейера, перед окончанием исполнения инструкции чтения потребуется чтение тега и его сравнение с виртуальным адресом, чтобы удостовериться, что произошло попадание в кэш. Если же был промах, потребуется чтение из памяти либо более медленного кэша с дальнейшим обновлением рассматриваемого кэша и перезапуском конвейера.

Ассоциативный кэш более сложен, потому что некоторый вариант тега нужно считать для определения, какую часть кэша выбрать. Кэш N-way set-associative первого уровня обычно считывает одновременно все N возможных тегов и N данных параллельно, затем проводит сравнение тегов с адресом и выбор данных, ассоциированных с совпавшим тегом. Кэши 2го уровня в целях экономии энерговыделения иногда выполняют сначала чтение тегов, и только затем чтение одного элемента данных из SRAM данных.

Путь чтения для 2-way associative cache

Диаграмма справа должна показать как происходит использование различных частей адреса. Бит 31 адреса является наиболее значимым битом, бит 0 — наименее значащим битом. На диаграмме показаны две SRAM, индексация и мультиплексирование для 4 КБ, 2-way set-associative, виртуально индексированного и виртуально тегированного кэша с 64 байтными блоками, 32битной шириной чтения и 32битным виртуальным адресом. …

Некоторые процессоры SPARC имели ускоренные на несколько задержек затвора L1 кэши за счет использования SRAM декодеров вместо сумматора виртуальных адресов. Подробнее см en:Sum addressed decoder.


История

В ранние годы микропроцессорных технологий, доступ в память был лишь немного медленнее доступа к процессорным регистрам. Но с 1980х разрыв в производительности между процессорами и памятью стал нарастать. Микропроцессоры совершенствовались быстрее чем память, особенно в плане частоты функционирования, таким образом, память становилась узким местом при достижении полной производительности от системы. Хотя было технически возможным иметь основную память столь же быстрой как и ЦПУ, был выбран более экономичный путь: использовать избыточное количество низкоскоростной памяти, но ввести в систему небольшую, но быструю кэш память, для смягчения разрыва в производительности. В итоге получили на порядок большие объемы памяти, примерно за ту же цену и с небольшими потерями общей производительности.

В Х86

Когда x86 микропроцессоры достигли частот в 20 МГц и более, в них было добавлено небольшое количество быстрой кэш памяти для увеличения производительности. Это было необходимо из-за того, что DRAM память, используемая как системное ОЗУ имела значительные задержки, до 120 нс, и требовала такты для обновления. Кэш был построен на базе более дорогой, но значительно более быстрой памяти SRAM, которая в те времена имела задержки около 10 нс. Ранние кэши были внешними по отношению к процессору и часто располагались на материнской плате как 8 или 9 микросхем в DIP корпусах, расположенные в сокетах для возможности увеличения или уменьшения размера кэша. Некоторые версии процессора Интел 386 поддерживали от 16 до 64 КБ внешнего кэша.

С выходом 80486 процессора 8 КБ кэш был интегрирован непосредственно на кристалл процессора. Этот кэш был назван L1, чтобы отличать его от более медленного кэша на материнской плате, названного L2. Последние были значительно больше, вплоть до 256 КБ. Популярным кэш на материнской плате оставался до эры выхода Pentium MMX, но вышел из употребления с введением памяти SDRAM и ростом разницы между частотой шины процессора и частотой ядра процессора. Кэш на материнской плате стал лишь немногим быстрее основной ОЗУ.

Следующий вариант реализации кэшей в x86 появился в Pentium Pro, который поместил кэш 2го уровня в одну упаковку с процессором и поднял его частоту до частоты ядра. Позже кэш 2го уровня стал размещаться на том же кристалле.

С ростом популярности многоядерных процессоров на кристалл стали добавлять кэши третьего уровня, названные, очевидно, L3. Этот уровень кэша может быть общим для нескольких ядер и реализовывать эффективное взаимодействие между ядрами. Его объем обычно больше суммарного объема кэшей всех подключенных к нему ядер и может достигать 8 МБ.

Текущие разработки



Просмотров: 8167


<<< Кэш
Математический сопроцессор >>>