В большинстве процессоров конвейер, укрупнённо, имеет пять стадий. Суть этих стадий следующая (рисунок 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.2. Структурная схема процессора с двойным конвейером
Здесь общий блок вызова команд берёт из памяти сразу по две команды и помещает каждую из них в один из конвейеров.
Чтобы выполняться параллельно, две команды не должны конфликтовать (например, две команды не должны писáть в одно и то же место), и ни одна из них не должна зависеть от результата выполнения другой. Как и в случае с одним конвейером, либо конфликты должны выявляться и устраняться во время выполнения команд за счёт использования дополнительного аппаратного обеспечения, либо компилятор ещё на этапе трансляции и компоновки должен следить за тем, чтобы не возникало подобных ситуаций, если аппаратное обеспечение не поддерживает таких функций.
Исторически, как двойные, так и одинарные конвейеры впервые
появились в процессорах типа RISC. В процессорах Intel параллельное функционирование отдельных блоков
используется, начиная с 80386. В процессоре 80486 появился одинарный пятиступенчатый
конвейер, а в процессоре Pentium — два конвейера — u и v — по
пять стадий каждый. В процессоре Pentium конвейеры
неодинаковы: u-конвейер может выполнять любые команды, v-конвейер может выполнять только простые команды с целыми
числами, а также одну команду с плавающей точкой (FXCH
).
Правила, определяющие совместимость команд в процессоре Pentium достаточно сложны. Объединение команд в пары изначально осуществлялось компилятором. Если две подряд идущие команды несовместимы, или их совместимость не поддаётся проверке на этапе трансляции и компоновки, выполняется только одна из них (в u-конвейере). Оставшаяся команда спаривается со следующей по порядку командой. Измерения показали, что программы, оперирующие с целыми числами, выполняются процессором Pentium почти в два раза быстрее, чем процессором 80486 с той же тактовой частотой.
Переход к большему количеству конвейеров технически сложен. Более эффективен оказался другой подход к повышению производительности. Его основная идея — один конвейер с большим количеством функциональных блоков, как примерно показано на следующем рисунке:
Рис. 10.3. Структурная схема суперскалярного процессора
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.