Процессоры семейства Intel
Основная проблема на пути повышения производительностиРешение об организации P6 как трех независимых и взаимодействующих через пул команд устройств было принято после тщательного анализа факторов, ограничивающих производительность современных микропроцессоров. Фундаментальный факт, справедливый для Pentium и многих других процессоров, состоит в том, что при выполнении реальных программ мощность процессора не используется в полной мере. Рассмотрим в качестве примера следующий фрагмент программы, записанный на некотором условном языке: r1 <- mem[r0] /* Команда 1 */ r2 <- r1 + r2 /* Команда 2 */ r5 <- r5 + 1/* Команда 3 */ r6 <- r6 - r3 /* Команда 4 */
Предположим, что при выполнении первой команды фрагмента загрузки из памяти в регистр r1 - оказалось, что содержимое соответствующей ячейки памяти отсутствует в кэше. При традиционном подходе процессор перейдет к выполнению команды 2 только после того, как данные из ячейки mem[r0] основной памяти будут прочитаны через интерфейс шины. Все время ожидания процессор будет простаивать.
В то время как скорость процессоров за последние 10 лет выросла по меньшей мере в 10 раз, время доступа к основной памяти уменьшилось только на 60 процентов. Это увеличивающееся отставание скорости работы с памятью по отношению к скорости процессора и было той фундаментальной проблемой, которую пришлось решать при проектировании P6.
Один из возможных подходов к решению этой проблемы - перенос- 6 ее центра тяжести на разработку высокопроизводительных компонентов, окружающих процессор. Однако массовый выпуск систем, включающих и высокопроизводительный процессор, и высокоскоростные специализированные микросхемы окружения, был бы слишком дорогостоящим.
Можно было попытаться решить проблему с использованием грубой силы, а именно увеличить размер кэша второго уровня, чтобы уменьшить процент случаев отсутствия необходимых данных в кэше.
Это решение эффективное, но тоже чрезвычайно дорогостоящее, особенно учитывая сегодняшние скоростные требования к компонентам кэша второго уровня. P6 проектировался с точки зрения эффективной реализации целостной вычислительной системы, и требовалось, чтобы высокая производительность системы в целом достигалась с использованием дешевой подсистемы памяти.
Решение, принятое в P6Решение сформулированной в предыдущем разделе проблемы памяти, принятое в P6, заключается в обращении к пулу команд, извлечении из него команд, следующих за командой, требующей обращения к памяти, и выполнения до момента завершения команды-тормоза максимума полезной работы. В приведенном в предыдущем разделе примере процессор не может выполнить команду 2 до завершения команды 1, так как команда 2 зависит от результатов команды 1. В то же время процессор может выполнить команды 3 и 4, не зависящие от результата выполнения команды 1. Мы будем называть такое выполнение команд опережающим выполнением. Результаты опережающего выполнения команд 3 и 4 не могут быть сразу записаны в регистры, поскольку мы должны изменять состояние вычислительной системы только в соответствии с правильным порядком выполнения программы.
Эти результаты хранятся в пуле команд и извлекаются оттуда позднее. Таким образом, процессор выполняет команды в соответствии с их готовностью к выполнению, вне зависимости от их первоначального порядка в программе, то есть с точки зрения реального порядка выполнения команд P6 является машиной, управляемой потоком данных. В то же время изменение состояния вычислительной системы, например запись в регистры, производится в строгом соответствии с истинным порядком команд в программе.
Чтение из памяти данных, необходимых для команды 1, может занимать достаточно много тактов. Тем временем P6 продолжает опережающее выполнение команд, следующих за командой 1, и успевает обработать, как правило, 20-30 команд. Среди этих 20-30 команд будет в среднем пять команд перехода, которые устройство выборки/декодирования должно правильно предсказать для того, чтобы работа устройства диспетчирования/выполнения не оказалась бесполезной. Небольшое количество регистров в архитектуре процессоров "Intel" приводит к интенсивному использованию каждого из них и, как следствие, к возникновению множества мнимых зависимостей между командами, использующими один и тот же регистр. Поэтому, чтобы исключить задержку в выполнении команд из-за мнимых зависимостей, устройство диспетчирования/выполнения работает с дублями регистров, находящимися в пуле команд (одному регистру может соответствовать несколько дублей) . Реальный набор регистров контролируется устройством отката, и результаты выполнения команд отражаются на состоянии вычислительной системы только после того, как выполненная команда удаляется из пула команд в соответствии с истинным порядком команд в программе.
Таким образом, принятая в P6 технология динамического выполнения может быть описана как оптимальное выполнение программы , основанное на предсказании будущих переходов, анализе графа потоков данных с целью выбора наилучшего порядка исполнения команд и на опережающем выполнении команд в выбранном оптимальном порядке.