Нелинейные конвейеры

Конвейер не всегда представляет собой линейную цепочку этапов. В ряде ситуаций оказывается выгодным, когда функциональные блоки соединены между со­бой не последовательно, а в соответствии с логикой обработки, при этом одни бло­ки в цепочке могут пропускаться, а другие — образовывать циклические структуры. Это позволяет с помощью одного и того же конвейера одновременно вычислять более одной функции, однако если эти функции конфликтуют между собой, то такой конвейер трудно загрузить полностью. Структура нелинейного конвейера, одновременно вычисляющего две функции X и Y, приведена па рис.47. Там же показана последовательность, в которой функциями X и Y востребуются те или иные функциональные блоки.

 

Рис.51. Нелинейный конвейер

 

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

Так, в ходе реализации функции X запуск очередного ее вычисления возможен после 1,3 и 6 тактов. Запуск параллельного вычисления функции Y возможен после 2 и 4 тактов. При запуске функции Y очередной ее запуск позволен после тактов 1, 3 и 5, а параллельный запуск функции X допустим после 2 и 4 тактов.

Конвейер команд

Идея конвейера команд была предложена в 1956 году академиком С. А. Лебеде­вым. Как известно, цикл команды представляет собой последовательность этапов. Возложив реализацию каждого из них на самостоятельное устройство и последо­вательно соединив такие устройства, мы получим классическую схему конвейера команд. Для иллюстрации воспользуемся примером. Выде­лим в цикле команды шесть этапов:

1. Выборка команды (ВК). Чтение очередной команды из памяти и занесение ее в регистр команды.

2. Декодирование команды (ДК). Определение кода операции и способов адреса­ции операндов.

3. Вычисление адресов операндов (ВА). Вычисление исполнительных адресов каждого из операндов в соответствии с указанным в команде способом их адре­сации.

4. Выборка операндов (ВО). Извлечение операндов из памяти. Эта операция не нужна для операндов, находящихся в регистрах.

5. Исполнение команды (ИК). Исполнение указанной операции.

6. Запись результата (ЗР). Занесение результата в память.

Рис. 52. Логика работы конвейера команд

 

На рис. 52 показан конвейер с шестью ступенями, соответствующими шести этапам цикла команды. В диаграмме предполагается, что каждая команда обяза­тельно проходит все шесть ступеней, хотя этот случай не совсем типичен. Так, команда загрузки регистра не требует этапа ЗР. Кроме- того, здесь принято, что все |тапы могут выполняться одновременно. Без конвейеризации выполнение девяти Команд заняло бы 9 х 6 = 54 единицы времени. Использование конвейера позволяет сократить время обработки до 14 единиц. Конфликты в конвейере команд

Полученное в примере число 14 характеризует лишь потенциальную производи­тельность конвейера команд. На практике в силу возникающих в конвейере конф­ликтных ситуаций достичь такой производительности не удается. Конфликтные ситуации в конвейере принято обозначать термином риск (hazard), а обусловлены они могут быть тремя причинами:

· попыткой нескольких команд одновременно обратиться к одному и тому же ресурсу ВМ (структурный риск);

· взаимосвязью команд по данным (риск по данным);

· неоднозначностью при выборке следующей команды в случае команд перехода (риск по управлению).