Автор работы: Пользователь скрыл имя, 23 Октября 2011 в 17:51, лекция
Высокопроизводительный 32-х разрядный микропроцессор 80i86 ориентирован на эффективное выполнение программ в среде многозадачных ОС (типа Windows). Микропроцессор имеет 32-разрядные регистры и 32-х разрядные раздельные шины адреса и данных.
Эти потери
времени можно сократить либо за счет
ускорения процесса вычисления адресов
и выборки команд, либо за счет решения
проблемы условного перехода в целом.
Методы ускорения выборки команд при условном переходе
Для ускорения процесса выборки команд применяются следующие методы:
На этапе декодирования команды выясняются ее принадлежность к команде перехода, а также способ адресации и адресный код точки перехода. Это позволяет сразу на втором этапе приступить к вычислению исполнительного адреса, не дожидаясь передачи команды на третью ступень, где обычно происходит вычисление адресов. Для этого в состав ступени декодирования вводят дополнительные сумматоры, с помощью которых и вычисляется исполнительный адрес точки перехода, т.е. адрес j-ой команды на правой ветке. Этот метод позволяет незначительно сократить потери времени всего на один такт.
Более существенно сократить потери времени на вычисление исполнительного адреса команды перехода можно за счет использования буфера адресов перехода ВТВ. ВТВ от слов Branch Target Buffer.
ВТВ представляет собой кэш-память небольшой емкости, в которой хранятся исполнительные адреса точек перехода нескольких последних команд, для которых переход состоялся. В роли признаков (тегов) выступают адреса соответствующих команд. Перед выборкой очередной команды ее адрес, т.е. содержимое счетчика команд, сравнивается с адресами команд в ВТВ. Для команды, найденной в ВТВ, исполнительный адрес точки перехода не вычисляется, а выбирается из ВТВ (кэш-попадание). Это позволяет начать выборку команды из точки перехода на один такт раньше. В случае кэш-промаха команда обрабатывается стандартным образом. Если кэш-промах произошел для команды перехода, то полученный при ее выполнении исполнительный адрес точки перехода записывается в ВТВ, если переход состоялся. При замещении информации в ВТВ обычно применяется алгоритм LRU. Применение ВТВ дает максимальный эффект в циклических программах, когда отдельные команды перехода выполняются многократно.
Усовершенствованным вариантом ВТВ является BTIC (Branch Target Instruction Cache). В BTIC помимо исполнительного адреса команды в точке перехода записывается также и код самой команды. Это позволяет при повторном исполнении этой команды выбирать команду не из памяти, а непосредственно из BTIC, что дает наилучший эффект для циклических программ.
Буфер
цикла представляет собой
Методы решения проблемы условного перехода
Рассмотренные методы ускорения выборки команд не позволяют в целом решить все проблемы условного перехода, из-за которых происходит снижение производительности процессора. Поэтому были предложены различные методы сокращения потерь времени при условных переходах, которые можно разделить на четыре группы:
Равномерность
поступления команд на вход
конвейера часто нарушается из-
Каждая извлеченная из памяти и помещенная в основной буфер команда анализируется блоком перехода. При обнаружении команды условного перехода блок перехода вычисляет исполнительный адрес точки перехода и одновременно с продолжением выборки команд в основной буфер организует выборку команд в дополнительный буфер, начиная с точки перехода. Далее блок перехода определяет исход команды условного перехода, в зависимости от которого подключает к конвейеру нужный буфер, при этом содержимое другого буфера сбрасывается. Таким образом, при любом исходе команды перехода задержек в работе конвейера не будет, поскольку происходит плавное переключение программы на нужную ветку. Это достоинство метода.
К недостатку
метода следует отнести
Другим решением проблемы переходов служит дублирование начальных ступеней конвейера и создание двух параллельных потоков команд (множественные потоки). На рисунке приведена модель конвейера с множественными потоками:
В одной
из ветвей такого
Стратегия
задержанного перехода предполагает продолжение
выполнения команд, следующих за командой
условного перехода, независимо от проверки
условия. Естественно, что выполнению
подлежат те команды, которые все равно
должны быть когда-то выполнены независимо
от того, происходит переход или нет. Кроме
того, команда перехода не должна влиять
на результат выполнения таких команд.
Для реализации задержанного перехода
на этапе компиляции программы после каждой
команды перехода вставляется пустая
команда “Нет операции”. На стадии оптимизации
программы производится попытка заменить
пустые команды полезными командами программы.
Разумеется, замещать команду “Нет операции”
можно лишь на такую, которая не влияет
на условие выполняемого перехода, иначе
замена не будет корректной. При оптимизации
программы удается заменить более 20% пустых
команд “Нет операции”.
Предсказание переходов
Предсказание переходов в настоящее время рассматривается как один из более эффективных способов борьбы с конфликтами по управлению. Для устранения таких конфликтов еще до момента выполнения команды условного перехода или сразу же после ее поступления на конвейер делается предположение о наиболее вероятном исходе такой команды, т.е. делается предсказание о том, произойдет или не произойдет переход. Все последующие команды подаются на конвейер в соответствии со сделанным предсказанием. При ошибочном предсказании конвейер необходимо вернуть в состояние, с которого началась загрузка ненужных команд. Для этого необходимо очистить начальные ступени конвейера и приступить к загрузке, начиная с команды, которой передается управление. Подобная перезагрузка конвейера по эффекту эквивалентна приостановке конвейера, что ведет к снижению производительности процессора. Поэтому цена ошибки предсказания перехода может оказаться достаточно высокой, но при правильных предсказаниях крупен и выигрыш, поскольку конвейер в этом случае работает ритмично без остановок и задержек. При правильном предсказании выигрыш в производительности будет тем больше, чем выше точность предсказания. Точность предсказания обычно оценивают как процентное отношение числа правильных предсказаний к их общему количеству. Для того чтобы снижение производительности конвейера по причине конфликтов по управлению не превысило 10%, точность предсказания переходов должна быть выше 97,7%.
В
настоящее время известно
Статическое предсказание переходов
Статическое
предсказание переходов
Известные
способы статического
Способ переход происходит всегда, предполагает, что каждая команда условного перехода в программе обязательно завершится переходом. Поэтому дальнейшая выборка команд в этом случае производится, начиная с адреса перехода.
Способ переход никогда не происходит, предполагает, что ни одна из команд условного перехода в программе никогда не завершится переходом. Поэтому дальнейшая выборка команд продолжается в естественном порядке.
Проведенные
исследования путем
Несмотря
на невысокую точность
Способ,
когда наиболее вероятный
Четвертый способ предсказания на основе кода операции команды перехода предполагает, что для одних команд переход произойдет всегда, а для других команд – никогда. Поэтому все команды условного перехода делят на две группы, командам одной группы назначается стратегия ПВ, а другой – ПН. Распределение команд на группы можно проводить либо по результатам профилирования, либо по кодам команд. Например, стратегию ПВ можно назначить командам перехода по условиям: меньше нуля, равно, больше или равно, а всем остальным командам – стратегию ПН. Этот способ имеет примерно такую же точность предсказания, что и третий, т.е. примерно 75%.
Пятый способ предполагает, что предсказание зависит от направления перехода. Если указанный в команде адрес перехода меньше содержимого счетчика команд, то переход происходит назад, т.е. в сторону начала программы. Для таких команд назначается стратегия ПВ, поскольку по статистике именно такие команды используются для организации циклов. Согласно статистике переход назад выполняется в 85% случаев. Переход по адресу, превышающему адрес команды перехода, называется переходом вперед. Для таких команд назначается стратегия ПН. Этот способ еще называют: переход назад происходит всегда, а его точность примерно равна точности третьего и четвертого способов предсказания.
Шестой способ предсказания, когда при первом выполнении команды переход происходит всегда, статическим является только частично, поскольку предсказания на последующее выполнение команды зависят от правильности начального предсказания, т.е. стратегия однозначно определяет исход команды только при первом ее выполнении, а все последующие переходы определяются уже при выполнении программы. Точность прогноза данного способа несколько выше, чем у всех предшествующих, но этот способ трудно реализовать на практике для больших программ из-за того, что нужно отслеживать слишком много команд условного перехода.