Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Архитектура ЭВМ и систем. Учебное пособие
.pdf
дируется предыдущая очередь или пока не переполнится следующая
очередь. Если емкость буферной памяти достаточно велика, различия
во времени обработки не сказываются на производительности, тем не
менее желательно, чтобы средняя длительность обработки во всех ФБi
была одинаковой.
В архитектуре вычислительных машин можно найти множество
объектов, где конвейеризация обеспечивает ощутимый прирост производительности
ВМ. Ранее уже рассматривались два таких объекта –
операционные устройства и память, однако наиболее ощутимый эффект достигается при конвейеризации этапов машинного цикла.
По способу синхронизации работы ступеней конвейеры могут
быть синхронными и асинхронными. Для традиционных ВМ характерны синхронные конвейеры. Связано это, прежде всего, с синхронным характером работы процессоров.
Ступени конвейеров в процессоре обычно располагаются близко друг от друга, благодаря чему тракты
распространения сигналов синхронизации получаются достаточно короткими и фактор «перекоса» сигналов становится не столь существенным. Асинхронные конвейеры оказываются полезными, если связь
между ступенями не столь сильна, а длина сигнальных трактов между
разными ступенями сильно рознится. Примером
асинхронных конвейеров могут служить систолические массивы (систолическая обработка
будет рассмотрена в последующих разделах).
8.1.1. НЕЛИНЕЙНЫЕ КОНВЕЙЕРЫ
Конвейер не всегда представляет собой линейную цепочку этапов. В ряде ситуаций оказывается выгодным, когда функциональные
блоки соединены между собой не последовательно, а в соответствии с
логикой обработки, при этом одни блоки в цепочке могут пропускаться, а другие – образовывать циклические структуры. Это позволяет с
помощью одного и того же конвейера
одновременно вычислять более
одной функции, однако если эти функции конфликтуют между собой,
то такой конвейер трудно загрузить полностью.
Чтобы определить, когда пора приступать к повторному вычислению той или иной функции, необходимо построить диаграмму однократной реализации этой функции и отследить по ней моменты, когда
такой запуск не приведет к
конфликту, связанному с одновременным
обращением к одному и тому же функциональному блоку.
Так, в ходе реализации функции X запуск очередного ее вычисления возможен после 1, 3 и 6 тактов. Запуск параллельного вычисления
функции Y возможен после и 4 тактов. При запуске функции Y очередной ее запуск позволен после тактов 1 и 5, а параллельный запуск
функции X допустим после
2 и 4 тактов.
161

8.1.2. КОНВЕЙЕР КОМАНД
Идея конвейера команд была предложена в 1956 году академиком
С.А. Лебедевым. Как известно, цикл команды представляет собой последовательность этапов. Возложив реализацию каждого из них на
самостоятельное устройство и последовательно соединив такие устройства, мы получим классическую схему конвейера команд.
Конфликты в конвейере команд. В силу возникающих в кон-
вейере конфликтных ситуаций достичь такой производительности не
удается. Конфликтные ситуации в конвейере принято обозначать термином риск (hazard), а обусловлены они могут быть тремя причинами:
−
попыткой нескольких команд одновременно обратиться к од-
ному и тому же ресурсу ВМ (структурный риск);
−
взаимосвязью команд по данным (риск по данным);
−
неоднозначностью при выборке следующей команды в случае
команд перехода (риск по управлению).
Структурный риск (конфликт по ресурсам) имеет место, когда несколько команд, находящихся на разных ступенях конвейера, пытаются одновременно использовать один и тот же ресурс, чаще всего – память. Так, в типовом цикле команды сразу три этапа (ВК, ВО
и ЗР)
связаны с обращением к памяти. Все три обращения могут производиться одновременно, однако на практике это не всегда возможно. Подобных конфликтов частично удается избежать за счет модульного
построения памяти и использования кэш-памяти – имеется вероятность
того, что команды будут обращаться либо к разным модулям ОП, либо
одна
из них станет обращаться к основной памяти, а другая – к кэшпамяти. С этих позиций выгоднее разделять кэш-память команд и кэшпамять данных. Конфликты из-за одновременного обращения к памяти
могут и не возникать, поскольку для многих команд ступени выборки
операнда и записи результата часто не требуются. В целом влияние
структурного риска на производительность конвейера по сравнению с
другими видами рисков сравнительно невелико.
Риск по данным, в противоположность структурному риску – типичная и регулярно возникающая ситуация. Для пояснения сущности
взаимосвязи команд по данным положим, что две команды в конвейере (i и j) предусматривают обращение к одной и той же переменной х,
причем команда i предшествует команде j. В общем случае между i и j
ожидаемы три типа конфликтов по данным:
−
«Чтение после записи» (ЧПЗ): команда j читает х до того, как
команда i успела записать новое значение х, т.е. j ошибочно получит
старое значение х вместо нового.
−
«Запись после чтения» (ЗПЧ): команда j записывает новое зна-
чение х до того, как команда i успела прочитать х, т.е. команда i ошибочно получит новое значение х вместо старого.
162

