Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 28

В большинстве процессоров конвейер, укрупнённо, имеет пять стадий. Суть этих стадий следующая (рисунок 10.1):

Рис. 10.1. Пятиступенчатый конвейер

1.  Выборка команды: вызов команды из памяти и помещение её в буфер, где она хранится до востребования.

2.  Декодирование команды, которое включает определение типа команды и её операндов.

3.  Выборка операндов: загрузка операндов из памяти или регистров процессора во входные регистры АЛУ.

4.  Выполнение операции.

5.  Запись результата операции в регистр процессора или память.

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

1

2

3

4

5

6

7

8

9

С1

К1

К2

К3

К4

К5

К6

К7

К8

К9

С2

К1

К2

К3

К4

К5

К6

К7

К8

С3

К1

К2

К3

К4

К5

К6

К7

С4

К1

К2

К3

К4

К5

К6

С5

К1

К2

К3

К4

К5

Быстродействие процессоров с конвейерами характеризуется следующими показателями:

время ожидания — время выполнения одной команды;

пропускная способность процессора — количество команд, выполняемых в единицу времени.

10.1.2. Суперскалярная архитектура

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

Рис. 10.2. Структурная схема процессора с двойным конвейером

Здесь общий блок вызова команд берёт из памяти сразу по две команды и помещает каждую из них в один из конвейеров.

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

Исторически, как двойные, так и одинарные конвейеры впервые появились в процессорах типа RISC. В процессорах Intel параллельное функционирование отдельных блоков используется, начиная с 80386. В процессоре 80486 появился одинарный пятиступенчатый конвейер, а в процессоре Pentium — два конвейера — u и v — по пять стадий каждый. В процессоре Pentium конвейеры неодинаковы: u-конвейер может выполнять любые команды, v-конвейер может выполнять только простые команды с целыми числами, а также одну команду с плавающей точкой (FXCH).

Правила, определяющие совместимость команд в процессоре Pentium достаточно сложны. Объединение команд в пары изначально осуществлялось компилятором. Если две подряд идущие команды несовместимы, или их совместимость не поддаётся проверке на этапе трансляции и компоновки, выполняется только одна из них (в u-конвейере). Оставшаяся команда спаривается со следующей по порядку командой. Измерения показали, что программы, оперирующие с целыми числами, выполняются процессором Pentium почти в два раза быстрее, чем процессором 80486 с той же тактовой частотой.

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

Рис. 10.3. Структурная схема суперскалярного процессора