- •9.5. Суперскалярная обработка команд
- •9.5.1. Внеочередное завершение команд
- •9.5.2. Завершение выполнения
- •9.5.3. Операция диспетчеризации
- •9.6 Семейство процессоров Intel ia-32
- •9.6.1. Сегментация памяти для семейства процессоров ia-32
- •9.6.2. 16-Разрядный режим
- •9.6.3. Процессоры 80386 и 80486
- •9.6.4. Процессор Pentium
- •9.6.5. Процессор Pentium Pro
- •9.6.6. Процессоры Pentium II и Pentium III
- •9.6.7. Процессор Pentium 4
- •9.6.8. Технология Hyper-Threading от Intel Производительности всегда мало
- •Hyper-Threading
- •Углубляемся в технологию
- •Максимум эффективности от Hyper-Threading
- •9.6.9. Архитектура ia-64
- •Описание ia-64
- •Архитектура е2к
9.5.1. Внеочередное завершение команд
Команды, представленные на рис 9.10, диспетчеризируются в том порядке, в каком они расположены в программе. Однако при завершении работы порядок уже иной. Сопряжено ли это с к какими-либо проблемами? Нам с вами приходилось обсуждать вопросы, связанные с зависимостям между командами. Если, к примеру, команда I2 зависит от результата, выдаваемого командой I1, выполнение команды I2 будет отложено. При правильной обработке зависимостей выполнение команды откладывать не приходится. Однако когда выполнение команды приводит к исключениям, возникают новые проблемы. Исключения могут быть обусловлены сбоем в работе шины в ходе выборки операнда или попыткой совершить недопустимую операцию, например деление на нуль. На такте 4 результаты выполнения команды I2 записываются в регистровый файл. Если команда I1 вызывает исключение, команды в конвейере оказываются в несогласованном состоянии. Счетчик указывает на команду, послужившую причиной возникновения исключительной ситуации. При этом выясняется, что одна или несколько следующих за ней команд уже выполнены. Такая ситуация называется неточным исключением.
Для того чтобы гарантировать согласованное выполнение программы, результаты выполнения команд нужно записывать по целевым адресам точно в том порядке, в каком они следуют в программе. Это означает, что шаг W2 на рис. 9.10 необходимо отложить до такта 6. В свою очередь, целочисленное арифметическое устройство должно сохранять результаты выполнения команды I2, поэтому оно не может принять команду I4 до шага 6, как показано на рис. 9.11, а. Если исключение происходит, когда команда активна, все последующие команды, которые на тот момент, возможно, уже частично выполнены, удаляются из конвейера. Такая обработка исключений называется точным исключением.
а
б
Рис. 9.11. Завершение работы команд в соответствии с порядком их следования в программе: отложенная запись (а); использование временных регистров (б)
Точные исключения легче обеспечить для внешних прерываний. Как только поступает сигнал внешнего прерывания, блок диспетчеризации прекращает считывать из очереди новые команды и очищает ее. Команды, выполнение которых уже началось, завершают свой рабочий цикл. С этого момента процессор и все его регистры находятся в согласованном состоянии. Обработку исключения можно начинать.
9.5.2. Завершение выполнения
С одной стороны, чтобы ускорить освобождение блоков выполнения и загрузку в них новых команд, можно разрешить внеочередное завершение команд. С другой стороны, для обеспечения точных исключений команды должны завершаться в том порядке, в каком они следуют в программе. Существует возможность достичь сразу двух указанных целей. Для этого команды должны выполняться так, как показано на рис. 9.11(б). Отметим, что результаты при этом записываются во временные регистры. Позднее содержимое временных регистров в нужном порядке пересылается в постоянные регистры процессора. На шаге TW осуществляется запись во временный регистр, а на шаге W, завершающем для команды, содержимое временного регистра переписывается в соответствующий постоянный регистр. Этот шаг часто называют шагом сохранения, поскольку после него результат выполнения команды уже не может быть отменен. Если команда вызывает исключение, результаты, выданные последующими командами, находящимися во временных регистрах, легко удалить.
Временный регистр исполняет роль того постоянного регистра, данные которого в нем хранятся. И даже имя ему присваивается такое же. Например, если целевым регистром команды I2 является R5, временный регистр, используемый на шаге TW2, на тактах 6 и 7 интерпретируется как R5. Его содержимое передается любым следующим командам, обращающимся к регистру R5. Описанная технология называется переименованием регистров. Обратите внимание на то, что временный регистр применяется только теми командами, которые при естественном порядке выполнения программы следуют за I2. Если на такте 5 или 6 регистр R5 потребуется команде, предшествующей 1з, она получит доступ к реальному регистру R5, который все еще содержит данные, не измененные командой I2.
В случае допуска внеочередного завершения команд необходимо, чтобы в процессоре присутствовал специальный управляющий блок — блок сохранения. Этот блок выбирает следующую команду для сохранения, используя очередь, называемую буфером реорганизации. Команды записываются в эту очередь в том порядке, в каком они следуют в программе, по мере диспетчеризации для выполнения. Когда команда достигает начала очереди и завершается, соответствующие результаты пересылаются из временных регистров в постоянные. После этого команда удаляется из очереди, а все выделенные ей ресурсы, включая временные регистры, очищаются. Итак, команда теперь считается покинувшей конвейер. Этот статус имеют также все команды, диспетчеризированные до нее. Описанный алгоритм позволяет выполнять команды в любой последовательности и обеспечивает их выход с конвейера в строгом соответствии с порядком расположения в программе.