− «Запись после записи» (ЗПЗ): команда j записывает новое зна-
чение х прежде, чем команда i успела записать в качестве х свое значение, т.е. х ошибочно содержит i-e значение х вместо j-гo.
Возможен и четвертый случай, когда команда j читает х прежде
команды i. Этот случай не вызывает никаких конфликтов, поскольку
как i, так и j;
получат верное значение х.
Наиболее частый вид конфликтов по данным – ЧПЗ, поскольку
операция чтения в цикле команды (этап ВО) предшествует операции
записи (этап ЗР). По той же причине конфликты типа ЗПЧ большой
проблемы не представляют. Сложности появляются, только если
структура конвейера допускает запись прежде чтения или если команды в конвейере
обрабатываются в последовательности, отличной от
предписанной программой. Такое возможно, если командам в конвейере разрешается «догонять» предшествующие им команды, приостановленные из-за какого-то конфликта. Конфликт типа ЗПЗ также не
вызывает особых проблем в конвейерах, где команды следуют в порядке, определенном программой, и могут производить запись только
этапе ЗР. В худшем случае, когда одна команда догоняет другую из-
на
за приостановки последней, имеет место конфликт по ресурсу – попытка одновременного доступа к одной и той же ячейке.
Для борьбы с конфликтами по данным применяются как про-
граммные, так и аппаратные методы.
Программные методы ориентированы на устранение самой воз-
можности
конфликтов еще на стадии компиляции программы. Оптимизирующий компилятор пытается создать такой объектный код, чтобы между командами, склонными к конфликтам, находилось достаточное количество нейтральных в этом плане команд. Если такое не
удается, то между конфликтующими командами компилятор вставляет
необходимое количество команд типа «Нет операции».
Фактическое разрешение конфликтов возлагается
на аппаратные
методы. Наиболее очевидным решением является остановка команды j
на несколько тактов с тем, чтобы команда i успела завершиться или по
крайней мере миновать ступень конвейера, вызвавшую конфликт. Соответственно задерживаются и команды, следующие в конвейере за
j-й командой. Данную ситуацию называют «пузырьком» в конвейере.
Иногда приостанавливают только команду j, не задерживая
следующие за ней команды. Это более эффективный прием, но его реализация
усложняет конвейер.
Понятно, что остановки конвейера снижают его эффективность и
разработчики ВМ всячески стремятся сократить общее число остановок или хотя бы их длительность. Поскольку наиболее частые конфликты по данным – это ЧПЗ, основные усилия тратятся на противодействие
именно этому типу конфликтов. Среди известных методов
163

