<<
>>

Конвейеры

Уже много лет известно, что главным препятствием высокой скорости выполнения команд является необходимость их вызова из памяти. Для разрешения этой проблемы можно вызывать команды из памяти заранее и хранить в специальном наборе регистров.
Эта идея использовалась еще в 1959 году при разработке компьютера Stretch компании IBM, а набор регистров был назван буфером выборки с упреждением. Таким образом, когда требовалась определенная команда, она вызывалась прямо из буфера, а обращения к памяти не происходило.

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

На рис.
2.3, а изображен конвейер из пяти блоков, которые называются ступенями. Первая ступень (блок С1) вызывает команду из памяти и помещает ее в буфер, где она хранится до тех пор, пока не потребуется. Вторая ступень (блок С2) декодирует эту команду, определяя ее тип и тип ее операндов. Третья ступень (блок СЗ) определяет местонахождение операндов и вызывает их из регистров или из памяти.

Четвертая ступень (блок С4) выполняет команду, обычно проводя операнды через тракт данных (см. рис. 2.2). И наконец, блок С5 записывает результат обратно в нужный регистр.

На рис. 2.3, б мы видим, как действует конвейер во времени. Во время цикла 1 блок С1 обрабатывает команду 1, вызывая ее из памяти. Во время цикла 2 блок С2 декодирует команду 1, в то время как блок С1 вызывает из памяти команду 2.

Во время цикла 3 блок СЗ вызывает операнды для команды 1, блок С2 декодирует команду 2, а блок С1 вызывает команду 3. Во время цикла 4 блок С4 выполняет команду 1, СЗ вызывает операнды для команды 2, С2 декодирует команду 3, а С1 вызывает команду 4. Наконец, во время цикла 5 блок С5 записывает результат выполнения команды 1 обратно в регистр, тогда как другие ступени конвейера обрабатывают следующие команды.

Чтобы лучше понять принципы работы конвейера, рассмотрим аналогичный пример. Представим себе кондитерскую фабрику, на которой выпечка тортов и их упаковка для отправки производятся раздельно. Предположим, что в отделе отправки находится длинный конвейер, вдоль которого располагаются 5 рабочих (или ступеней обработки). Каждые 10 секунд (это время цикла) первый рабочий ставит пустую коробку для торта на ленту конвейера. Эта коробка отправляется ко второму рабочему, который кладет в нее торт. После этого коробка с тортом доставляется третьему рабочему, который закрывает и запечатывает ее. Затем она поступает к четвертому рабочему, который ставит на ней штамп. Наконец, пятый рабочий снимает коробку с конвейерной ленты и помещает ее в большой контейнер для отправки в супермаркет. Примерно таким же образом действует компьютерный конвейер: каждая команда (в случае с кондитерской фабрикой — торт) перед окончательным выполнением проходит несколько ступеней обработки.

Возвратимся к нашему конвейеру на рис. 2.3. Предположим, что время цикла у этой машины — 2 нс. Тогда для того, чтобы одна команда прошла через весь конвейер, требуется 10 нс. На первый взгляд может показаться, что такой компьютер будет выполнять 100 млн команд в секунду, в действительности же скорость его работы гораздо выше. В течение каждого цикла (2 нс) завершается выполнение одной новой команды, поэтому машина выполняет не 100, а 500 млн команд в секунду!

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

(количество команд, выполняемых процессором в секунду). Если время обращения составляет Т нс, а конвейер имеет п ступеней, время запаздывания составит пТ нс.

Поскольку одна команда выполняется за одно обращение, а за одну секунду таких обращений набирается 109/Г, количество команд в секунду также составляет 109/Г. Скажем, если Г = 2 нс, то каждую секунду выполняется 500 млн команд. Для того чтобы получить значение MIPS, нужно разделить скорость выполнения команд на 1 миллион; таким образом, (109/Г)/106 = 1000/7" MIPS. В принципе, скорость выполнения команд можно измерять и в миллиардах операций в секунду (Billion Instructions Per Second, BIPS), но так никто не делает, и мы не будем.

<< | >>
Источник: Таненбаум Э.. Архитектура компьютера. 5-е изд. 2007

Еще по теме Конвейеры:

  1. Писатель или сборщик на конвейере?
  2. Профессии
  3. Неленивые должности
  4. Неленивые профессии
  5. Кардинальный крест.
  6. РЕДКИЙ ВИТАМИН
  7. Последний штрих: менять работу или менять... Ключ к успеху для ENFJ
  8. Полное общее образование
  9. ГЛАВА 1. ЖУРНАЛИСТСКИЙ ТЕКСТ И СОЦИАЛЬНАЯ ДЕЙСТВИТЕЛЬНОСТЬ: ПОЗНАНИЕ, ОТРАЖЕНИЕ, ПРЕОБРАЗОВАНИЕ
  10. Глава 1. Журналистский текст и социальная действительность: познание, преображение, преобразование (В.А. Сидоров)
  11. 5.2.4. Психические отклонения
  12. Последний штрих: менять работу или менять... Ключ к успеху для ENTJ
  13. Почему справедливость трудно сохранить
  14. Производственная технология.
  15. Последний штрих: менять работу или менять... Ключ к успеху для ENFP
  16. Последний штрих: менять работу или менять... Ключ к успеху для ISTJ
  17. Последний штрих: менять работу или менять... Ключ к успеху для INFP
  18. Последний штрих: менять работу или менять... Ключ к успеху для ESTP