Простейший конвейер, производительность конвейера
Существует достаточно простое общеизвестное правило – чтобы выполнить некоторую работу быстрее, необходимо разделить ее между несколькими исполнителями и заставить их действовать одновременно. Различные способы совмещения операций давно внедряются в архитектуру ЭВМ. При этом возможно два различных по сути подхода.
В первом случае существует несколько независимых исполнительных устройств, каждое из которых самостоятельно выполняет действия по обработке «своих» данных. Этот подход называется параллельной обработкой. Устройства могут быть полностью независимыми, со своей собственной программой и данными, либо несколько исполнительных устройств могут подчиняться общему управляющему устройству, выполняя одинаковое действие над несколькими копиями данных.
Второй подход носит название конвейерной обработки. Этот подход аналогичен приемам, применяемым на линиях сборки технических устройств, например автомобилей. Он состоит в том, что выполнение некоторой функции разбивается на мелкие части, этапы. Для выполнения каждого этапа выделяется отдельный блок аппаратуры и данные или команды, подлежащие обработке, последовательно передаются с одного этапа на другой. При этом на различных участках конвейерной линии обрабатываются части различных данных или команд и за счет этого выполнение нескольких операций совмещается во времени. Конвейерная обработка широко применяется в архитектуре многих современных процессоров.
В качестве примера рассмотрим некоторый абстрактный процессор, имеющий типичные черты многих современных RISC-процессоров. Основа архитектуры процессора – банк из 32 регистров общего назначения и счетчик команд. Система команд процессора включает типичный набор арифметических и логических команд, команд с плавающей точкой, операций ветвлений. Команды имеют трехадресный формат. Данные, подлежащие обработке, должны быть предварительно размещены в регистрах процессора. Загрузка данных их памяти в регистры и запись данных в память производится командами загрузки – записи. Процесс выполнения команды можно разбить на следующие независимые этапы:
1) считывание команды – IF;
2) дешифрация команды – ID;
3) вычисление адреса/выборка данных из регистров – RD;
4) выполнение команды/обращение к памяти – EX;
5) запись результата в регистр – WR.
Указанный фазы выполнения команды не зависят друг от друга и могут последовательно выполняться независимыми обрабатывающими блоками. При неконвейерной обработке процессор последовательно выполняет каждую из фаз команды от начала и до конца (см. рис. 25 а)). Завершив выполнение очередной команды, процессор переходит к выполнению следующей.
В конвейерной системе выделяется несколько независимых исполнительных блоков, каждый из которых выполняет свою собственную операцию по обработке команды (см. рис. 25 б)). Обрабатываемая команда последовательно пересылается с одного блока на другой и тем самым проходит все фазы обработки. После завершения обработки каждый исполнительный блок передает команду следующему исполнительному блоку и приступает к выполнению следующей команды, таким образом, одновременно могут обрабатываться до пяти различных команд.
Команда 1 | Команда 2 | Команда 3 | ||||||||||||
IF | ID | RD | EX | WR | IF | ID | RD | EX | WR | IF | ID | RD | EX | WR |
а)
№ такта | |||||||||
Команда 1 | IF | ID | RD | EX | WR | ||||
Команда 2 | IF | ID | RD | EX | WR | ||||
Команда 3 | IF | ID | RD | EX | WR | ||||
Команда 4 | IF | ID | RD | EX | WR | ||||
Команда 5 | IF | ID | RD | EX | WR |
б)
Рис 25. Диаграмма работы простейшего процессора а) в неконвейерном режиме, б) с конвейеризацией
При конвейерной обработке возрастает количество команд, выполняемых процессором за единицу времени, однако время выполнения для каждой отдельной команды не сокращается, а скорее наоборот, увеличивается. Длительность обработки на каждом этапе конвейерного процессора должна быть одинаковой, причем длительность такта определяется длительностью самой продолжительной операции. Помимо этого конвейерная схема процессора требует дополнительных расходов времени на пересылку данных с одного этапа на другой. Пусть, например, в неконвейерном процессоре длительности отдельных этапов обработки команды будут, следующими (в наносекундах):
IF | ID | RD | EX | WR |
Максимальная длительность у этапа выполнения – 60 нс., она и определяет минимальную длительность этапа при конвейерной обработке. Пусть дополнительные расходы на пересылку данных из блока в блок составят 5 нс. Тогда длительность каждого этапа должна быть равной 65 нс. Длительность выполнения команды в неконвейерном режиме составит 50 + 50 + 50 + 60 + 50 = 260 нс. В конвейерном процессоре длительность выполнения одной команды составит 65 * 5 = 325 нс., т.е. время выполнения одной команды возрастет почти в полтора раза. Однако при последовательном выполнении команд время, требуемое для выполнения, например, 100 команд составит 100 * 260 нс. = 26 мкс. Время выполнения тех же 100 команд на конвейере при отсутствии задержек составит 325 + (100 – 1) * 65 = 6.76 мкс (время выполнения одной команды плюс длительность завершающего этапа для 99 оставшихся команд). При большом количестве выполняемых команд, каждая команда в конвейерном режиме будет завершаться в среднем за 65 нс.
Конвейеризация эффективна только тогда, когда загрузка конвейера близка к полной, а скорость подачи новых команд и операндов соответствует максимальной производительности конвейера. Если произойдет задержка, то параллельно будет выполняться меньше операций и суммарная производительность снизится. При реализации конвейерной обработки возникают ситуации, которые препятствуют выполнению очередной команды из потока команд в предназначенном для нее такте. Такие ситуации называются конфликтами. Конфликты снижают реальную производительность конвейера, которая могла бы быть достигнута в идеальном случае. Существуют три класса конфликтов.
1. Структурные конфликты, которые возникают из-за конфликтов по ресурсам, когда аппаратные средства не могут поддерживать все возможные комбинации команд в режиме одновременного выполнения с совмещением.
2. Конфликты по данным, возникающие в случае, когда выполнение одной команды зависит от результата выполнения предыдущей команды.
3. Конфликты по управлению, которые возникают при конвейеризации команд переходов и других команд, которые изменяют значение счетчика команд.
Конфликты в конвейере приводят к необходимости приостановки выполнения команд. Обычно в простейших конвейерах, если приостанавливается какая-либо команда, то все следующие за ней команды также приостанавливаются. Команды, предшествующие приостановленной, могут продолжать выполняться, но во время приостановки не выбирается ни одна новая команда.
Дата добавления: 2021-02-19; просмотров: 456;