борьбы с ЧПЗ наибольшее распространение получил прием ускоренного продвижения информации (forwarding). Обычно между двумя
соседними ступенями конвейера располагается буферный регистр,
через который предшествующая ступень передает результат своей работы на последующую ступень, т.е. передача информации возможна
лишь между соседними ступенями конвейера. При ускоренном продвижении, когда для выполнения команды требуется
операнд, уже вычисленный предыдущей командой, этот операнд может быть получен
непосредственно из соответствующего буферного регистра, минуя все
промежуточные ступени конвейера. С данной целью в конвейере предусматриваются дополнительные тракты пересылки информации
(тракты опережения, тракты обхода), снабженные средствами мультиплексирования.
Наибольшие проблемы при создании эффективного конвейера
обусловлены командами, изменяющими естественный
порядок вычислений. Простейший конвейер ориентирован на линейные программы.
В нем ступень выборки извлекает команды из последовательных ячеек
памяти, используя для этого счетчик команд (СК). Адрес очередной
команды в линейной программе формируется автоматически, за счет
прибавления к содержимому СК числа, равного длине текущей команды в байтах. Реальные программы практически
никогда не бывают
линейными. В них обязательно присутствуют команды управления,
изменяющие последовательность вычислений: безусловный и условный переход, вызов процедуры, возврат из процедуры и т.п. Доля подобных команд в программе оценивается как 10…20% (по некоторым
источникам она существенно больше). Выполнение команд, изменяющих последовательность вычислений (в дальнейшем будем их назы
вать командами перехода), может приводить к приостановке конвейера
на несколько тактов, из-за чего производительность процессора снижается. Приостановки конвейера при выполнении команд перехода
обусловлены двумя факторами.
Первый фактор характерен для любой команды перехода и связан
с выборкой команды из точки перехода (по адресу, указанному в команде перехода). То,
что текущая команда относится к командам перехода, становится ясным только после декодирования (после прохождения ступени декодирования), т.е. спустя два такта от момента поступления команды на конвейер. За это время на первые ступени конвейера
уже поступят новые команды, извлеченные в предположении, что естественный порядок вычислений не будет
нарушен. В случае перехода
эти ступени нужно очистить и загрузить в конвейер команду, расположенную по адресу перехода, для чего нужен исполнительный адрес
последней. Поскольку в командах перехода обычно указаны лишь способ адресации и адресный код, исполнительный адрес предварительно
164
-

должен быть вычислен, что и делается на третьей ступени конвейера.
Таким образом, реализация перехода в конвейере требует определенных дополнительных операций, выполнение которых равносильно
остановке конвейера как минимум на два такта.
Среди ВМ, где реализован буфер цикла, можно упомянуть некоторые вычислительные машины фирмы CDC (Star 100, 6600, 7600) и
суперЭВМ CRAY-1. Специализированная версия буфера цикла имеет
ся и в микропроцессоре Motorola 68010, где он используется для особых циклов, включающих в себя команду «Уменьшение и переход по
условию».
Методы решения проблемы условного перехода. Несмотря на
важность аспекта вычисления исполнительного адреса точки перехода,
основные усилия проектировщиков ВМ направлены на решение проблемы условных переходов, поскольку именно последние приводят к
наибольшим издержкам в работе конвейера. Для устранения или частичного сокращения этих издержек были предложены различные способы, которые условно можно разделить на четыре группы:
−
буферы предвыборки;
−
множественные потоки;
−
задержанный переход;
−
предсказание перехода.
Равномерность поступления команд на вход конвейера часто нарушается, например из-за занятости памяти или при выборке команд,
состоящих из нескольких слов. Чтобы добиться ритмичности подачи
команд на вход конвейера, между ступенью выборки команды и остальной частью конвейера часто размещают буферную память, организованную по принципу очереди (FIFO) и
называемую буфером предвыборки. Буфер предвыборки можно рассматривать как несколько дополнительных ступеней конвейера. Подобное удлинение конвейера не
сказывается на его производительности (при заданной тактовой частоте); оно лишь приводит к увеличению времени прохождения команды
через конвейер. Типичные буферы предвыборки в известных процессорах рассчитаны на 2…8 команд.
Чтобы одновременно с
обеспечением ритмичной работы конвейера решить и проблему условных переходов, в конвейер включают два
таких буфера.
Каждая извлеченная из памяти и помещенная в основной буфер
команда анализируется блоком перехода. При обнаружении команды
условного перехода (УП) блок перехода вычисляет исполнительный
адрес точки перехода и параллельно с продолжением последовательной выборки в основной
буфер организует выборку в дополнительный
буфер команд, начиная с точки УП. Далее блок перехода определяет
-
165

