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

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

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Гибридные схемы предсказания переходов. Для всех ранее рас-
смотренных стратегий характерна сильная зависимость точности пред­сказания от особенностей программ, в рамках которых эти стратегии реализуются. Та же самая схема, прекрасно проявляя себя с одними программными продуктами, с другими может давать совершенно не­удовлетворительные результаты. Кроме того, необходимо учитывать еще один фактор. Прежде уже отмечалось,
что точность предсказания повышается с увеличением глубины предыстории переходов, но про­исходит это лишь после накопления соответствующей информации, на что требуется определенное время. Период накопления предыстории принято называть временем «разогрева». Пока идет «разогрев», точ­ность предсказания весьма низка. Иными словами, ни одна из элемен­тарных стратегий предсказания переходов не является универсальной
со всех сторон лучшей в любых ситуациях. Гибридные или соревнова­тельные схемы объединяют в себе несколько различных механизмов предсказания – элементарных предикторов. Идея состоит в том, чтобы в каждой конкретной ситуации задействовать тот элементарный пре­диктор, от которого в данном случае можно ожидать наибольшей точ­ности предсказания.
Гибридная схема предсказания переходов
содержит два элемен­тарных предиктора, отличающихся по своим характеристикам (разме­ром таблиц предыстории и временем «разогрева») и работающих неза­висимо друг от друга. Выбор предиктора, наиболее подходящего в данной ситуации, обеспечивается селектором, представляющим собой таблицу двухразрядных счетчиков, которые часто называют счетчика­ми выбора предиктора.
Адресация конкретного счетчика в таблице (индексирование)
осуществляется
k младшими разрядами адреса команды условного перехода, для которой осуществляется предсказание. Обновление таб­лиц истории в каждом из предикторов производится обычным обра­зом, как это происходит при их автономном использовании. В свою очередь, изменение состояния счетчиков селектора выполняется по следующим правилам. Если оба предиктора одновременно дали оди­наковое предсказание (верное или
неверное), содержимое счетчика не изменяется. При правильном предсказании от первого предиктора и неверном от второго содержимое счетчика увеличивается, а в проти­воположном случае – уменьшается на единицу. Выбор предиктора, на основании которого делается результирующая оценка, реализуется с помощью мультиплексора, управляемого старшим разрядом соответ­ствующего счетчика селектора.
По имеющимся оценкам, точность предсказания переходов
с по­мощью гибридных стратегий в среднем составляет 97,13%, что суще­ственно выше по сравнению с прочими вариантами.
171
Асимметричная схема предсказания переходов. Асимметрич-
ная схема сочетает в себе черты гибридных и коррелированных схем предсказания. От гибридных схем она переняла одновременное сраба­тывание нескольких различных элементарных предикторов. В асим­метричной схеме таких предикторов три, и каждый из них использует собственную таблицу РНТ. Для доступа к таблицам, аналогично кор­релированным схемам, используется как адрес
команды условного
перехода, так и содержимое регистра глобальной истории.
Шаблон для обращения к каждой из трех РНТ формируется по­разному (применены различные функции хэширования). При выпол­нении команды условного перехода каждый из трех предикторов вы­двигает свое предположение, но окончательное решение принимается по мажоритарной схеме. После завершения команды условного пере­хода
содержимое всех трех таблиц обновляется.
Правильный подбор алгоритмов хэширования позволяет практи­чески исключить влияние на точность предсказания эффекта наложе­ния. Средняя точность предсказания с помощью асимметричной схемы составила 72,6%.
8.3. СУПЕРКОНВЕЙЕРНЫЕ ПРОЦЕССОРЫ
Эффективность конвейера находится в прямой зависимости от того, с какой частотой на его вход подаются объекты обработки. Добиться n-кратного увеличения темпа работы конвейера можно двумя путями:
разбиением каждой ступени конвейера на n «подступеней»
при одновременном повышении тактовой частоты внутри конвейера также в n раз;
включением в состав процессора n конвейеров, работающих с
перекрытием.
В сущности, суперконвейеризация сводится к увеличению коли­чества ступеней конвейера как за счет добавления новых ступеней, так и путем дробления имеющихся ступеней на несколько простых под­ступеней. Главное требование – возможность реализации операции в каждой подступени наиболее простыми техническими средствами, а значит, с минимальными
затратами времени. Вторым, не менее важ-
ным, условием является одинаковость задержки во всех подступенях.
Критерием для причисления процессора к суперконвейерным служит число ступеней в конвейере команд. К суперконвейерным от­носят процессоры, где таких ступеней больше шести. Первым серий­ным суперконвейерным процессором считается MIPS R4000, конвейер команд которого включает в себя восемь ступеней.
Суперконвейериза­ция здесь стала следствием разбиения этапов выборки команды и вы­борки операнда, а также введения в конвейер дополнительного этапа
172
проверки тега, появление которой обусловлено архитектурой системы команд машины.
Выигрыш, достигаемый за счет суперконвейеризации, на практи­ке может оказаться лишь умозрительным. Удлинение конвейера ведет не только к усугублению проблем, характерных для любого конвейера, но и возникновению дополнительных сложностей. В длинном конвей­ере возрастает вероятность конфликтов. Дороже встает ошибка пред­сказания перехода
– приходится очищать большее число ступеней конвейера, на что требуется больше времени. Усложняется логика взаимодействия ступеней конвейера. Тем не менее создателям ВМ удается успешно справляться с большинством из перечисленных про­блем, свидетельством чего служит неуклонное возрастание числа сту­пеней в конвейерах команд современных процессоров.
8.3.1. АРХИТЕКТУРЫ С ПОЛНЫМ И СОКРАЩЕННЫМ НАБОРОМ
КОМАНД
Современная технология программирования ориентирована на языки высокого уровня (ЯВУ), главная задача которых – облегчить процесс написания программ. Более 90% всего процесса программиро­вания осуществляют на ЯВУ. К сожалению, операции, характерные для ЯВУ, отличаются от операций, реализуемых машинными коман­дами. Эта проблема получила название семантического разрыва и ве­дет она к недостаточно эффективному выполнению
программ. Пыта­ясь преодолеть семантический разрыв, разработчики ВМ расширяют систему команд, дополняя ее командами, реализующими сложные операторы ЯВУ на аппаратурном уровне, вводят дополнительные ви­ды адресации и т.п. Вычислительные машины, где реализованы эти средства, принято называть ВМ с полным набором команд (CISC – Complex Instruction Set Computer). К типу CISC можно отнести прак­тически все ВМ
, выпускавшиеся до середины 1980-х годов и значи-
тельную часть из выпускаемых в настоящее время.
Характерные для CISC способы решения проблемы семантиче­ского разрыва вместе с тем ведут к усложнению архитектуры ВМ, главным образом устройства управления, что, в свою очередь, нега­тивно сказывается на производительности в целом. Кроме того, в CISC очень сложно
организовать эффективный конвейер команд, который, как уже отмечалось, является одним из наиболее перспективных путей повышения производительности ВМ. Все это заставило более внима­тельно проанализировать программы, получаемые после компиляции с ЯВУ. Был предпринят комплекс исследований, в результате которых обнаружились интересные закономерности.
173
− Реализация сложных команд, эквивалентных операторам ЯВУ,
требует увеличения емкости управляющей памяти в микропрограмм­ном УУ. Микропрограммы сложных команд могут занимать до 60% управляющей памяти, в то время как их доля в общем объеме про­граммы зачастую не превышает 0,2%.
В откомпилированной программе операторы ЯВУ реализуют-
ся в виде процедур (подпрограмм), поэтому на операции вызова про­цедуры и возврата из нее приходится от 15 до 45% вычислительной нагрузки.
При вызове процедуры вызывающая программа передает этой
процедуре некоторое количество аргументов. В 98% случаев число передаваемых аргументов не превышает шести. Примерно такое же положение сложилось и с параметрами, которые процедура возвраща­ет вызывающей программе. Более 80% переменных, используемых программой, являются локальными, т.е. создаются при входе в проце­дуру и уничтожаются при выходе
из нее. Количество локальных пере­менных, создаваемых отдельной процедурой, в 92% случаев не пре­вышает шести.
Почти половину операций в ходе вычислений составляет опе-
рация присваивания, сводящаяся к пересылке данных между регистра­ми, ячейками памяти или регистрами и памятью.
Детальный анализ результатов исследований привел к серьезному пересмотру традиционных архитектурных решений, следствием чего стало появление архитектуры с сокращенным набором команд (RISC –
Reduced Instruction Set Computer).
8.3.2. ОСНОВНЫЕ ЧЕРТЫ RISC-АРХИТЕКТУРЫ
Главные усилия в архитектуре RISC направлены на построение максимально эффективного конвейера команд, т.е. такого, где все ко­манды извлекаются из памяти и поступают в ЦП на обработку в виде равномерного потока, причем ни одна команда не должна находиться в состоянии ожидания, а ЦП должен оставаться загруженным на протя­жении всего времени
. Кроме того, идеальным будет вариант, когда любой этап цикла команды выполняется в течение одного тактового периода.
Последнее условие относительно просто можно реализовать для этапа выборки. Необходимо лишь, чтобы все команды имели стан­дартную длину, равную ширине шины данных, соединяющей ЦП и память. Унификация времени исполнения для различных команд – значительно более
сложная задача, поскольку наряду с регистровыми
существуют также команды с обращением к памяти.
174
Помимо одинаковой длины команд, важно иметь относительно простую подсистему декодирования и управления: сложное устройст­во управления (УУ) будет вносить дополнительные задержки в фор­мирование сигналов управления. Очевидный путь существенного уп­рощения УУ – сокращение числа выполняемых команд, форматов ко­манд и данных, а также видов адресации.
Излишне напоминать, что в сокращенном списке
команд должны оставаться те, которые используются наиболее часто. Исследования показали, что 80…90% времени выполнения типовых программ при­ходится на относительно малую часть команд (10…20%). К наиболее часто востребуемым действиям относятся пересылка данных, арифме­тические и логические операции. Основная причина, препятствующая сведению всех этапов цикла команды к одному тактовому периоду, – потенциальная необходимость доступа
к памяти для выборки операн­дов и/или записи результатов. Следует максимально сократить число команд, имеющих доступ к памяти. Это соображение добавляет к ра­нее упомянутым принципам RISC еще два:
доступ к памяти во время исполнения осуществляется только
командами «Чтение» и «Запись»;
все операции, кроме «Чтение» и «Запись», имеют тип «ре-
гистр-регистр».
Для упрощения выполнения большинства команд и приведения их к типу «регистр-регистр» требуется снабдить ЦП значительным числом регистров общего назначения. Большое число регистров в регистровом файле ЦП позволяет обеспечить временное хранение промежуточных результатов, используемых как операнды в последующих операциях, и ведет к уменьшению числа обращений к памяти, ускоряя выполнение операций. Минимальное число регистров, равное 32, принято как стан­дарт де-факто большинством производителей RISC-компьютеров.
Суммируя сказанное, концепцию RISC-компьютера можно свести к следующим положениям:
выполнение всех (или по крайней мере 75% команд) за один
цикл;
стандартная однословная длина всех команд, равная естест-
венной длине слова и ширине шины данных и допускающая унифици­рованную поточную обработку всех команд;
малое число команд (не более 128);
малое количество форматов команд (не более 4);
малое число способов адресации (не более 4);
доступ к памяти только посредством команд «Чтение» и
«Запись»;
все команды, за исключением «Чтения» и «Записи», исполь-
зуют внутрипроцессорные межрегистровые пересылки;
175
устройство управления «жесткой» логикой;
относительно большой (не менее 32) процессорный файл ре-
гистров общего назначения. Число РОН в современных RISC-микро­процессорах может превышать 500.
Регистры в RISC-процессорах. Отличительная черта RISC-архи-
тектуры – большое число регистров общего назначения, что объясняется стремлением свести все пересылки к типу «регистр-регистр». Но увели­чение числа РОН способно дать эффект лишь при разумном их исполь­зовании. Оптимизация использования регистров в RISC-процессорах обеспечивается как программными, так и аппаратными средствами.
Программная оптимизация выполняется на этапе компиляции программы, написанной на ЯВУ. Компилятор стремится так распреде­лить регистры процессора, чтобы разместить в них те переменные, которые в течение заданного периода времени будут использоваться наиболее интенсивно.
На начальном этапе компилятор выделяет каждой переменной виртуальный регистр. Число виртуальных регистров в принципе не ограничено. Затем компилятор отображает виртуальные регистры на ограниченное
количество физических регистров. Виртуальные регист­ры, использование которых не перекрывается, отображаются на один и тот же физический регистр. Если в определенном фрагменте програм­мы физических регистров не хватает, то их роль для оставшихся вир­туальных регистров выполняют ячейки памяти. В ходе вычислений содержимое каждой такой ячейки с помощью команды «Чтение» вре менно засылается в регистр, после чего командой «Запись» вновь воз­вращается в ячейку памяти.
Задача оптимизации состоит в определении того, каким перемен­ным в данной точке программы выгоднее всего выделить физические регистры. Наиболее распространенный метод, применяемый для этой цели, известен как раскраска графа. В общем случае метод формули­руется следующим
образом. Имеется граф, состоящий из узлов и ре­бер. Необходимо раскрасить узлы так, чтобы соседние узлы имели разный цвет и чтобы при этом общее количество привлеченных цветов было минимальным. В нашем случае роль узлов выполняют виртуаль­ные регистры. Если два виртуальных регистра одновременно присут­ствуют в одном и том же фрагменте
программы, они соединяются реб­ром. Делается попытка раскрасить граф в n цветов, где n – число физи­ческих регистров. Если такая попытка не увенчалась успехом, то уз­лам, которые не удалось раскрасить, вместо физических регистров выделяются ячейки в памяти.
Аппаратная оптимизация использования регистров в RISC-про­цессорах ориентирована на сокращение затрат времени при работе процедурами. Наибольшее время в программах, написанных на ЯВУ,
176
-
с
расходуется на вызовы процедур и возврат из них. Связано это с соз­данием и обработкой большого числа локальных переменных и кон­стант. Одним из механизмов для борьбы с этим эффектом являются так называемые регистровые окна. Главная их задача – упростить и ускорить передачу параметров от вызывающей процедуры к вызывае­мой и обратно
.
Регистровый файл разбивается на группы регистров, называемые окнами. Отдельное окно назначается глобальным переменным. Гло­бальные регистры доступны всем процедурам, выполняемым в систе­ме в любое время. С другой стороны, каждой процедуре выделяется отдельное окно в регистровом файле. Все окна имеют одинаковый размер (обычно по 32 регистра) и состоят из трех полей.
Левое поле каждого регистрового окна одновременно является и правым полем предшествующего ему окна. Среднее поле служит для хранения ло­кальных переменных и констант процедуры.
База окна (первый в последовательности регистров окна) указы­вается полем, называемым указателем текущего окна (CWP, Current Window Pointer), обычно расположенным в регистре (слове) состоя­ния ЦП. Если текущей процедуре назначено
регистровое okho j, CWP
содержит значение j.
Каждой вновь вызванной процедуре выделяется регистровое ок­но, непосредственно следующее за окном вызвавшей ее процедуры. Последние k регистров окна j одновременно являются первыми k реги­страми окна j + 1. Если процедура, занимающая okho j, обращается к процедуре, которой в данной архитектуре должно быть назначено okho j + 1, она может передать в процессе вызова k аргументов.
Упомянутые k регистров сразу
же будут доступны вызванной процедуре без всяких пересылок. Естественно, вызов приведет к уве­личению содержимого поля CPW на единицу.
Глубина вложения процедур одна в другую может быть весьма велика, и желательно, чтобы количество регистровых окон не было сдерживающим фактором. Это достигается за счет организации окон в виде циклического буфера.
Преимущества и недостатки RISC. Сравнивая достоинства и
недостатки CISC и RISC, невозможно сделать однозначный вывод о неоспоримом преимуществе одной архитектуры над другой. Для от­дельных сфер использования ВМ лучшей оказывается та или иная. Тем не менее ниже приводится основная аргументация «за» и «против» RISC-архитектуры.
Для технологии RISC характерна сравнительно простая структура устройства управления. Площадь, выделяемая на кристалле
микросхе­мы для реализации УУ, существенно меньше. Так, в RISC I она со­ставляет 6%, а в RISC II – 10%. Как следствие, появляется возмож-
177
ность разместить на кристалле большое число регистров ЦП (138 в RISC II). Кроме того, остается больше места для других узлов ЦП и
для дополнительных устройств: кэш-памяти, блока арифметики с пла­вающей запятой, части основной памяти, блока управления памятью, портов ввода/вывода.
Унификация набора команд, ориентация на потоковую конвейер-
ную обработку, унификация размера
команд и длительности их вы­полнения, устранение периодов ожидания в конвейере – все эти фак­торы положительно сказываются на общем быстродействии. Простое устройство управления имеет немного вентилей и, следовательно, ко­роткие линии связи для прохождения сигналов управления. Малое число команд, форматов и режимов приводит к упрощению схемы де­кодирования, и оно происходит
быстрее. Применяемое в RISC УУ с
«жесткой» логикой быстрее микропрограммного. Высокой производи-
тельности способствует и упрощение передачи параметров между процедурами. Таким образом, применение RISC ведет к сокращению времени выполнения программы или увеличению скорости, за счет сокращения числа циклов на команду.
Простота УУ, сопровождаемая снижением стоимости и повыше-
нием надежности, также говорит в
пользу RISC. Разработка УУ зани­мает меньше времени. Простое УУ будет содержать меньше конструк­тивных ошибок и поэтому более надежно.
Многие современные CISC-машины, такие как VAX 11/780, VAX-8600, имеют много средств для прямой поддержки функций ЯВУ, наиболее частых в этих языках (управление процедурами, опера­ции с массивами, проверка индексов массивов, защита информации, управление памятью
и т.д.). RISC также обладает рядом средств для непосредственной поддержки ЯВУ и упрощения разработки компиля­торов ЯВУ, благодаря чему эта архитектура в плане поддержки ЯВУ ни в чем не уступает CISC.
Недостатки RISC прямо связаны с некоторыми преимуществами этой архитектуры. Принципиальный недостаток – сокращенное число команд: на выполнение ряда функций приходится тратить несколько команд вместо одной в CISC. Это удлиняет код программы, увеличи­вает загрузку памяти и трафик команд между памятью и ЦП. Недавние исследования показали, что RISC-программа в среднем на 30% длин­нее CISC-программы, реализующей те же функции.
Хотя большое число регистров дает существенные преимущества, само по себе оно усложняет схему декодирования номера регистра,
самым увеличивается время доступа к регистрам.
тем
УУ с «жесткой» логикой, реализованное в большинстве RISC­систем, менее гибко, более склонно к ошибкам, затрудняет поиск и исправление ошибок, уступает при выполнении сложных команд.
178
Однословная команда исключает прямую адресацию для полного 32-битового адреса. Поэтому ряд производителей допускают неболь-
шую часть команд двойной длины, например в Intel 80960.
Поскольку возможности по совершенствованию элементной базы уже практически исчерпаны, дальнейшее повышение производитель­ности ВМ лежит в плоскости архитектурных решений. Как уже отме­чалось, один из наиболее эффективных подходов в этом плане – вве­дение в вычислительный процесс различных уровней параллелизма. Ранее рассмотренный конвейер команд – типичный пример такого подхода. Тем же целям служат вейеризации подвергается процесс выполнения арифметических опе­раций. Дополнительный уровень параллелизма реализуется в вектор­ных и матричных процессорах, но только при обработке многокомпо­нентных операндов типа векторов и массивов. Здесь высокое быстро­действие достигается за счет одновременной обработки всех компо­нентов вектора или массива, однако подобные лишь для достаточно узкого круга решаемых задач. Основной объем вычислительной нагрузки обычно приходится на скалярные вычисле­ния, т.е. на обработку одиночных операндов, таких, например, как це­лые числа. Для подобных вычислений дополнительный параллелизм реализуется значительно сложнее, но тем не менее возможен и приме­ром могут служить суперскалярные процессоры
Суперскалярным (этот термин впервые был использован в 1987 году) называется центральный процессор (ЦП), который одно­временно выполняет более чем одну скалярную команду. Это достига­ется за счет включения в состав ЦП нескольких самостоятельных функциональных (исполнительных) блоков, каждый из которых отве­чает за свой класс операций и может присутствовать в процессоре в нескольких экземплярах. Так, в микропроцессоре Pentium III блоки целочисленной арифметики и операций с плавающей точкой дублиро­ваны, а в микропроцессорах Pentium 4 и Athlon – троированы.
Блок выборки команд извлекает команды из основной памяти че­рез кэш-память команд. Этот блок хранит несколько значений счетчи­ка команд и обрабатывает команды условного перехода.
Блок декодирования расшифровывает код щийся в извлеченных из кэш-памяти командах. В некоторых суперска­лярных процессорах, например в микропроцессорах фирмы Intel, бло­ки выборки и декодирования совмещены.
Блоки диспетчеризации и распределения взаимодействуют между собой и в совокупности играют в суперскалярном процессоре роль
8.4. СУПЕРСКАЛЯРНЫЕ ПРОЦЕССОРЫ
и арифметические конвейеры, где кон-
операнды характерны
.
операции, содержа-
179
контроллера трафика. Оба блока хранят очереди декодированных ко­манд. Очередь блока распределения часто рассредоточивается по не­сколько самостоятельным буферам – накопителям команд или схемам резервирования (reservation station), – предназначенным для хранения команд, которые уже декодированы, но еще не выполнены. Каждый накопитель команд связан со своим функциональным блоком (ФБ), поэтому число накопителей обычно равно числу ФБ
, но если в процес­соре используется несколько однотипных ФБ, то им придается общий накопитель. По отношению к блоку диспетчеризации накопители ко­манд выступают в роли виртуальных функциональных устройств. В некоторых суперскалярных процессорах они объединены в единую очередь.
В дополнение к очереди, блок диспетчеризации хранит также спи-
сок свободных функциональных блоков,
называемый табло (Scoreboard). Табло используется для отслеживания состояния очереди распределе­ния. Один раз за цикл блок диспетчеризации извлекает команды из своей очереди, считывает из памяти или регистров операнды этих ко­манд, после чего, в зависимости от состояния табло, помещает коман­ды и значения операндов в очередь распределения. Эта операция на­зывается выдачей
команд. Блок распределения в каждом цикле прове­ряет каждую команду в своих очередях на наличие всех необходимых для ее выполнения операндов и при положительном ответе начинает выполнение таких команд в соответствующем функциональном блоке.
Блок исполнения состоит из набора функциональных блоков. При­мерами ФБ могут служить целочисленные операционные блоки, блоки умножения
и сложения с плавающей запятой, блок доступа к памяти. Когда исполнение команды завершается, ее результат записывается и анализируется блоком обновления состояния, который обеспечивает учет полученного результата теми командами в очередях распределения, где этот результат выступает в качестве одного из операндов.
Как было отмечено ранее, суперскалярность предполагает парал-
лельную работу максимального числа
исполнительных блоков, что возможно лишь при одновременном выполнении нескольких скаляр­ных команд. Последнее условие хорошо сочетается с конвейерной об­работкой, при этом желательно, чтобы в суперскалярном процессоре было несколько конвейеров, например два или три.
Подобный подход реализован в микропроцессоре Intel Pentium,
где имеются два конвейера, каждый со своим АЛУ. Отметим, что
в отличие от стандартного конвейера, в каждом цикле необхо-
здесь, димо производить выборку более чем одной команды. Соответственно, память ВМ должна допускать одновременное считывание нескольких команд и операндов, что чаще всего обеспечивается за счет ее модуль­ного построения.
180
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]