Лекция
Привет, Вы узнаете о том , что такое вычислительный конвейер, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое вычислительный конвейер, конвейерная обработка , настоятельно рекомендую прочитать все из категории Теория цифровых автоматов.
В компьютерной инженерии конвейерная обработка инструкций — это метод реализации параллелизма на уровне инструкций в рамках одного процессора. Конвейерная обработка направлена на то, чтобы каждая часть процессора была занята определенной инструкцией, путем разделения входящих инструкций на последовательность шагов (так называемый « конвейер »), выполняемых различными процессорными блоками, при этом разные части инструкций обрабатываются параллельно.
Конвейер — способ организации вычислений, используемый в современных процессорах и контроллерах с целью повышения их производительности (увеличения числа инструкций, выполняемых в единицу времени — эксплуатация параллелизма на уровне инструкций).
|
Тактовый цикл
Номер инстр.
|
1 | 2 | 3 | +++4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 1 | IF | ID | EX | +++МЕМ ---- | WB | ||
| 2 | IF | ID | +++EX | МЕМ | WB | ||
| 3 | IF | +++ID | EX | МЕМ | WB | ||
| 4 | +++IF | ID | EX | МЕМ | |||
| 5 | IF | ID | EX | ||||
| (IF = Выборка инструкции, ID = Декодирование инструкции, EX = Выполнение, MEM = Доступ к памяти, WB = Обратная запись в регистр).
В четвертом тактовом цикле (зеленый столбец) самая ранняя инструкция находится на этапе MEM, а самая поздняя инструкция еще не вошла в конвейер. |
|||||||
Конвейер можно частично сравнить с очередью, но считать его просто очередью — неправильно.
Главное отличие Очередь — это место, где данные ждут обработки.
задача 1 задача 2 задача 3 ↓ Worker обрабатывает
Конвейер — это последовательность этапов обработки.
данные → шаг 1 → шаг 2 → шаг 3 → результат
То есть:
Очередь = хранит и упорядочивает задачи Конвейер = обрабатывает данные по этапам
В конвейерном компьютере инструкции проходят через центральный процессор (ЦП) поэтапно. Например, для каждого шага цикла фон Неймана может быть отдельный этап : выборка инструкции, выборка операндов, выполнение инструкции, запись результатов. Конвейерный компьютер обычно имеет «конвейерные регистры» после каждого этапа. В них хранится информация об инструкции и вычислениях, чтобы логические элементы следующего этапа могли выполнить следующий шаг.
Такая схема позволяет процессору выполнять инструкцию за каждый тактовый цикл. Обычно четные каскады работают на одном фронте прямоугольного тактового сигнала, а нечетные — на другом. Это обеспечивает большую пропускную способность процессора , чем у многотактового компьютера при заданной тактовой частоте , но может увеличить задержку из-за дополнительных накладных расходов самого процесса конвейеризации. Кроме того, несмотря на то, что электронная логика имеет фиксированную максимальную скорость, скорость работы конвейерного компьютера можно увеличить или уменьшить, изменяя количество каскадов в конвейере. Чем больше каскадов, тем меньше работы выполняет каждый каскад, и, следовательно, тем меньше задержек от логических элементов , и тем выше может быть его тактовая частота.
Конвейерная модель компьютера часто оказывается наиболее экономичной, если стоимость измеряется количеством логических элементов на инструкцию в секунду. В каждый момент времени инструкция находится только на одном этапе конвейера, и в среднем этап конвейера обходится дешевле, чем многоцикловый компьютер. Кроме того, при качественной сборке большая часть логики конвейерного компьютера используется большую часть времени. В отличие от этого, компьютеры с внеочередным выполнением инструкций обычно имеют большое количество простаивающей логики в любой момент времени. Аналогичные расчеты обычно показывают, что конвейерный компьютер потребляет меньше энергии на инструкцию.
Однако конвейерный компьютер обычно сложнее и дороже, чем сопоставимый многоцикловый компьютер. Как правило, он имеет больше логических элементов, регистров и более сложный блок управления. Аналогичным образом, он может потреблять больше энергии в целом, но меньше энергии на одну инструкцию. Процессоры с внеочередным выполнением инструкций обычно могут выполнять больше инструкций в секунду, поскольку они могут выполнять несколько инструкций одновременно.
В конвейерном компьютере блок управления обеспечивает запуск, продолжение и остановку потока инструкций в соответствии с командами программы. Данные инструкций обычно передаются через конвейерные регистры от одного этапа к другому, при этом для каждого этапа используется несколько обособленный блок управляющей логики. Блок управления также гарантирует, что инструкция на каждом этапе не повлияет на работу инструкций на других этапах. Например, если двум этапам необходимо использовать одни и те же данные, управляющая логика гарантирует, что их использование будет выполнено в правильной последовательности.
При эффективной работе конвейерный компьютер обрабатывает одну инструкцию на каждом этапе. В этом случае он обрабатывает все инструкции одновременно. За каждый тактовый цикл он может завершить примерно одну инструкцию. Но когда программа переключается на другую последовательность инструкций, конвейеру иногда приходится отбрасывать обрабатываемые данные и перезапускать процесс. Это называется «задержкой».
Значительная часть конструкции конвейерного компьютера предотвращает интерференцию между этапами и уменьшает задержки.
Количество зависимых шагов зависит от архитектуры машины. Например:
По мере того, как конвейер становится «глубже» (с большим количеством зависимых шагов), данный шаг может быть реализован с помощью более простой схемы, что может позволить процессору работать быстрее. [ 3 ] Такие конвейеры могут называться суперконвейерами. [ 4 ]
Процессор считается полностью конвейерным , если он может считывать инструкцию на каждом такте. Таким образом, если некоторые инструкции или условия требуют задержек, препятствующих считыванию новых инструкций, процессор не является полностью конвейерным.
Первые примеры применения конвейерной обработки данных были в проекте ILLIAC II и проекте IBM Stretch , хотя упрощенная версия использовалась ранее в Z1 в 1939 году и Z3 в 1941 году . [ 5 ]
Конвейерная обработка данных всерьез началась в конце 1970-х годов в суперкомпьютерах , таких как векторные процессоры и матричные процессоры. Одним из первых суперкомпьютеров была серия Cyber, созданная компанией Control Data Corporation. Ее главный архитект, Сеймур Крей , позже возглавил Cray Research. Крей разработал линейку суперкомпьютеров XMP, используя конвейерную обработку как для функций умножения, так и для функций сложения/вычитания. Позже компания Star Technologies добавила параллелизм (несколько конвейерных функций, работающих параллельно), разработанный Роджером Ченом. В 1984 году Star Technologies добавила конвейерную схему деления, разработанную Джеймсом Брэдли.
Конвейерная обработка не ограничивалась суперкомпьютерами. В 1976 году мэйнфрейм общего назначения серии 470 корпорации Amdahl имел 7-шаговый конвейер и запатентованную схему предсказания ветвлений. Конвейерная обработка, являющаяся центральным элементом философии проектирования RISC [ 6 ] , к середине 1980-х годов также внедрялась разработчиками в традиционные архитектуры CISC. [ 7 ]
Модель последовательного выполнения предполагает, что каждая инструкция завершается до начала следующей; это предположение неверно для конвейерного процессора. Ситуация, когда ожидаемый результат является проблематичным, называется конфликтом . Представьте себе следующие две инструкции для регистров, предназначенные для гипотетического процессора:
1: добавить 1 к R5 2: скопировать R5 в R6
Если процессор имеет 5 шагов, перечисленных в исходной иллюстрации («Базовый пятиступенчатый конвейер» в начале статьи), инструкция 1 будет выбрана в момент времени t1 , и ее выполнение завершится в момент времени t5 . Инструкция 2 будет выбрана в момент времени t2 и завершится в момент времени t6 . Первая инструкция может записать увеличенное число в регистр R5 на пятом шаге (обратная запись в регистр) в момент времени t5 . Но вторая инструкция может получить число из R5 (для копирования в R6) на втором шаге (декодирование инструкции и выборка из регистра) в момент времени t3 . По-видимому, первая инструкция к этому моменту не успеет увеличить значение. Приведенный выше код создает конфликтную ситуацию.
Написание компьютерных программ на компилируемом языке может не вызывать подобных опасений, поскольку компилятор может быть разработан таким образом, чтобы генерировать машинный код, избегающий потенциальных опасностей.
В некоторых ранних процессорах DSP и RISC документация советовала программистам избегать подобных зависимостей в смежных и почти смежных инструкциях (так называемых слотах задержки ), или указывала, что вторая инструкция использует старое значение, а не желаемое (в приведенном выше примере процессор мог, вопреки интуиции, скопировать неинкрементированное значение), или указывала, что используемое значение не определено. У программиста может быть несвязанная работа, которую процессор может выполнить тем временем; или, чтобы обеспечить правильные результаты, программист может вставлять в код NOP-операции , частично сводя на нет преимущества конвейерной обработки.
Конвейерные процессоры обычно используют три метода для корректной работы, когда программист предполагает, что каждая инструкция завершается до начала следующей:
Выход за рамки обычной последовательности инструкций часто сопряжен с конфликтом. Если процессор не может осуществить переход за один цикл времени, конвейер будет продолжать последовательное получение инструкций. Такие инструкции не могут быть реализованы, поскольку программист перенаправил управление на другую часть программы.
Условный переход еще более проблематичен. Процессор может перейти или не перейти в другую очередь в зависимости от еще не выполненного вычисления. Различные процессоры могут застревать, пытаться предсказать переход и могут начать выполнение двух разных последовательностей программ ( немедленное выполнение ), каждая из которых предполагает, что переход выполнен или нет, отбрасывая всю работу, относящуюся к неверному предположению. [ a ]
Процессор с реализацией предсказания ветвлений, которая обычно делает правильные предсказания, может минимизировать потери производительности из-за ветвлений. Однако, если предсказания ветвлений неверны, это может создать дополнительную нагрузку на процессор, например, привести к удалению из конвейера неправильного пути выполнения кода, который начал выполнение, прежде чем возобновить его в правильном месте.
Программы, написанные для конвейерного процессора, намеренно избегают ветвлений, чтобы минимизировать возможную потерю скорости. Например, программист может обрабатывать обычный случай с помощью последовательного выполнения и переходить к ветвлениям только при обнаружении необычных случаев. Использование таких программ, как gcov , для анализа покрытия кода позволяет программисту измерить, как часто фактически выполняются определенные ветви, и получить информацию для оптимизации кода. В некоторых случаях программист может обрабатывать как обычный, так и необычный случай с помощью кода без ветвлений .
Справа показана типовая схема конвейера, состоящая из четырех этапов: выборка, декодирование, выполнение и обратная запись. Верхний серый прямоугольник — это список инструкций, ожидающих выполнения, нижний серый прямоугольник — список инструкций, выполнение которых уже завершено, а средний белый прямоугольник — схема конвейера.
Выполнение выглядит следующим образом:
| Clock | Исполнение |
|---|---|
| 0 |
|
| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
|
| 7 |
|
| 8 |
|
| 9 |
|
Конвейерный процессор может справляться с конфликтами, останавливаясь и создавая «пузырь» в конвейере, в результате чего происходит один или несколько циклов, в течение которых ничего полезного не происходит.
На иллюстрации справа, в цикле 3, процессор не может декодировать фиолетовую инструкцию, возможно, потому что он определяет, что декодирование зависит от результатов, полученных при выполнении зеленой инструкции. Зеленая инструкция может перейти к этапу выполнения, а затем к этапу обратной записи в соответствии с расписанием, но фиолетовая инструкция задерживается на один цикл на этапе выборки. Синяя инструкция, которая должна была быть выбрана во время цикла 3, задерживается на один цикл, как и следующая за ней красная инструкция.
Из-за пузырька (синие овалы на иллюстрации) схема декодирования процессора простаивает во время 3-го цикла. Схема выполнения простаивает во время 4-го цикла, а схема обратной записи простаивает во время 5-го цикла.
Когда пузырь выходит из конвейера (на 6-м цикле), нормальное выполнение возобновляется. Но теперь все отстает на один цикл. Для полного выполнения четырех инструкций, показанных цветами, потребуется 8 циклов (с 1-го по 8-й). [ b ]
Исследование, описанное в статье про вычислительный конвейер, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое вычислительный конвейер, конвейерная обработка и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Теория цифровых автоматов
Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.
Комментарии
Оставить комментарий
Теория цифровых автоматов
Термины: Теория цифровых автоматов