исход команды УП, в зависимости от которого подключает к остатку
конвейера нужный буфер, при этом содержимое другого буфера сбрасывается. Упрощенный вариант подобного подхода применен в IBM
360/91, где дополнительный буфер рассчитан на одну команду, т.е.
выигрыш достигается за счет исключения времени на выборку команды из точки перехода.
Помимо необходимости
дублирования части оборудования, у метода имеется еще один недостаток. Так, если в потоке команд несколько команд УП следуют одна за другой или находятся достаточно близко, количество возможных ветвлений увеличивается и, соответственно, должно быть увеличено и число буферов предвыборки.
Другим решением проблемы переходов служит дублирование на-
чальных ступеней
конвейера и создание тем самым двух параллельных
потоков команд.
В одной из ветвей такого «раздвоенного» конвейера последовательность выборки и выполнения команд соответствует случаю, когда
условие перехода не выполнилось, во второй ветви – случаю выполнения этого условия. Оба потока сходятся в точке, где итог проверки
условия перехода становится очевидным. Дальнейшее
продвижение по
конвейеру продолжает только «правильный» поток. Основной недостаток метода состоит в том, что на конвейер или в поток может поступить
новая команда УП до того, как будет принято окончательное решение
по текущей команде перехода. Каждая такая команда требует дополнительного потока. Несмотря на это, стратегия позволяет улучшить производительность
конвейера. Примерами ВМ, где используются два или
более конвейерных потоков, служат IBM 370/168 и IBM 3033.
Стратегия задержанного перехода предполагает продолжение выполнения команд, следующих за командой УП, вне зависимости от ее
исхода. Естественно, что это имеет смысл, лишь когда последующие
команды являются «полезными», т.е. такими, которые все равно должны быть когда-
то выполнены, независимо от того, происходит переход
или нет, и если команда перехода никак не влияет на результат их выполнения.
Для реализации этой идеи на этапе компиляции программы после
каждой команды перехода вставляется команда «Нет операции». Затем
на стадии оптимизации программы производятся попытки «перемешать» команды таким образом, чтобы по
возможности большее количество команд «Нет операции» заменить «полезными» командами программы. Разумеется, замещать команду «Нет операции» можно лишь
на такую, которая не влияет на условие выполняемого перехода, иначе
полученная последовательность команд не будет функционально эквивалентной исходной. В оптимизированной программе удается заменить более 20% команд «Нет операции».
166

8.2. ПРЕДСКАЗАНИЕ ПЕРЕХОДОВ
Предсказание переходов на сегодняшний день рассматривается
как один из наиболее эффективных способов борьбы с конфликтами
по управлению. Идея заключается в том, что еще до момента выполнения команды условного перехода или сразу же после ее поступления
на конвейер делается предположение о наиболее вероятном исходе
такой команды (переход произойдет или не произойдет
). Последующие команды подаются на конвейер в соответствии с предсказанием.
При ошибочном предсказании конвейер необходимо вернуть к состоянию, с которого началась выборка «ненужных» команд (очистить начальные ступени конвейера), и приступить к загрузке, начиная с «правильной» точки, что по эффекту эквивалентно приостановке конвейера. Цена ошибки может оказаться
достаточно высокой, но при правильных предсказаниях крупен и выигрыш – конвейер функционирует
ритмично без остановок и задержек, причем выигрыш тем больше, чем
выше точность предсказания. Термин «точность предсказания» в дальнейшем будем трактовать как процентное отношение числа правильных предсказаний к их общему количеству. В работе дается следующая оценка: чтобы
снижение производительности конвейера из-за его
остановок по причине конфликтов по управлению не превысило 10%,
точность предсказания переходов должна быть выше 97,7%.
К настоящему моменту известно более двух десятков различных
способов реализации идеи предсказания переходов, отличающихся
друг от друга исходной информацией, на основании которой делается
прогноз, сложностью реализации и, главное, точностью предсказания.
При классификации схем предсказания переходов обычно выделяют
два подхода: статический и динамический, в зависимости от того, когда и на базе какой информации делается предсказание.
Статическое предсказание переходов осуществляется на основе
некоторой априорной информации о подлежащей выполнению программе. Предсказание делается на этапе компиляции программы и в
процессе вычислений уже не меняется. Главное различие между известными механизмами статического прогнозирования заключается в
виде информации, используемой для предсказания, и ее трактовке.
Исходная информация может быть получена двумя путями: на
основе
анализа кода программы или в результате ее профилирования (термин
«профилирование» поясняется ниже).
Известные стратегии статического предсказания для команд УП
можно классифицировать следующим образом:
переход происходит всегда (ПВ);
−
переход не происходит никогда (ПН);
−
предсказание определяется по результатам профилирования;
−
167

