Горнец Н.Н., Рощин А.Г. Организация ЭВМ и систем (2006) (1186251), страница 25
Текст из файла (страница 25)
Процессоры, допускающие работу одного из конвейеров при «заторе» в других, называют процессорами, обладающими архитектурой с неупорядоченной обработкой. Если разрешить выполнение команд в одном из конвейеров при возникновении «затора» в другом, то более поздние команды программы могут оказаться выполненными раньше предшествующих им. Для исключения неправильных результатов нужно, чтобы результаты этих операций не заносились в память, а содержимое регистров не модифицировалось в ошибочной последовательности, т.е.
должны быть предусмотрены схемы и методы, позволяющие восстановить правильность вычислительного процесса. Для реализации неупорядоченной обработки между ступенями декодирования и исполнения в конвейере размещают специальную буферную память, или накопитель команд. Если процессор определяет, что текущая команда не может выполняться, то он забирает из накопителя следующую команду и посылает ее в исполнительный блок.
Этот накопитель заполняется командами последовательно, однако порядок формирования результатов может оказаться нарушенным, так как команды имеют разную длительность выполнения, а их исполнение может даже откладываться. Часто задержки происходят из-за недостаточности аппаратных ресурсов. Например, в компьютере может быть предусмотрен только один порт записи в регистры, а при определенных обстоятельствах конвейеру может потребоваться выполнить две записи в регистровый файл одновременно.
Это приводит к конфликту, в результате которого происходит приостановка выполнения команд в одном из конвейеров до тех пор, пока требуемое устройство (один из портов) не станет доступным. Подобную ситуацию называют конвейерным «пузырем» вЂ” он проходит по конвейеру, не вызывая никакой обработки, но занимает место в конвейере, а следовательно, снижается производительность обработки.
При наличии в компьютере нескольких конвейеров результаты даже последовательных команд могут формироваться в неупорядоченной последовательности. Пусть нужно выполнить две совершенно независимые команды умножения и сложения. Команда Умножения попадает на конвейер первой. Вслед за ней на второй конвейер попадает команда сложения, но ее результат будет получен раньше, так как умножение требует нескольких тактов, а команда сложения одного. Следовательно, имеет место неупорядоченное завершение команд. Если процессор обладает несколькими конвейерами, то неУпорядоченное завершение команд неизбежно.
При этом резуль- 135 тат более поздней, но короткой операции может появиться рань ше и «занять» регистр, предназначенный для результата предыду щей более длинной команды. Кроме того, необходимо обеспечить получение такого же результата, как и при строго последовательном выполнении команд. Эти проблемы обычно решаются на эта пе компиляции программы, но для их решения могут быть ис пользованы и специальные приемы — переименование регистров и переупорядочивание команд. Переименование регистров.
Сколько бы команд одновременно ни был способен выполнять процессор, т.е. сколько бы в нем ни было конвейеров, он никогда не будет загружен полностью. Это связано с тем, что некоторые операции просто нельзя выполнить до получения результатов предьщущих. Например, если надо вычислить значение выражения (Ь/2 — И), то одновременно произвести операции деления и вычитания не удастся, так как результат операции деления (из которого производится вычитание) неизвестен заранее.
Такая ситуация носит название истинной взаимозависимости данных и означает, что входные данные для операции вычитания определяются в результате другой операции, в этом случае операции деления. Повысить производительность обработки при истинных взаимозависимостях данных путем одновременного исполнения двух операций невозможно. Но очень часто в программах существуют ложные взаимозависимости. Они возникают в случае, когда следующие друг за другом команды заносят свои результаты в один и тот же регистр.
Если команды выполняются не по порядку, то нельзя гарантировать правильность модификации содержимого регистра. Пусть необходимо выполнить три команды: первая команда имеет большую длительность исполнения (например, команда умножения), вторая команда сложения или сдвига — короткая, а третья команда тоже длинная. В качестве исходных данных вторая команда должна использовать результат, получаемый от первой команды. Если команды выполняются на нескольких конвейерах неупорядоченно, то возможен случай, когда вторая команда (в этом случае сложения) будет завершена до окончания первой, т.е. она использовала прежнее содержимое регистра, в который должен быть помещен результат выполнения первой команды.
Еще один тип ошибок вследствие ложных взаимозависимостей возникает в случае, когда вторая команда может испортить данные, используемые в качестве входных для первой. Этот тип ошибок также возможен при нарушении естественного порядка следования команд. Эти типы ошибок особенно часто встречаются в архитектурах с ограниченным числом РОН. Для устранения ошибок при ложных взаимозависимостях необходимо воспользоваться методом переименовывания регистров. Процессоры, реализующие этот принцип, обладают ббльшим 136 числом физических регистров, чем определяется архитектурой. увеличить число архитектурных регистров невозможно, так как это привело бы к нарушению программной совместимости компьютеров.
Если какой-либо команде требуется регистр, то процессор динамически ставит в соответствие (переименовывает) этому архитектурному регистру один из нескольких свободных физических регистров. Когда другая команда пытается обратиться к тому же архитектурному регистру, ему ставится в соответствие уже другой физический регистр. Для динамической подстановки номера физического регистра вместо логического служит справочная таблица, которая обновляется после декодирования каждой команды. Результат заносится в свободный физический регистр, но адрес логического регистра запоминается для восстановления вычислительного процесса при прерываниях.
Естественно, что переименование не может быть «вечным», оно действует только, пока команды продвигаются по конвейерам. Возможна и другая организация процедуры переименования, для которой используются набор регистров и буфер переименования. В каждом регистре набора помимо значения операнда предусмотрен дополнительный разряд, указывающий на достоверность этого значения, а буфер переименования выполнен в виде регистров и построен по ассоциативному принципу. Каждый регистр буфера переименования содержит поля для указания доступности или занятости регистра, номера переименованного регистра, текущего значения содержимого регистра, достоверности и последнего переименования. Эти поля служат для нахождения свободного регистра в буфере переименования, записи в него результата и нахождения значения операнда при операциях чтения.
Переименование регистров не исключает влияния истинных взаимозависимостей. Однако их влияние можно уменьшить методом обхода, при котором результаты выполнения одной команды пересылаются прямо другой в соответствующий конвейер без запоминания их в регистрах или памяти. Это позволяет процессору выполнять некоторые команды одновременно, немедленно передавая результаты одной из них в другую. Динамическое прогнозирование условных переходов.
Конфликты по управлению могут привести к существенным потерям производительности конвейера, значительно превышающим потери от конфликтов по данным. Такой конфликт может возникнуть, если выполняется команда условного перехода. Переход — это изменение последовательности выполнения команд; он может зависеть от результата предыдущей операции (например, операции сравнения). При реализации команд переходов используется специальный регистр — регистр флагов, куда заносятся указатели, или флаги, характеризующие результат любой операции.
В персо- 137 нальных компьютерах 1ВМ используются флаги переноса, четно сти, переноса из младшей тетрады в старшую, нуля, знака, пере полнения, направления обработки цепочек и разрешения преры ваний. Переходы встречаются в программе довольно часто.
Напри мер, в программах для персональных компьютеров команды переходов приходятся в среднем на каждые шесть-семь выполняемых команд. Адрес условного перехода становится известным только на исполнительной ступени конвейера, т.е. до завершения операции перехода процессор просто не знает, какую команду ему следует направить в конвейер после команды перехода. Так, если в результате выполнения предыдущей операции ее результат меньше нуля, то процессор должен выполнять одну команду, но если результат больше нуля, то другую, хранящуюся в совершенно иной ячейке памяти.
Однако о направлении перехода будет известно только после выполнения предыдущей команды. Для выполнения перехода нужно сделать предположение о пути ветвления. Такой метод получил название прогнозирования ветвления. Если бы им не пользовались, то при возникновении перехода процессору пришлось бы выбрасывать частично выполненные, но совершенно ненужные команды. Особенно большие потери такое выбрасывание вызывает в суперскалярных процессорах, поскольку в них одновременно обрабатывается большое число команд. Процессор может спрогнозировать переход и начать выборку команды из ячейки с предсказанным адресом задолго до того, как узнает о правильности своего прогноза или до получения условия перехода, однако не может изменять содержимое архитектурных регистров или ячеек памяти.
В некоторых процессорах предусмотрены специальные средства, обеспечивающие несколько уровней предположений. Если процессор неверно спрогнозировал переход (это выяснится только после завершения выполнения команды условного перехода), он должен отменить все полностью или частично выполненные команды и очистить конвейеры. Неверно предсказанные переходы очень сильно снижают производительность, поэтому во всех ЦП принимают меры к снижению их количества. Пусть на этапе выборки определено, что надо выполнить команду перехода. Тогда для уменьшения потерь времени нужно знать, по какому адресу выбирать следующую команду. Однако до дешифрирования неизвестно, что это за команда и чему равно следующее значение счетчика команд.
Если сохранить в специальном буфере адрес команды перехода, прогнозируемый адрес следующей команды и предысторию переходов, то можно сократить число неверных переходов. На этапе выборки очередной команды производится обращение к этой буферной памяти, для чего используется значение счетчика команд (рис. 5.11). При обнаруже- 138 Прогноз полнения перехода Команда является командой перехода рис. 5.11. Использование специального буфера для организации перехо- дов нии совпадения прогнозируются условия перехода и немедленно производится выборка и дешифрация следующей команды. Этот метод применяется в персональных компьютерах РепШпп, где данные о последних переходах хранятся в специальном буфере. Переход осуществляется по адресу, сохраненному в этом буфере.