48
Для достижения максимальной производительности Pentium Pro
разработчики разместили кэш-память второго уровня на отдельном кристалле,
который монтируется в один корпус с чипом центрального процессора.
Благодаря тому, что соединения между ними не выходят за пределы корпуса (т.
е. имеют минимальную протяженность) и выполнены по схеме точка - точка,
инженеры компании смогли использовать в интерфейсе
типа процессор - кэш
нестандартные уровни сигналов и получить высокую пропускную способность
тракта. Чип кэша второго уровня выпускается в двух модификациях: емкостью
256 и 512 Кбайт - и обеспечивает передачу 8 байт за такт даже при рабочей
частоте процессора 200 МГц.
Для примера рассмотрим микроархитектуру процессора Pentium II.
Основная отличительная черта процессоров семейства Р6 — использование
алгоритмов "динамического выполнения
команд" (dynamic execution), которые
построены на основе трех базовых концепций: предсказании переходов (branch
prediction), динамическом анализе потока данных (dynamic data flow analysis) и
спекулятивном выполнении инструкций (speculative execution).
Предсказание переходов — это концепция, которая реализована не
только в микроархитектуре процессоров семейства Р6, но и в микроархитектуре
ряда других высокопроизводительных процессоров (например, процессоров
мэйнфреймов). Суть ее заключается в следующем. На вход процессора
поступает поток инструкций для их последующего исполнения. Инструкции
поступают в том порядке, в котором они содержатся в коде программы,
исполняемой в данный момент процессором. Как только на входе процессора
появляется очередная порция инструкций для исполнения, ее содержимое
анализируется с целью найти точки ветвления в исполняемом потоке
инструкций и предсказать наиболее вероятные
пути (ветви), по которым пойдет
обработка инструкций после этих точек ветвления. Инструкции,
принадлежащие ветвям с наибольшей вероятностью выполнения, тут же
ставятся в очередь на исполнение.
Основная идея всех этих манипуляций заключается в том, чтобы
заставить процессор выполнить инструкции, которые принадлежат ветвям с
наибольшей вероятностью выполнения, "вне очереди" — то есть не
дожидаться
того момента, когда очередь на выполнение дойдет до этих ветвей
естественным образом (согласно порядку поступления инструкций на вход
процессора и, соответственно, контексту выполняемой программы), а загрузить
эти ветви на выполнение раньше этого момента. Таким образом обеспечивается
более полная загрузка и, соответственно, более высокая производительность
процессора.
Конечно, такое преждевременное исполнение инструкций
может
оправдать себя только в том случае, если алгоритм нахождения наиболее
вероятных ветвей работает достаточно хорошо. Действительно, если ветвь
угадана неверно, то процессору придется исполнить инструкции,
принадлежащие как неверно угаданной, так и альтернативной ветви, проделав