Любая инструкция процессора имеет несколько этапов своей работы. Каждый из этих этапов занимает один цикл ЦП. Этими этапами являются выборка инструкции, декодирование инструкции, выполнение, доступ к памяти и обратная запись. Соответственно, они получают инструкцию, которую необходимо выполнить, отделяют операцию от обрабатываемых значений. on, выполнить процесс, открыть регистр, в который будет записан результат, и записать результат в открытый регистр.
Исторические процессоры в порядке
В ранних компьютерах ЦП не использовал конвейер инструкций. В этих ЦП каждая операция одного цикла должна была выполняться для каждой инструкции. Это означало, что для полной обработки средней инструкции требовалось пять тактов, прежде чем можно было запустить следующую. Некоторым операциям может не потребоваться записывать какой-либо результат в регистр, а это означает, что этапы доступа к памяти и обратной записи могут быть пропущены.
Однако существует проблема, связанная с выполнением полной инструкции по порядку, прежде чем можно будет перейти к следующей инструкции. Проблема в промахе кеша. Процессор хранит данные, которые он активно обрабатывает, в регистре. Доступ к этому можно получить с задержкой в один цикл. Проблема в том, что регистр крошечный, потому что он встроен в ядро процессора. ЦП должен перейти к более крупному, но более медленному кешу L1, если данные еще не были загружены. Если его там нет, он должен снова отправиться в более крупный и медленный кэш L2. Следующий шаг — кэш L3; последний вариант — системная оперативная память. Проверка каждого из этих параметров требует все больше и больше циклов процессора.
Теперь эта дополнительная задержка может стать большой проблемой в системе, которая должна выполнять каждую инструкцию по порядку полностью, прежде чем начинать следующую инструкцию. То, что было процессором с 5 тактами на инструкцию, может внезапно зависнуть на одной инструкции на десятки или сотни тактовых циклов. Все это время на компьютере не может происходить ничего другого. Технически это можно несколько облегчить за счет наличия двух независимых ядер. Однако ничто не мешает им обоим делать одно и то же, потенциально одновременно. Так что переход на многоядерный маршрут не исправит ситуацию.
Классический конвейер RISC
RISC расшифровывается как «Компьютер с сокращенным набором инструкций».. Это стиль дизайна процессора, который оптимизирует производительность, упрощая декодирование каждой инструкции. Это по сравнению с CISC или компьютером со сложным набором инструкций, который разрабатывает более сложные наборы инструкций, что позволяет использовать меньше инструкций для выполнения тех же задач.
Классический дизайн RISC включает конвейер команд. Вместо выполнения любой из пяти стадий инструкций в любом заданном цикле конвейер позволяет выполнять все пять стадий. Конечно, вы не можете запустить все пять этапов одной инструкции в цикле. Но вы можете поставить в очередь пять последовательных инструкций со смещением на один этап каждая. Таким образом, новая инструкция может выполняться каждый такт. Предлагает потенциальное 5-кратное увеличение производительности при относительно небольшом увеличении сложности ядра.
Процессоры, у которых нет конвейера, могут быть только субскалярными, поскольку они не могут выполнять одну полную инструкцию за такт. С помощью этого основного пятиступенчатого конвейера вы можете создать скалярный ЦП, способный выполнять инструкции для каждого процесса. Создавая еще более далеко идущие конвейеры, вы можете создавать суперскалярные процессоры, способные выполнять более одной инструкции за такт. Конечно, есть еще потенциальные проблемы.
Все еще последовательный
Ничто из этого не решает проблему ожидания ответа в течение многих циклов при необходимости запрашивать разные уровни кэша и ОЗУ. Это также вводит новую проблему. Что, если одна инструкция зависит от вывода предыдущей инструкции? Эти проблемы самостоятельно решаются с помощью продвинутого диспетчера. Он тщательно планирует порядок выполнения, чтобы никакие инструкции, зависящие от вывода другой, не располагались слишком близко друг к другу. Он также обрабатывает промахи кэша, паркуя инструкции и заменяя их в конвейере другими командами. инструкции, которые готовы к выполнению и не требуют своего результата, возобновляя выполнение инструкции, когда она готовы.
Эти решения могут работать на неконвейерных процессорах, но они необходимы для суперскалярного процессора, выполняющего более одной инструкции за такт. Предсказатель ветвления также очень полезен, поскольку он может попытаться предсказать результат выполнения инструкции с более чем одним потенциальным результатом и продолжать предполагать, что он правильный, если не доказано обратное.
Вывод
Конвейер позволяет использовать все уникальные возможности процессора в каждом цикле. Он делает это, выполняя одновременно разные этапы разных инструкций. Это даже не усложняет конструкцию процессора. Это также прокладывает путь к тому, чтобы позволить более чем одной инструкции выполнять один этап за цикл.