Опережающая выборка и конвейеризация выполнения команд

В качестве примера рассмотрим возможность повышения производительности компьютера за счет использования в его архитектуре конвейерной обработки команд выполняемой программы.

Цикл выполнения команды процессором можно представить в виде последовательного выполнения следующих частных операций.

  • 1. Извлечение команды (ИК) — чтение из ячейки оперативной памяти, адрес которой определяется содержимым регистра — счетчика команд, кода следующей выполняемой команды и передача его в регистр команд процессора.
  • 2. Декодирование команды (ДК) — расшифровка кода операции и спецификаторов операндов в устройстве управления процессором.
  • 3. Вычисление адресов операндов (АО) — вычисление исполнительных адресов всех операндов источников. При вычислении адресов учитываются заданные режимы адресации операндов.
  • 4. Извлечение операндов (ИО) — извлечение всех операндов-источников из оперативной памяти.
  • 5. Выполнение команды (ВК) — выполнение над выбранными операндами операции, заданной кодом операции в команде.
  • 6. Запись результата в память (ЗР) — запись результата выполнения команды в ячейке оперативной памяти.

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

Для реализации конвейера команд в процессоре выделяются соответственные аппаратные исполнительные элементы для выполнения каждой из перечисленных выше частных операций цикла выполнения команд (рис. 15.3), которые осуществляют последовательную обработку команды.

Этот конвейер работает следующим образом (рис. 15.4).

Операционные элементы конвейера команд

Рис. 15.3. Операционные элементы конвейера команд

Работа конвейера команд

Рис. 15.4. Работа конвейера команд

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

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

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

И тем не менее использование в архитектуре процессора средств конвейеризации для опережающей выборки команд дает существенный выигрыш в эффективности выполнения программ и широко используется в современных процессорах.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >