Primero, como lo señalan el comentario de Keelan y la respuesta de Turbo J , la medición fue de 113,093 MIPS Dhrystone, no MIPS nativos .
La microarquitectura Ivy Bridge del i7 3630QM solo puede comprometer 4 µops fusionados por ciclo, aunque puede comenzar la ejecución de 6 µops por ciclo. (El número de µops fusionados en una traza de código es aproximadamente igual al número de instrucciones; algunas instrucciones complejas se decodifican en múltiples µops que no están fusionadas y algunos pares de instrucciones pueden fusionarse en una sola µop, por ejemplo, una comparación inmediata seguido de un salto condicional).
Dos de sus especulaciones sobre cómo se pueden ejecutar múltiples instrucciones en un solo ciclo son bastante válidas y se han utilizado en procesadores reales. Su primera especulación, que se utiliza un reloj interno más rápido, se utilizó en las ALU "bola de fuego" del Pentium 4 original. Estas ALU se registraron al doble de la frecuencia del resto del núcleo, que ya era relativamente alta.
(Esto se logró mediante el uso de una ALU escalonada en la que la mitad inferior de una adición se realizó en un ciclo, lo que permite que una operación dependiente use la mitad inferior del resultado en el siguiente ciclo. Para operaciones como sumar, xor o desplazamiento a la izquierda que solo necesitan la mitad inferior de los operandos para producir la mitad inferior completa del resultado, tal escalonamiento, también conocido como canalización de ancho, permite una latencia de resultados de ciclo único, así como un rendimiento de ciclo único).
HyperSPARC utilizó una técnica algo relacionada, las ALU en cascada. HyperSPARC introdujo los resultados de dos ALU en una tercera ALU. Esto permitió ejecutar dos operaciones independientes y una tercera dependiente en un solo ciclo.
Su especulación de que "hay múltiples tuberías concurrentes por núcleo" es la otra técnica que se ha utilizado. Este tipo de diseño se llama superescalar y es, con mucho, el medio más común para aumentar el número de operaciones ejecutadas en un solo ciclo.
También hay algunas otras probabilidades y fines de ejecución de la instrucción que vale la pena señalar. Algunas operaciones pueden realizarse de manera más eficiente fuera de las unidades de ejecución ordinarias. La técnica de eliminación de movimientos explota el uso del cambio de nombre de registro en procesadores fuera de orden para realizar operaciones de movimiento durante el cambio de nombre de registro; el movimiento simplemente copia el número de registro físico de una posición en la tabla de cambio de nombre (llamada tabla de alias de registro) a otra. Esto no solo aumenta efectivamente el ancho de ejecución sino que también elimina una dependencia. Esta técnica se utilizó antes con el x87 basado en pila, pero ahora se usa ampliamente en los procesadores x86 de alto rendimiento de Intel. (El uso de instrucciones destructivas de dos operandos en x86 hace que la eliminación de movimientos sea más útil de lo que sería en un RISC típico).
Una técnica similar a la eliminación de movimiento es el manejo de las instrucciones de puesta a cero del registro durante el cambio de nombre. Al proporcionar un nombre de registro que proporcione el valor cero, una instrucción de borrado de registro (como xor o restar con ambos operandos siendo el mismo registro) simplemente puede insertar ese nombre en la tabla de cambio de nombre (RAT).
Otra técnica utilizada por algunos procesadores x86 reduce el costo de las operaciones push y pop. Normalmente, una instrucción que usa el puntero de la pila tendría que esperar un ciclo completo para una inserción o pop anterior para actualizar el valor del puntero de la pila. Al reconocer que push y pop solo suman o restan un pequeño valor al puntero de la pila, uno puede calcular los resultados de múltiples adiciones / subtacciones en paralelo. El retraso principal para la adición es la propagación de acarreo, pero con valores pequeños, los bits más significativos del valor base, en este caso el puntero de la pila, solo tendrán como máximo un arrastre. Esto permite que se aplique una optimización similar a la de un sumador carry-select a múltiples adiciones de valores pequeños. Además, dado que el puntero de la pila generalmente solo se actualiza mediante constantes,
También es posible fusionar instrucciones en una sola operación más compleja. Si bien el proceso inverso de dividir las instrucciones en operaciones múltiples y más simples es una técnica antigua, fusionar instrucciones (que Intel denomina fusión macro-op) puede permitir que la implementación admita operaciones más complejas que las expuestas en el conjunto de instrucciones.
En el lado teórico, se han propuesto otras técnicas. Las constantes pequeñas que no sean cero podrían admitirse en la RAT y algunas operaciones simples que usan o producen de manera confiable valores tan pequeños podrían manejarse temprano. ("Physical Register Inlining", Mikko H. Lipasti et al., 2004, sugirió usar la RAT como un medio para reducir el conteo de registros, pero la idea podría extenderse para soportar la carga de pequeños elementos inmediatos y operaciones simples en números pequeños).
Para las memorias caché de rastreo (que almacenan secuencias de instrucciones bajo supuestos particulares de flujo de control), puede haber oportunidades para fusionar operaciones separadas por ramas y eliminar operaciones que producen resultados no utilizados en la traza. El almacenamiento en caché de las optimizaciones en una memoria caché de seguimiento también puede alentar la realización de optimizaciones, como la fusión de instrucciones, que tal vez no valga la pena si se tuvieran que hacer cada vez que se obtiene la secuencia de instrucciones.
La predicción de valor se puede usar para aumentar el número de operaciones que se pueden ejecutar en paralelo eliminando dependencias. Un predictor de valor basado en pasos es similar a la optimización pop / push de un motor de pila especializado mencionado anteriormente. Puede calcular múltiples adiciones principalmente en paralelo, eliminando la serialización. La idea general de la predicción de valor es que con un valor predicho, las operaciones dependientes pueden proceder sin demora. (La dirección de la bifurcación y la predicción del objetivo es efectivamente solo una forma muy limitada de predicción de valor, que permite obtener las siguientes instrucciones que dependen del "valor" de la bifurcación, tomada o no, y la siguiente dirección de instrucción, otro valor).