Краткий ответ
Этапы декодирования и выполнения инструкции выполняются параллельно со следующим этапом предыдущей инструкции. Этот метод известен как конвейерная обработка. См. О процессорах RISC ниже.
Архитектура RISC с одним выпуском обычно будет составлять в среднем чуть меньше одной инструкции за цикл из-за состояний ожидания и времени, затрачиваемого на операции загрузки / сохранения, которые затрагивают память, а не просто для регистрации. Слоты задержки дают вам архитектурный хук, который может позволить вам вернуть часть этого времени назад. См. О процессорах RISC ниже.
Цикл инструкции - это время, необходимое для выполнения инструкции. Это зависит от архитектуры и (в некоторых случаях) инструкций. Например, большинство инструкций для MIPS R2000 / 3000 занимает один цикл. Инструкции, касающиеся доступа к памяти (загрузка / сохранение, ветвление), занимают более одного цикла, хотя слоты задержки означают, что вы можете выполнить что-то еще (возможно, просто NOP) в слоте задержки. В неконвейерных архитектурах могут быть циклы команд, состоящие из нескольких тактов, которые часто зависят от режима адресации. См. О процессорах RISC, традиционных архитектурах CISC и аппаратных архитектурах ниже.
Проекты с несколькими выпусками могут несколько размыть эту концепцию, выполняя более одной инструкции параллельно.
Процессоры CISC могут иметь инструкции, которые занимают разную продолжительность. Точное количество тактов зависит от архитектуры и инструкций. Различное количество тактов, используемых в CISC ISA, является одной из причин, по которой их сложно встроить в сильно конвейерные архитектуры. См. Традиционные архитектуры CISC ниже.
Чем дольше ответ
Для одного выпуска MIPS, SPARC или другого ЦП все (для первого приближения) команды выдают за один цикл, хотя они могут иметь то, что называется «интервалом задержки».
На процессорах RISC
В этом контексте один проблемный ЦП - это тот, в котором ЦП не выполняет анализ зависимостей на лету и параллельный выпуск инструкций так, как это делают современные ЦП, т.е. у них есть только один исполнительный блок, который выполняет инструкции в порядок их чтения из мемо. Подробнее об этом позже.
Большинство старых RISC-процессоров имеют единый дизайн, и эти типы до сих пор широко используются во встроенных системах. 32-разрядное целочисленное RISC-ядро с одним выпуском может быть реализовано в пределах 25 000–30 000 шлюзов, поэтому ядра этого типа имеют очень низкое энергопотребление и очень малую площадь. Это позволяет легко и дешево их интегрировать в продукты SOC (система-на-кристалле).
Проекты ЦПИ RISC конвейерны - обработка инструкции выполняется в несколько этапов, каждая инструкция передается по конвейеру на следующую стадию каждый тактовый цикл. В большинстве случаев конвейерный ЦП одного выпуска будет выполнять что-то близкое к одной инструкции за такт.
В некоторых архитектурах есть инструкции, такие как ветвление или загрузка / сохранение из памяти, где дополнительный цикл, выполняемый доступом к памяти, виден коду.
Например, в конструкции SPARC V7 / V8 следующая инструкция после ветвления фактически выполняется до того, как произойдет сама ветвь. Обычно вы помещаете NOP в слот после ветки, но вы можете поместить в него другую инструкцию, если сможете найти что-то полезное для выполнения.
Архитектура MIPS R2000 / R3000 имела аналогичный интервал задержки в инструкциях загрузки / сохранения. Если вы загрузили значение из памяти, оно фактически не появилось бы в регистре для другого цикла. Вы можете поместить NOP в слот или сделать что-то еще, если сможете найти что-то полезное, что не зависит от только что выполненной вами операции загрузки.
Если память была медленнее, чем процессор, что часто имело место, вы могли бы получить дополнительные состояния ожидания при доступе к памяти. Состояния ожидания заморозят процессор на один или несколько тактов, пока не будет завершен доступ к памяти. На практике эти состояния ожидания и дополнительное время для обращений к памяти означают, что конструкции ЦП с одним выпуском в среднем чуть меньше одной инструкции за такт. Слоты задержки дают вам некоторые возможности для оптимизации кода, выполняя некоторые другие инструкции во время операции с памятью.
Традиционные процессоры CISC
Процессоры CISC были проектами, которые могли иметь инструкции, занимающие различную продолжительность времени. Часто у них были более сложные инструкции, реализованные непосредственно в оборудовании, которые должны были бы быть выполнены в программном обеспечении на процессоре RISC.
Большинство архитектур мэйнфреймов и почти все конструкции ПК до M68K и Intel 386 были традиционными микрокодированными процессорами CISC. Эти конструкции оказались медленнее за такт и использовали больше гейтов, чем процессоры RISC.
Microcode
Пример микрокодированной архитектуры (MOS 6502) можно увидеть в эмуляции здесь . Микрокод можно увидеть в верхней части изображения.
Микрокод контролирует потоки данных и действия, активируемые в ЦПУ для выполнения инструкций. Зацикливая шаги в микрокоде, вы можете активировать части CPU, перемещать данные через ALU или выполнять другие шаги. Компоненты многократного использования в ЦП могут быть скоординированы в течение нескольких тактов для выполнения инструкции. В случае 6502 некоторые конвейерные действия также могут выполняться микрокодом.
В микрокодированных конструкциях используется меньше кремния, чем в жестких микросхемах, за счет того, что для выполнения инструкции может потребоваться несколько тактов. В зависимости от конструкции эти процессоры могут занимать разное время на одну инструкцию.
Зашитые архитектуры
Зашитые схемы (не обязательно взаимоисключающие с микрокодом) выполняют команду синхронно или могут иметь своих собственных координаторов для выполнения чего-либо в течение нескольких тактов. Как правило, они быстрее за счет более выделенного оборудования и, следовательно, дороже в реализации, чем микрокодированная конструкция с эквивалентной функциональностью.
Известным примером этого был оригинальный процессор Amdahl 470/6 , который был заменой центрального процессора на некоторых моделях IBM System / 370. Процессор Amdahl был аппаратно спроектирован в то время, когда 370 процессоров IBM были сильно основаны на микрокоде. Процессор Amdahl был примерно в 3 раза быстрее, чем процессоры IBM, которые они заменили.
Само собой разумеется, IBM не был удивлен, и это привело к судебной тяжбе, которая вынудила IBM открыть свою архитектуру мэйнфреймов, пока не истек срок действия указа о согласии несколько лет назад.
Как правило, аппаратная схема этого типа по-прежнему не была такой же быстрой по сравнению с процессором RISC, как часы RISC, поскольку изменяющиеся временные параметры и форматы команд не давали такой большой возможности для конвейерной обработки, как в RISC.
Проекты с несколькими выпусками
Большинство современных процессоров представляют собой архитектуры с несколькими выпусками, которые могут обрабатывать более одной инструкции за раз в одном потоке. Микросхема может выполнять динамический анализ зависимостей от входящего потока команд и выдавать команды параллельно, если нет зависимости от результата предыдущего вычисления.
Пропускная способность этих микросхем зависит от того, насколько параллелизм может быть достигнут в коде, но большинство современных процессоров будут усреднять несколько инструкций за цикл в большинстве кода.
Современные Intel и другие x86 / X64 ISA-процессоры имеют уровень, который интерпретирует набор инструкций CISC старой школы в микро-инструкции, которые могут передаваться через конвейерное ядро RISC-стиля с несколькими выпусками. Это добавляет некоторые накладные расходы, которых нет на процессорах с ISA, которые предназначены для конвейерной обработки (то есть архитектуры RISC, такие как ARM или PowerPC).
VLIW дизайн
Проекты VLIW, из которых Intel Itanium , пожалуй, самый известный, никогда не принимались за господствующую архитектуру, но в IIRC существует ряд архитектур DSP, в которых используется этот тип проектирования. Проект VLIW делает явным множественный выпуск со словом инструкции, содержащим более одной инструкции, которая выдается параллельно.
Они зависели от хороших оптимизирующих компиляторов, которые выявляли зависимости и возможности для параллелизма, помещая инструкции в несколько слотов, доступных для каждого слова инструкции.
Архитектуры VLIW работают достаточно хорошо для числовых приложений, поскольку операции с матрицами / массивами, как правило, предлагают возможности для широкого параллелизма. Некоторое время у Itanium была ниша на рынке суперкомпьютерных приложений, и по крайней мере одна суперкомпьютерная архитектура - Multiflow TRACE - была разработана с использованием ISA этого типа.
Память и кеширование
Современные ЦП намного, намного быстрее, чем память, поэтому прямое чтение из памяти может генерировать сотни состояний ожидания, которые блокируют ЦП до завершения доступа к памяти. Кэширование, которое теперь выполняется в несколько слоев, содержит последние использованные области памяти в кеше. Поскольку центральные процессоры обычно проводят большую часть времени, выполняя код в циклах, это означает, что вы получаете хорошие показатели повторного использования областей памяти, которые вы недавно использовали. Это свойство называется «местность ссылки».
Где бы вы ни находились, эталонный процессор может работать на скорости, близкой к оптимальной. Кэш пропускает до следующего уровня, подвергаясь нескольким состояниям ожидания; попадание в кеш до основной памяти может нести сотни.
Таким образом, фактическая пропускная способность микросхем ЦП может сильно зависеть от эффективности шаблонов доступа к памяти. Были написаны целые книги по оптимизации кода для этого, и это сложная тема сама по себе.