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

14

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

Jaca
fuente
3
Eche un vistazo a Wikipedia para palabras de moda como canalización, arquitectura súper escalar, ejecución fuera de orden, subprocesamiento múltiple simultáneo, núcleo múltiple, extensión de vector (SSE, ..., AVX), almacenamiento en caché, etc. En general, el valor del IPC puede ser inferior a 1,0.
Paebbels
77
Querías decir 9 GIPS para el Pentium 4, no MIPS, ¿verdad?
Calimo
55
Auto-promoción: ¿Cómo puede una CPU entregar más de una instrucción por ciclo? me preguntaron en el intercambio de apilamiento de ingeniería eléctrica (mi respuesta fue aceptada y tal vez demasiado votada).
Paul A. Clayton
Siempre me he preguntado, ¿no debería votar algo si ya es tan alto como creo que debería ser? ¿O siempre votar si creo que el esfuerzo y la calidad de una publicación merecen una recompensa?
Peter Cordes
@PeterCordes Hay diferentes filosofías de votación. Algunos afirman que "útil" es el único criterio, otros consideran un mérito relativo (para las respuestas). Tiendo a considerar el recuento absoluto de votos ("agradable", "bueno", "excelente" las insignias de publicación implican que se debe considerar), así como el recuento relativo de votos (que ayuda a responder a la clasificación). Sorprendentemente, Meta.SE no parece tener mucho sobre este tema y " ¿Cómo debo votar? " ¡Ni siquiera tiene una respuesta!
Paul A. Clayton

Respuestas:

23

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.

ingrese la descripción de la imagen aquí

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.

Mokubai
fuente
Nunca supe que había unidades de ejecución especializadas, y más de una. Pero aún así, sería bueno tener un Arduino superescalar. No me importarían los requisitos de energía y enfriamiento si significara más rendimiento. Gracias por la respuesta.
Jaca
1
Si quieres un procesador superescalar, usa uno. Pero Arduinos ocupa un lugar para las personas que tienen en cuenta los requisitos de potencia y enfriamiento (y el costo y la complejidad) de los procesadores superescalares.
David Schwartz
4

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 .

misha256
fuente
3

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

Peter Cordes
fuente
-2

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.

Roy
fuente
Eso está un poco cerca de cómo funcionan realmente las CPU, pero obtener múltiples insns de máquina por ciclo es solo una parte de cómo funciona una CPU superescalar. (y las longitudes promedio de las insns son más como 4 bytes, para x86.) Las tuberías profundas significan que las instrucciones que se obtienen ahora podrían no finalizar la ejecución durante 15 ciclos (o mucho más, si se retienen por una falta de caché, pero las instrucciones no dependientes podrían siga ejecutando.) Su explicación no describe un diseño canalizado en absoluto. Tampoco está claro cuál cree que es la diferencia entre un 886 8086 add al, bly 80386 add eax, ebx.
Peter Cordes