45235 (664417), страница 2
Текст из файла (страница 2)
загрузки из памяти в регистр r1 - оказалось, что содержимое соот-
ветствующей ячейки памяти отсутствует в кэше. При традиционном
подходе процессор перейдет к выполнению команды 2 только после
того, как данные из ячейки mem[r0] основной памяти будут прочита-
ны через интерфейс шины. Все время ожидания процессор будет прос-
таивать.
В то время как скорость процессоров за последние 10 лет вы-
росла по меньшей мере в 10 раз, время доступа к основной памяти
уменьшилось только на 60 процентов. Это увеличивающееся отстава-
ние скорости работы с памятью по отношению к скорости процессора
и было той фундаментальной проблемой, которую пришлось решать при
проектировании P6.
Один из возможных подходов к решению этой проблемы - перенос
-
6 -
ее центра тяжести на разработку высокопроизводительных компонен-
тов, окружающих процессор. Однако массовый выпуск систем, включа-
ющих и высокопроизводительный процессор, и высокоскоростные спе-
циализированные микросхемы окружения, был бы слишком дорогостоя-
щим.
Можно было попытаться решить проблему с использованием гру-
бой силы, а именно увеличить размер кэша второго уровня, чтобы
уменьшить процент случаев отсутствия необходимых данных в кэше.
Это решение эффективное, но тоже чрезвычайно дорогостоящее, осо-
бенно учитывая сегодняшние скоростные требования к компонентам
кэша второго уровня. P6 проектировался с точки зрения эффективной
реализации целостной вычислительной системы, и требовалось, чтобы
высокая производительность системы в целом достигалась с исполь-
зованием дешевой подсистемы памяти.
2Решение, принятое в P6
Решение сформулированной в предыдущем разделе проблемы памя-ти, принятое в P6, заключается в обращении к пулу команд, извле-чении из него команд, следующих за командой, требующей обращения к памяти, и выполнения до момента завершения команды-тормоза мак-симума полезной работы. В приведенном в предыдущем разделе приме-ре процессор не может выполнить команду 2 до завершения команды 1, так как команда 2 зависит от результатов команды 1. В то же время процессор может выполнить команды 3 и 4, не зависящие от результата выполнения команды 1. Мы будем называть такое выполне-ние команд опережающим выполнением. Результаты опережающего вы-полнения команд 3 и 4 не могут быть сразу записаны в регистры, поскольку мы должны изменять состояние вычислительной системы только в соответствии с правильным порядком выполнения программы. Эти результаты хранятся в пуле команд и извлекаются оттуда позд-нее. Таким образом, процессор выполняет команды в соответствии с их готовностью к выполнению, вне зависимости от их первоначально-го порядка в программе, то есть с точки зрения реального порядка выполнения команд P6 является машиной, управляемой потоком дан-ных. В то же время изменение состояния вычислительной системы, например запись в регистры, производится в строгом соответствии с истинным порядком команд в программе.
Чтение из памяти данных, необходимых для команды 1, может
занимать достаточно много тактов. Тем временем P6 продолжает опе-
режающее выполнение команд, следующих за командой 1, и успевает
обработать, как правило, 20-30 команд. Среди этих 20-30 команд
будет в среднем пять команд перехода, которые устройство выбор-
ки/декодирования должно правильно предсказать для того, чтобы ра-
бота устройства диспетчирования/выполнения не оказалась бесполез-
ной. Небольшое количество регистров в архитектуре процессоров
«Intel» приводит к интенсивному использованию каждого из них и,
как следствие, к возникновению множества мнимых зависимостей меж-
ду командами, использующими один и тот же регистр. Поэтому, чтобы
исключить задержку в выполнении команд из-за мнимых зависимостей,
устройство диспетчирования/выполнения работает с дублями регист-
ров, находящимися в пуле команд (одному регистру может соответс-
-
7 -
твовать несколько дублей). Реальный набор регистров контролирует-
ся устройством отката, и результаты выполнения команд отражаются
на состоянии вычислительной системы только после того, как выпол-
ненная команда удаляется из пула команд в соответствии с истинным
порядком команд в программе.
Таким образом, принятая в P6 технология динамического выпол-
нения может быть описана как оптимальное выполнение программы ,
основанное на предсказании будущих переходов, анализе графа пото-
ков данных с целью выбора наилучшего порядка исполнения команд и
на опережающем выполнении команд в выбранном оптимальном порядке.
2Архитектура P6
На рисунке 2 приведена более подробная блок-схема P6, вклю-чающая кэши и интерфейс с основной памятью.
Далее мы будем понимать под «упорядоченным» устройство, ко-
торое работает в соответствии с исходным порядком команд в прог-
рамме, а под «беспорядочным» - устройство, которое не обращает
внимания на исходный порядок команд в программе.
Устройство выборки/декодирования является «упорядоченным»
устройством, которое воспринимает на входе поток команд из прог-
раммы пользователя и декодирует их, превращая в последователь-
ность микрокоманд, соответствующих потоку данных в программе
пользователя.
Устройство диспетчирования/выполнения является «беспорядоч-
ным» устройством, которое воспринимает поток данных и планирует
выполнение микрокоманд с учетом зависимостей по данным и доступ-
ности ресурсов, а также временно сохраняет результаты опережающе-
го выполнения в пуле команд.
Устройство отката - «упорядоченное» устройство, которое зна-
ет, как и когда завершить выполнение команды, то есть перевести
временные результаты опережающего выполнения в постоянное состоя-
ние вычислительной системы.
Интерфейс шины является «частично упорядоченным» устройс-
твом, отвечающим за связь трех вышеупомянутых устройств с внешним
миром. Интерфейс шины взаимодействует непосредственно с кэшем
2-го уровня и поддерживает до 4 параллельных обращений к кэшу.
Интерфейс шины также управляет обменом данными с основной па-
мятью, который происходит с использованием протокола MESI [1].
2Устройство выборки/декодирования
Структура этого устройства приведена на рисунке 3.
Команды из кэша команд могут быть быстро выбраны для после-
дующей обработки. Указатель на следующую команду - это индекс кэ-
ша команд, содержимое которого определяется буфером переходов,
состоянием процессора и сообщениями о неправильном предсказании
перехода, поступающими из устройства выполнения целых команд. Бу-
фер переходов с 512 входами использует расширение алгоритма Йе
(Yeh), которое обеспечивает более чем 90-процентную точность
предсказания переходов.
Предположим, что ничего исключительного не происходит и что
-
8 -
буфер переходов в своих предсказаниях оказался прав (в P6 предус-
мотрены эффективные действия в случае неправильного предсказания
перехода).
Кэш команд выбирает строку кэша, соответствующую индексу в
указателе на следующую команду, и следующую за ней строку, после
чего передает 16 выровненных байтов декодеру. Две строки считыва-
ются из-за того, что команды в архитектуре Intel выровнены по
границе байта, и поэтому может происходить передача управления на
середину или конец строки кэша. Выполнение этой ступени конвейера
занимает три такта, включая время, необходимое для вращения пред-
выбранных байтов и их подачи на декодеры команд. Начало и конец
команд помечаются.
Три параллельных декодера принимают поток отмеченных байтов
и обрабатывают их, отыскивая и декодируя содержащиеся в потоке
команды. Декодер преобразует команды архитектуры Intel в микроко-
манды-триады (два операнда, один результат). Большинство команд
архитектуры Intel преобразуются в одну микрокоманду, некоторые
требуют четырех микрокоманд, а сложные команды требуют обращения
к микрокоду, представляющему из себя набор заранее составленных
последовательностей микрокоманд. Некоторые команды, так называе-
мые байт-префиксы, модифицируют следующую за ними команду, что
также усложняет работу декодера. Микрокоманды ставятся в очередь,
посылаются в таблицу псевдонимов регистров, где ссылки на логи-
ческие регистры преобразуются в ссылки на физические регистры P6,
после чего каждая из микрокоманд вместе с дополнительной информа-
цией о ее состоянии (статусе) посылается в пул команд. Пул команд
реализован в виде массива контекстно-адресуемой памяти, называе-
мого также буфером переупорядочивания.
В этой точке заканчивается «упорядоченная» часть конвейера.
2Устройство диспетчирования/выполнения
Устройство диспетчирования выбирает микрокоманды из пула ко-манд в зависимости от их статуса. Под статусом мы будем понимать информацию о доступности операндов микрокоманды и наличии необхо-димых для ее выполнения вычислительных ресурсов. Если статус мик-рокоманды показывает, что ее операнды уже вычислены и доступны, а необходимое для ее выполнения вычислительное устройство (ресурс) также доступно, то устройство диспетчирования выбирает микроко-манду из пула команд и направляет ее на устройство для выполне-ния. Результаты выполнения микрокоманды возвращаются в пул.
Взаимодействие с вычислительными ресурсами происходит через
пятипортовую распределительную станцию. Структура устройства дис-
петчирования/выполнения показана на рисунке 4.
P6 может запускать на выполнение до 5 микрокоманд за такт,
по одной на каждый порт. Средняя длительно поддерживаемая про-
пускная способность - 3 микрокоманды за такт. Процесс планирова-
ния выполнения микрокоманд является принципиально «беспорядоч-
ным»: момент направления микрокоманд на вычислительные ресурсы
определяется только потоками данных и доступностью ресурсов, без
какой бы то ни было связи с первоначальным порядком команд в
программе.
-
9 -
Алгоритм, отвечающий за планирование выполнения микрокоманд,
является крайне важным для производительности процессора в целом.
Если в каждом такте для каждого ресурса готова к выполнению толь-
ко одна микрокоманда, то проблемы выбора не возникает. Но если
готовых к выполнению на данном ресурсе микрокоманд несколько, то
какую из них выбрать? Можно доверить выбор случаю. Можно приме-
нить алгоритм «первый пришел - первый обслужен». Идеальным был бы
выбор микрокоманды, выполнение которой привело бы к максимальному
сокращению графа потоков данных выполняемой программы. Однако
поскольку нет возможности определить такую микрокоманду в ходе
выполнения программы, используется алгоритм планирования, имити-
рующий модель «первый пришел - первый обслужен», предпочитая
смежное выполнение смежных микрокоманд.
Поскольку система команд Intel содержит множество команд пе-
рехода, многие микрокоманды также являются переходами. Алгоритм,
реализованный в буфере переходов, позволяет в большинстве случаев
правильно предсказать, состоится или не состоится переход, но
иногда он все же будет ошибаться. Рассмотрим для примера случай,
когда буфер переходов предсказывает переход назад в конце цикла:
до тех пор, пока условие выхода из цикла не выполняется, переход
будет предсказываться верно, однако когда это условие станет ис-
тинным, предсказание будет ошибочным.
Для исправления случаев неверного предсказания перехода при-
менен следующий подход. Микрокомандам перехода еще в упорядочен-
ной части конвейера ставятся в соответствие адрес следующей ко-
манды и предполагаемый адрес перехода. После вычисления перехода
реальная ситуация сравнивается с предсказанной. Если они совпада-
ют, то проделанная, исходя из предположения об исходе перехода,
работа оказывается полезной, так как соответствует реальному ходу
программы, а микрокоманда перехода удаляется из пула команд.
Если же допущена ошибка (переход был предсказан, но не прои-
зошел, или было предсказано отсутствие перехода, а в действитель-
ности он состоялся), то устройство выполнения переходов изменяет
статус всех микрокоманд, засланных в пул команд после команды пе-
рехода, чтобы убрать их из пула команд. Правильный адрес перехода
направляется в буфер переходов, который перезапускает весь конве-
йер с нового адреса.
2Устройство отката
Структура устройства отката изображена на рисунке 5.
Устройство отката также проверяет статус микрокоманд в пуле
команд: оно ищет микрокоманды, которые уже выполнены и могут быть
удалены из пула. Именно при удалении микрокоманды результаты ее
выполнения, хранящиеся в пуле команд, реально изменяют состояние
вычислительной системы, например, происходит запись в регистры.