- •Введение
- •1. Общие требования, предъявляемые к современным компьютерам
- •1.1. Отношение стоимость/производительность
- •1.2. Надежность и отказоустойчивость
- •1.3. Масштабируемость
- •1.4. Совместимость и мобильность программного обеспечения
- •2. Классификация компьютеров по областям применения
- •2.1. Персональные компьютеры и рабочие станции
- •2.3. Серверы
- •2.4. Мейнфреймы
- •2.5. Кластерные архитектуры
- •3. Оценка производительности вычислительных систем
- •3.1. Общие замечания
- •3.6.1. Тесты tpc
- •3.6.2. Тест tpc-a
- •3.6.3. Тест tpc-b
- •3.6.4. Тест tpc-c
- •3.6.5. Следующие тесты tpc
- •4. Основные архитектурные понятия
- •4.1. Определение понятия "архитектура"
- •4.2. Архитектура системы команд. Классификация процессоров (cisc и risc)
- •4.3. Методы адресации и типы данных
- •4.3.1. Методы адресации
- •4.3.2. Типы команд
- •4.4. Команды управления потоком команд
- •4.5. Типы и размеры операндов
- •5. Конвейерная организация
- •5.1. Что такое конвейерная обработка
- •5.2. Простейшая организация конвейера и оценка его производительности
- •5.3. Структурные конфликты и способы их минимизации
- •5.4. Конфликты по данным, остановы конвейера и реализация механизма обходов
- •5.5. Классификация конфликтов по данным
- •5.5.1. Конфликты по данным, приводящие к приостановке конвейера
- •5.5.2. Методика планирования компилятора для устранения конфликтов по данным
- •5.6. Сокращение потерь на выполнение команд перехода и минимизация конфликтов по управлению
- •5.7. Снижение потерь на выполнение команд условного перехода
- •5.7.1. Метод выжидания
- •5.7.2. Метод возврата
- •5.7.3. Задержанные переходы
- •5.7.4. Статическое прогнозирование условных переходов: использование технологии компиляторов
- •5.8. Проблемы реализации точного прерывания в конвейере
- •5.9. Обработка многотактных операций и механизмы обходов в длинных конвейерах
- •5.10. Конфликты и ускоренные пересылки в длинных конвейерах
- •5.11. Поддержка точных прерываний
- •6.Конвейерная и суперскалярная обработка
- •6.1. Параллелизм на уровне выполнения команд, планирование загрузки конвейера и методика разворачивания циклов
- •6.2. Параллелизм уровня команд: зависимости и конфликты по данным
- •6.3. Зависимости
- •6.4. Параллелизм уровня цикла: концепции и методы
- •6.5. Основы планирования загрузки конвейера и разворачивание циклов
- •6.6. Устранение зависимостей по данным и механизмы динамического планирования
- •6.6.1. Основная идея динамической оптимизации
- •6.6.2. Динамическая оптимизация с централизованной схемой обнаружения конфликтов
- •6.6.3. Другой подход к динамическому планированию - алгоритм Томасуло
- •6.7. Аппаратное прогнозирование направления переходов и снижение потерь на организацию переходов
- •6.7.1. Буфера прогнозирования условных переходов
- •6.7.2. Дальнейшее уменьшение приостановок по управлению: буфера целевых адресов переходов
- •6.8. Одновременная выдача нескольких команд для выполнения и динамическое планирование
- •6.8.1. Суперскалярные машины
- •6.8.2. Архитектура машин с длинным командным словом
- •6.9. Обнаружение и устранение зависимостей компилятором и разворачивание циклов
- •6.9.1. Обнаружение и устранение зависимостей
- •6.9.2. Программная конвейеризация: символическое разворачивание циклов
- •6.10. Аппаратные средства поддержки большой степени распараллеливания
- •6.10.1. Условные команды
- •6.10.2. Выполнение по предположению (speculation)
- •Список использованных источников
5.7. Снижение потерь на выполнение команд условного перехода
Имеется несколько методов сокращения приостановок конвейера, возникающих из-за задержек выполнения условных переходов. В данном разделе обсуждаются четыре простые схемы, используемые во время компиляции. В этих схемах прогнозирование направления перехода выполняется статически, т.е. прогнозируемое направление перехода фиксируется для каждой команды условного перехода на все время выполнения программы. После обсуждения этих схем мы исследуем вопрос о правильности предсказания направления перехода компиляторами, поскольку все эти схемы основаны на такой технологии. В следующей главе мы рассмотрим более мощные схемы, используемые компиляторами (такие, например, как разворачивание циклов), которые уменьшают частоту команд условных переходов при реализации циклов, а также динамические, аппаратно реализованные схемы прогнозирования.
5.7.1. Метод выжидания
Простейшая схема обработки команд условного перехода заключается в замораживании или подавлении операций в конвейере, путем блокировки выполнения любой команды, следующей за командой условного перехода, до тех пор, пока не станет известным направление перехода. Табл. 5.7 отражала именно такой подход.
5.7.2. Метод возврата
Более хорошая и ненамного более сложная схема состоит в том, чтобы прогнозировать условный переход как невыполняемый. При этом аппаратура должна просто продолжать выполнение программы, как если бы условный переход вовсе не выполнялся. В этом случае необходимо позаботиться о том, чтобы не изменить состояние машины до тех пор, пока направление перехода не станет окончательно известным. В некоторых машинах эта схема с невыполняемыми по прогнозу условными переходами реализована путем продолжения выборки команд, как если бы условный переход был обычной командой. Поведение конвейера выглядит так, как будто ничего необычного не происходит. Однако, если условный переход на самом деле выполняется, то необходимо просто очистить конвейер от команд, выбранных вслед за командой условного перехода и заново повторить выборку команд (табл. 5.9).
Таблица 5.9
Диаграмма работы модернизированного конвейера
Невыполняемый условный переход |
IF |
ID |
EX |
MEM |
WB |
|
|
|
|
Команда i+1 |
|
IF |
ID |
EX |
MEM |
WB |
|
|
|
Команда i+2 |
|
|
IF |
ID |
EX |
MEM |
WB |
|
|
Команда i+3 |
|
|
|
IF |
ID |
EX |
MEM |
WB |
|
Команда i+4 |
|
|
|
|
IF |
ID |
EX |
MEM |
WB |
Выполняемый условный переход |
IF |
ID |
EX |
MEM |
WB |
|
|
|
|
Команда i+1 |
|
IF |
ID |
EX |
MEM |
WB |
|
|
|
Команда i+2 |
|
|
stall |
IF |
ID |
EX |
MEM |
WB |
|
Команда i+3 |
|
|
|
stall |
IF |
ID |
EX |
MEM |
WB |
Команда i+4 |
|
|
|
|
stall |
IF |
ID |
EX |
MEM |
Альтернативная схема прогнозирует переход как выполняемый. Как только команда условного перехода декодирована и вычислен целевой адрес перехода, мы предполагаем, что переход выполняемый, и осуществляем выборку команд и их выполнение, начиная с целевого адреса. Если мы не знаем целевой адрес перехода раньше, чем узнаем окончательное направление перехода, у этого подхода нет никаких преимуществ. Если бы условие перехода зависело от непосредственно предшествующей команды, то произошла бы приостановка конвейера из-за конфликта по данным для регистра, который является условием перехода, и мы бы узнали сначала целевой адрес. В таких случаях прогнозировать переход как выполняемый было бы выгодно. Дополнительно в некоторых машинах (особенно в машинах с устанавливаемыми по умолчанию кодами условий или более мощным (а потому и более медленным) набором условий перехода) целевой адрес перехода известен раньше окончательного направления перехода, и схема прогноза перехода как выполняемого имеет смысл.