Во- первых, в качестве комментария Килан в и ответ Turbo Джея отмечаете, измерение было 113,093 Dhrystone MIPS не родной MIPS.
Микроархитектура Ivy Bridge i7 3630QM может фиксировать только 4 слитых микропроцессора за цикл, хотя может начинать выполнение по 6 микопоп за цикл. (Количество слитых мопов в следе кода примерно равно количеству инструкций; некоторые сложные инструкции декодируются в несколько неоплавленных мопов, а некоторые пары инструкций могут быть слиты в один моп, например, выполнить немедленное сравнение с последующим условным прыжком.)
Два ваших предположения о том, как несколько команд могут быть выполнены за один цикл, вполне верны и использовались в реальных процессорах. Ваше первое предположение о том, что используются более быстрые внутренние часы, использовалось в оригинальных ALU «огненного шара» Pentium 4. Эти ALU работали с удвоенной частотой остальной части ядра, которая была уже относительно высокой.
(Это было достигнуто с помощью разнесенного ALU, в котором нижняя половина сложения была сделана за один цикл, позволяя зависимой операции использовать нижнюю половину результата в следующем цикле. Для таких операций, как сложение, xor или сдвиг влево которой требуется только нижняя половина операндов для получения полной нижней половины результата, такое ошеломление, также известное как конвейерная обработка ширины, допускает задержку результата одного цикла, а также пропускную способность одного цикла.)
HyperSPARC использовал несколько связанную технику, каскадные ALU. HyperSPARC передал результаты двух ALU в третий ALU. Это позволило выполнить две независимые и третью зависимые операции за один цикл.
Ваше предположение о том, что «на одно ядро приходится несколько параллельных конвейеров», является другим методом, который был использован. Этот тип конструкции называется суперскалярным и является наиболее распространенным средством увеличения числа операций, выполняемых за один цикл.
Есть также несколько других шансов и окончаний выполнения команд, которые, возможно, стоит отметить. Некоторые операции могут быть более эффективно выполнены вне обычных исполнительных блоков. Техника исключения перемещений использует использование переименования регистров в процессорах вне порядка для выполнения операций перемещения во время переименования регистров; перемещение просто копирует физический номер регистра из одной позиции в таблице переименования (называемой таблицей псевдонимов регистра) в другую. Это не только эффективно увеличивает ширину выполнения, но также устраняет зависимость. Этот метод использовался на ранних этапах работы с x87 на базе стека, но теперь широко используется в высокопроизводительных процессорах Intel x86. (Использование деструктивных инструкций с двумя операндами в x86 делает устранение перемещений более полезным, чем это было бы в типичном RISC.)
Техника, аналогичная исключению перемещения, заключается в обработке инструкций обнуления регистра во время переименования. Предоставляя имя регистра, которое предоставляет нулевое значение, команда очистки регистра (например, xor или вычитание с обоими операндами, являющимися одним и тем же регистром) может просто вставить это имя в таблицу переименования (RAT).
Другая техника, используемая некоторыми процессорами x86, снижает стоимость операций push и pop. Обычно инструкция, использующая указатель стека, должна была бы ждать полного цикла предыдущего нажатия или всплывающего окна, чтобы обновить значение указателя стека. Признавая, что push и pop только добавляют или вычитают небольшое значение к указателю стека, можно параллельно вычислять результаты нескольких сложений / подстановок. Основной задержкой для добавления является перенос переноса, но при небольших значениях более значимые биты базового значения - в данном случае указатель стека - будут иметь не более одного переноса. Это позволяет применять оптимизацию, аналогичную оптимизации сумматора переноса, к множественным сложениям небольших значений. Кроме того, поскольку указатель стека обычно обновляется только константами,
Также возможно объединить инструкции в одну более сложную операцию. Хотя обратный процесс разделения инструкций на несколько более простых операций является старой техникой, объединение инструкций (которое Intel называет макрооперацией слияния) может позволить реализации поддерживать операции более сложные, чем те, которые представлены в наборе команд.
С теоретической стороны были предложены другие методы. Небольшие константы, отличные от нуля, могут поддерживаться в RAT, и некоторые простые операции, которые используют или надежно генерируют такие малые значения, могут быть обработаны на ранней стадии. («Inkining Physical Register Inlining», Mikko H. Lipasti et al., 2004, предложил использовать RAT в качестве средства уменьшения количества регистров, но эту идею можно расширить, чтобы поддерживать загрузку небольших немедленных операций и простых операций с небольшими числами.)
Для кэшей трассировки (которые хранят последовательности инструкций при определенных допущениях потока управления) могут существовать возможности объединения операций, разделенных ветвями, и удаления операций, которые дают неиспользуемые результаты в трассировке. Кэширование оптимизаций в кэше трассировки также может побуждать к выполнению оптимизаций, таких как объединение инструкций, которые могут оказаться бесполезными, если их приходится выполнять каждый раз при получении потока инструкций.
Предсказание значений может использоваться для увеличения числа операций, которые могут выполняться параллельно, путем удаления зависимостей. Предсказатель значений на основе шага аналогичен оптимизации всплывающего / push-кода специализированного стекового механизма, упомянутого ранее. Он может вычислять несколько сложений в основном параллельно, удаляя сериализацию. Общая идея прогнозирования значения заключается в том, что с прогнозируемым значением зависимые операции могут выполняться без задержки. (Направление ветвления и целевое предсказание - фактически просто очень ограниченная форма предсказания значения, позволяющая извлекать следующие инструкции, которые зависят от «значения» ветвления - взятого или нет - и следующий адрес инструкции, другое значение.)