− предсказание определяется кодом операции команды перехода;
предсказание зависит от направления перехода;
−
при первом выполнении команды переход имеет место всегда.
−
В первом из перечисленных вариантов предполагается, что каждая команда условного перехода в программе обязательно завершится
переходом, и, с учетом такого предсказания, дальнейшая выборка команд производится, начиная с адреса перехода. В основе второй стратегии лежит прямо противоположный подход: ни одна из
команд условного перехода в программе никогда не завершается переходом,
поэтому выборка команд продолжается в естественной последовательности.
Динамическое предсказание переходов. В динамических стра-
тегиях решение о наиболее вероятном исходе команды УП принимается в ходе вычислений, исходя из информации о предшествующих переходах (истории переходов), собираемой в процессе выполнения программы. В целом динамические стратегии по сравнению со статическими обеспечивают более высокую точность предсказания. Прежде
чем приступить к рассмотрению конкретных
динамических механизмов предсказания переходов, остановимся на некоторых положениях,
общих для всех динамических подходов.
Идея динамического предсказания переходов предполагает накопление информации об исходе предшествующих команд УП. История
переходов фиксируется в форме таблицы, каждый элемент которой
состоит из n битов. Нужный элемент таблицы указывается с помощью
k-разрядной двоичной комбинации – шаблона (pattern). Этим
объясня-
ется общепринятое название таблицы предыстории переходов – таблица истории для шаблонов (PHT, Pattern History Table).
При описании динамических схем предсказания переходов их
часто расценивают как один из видов автоматов Мура, при этом содержимое элементов РНТ трактуется как информация, отображающая
текущее состояние автомата.
При классификации динамических стратегий обычно выделяют
следующие их виды:
одноуровневые или бимодальные;
−
двухуровневые или коррелированные;
−
гибридные;
−
асимметричные.
−
Одноуровневые схемы предсказания переходов. В многочис-
ленных исследованиях, проводившихся на самых разнообразных программах, была отмечена интересная закономерность. В поведении
многих команд условного перехода явно прослеживается тенденция
повторяемости исхода: одни команды программы, как правило, завер-
168

