Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / 9_Процессор-суперскаляр-Intel.doc
Скачиваний:
47
Добавлен:
20.03.2015
Размер:
285.18 Кб
Скачать

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.

В случае допуска внеочередного завершения команд необходимо, чтобы в про­цессоре присутствовал специальный управляющий блок — блок сохранения. Этот блок выбирает следующую команду для сохранения, используя очередь, называе­мую буфером реорганизации. Команды записываются в эту очередь в том порядке, в каком они следуют в программе, по мере диспетчеризации для выполнения. Ко­гда команда достигает начала очереди и завершается, соответствующие результа­ты пересылаются из временных регистров в постоянные. После этого команда удаляется из очереди, а все выделенные ей ресурсы, включая временные регистры, очищаются. Итак, команда теперь считается покинувшей конвейер. Этот статус име­ют также все команды, диспетчеризированные до нее. Описанный алгоритм позво­ляет выполнять команды в любой последовательности и обеспечивает их выход с конвейера в строгом соответствии с порядком расположения в программе.