Esta pregunta ya tiene una respuesta aquí:
Esto ha sido algo que parece que no puedo entender. Casi todos los procesadores modernos pueden ejecutar más instrucciones por segundo que su frecuencia.
Puedo entender por qué los procesadores de clase baja pueden ejecutar menos IPS que su frecuencia. Por ejemplo, el ATmega328 ejecuta aproximadamente 16 MIPS a 16 MHZ (o al menos eso es lo que me han dicho), y el Z80 ejecuta 0.5 MIPS a 4 MHz. Pero entonces el Pentium 4 Extreme puede ejecutar más de 9 GIPS a solo 3.2 GHz. ¡Eso son unas tres instrucciones por ciclo de reloj!
¿Cómo se hace esto y por qué no se implementa en procesadores más pequeños, como los microcontroladores AVR ?
Encontré toda mi información, excepto el ATmega328, desde aquí .
Respuestas:
Esto se debe a una combinación de características de los procesadores modernos.
Lo primero que contribuye a una alta IPS es el hecho de que los procesadores modernos tienen múltiples unidades de ejecución que pueden funcionar de forma independiente. En la imagen a continuación (tomada de Wikipedia: Intel Core Microarchitecture ) puede ver en la parte inferior que hay ocho unidades de ejecución (que se muestran en amarillo) que pueden ejecutar todas las instrucciones al mismo tiempo. No todas esas unidades pueden asegurar los mismos tipos de instrucción, pero al menos 5 de ellas pueden realizar una operación ALU y hay tres unidades con capacidad SSE.
Combinar eso con una larga línea de instrucciones que puede apilar de manera eficiente las instrucciones listas para que esas unidades ejecuten instrucciones ( fuera de orden , si es necesario) significa que un procesador moderno puede tener una gran cantidad de instrucciones sobre la marcha en cualquier momento dado.
Cada instrucción puede tomar algunos ciclos de reloj para ejecutarse, pero si puede paralelizar efectivamente su ejecución, entonces puede darse un gran impulso a IPS a costa de la complejidad del procesador y la salida térmica.
Mantener estas grandes tuberías llenas de instrucciones también necesita un gran caché que se puede llenar previamente con instrucciones y datos. Esto contribuye al tamaño del troquel y también a la cantidad de calor que produce el procesador.
La razón por la que esto no se hace en procesadores más pequeños es porque aumenta sustancialmente la cantidad de lógica de control requerida alrededor de los núcleos de procesamiento, así como la cantidad de espacio requerido y también el calor generado. Si desea un procesador pequeño, de baja potencia y altamente receptivo, entonces quiere una tubería corta sin demasiadas cosas "adicionales" que rodean los núcleos funcionales reales. Por lo tanto, generalmente minimizan la memoria caché, la restringen a solo uno de cada tipo de unidad requerida para procesar las instrucciones y reducen la complejidad de cada parte.
Ellos podrían hacer un pequeño procesador tan complejo como como el procesador más grande y lograr un rendimiento similar, pero entonces el consumo de energía y los requisitos de refrigeración se incrementaría exponencialmente.
fuente
No es difícil de imaginar. Un ciclo es todo lo que se necesita para cambiar miles de transistores. Mientras las instrucciones estén alineadas en paralelo, un ciclo puede ser suficiente para ejecutarlas todas.
Mejor que tratar de explicarlo yo mismo, aquí hay un buen punto de partida .
fuente
Para ser un poco más fundamental que la respuesta de Mokubai:
Las CPU superescalares analizan el flujo de instrucciones en busca de dependencias de datos (y otras) entre instrucciones. Las instrucciones que no dependen unas de otras pueden ejecutarse en paralelo.
Las CPU de escritorio x86 típicas obtienen 16 o 32B de instrucciones en cada ciclo de reloj. Los diseños de Intel desde Core2 pueden emitir hasta 4 instrucciones por ciclo. (O 5, si hay una comparación y ramificación que puede fusionarse macro).
Vea la buena respuesta de Mobukai para obtener enlaces y detalles sobre cómo las CPU en la práctica realizan la tarea de extraer tanto paralelismo a nivel de instrucción como lo hacen del código que ejecutan.
Consulte también http://www.realworldtech.com/sandy-bridge/ y artículos similares para otras arquitecturas de CPU para obtener una explicación detallada de lo que hay debajo del capó.
fuente
Las respuestas anteriores muestran cómo uno obtiene más instrucciones ejecutadas por la definición de "instrucción" del procesador y uno imagina que esa es realmente la intención del interrogador.
Pero otra fuente puede ser que cada "instrucción" es en realidad una cierta cantidad de datos tratados como una entrada de instrucción por el procesador. Si el recuento de su fuente solo cuenta lo que el procesador considera como instrucciones, lo siguiente no agrega nada. Pero si su fuente cuenta todo lo que un humano llamaría una "instrucción", entonces: Agregue que no todas las instrucciones son físicamente tan largas como cualquier otra instrucción (una podría tener 12 bytes, otra podría tener 56 bytes, etc.). Entonces, si carga 64 bytes de material cada ciclo como "una instrucción" (o tantas instrucciones completas como sea posible antes de llegar a 64 bytes) y uno tiene seis instrucciones en esos 64 bytes, entonces seis instrucciones (como usted y yo podríamos considerarlas ) estará terminado en ese ciclo.
Dado que muchas instrucciones muy básicas (nuestra definición "sensata") son restos de los primeros días con longitudes de instrucción de 8 bytes, y las instrucciones muy básicas, por definición, tal vez se utilizan de manera desproporcionada, solo esto ayudaría mucho a que se realicen más "instrucciones" que la frecuencia parece permitir.
fuente
add al, bl
y 80386add eax, ebx
.