8086.ru2. Организация памяти ЭВМ → 2.4 Процессоры с конвейеризацией команд

2.4 Процессоры с конвейеризацией команд

При последовательном выполнении командный цикл процессора в общем случае включает следующие этапы:

  1. Выборка команды IF.
  2. Декодирование команды и вычисление эффективного адреса D.
  3. Формирование физического адреса операнда - преобразование логического адреса в физический OA.
  4. Выборка операнда из ОП OF.
  5. Выполнение команды в АЛУ EX.
  6. Запись результата S.

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

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

Наиболее эффективно конвейер работает, если времена выполнения на каждой стадии командного цикла равны (синхронный принцип управления от 1 до n тактов на каждой стадии). Если же имеется некоторый разброс по времени, то его можно устранить, установив:

  • в требуемых местах буферы, что обеспечивает сохранность информации для передачи на следующую еще занятую обработкой ступень;
  • для каждой ступени осведомительные триггеры занятости и переход от одной ступени к другой будет выполняться только при условии, что обработка информации на предыдущей ступени завершена;
  • на каждой ступени при наличии своего УУ можно обеспечить синхронно-асинхронный принцип управления, при котором короткие микрокоманды выполняются за один такт, а длинные - за 2-3 такта работы УУ, однако УУ всех ступеней конвейера должны работать на единой опорной частоте задающего ГИ, а суммарное время выполнения микрокоманд на каждой ступени должно быть одинаковым.

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

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

Количество стадий (уровней) конвейеризации может быть различным и зависит от структуры процессора, максимального и минимального количества микрокоманд в командном цикле процессора, времени выполнения каждой микрокоманды и т.д. Необходимо обеспечить главное условие, чтобы время выполнения участка микропрограммы на каждой ступени было одинаковым.

Работа конвейера команд может быть нарушена по многим причинам, которые можно разделить на две группы:

  • приводящие к приостановке выполнения преобразований на следующей ступени конвейера;
  • приводящие к возобновлению работы конвейера, начиная с первой ступени.

К первой группе причин относятся:

  1. При необходимости использования результата операции, полученного в результате выполнения текущей команды, в следующей команде.
  2. Определение адреса операнда в некоторой команде с помощью предыдущей команды.
  3. Необходимость блочной (строковой) пересылки из ОП в кэш-память, если в последней отсутствует команда или операнд.
  4. Наложение стадий выборки команды, операнда и/или записи результата, т.е. возникновение конфликтов при доступе к памяти.
  5. Выполнение слишком длинных операций в АЛУ, требующих времени больше, чем для одного этапа преобразования команды и т.п. для других видов преобразований в процессоре.

Ко второй группе причин относятся:

  1. Изменение последовательности выполнения команд для команд условного и безусловного перехода, вызова подпрограмм и т.д.
  2. Возникновение прерываний как аппаратных (внешних и внутренних), так и программных.

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

Причины первой группы легко устранить, если:

  • пересылать некоторые данные отдельно от основного потока кратчайшим путем к местам, где они требуются (причины 1, 2);
  • установить буферы (3, 5);
  • разделить память (память программ и память данных, кэш-память программ и кэш-память данных, использование памятей с двухсторонним и многосторонним доступом) (4);
  • использовать регистровый файл по назначению и отложенной записи в ОП результата вычислений (4).
  • причину 5 можно устранить путем мультиплексирования АЛУ (введение в структуру специализированных АЛУ (ОУ) для длинных операций, например матричного типа) или его конвейеризации.

Причины второй группы: для команд условного перехода, если условие не выполняется, то порядок выполнения команд не нарушается и конвейер продолжает работу, а при выполнении условия, а также по командам безусловного перехода, CALL и при возникновении прерываний команды, введенные в конвейер и в очередь команд, считаются недействительными (сброс указателей стека очереди команд) и осуществляется перезапуск алгоритма со стадии выборки команды. При этом основной проблемой является блокировка выполнения команд, следующих за командой перехода после стадии декодирования этой команды и вычисления адреса перехода, путем перетрансляции потока микрокоманд в NOP либо после формирования адреса перехода блокировки записи результата в ОП и РОН на стадии S (операции чтения являются безобидными).

Для устранения причин второй группы существует ряд способов:

  • с использованием буфера цикла команд достаточно большой емкости, в котором хранится весь программный цикл (подпрограмма), или нескольких таких буферов. Тогда при выполнении условия (вызове подпрограммы или прерывании) доступ осуществляется к буферу цикла, а не к ОП;
  • множественного потока команд, при котором процессор имеет два буфера команд: основной и вспомогательный. Основной буфер используется для хранения очереди команд, если условие не задано (естественная адресация), а вспомогательный для очереди команд, если условие выполняется или нарушается естественный порядок следования команд. В ряде моделей ЭВМ используются два и более вспомогательных буфера, т.е. для каждого условия или цикла свой буфер;
  • использование таблицы с предисторией переходов. Метод основан на использовании ассоциативной памяти, в которой в ходе выполнения программы запоминаются наиболее часто используемые переходы в командах условного перехода, циклов, вызова подпрограмм и т.д., например, по стратегии псевдо LRU-стека. Тогда при повторном выполнении некоторого участка программы осуществляется быстрый доступ к АЗУ и выполняется предвыборка команд и помещение их в очередь команд.

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