Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по ВС.doc
Скачиваний:
268
Добавлен:
22.03.2016
Размер:
1.1 Mб
Скачать

5.7 Методы и средства повышения производительности процессоров персональных компьютеров

Принципы, на которых строится работа процессора, рассмотрены выше. Эти принципы предполагают строго последовательное выполнение всех операций. Но такой процессор не может обладать большой производительностью из-за последовательного характера выполнения операций. Поэтому в современных компьютерах используют множество приемов, призванных повысить производительность компьютеров – от использования средств низкоуровневого параллелизма до построения многопроцессорных и многомашинных систем. В этой главе остановимся на некоторых наиболее распространенных методах повышения производительности процессоров, находящих применение в персональных компьютерах. К числу этих методов относятся:

конвейерная обработка,

суперскалярная обработка,

переименование регистров,

динамическое прогнозирование условных переходов,

сопроцессирование.

Конвейерная обработка информации

Конвейеризация команд – это один из признанных принципов повышения производительности компьютера. Он находит применение не только в персональных компьютерах, но и в ЭВМ общего назначения. Для выполнения любой команды необходимо устройство, осуществляющее действия в соответствии с ее кодом операции. Для ускорения обработки это устройство выполняют в виде нескольких ступеней, или фаз, причем на каждой ступени производится лишь определенная часть обработки команды. Это так называемый метод конвейерной обработки команд: в каждый момент времени на конвейерном процессоре обрабатывается несколько команд, причем все они находятся на разных стадиях обработки. Приход очередного тактового импульса приводит к перемещению обрабатываемых команд на следующую ступень конвейера, полностью выполненная команда покидает конвейер, а на освободившуюся первую ступень подается новая команда.

Это конвейер команд. Он состоит из множества ступеней (так конвейер в одной из последних моделей процессора PentiumIYсостоит из 31 ступеней, а в процессореAMD– из 14), однако для наглядности и простоты изложения мы рассмотрим работу синхронного конвейера, состоящего из пяти ступеней, см. рисунок 5.х. Такие конвейеры были характерны для многих процессоров персональных компьютеров недалекого прошлого.

Выполнение типичной арифметической команды в пятиступенчатом конвейере можно разделить на пять этапов:

  • выборка команды,

  • декодирование кода операции,

  • выборка операндов (из регистров),

  • собственно выполнение операции,

  • запоминание результата.

При последовательном выполнении команд для реализации программы, состоящей из k команд, потребуется 5k тактов, а если их выполнять в конвейере, то всего (5 + k) тактов. Таким образом, пятиступенчатый конвейер обеспечивает ускорение при выполнении программы в 5k/(5 + k) раз, но это происходит только при его полной загрузке.

Любые команды в таком конвейере выполняются за пять тактов, но результаты очередной команды появляются в каждом такте, если не учитывать время загрузки и выполнение команды переходов. Результат любой команды будет сформирован только на последней пятой ступени конвейера, т.е. через 5T (здесь T означает период между приходом тактовых сигналов) после загрузки команды в конвейер. За это время в конвейер поступит еще четыре команды, этот процесс иллюстрируется на рисунке 5.х.

Запись результата

Последняя, пятая ступень конвейера; готовый результат

заносится в память или регистры.

Исполнение

На четвертой ступени происходит выполнение операции,

в соответствии с кодом операции.

Выборка операндов результата

Выбираются операнды, участвующие в выполнении

операции, и передаются в регистры процессора.

Декодирование

На второй ступени кода операции преобразуется в

формат внутренних команд.

Выборка команды

Первая ступень конвейера; код команды заносится в

буферные регистры предварительной выборки.

Рисунок 5.х Выполнение команд в пятиступенчатом конвейере

Если же эта первая команда является командой перехода, то следующие четыре уже загруженные в конвейер и начавшие выполнение команды могут оказаться ненужными. Команда перехода нарушает линейный порядок следования команд и требует перезагрузки конвейера. Таким образом, команды переходов снижают эффективность конвейерной обработки, приводя к приостановкам конвейера. Чем больше команд перехода, тем чаще возникает перезагрузка конвейера и тем меньше производительность.

Пусть m – число ступеней командного конвейера, а n – среднее число команд между двумя соседними командами переходов (средняя длина линейного участка программы). Тогда выполнение этого линейного участка с помощью конвейера команд завершится за время

Tk = TН + TО.

Здесь TН - длительность загрузки конвейера, а TО - длительность обработки. Считая, что длительность загрузки завершается за один такт, а линейныйучасток программы выполняется в конвейере за n/m тактов, эффективность конвейера (отношение времени выполнения программы в конвейере ко времени последовательного выполнения той же программы Tn в обычном процессоре) можно оценить как

Tk/ Tn = (1/n + 1/m).

На каждой ступени такого конвейера выполняемые действия завершаются за разное время, поэтому подготовленные на одной из ступеней результаты для поддержания синхронного принципа работы должны ожидать завершения обработки на другой. Следовательно, тактовая частота работы конвейера выбирается так, чтобы завершить выполнение действий на самой продолжительной фазе операции. По этой причине, а также из-за необходимости передавать частичные результаты между различными ступенями конвейера его предельное ускорение будет несколько меньше количества фаз.

Построив длинный конвейер, состоящий из большего числа ступеней, можно еще больше увеличить быстродействие процессора. В длинном конвейере сокращается число вентилей на каждой ступени, поскольку она становится проще, и повышается тактовая частота. Каждая команда разбивается на большее число более коротких фаз, что приводит к незначительному увеличению времени ожидания результатов первой команды, но сокращает время ожидания результатов очередной команды. Однако в таких длинных конвейерах, если приостанавливается выполнение какой-либо команды, то выполнение всех следующих за ней команд также приостанавливается; кроме того, не всякую операцию можно разбить на достаточно большое число независимых фаз. Это вызывает возникновение «пустых» фаз, на которых обработка команды не производится, что значительно снижает производительность такого конвейера.