¿Cómo puede un procesador ejecutar más IPS que su frecuencia?

¿Cómo puede un procesador ejecutar más IPS que su frecuencia?

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 inferior pueden ejecutar menos IPS que su frecuencia. Por ejemplo, elATmega328ejecuta alrededor de 16 MIPS a 16 MHZ (o al menos eso es lo que me han dicho), y elZ80ejecuta 0,5 MIPS a 4 MHz. Pero el Pentium 4 Extreme puede ejecutar más de 9 GIPS a sólo 3,2 GHz. ¡Eso es aproximadamente tres instrucciones por ciclo de reloj!

¿Cómo se hace esto y por qué no se implementa en procesadores más pequeños, comoAVRmicrocontroladores?

Encontré toda mi información, excepto el ATmega328, deaquí.

Respuesta1

Esto se debe a una combinación de características de los procesadores modernos.

Lo primero que contribuye a un IPS alto es el hecho de que los procesadores modernos tienen múltiples unidades de ejecución que pueden funcionar de forma independiente. En la imagen de abajo (tomada prestada deWikipedia: microarquitectura Intel Core) puede ver en la parte inferior que hay ocho unidades de ejecución (mostradas en amarillo) que pueden ejecutar instrucciones simultáneamente. No todas esas unidades pueden asegurar los mismos tipos de instrucción, pero al menos cinco de ellas pueden realizar una operación ALU y hay tres unidades con capacidad SSE.

ingrese la descripción de la imagen aquí

Combina eso con un largocanal de instrucciónque puede apilar instrucciones de manera eficiente listas para que esas unidades ejecuten instrucciones (fuera de servicio, si es necesario) significa que un procesador moderno puede tener una gran cantidad de instrucciones sobre la marcha en un momento dado.

Cada instrucción puede tardar algunos ciclos de reloj en ejecutarse, pero si puede paralelizar su ejecución de manera efectiva, entonces puede dar un gran impulso a IPS a costa de la complejidad del procesador y la salida térmica.

Mantener estos grandes canales llenos de instrucciones también necesita un caché grande que pueda llenarse previamente con instrucciones y datos. Esto contribuye al tamaño de la matriz 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 bajo consumo y con alta capacidad de respuesta, entonces desea un proceso corto sin demasiadas cosas "extra" que rodeen los núcleos funcionales reales. Por lo general, minimizan el caché, lo restringen a solo una de cada tipo de unidad necesaria para procesar instrucciones y reducen la complejidad de cada parte.

Ellospodríahacer un procesador pequeño tan complejo como un procesador más grande y lograr un rendimiento similar, pero entonces el consumo de energía y los requisitos de refrigeración aumentarían exponencialmente.

Respuesta2

No es difícil de imaginar. Un ciclo es todo lo que se necesita para conmutar muchos miles de transistores. Siempre que las instrucciones estén alineadas en paralelo, un ciclo puede ser suficiente para ejecutarlas todas.

Mejor que intentar explicarlo yo mismo,Aquí hay un buen punto de partida..

Respuesta3

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 32 B 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 bifurcación que puede fusionarse macro).

Consulte 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.

Ver tambiénhttp://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ó.

Respuesta4

Las respuestas anteriores muestran cómo uno obtiene más instrucciones ejecutadas según la definición de "instrucción" del procesador y uno imagina que esa es en realidad la intención del interrogador.

Pero otra fuente puede ser que cada "instrucción" sea en realidad una cierta cantidad de datos tratados como una instrucción ingresada por el procesador. Si el conteo de su fuente solo cuenta lo que el procesador considera 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 puede tener 12 bytes, otra puede tener 56 bytes, etc.). Entonces, si carga 64 bytes de material en cada ciclo como "una instrucción" (o tantas instrucciones completas como pueda antes de llegar a los 64 bytes) y uno tiene seis instrucciones en esos 64 bytes, entonces seis instrucciones (como usted y yo podríamos considerarlas) ) finalizará en ese ciclo.

Dado que muchas instrucciones muy básicas (nuestra definición "sensible") 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 usan de manera desproporcionada, esto sería de gran ayuda para que se realicen más "instrucciones". de lo que la frecuencia parecería permitir.

información relacionada