шаются переходом, в то время как другие – остаются без оного, т.е.
имеет место бимодальное распределение исходов. Идея одноуровневых схем предсказания, известных также под вторым названием – бимодальные схемы, сводится к отделению команд, имеющих склонность завершаться переходом, от команд, при выполнении которых
переход обычно не происходит. Такая дифференциация позволяет
для
каждой команды выбрать наиболее подходящее предсказание. Для
реализации идеи в составе схемы предсказания достаточно иметь лишь
одну таблицу, каждый элемент которой отображает историю исходов
одной команды УП. Для обращения к элементу, ассоциированному с
определенной командой УП, используется адрес этой команды (или
его младшие биты). Таким образом, одноуровневые схемы предсказания переходов можно определить как схемы, содержащие один уровень таблиц истории переходов (обычно единственную таблицу), адресуемых с помощью адреса команды условного перехода.
В первом из возможных вариантов одноуровневых схем строится
сравнительно небольшая таблица, куда заносятся адреса последних
команд УП, при выполнении которых переход не случился. В сущности, это
ранее упоминавшийся буфер адресов перехода (ВТВ), но с
противоположным правилом занесения информации (фиксируются
адреса команд, завершившихся без перехода). Таблица обычно реализуется на базе ассоциативной кэш-памяти. При поступлении на конвейер очередной команды УП ее адрес сравнивается с адресами, хранящимися в таблице. При совпадении делается предположение о том,
что перехода не будет, в противном случае предсказывается переход.
С этих позиций для каждой новой команды УП по умолчанию принимается, что переход произойдет. После того как фактический исход
становится очевидным, содержимое таблицы корректируется. Если
команда завершилась переходом, соответствующая запись из таблицы
удаляется. Если же перехода не было, то адрес команды
заносится в
таблицу при условии, что до этого он там отсутствовал. При заполнении таблицы опираются на алгоритмы LRU или FIFO. По точности
предсказания стратегия превосходит большинство стратегий статического предсказания.
Вторая схема ориентирована на то, что команды программы извлекаются из кэш-памяти команд. Каждая ячейка кэш-памяти содержит дополнительный
разряд, который используется только применительно к командам условного перехода. Состояние разряда отражает
исход предыдущего выполнения команды (1 – переход был, 0 – перехода не было). Новое предсказание совпадает с результатом предшествующего выполнения данной команды. При занесении такой команды
в кэш-память рассматриваемый разряд устанавливается в единицу. Это
напоминает стратегию «при первом выполнении
переход обязательно
169

происходит» с той лишь разницей, что первое предсказание, хотя и
носит статический характер, происходит в ходе заполнения кэшпамяти, т.е. динамически. После выполнения команды состояние дополнительного бита корректируется: если переход имел место, в него
заносится единица, а в противном случае – ноль.
Главный ее недостаток заключается в дополнительных затратах
времени
на обновление состояния контрольного разряда в кэш-памяти
команд.
Двухуровневые схемы предсказания переходов. Одноуровне-
вые схемы предсказания ориентированы на те команды УП, очередной
исход которых существенно зависит от их собственных предыдущих
исходов. В то же время для многих команд программы наблюдается
сильная зависимость не от собственных исходов, а от результатов выполнения других предшествующих им команд УП. Это обстоятельство
призваны учесть двухуровневые адаптивные
схемы предсказания переходов. Такие схемы часто называют коррелированными, подчеркивая тот факт, что они отражают взаимозависимость команд условного
перехода.
В коррелированных схемах предсказания переходов выделяются
два уровня таблиц. В роли таблицы первого уровня может выступать
регистр глобальной истории (GHR), и тогда двухуровневую схему
предсказания называют глобальной. В качестве таблицы первого уров
ня может также быть взят массив регистров локальной истории (LHR),
где отдельный регистр отражает последовательность последних исходов одной команды УП. Такая схема предсказания носит название локальной. Каждый элемент таблицы второго уровня служит для хранения истории переходов отдельной команды УП. Таблица второго
уровня обычно состоит из двухразрядных счетчиков и
организована в
виде матрицы. Содержимое счетчика команд (адрес команды УП) определяет один из регистров в таблице первого и одну строку в таблице
второго уровня. В свою очередь, кодовая комбинация (шаблон), хранящаяся в выбранном регистре таблицы первого уровня, определяет
нужный счетчик в указанном ряду таблицы второго уровня. Выбранный счетчик
используется для формирования предсказания. После вы-
полнения команды содержимое регистра и счетчика обновляется.
Из описания логики двухуровневого предсказания следует, что
выбор нужного счетчика обусловливается двумя источниками – адресом команды, для которой делается предсказание, и шаблоном, отражающим историю предшествующих переходов. Того же эффекта можно добиться при помощи схемы двухразрядного
бимодального предиктора, если для доступа к ВНТ использовать шаблон, сформированный
путем сложения по модулю 2.
170
-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
