Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архитектура ЭВМ и систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
дируется предыдущая очередь или пока не переполнится следующая очередь. Если емкость буферной памяти достаточно велика, различия во времени обработки не сказываются на производительности, тем не менее желательно, чтобы средняя длительность обработки во всех ФБ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
-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]