¿Qué son las "Instrucciones por ciclo"?


23

He estado aprendiendo un poco más sobre cómo funcionan los procesadores, pero no he podido encontrar una respuesta directa sobre las instrucciones por ciclo.

Por ejemplo, tenía la impresión de que una CPU de cuatro núcleos podía ejecutar cuatro instrucciones por ciclo, por lo que una CPU de cuatro núcleos que funciona a 2Ghz ejecutaría 8 mil millones de operaciones por segundo. ¿Es este el caso?

Estoy seguro de que simplifica demasiado las cosas, pero si hay una guía u otra cosa que pueda usar para aclararme, definitivamente estoy abierto a las ideas.


No, ese no es el caso. Las CPU x86 modernas pueden sostener tres instrucciones por núcleo por ciclo en condiciones ideales, mientras que algunas instrucciones pueden requerir docenas de ciclos.
David Schwartz

Respuestas:


22

Las palabras clave que probablemente debería buscar son CISC , RISC y arquitectura superescalar .

CISC

En una arquitectura CISC (x86, 68000, VAX) una instrucción es poderosa, pero su procesamiento requiere varios ciclos . En arquitecturas antiguas, el número de ciclos era fijo, hoy en día el número de ciclos por instrucción generalmente depende de varios factores (aciertos / fallas de caché, predicción de bifurcación, etc.). Hay mesas para buscar esas cosas. A menudo también hay facilidades para medir cuántos ciclos toma una determinada instrucción bajo ciertas circunstancias (ver contadores de rendimiento ).

Si está interesado en los detalles de Intel, el Manual de referencia de optimización Intel 64 e IA-32 es una muy buena lectura.

RISC

La arquitectura RISC (ARM, PowerPC, SPARC) significa que, por lo general, una instrucción muy simple toma solo unos pocos (a menudo solo un) ciclo.

Superescalar

Pero independientemente de CISC o RISC existe la arquitectura superescalar. La CPU no está procesando una instrucción tras otra, pero está trabajando en muchas instrucciones simultáneamente, muy similar a una línea de ensamblaje.

La consecuencia es: si simplemente busca los ciclos para cada instrucción de su programa y luego los agrega a todos, terminará con un número alto. Supongamos que tiene una CPU RISC de un solo núcleo. El tiempo para procesar una sola instrucción nunca puede ser menor que el tiempo de un ciclo, pero el rendimiento general puede ser varias instrucciones por ciclo.


99
Para mí, la analogía de la "línea de montaje" sugiere una simple tubería, no una arquitectura superescalar. Superscalar implica la replicación de partes del hardware de la CPU (por ejemplo, una etapa de la tubería que es un cuello de botella) para mejorar el rendimiento.
sblair

2
Estoy agregando por brevedad: RISC = conjunto de instrucciones reducido; CISC = conjunto de instrucciones complejas. Buena explicación, Ludwig por señalar la proporción de aciertos / errores de caché y (en última instancia) señalar TLB. Explicar la arquitectura del microprocesador no es fácil, ¡especialmente agruparlo todo en una publicación (bastante compacta)! :)
osij2is

1
Por lo que escuché, las CPU en estos días pasan mucho tiempo esperando en el trabajo para aparecer desde la memoria principal. Al menos esa fue la respuesta que obtuve cuando pregunté por qué no hay más núcleos de ejecución en una CPU.
Surfasb

32

La forma en que me gusta pensar es con una analogía de lavandería. Las instrucciones de la CPU son como cargas de ropa. Debe usar tanto la lavadora como la secadora para cada carga. Digamos que cada uno tarda 30 minutos en ejecutarse. Ese es el ciclo del reloj. Las CPU viejas funcionarían con la lavadora y luego con la secadora, demorando 60 minutos (2 ciclos) para terminar cada carga de ropa, cada vez.

Tubería : una tubería es cuando usa ambos al mismo tiempo: lava una carga, luego, mientras se seca, lava la siguiente carga. La primera carga tarda 2 ciclos en finalizar, pero la segunda carga finaliza después de 1 ciclo más. Por lo tanto, la mayoría de las cargas solo necesitan 1 ciclo, excepto la primera carga.

Superscalar: lleva toda la ropa a la lavandería. Consigue 2 arandelas y cárgalas. Cuando terminen, busque 2 secadoras y úselas. Ahora puede lavar y secar 2 cargas en 60 minutos. Eso es 2 cargas en 2 ciclos. Cada carga todavía toma 2 ciclos, pero puede hacer más de ellos ahora. El tiempo promedio es ahora de 1 carga por ciclo.

Superescalar con tubería: lave las 2 primeras cargas, luego, mientras se están secando, cargue las arandelas con las siguientes 2 cargas. Ahora, las primeras 2 cargas todavía toman 2 ciclos, y luego las siguientes 2 se terminan después de 1 ciclo más. Entonces, la mayoría de las veces, terminas 2 cargas en cada ciclo.

Múltiples núcleos: entregue la mitad de su ropa a su madre, que también tiene 2 lavadoras y 2 secadoras. Con los dos trabajando juntos, pueden hacer el doble de cosas. Esto es similar al superescalar, pero ligeramente diferente. En lugar de que tenga que mover toda la ropa hacia y desde cada máquina usted mismo, ella puede hacerlo al mismo tiempo que usted.

Esto es genial, podemos lavar ocho veces más que antes en la misma cantidad de tiempo, sin tener que crear máquinas más rápidas. (Duplique la velocidad del reloj: lavadoras que solo necesitan 15 minutos para funcionar).

Ahora, hablemos de cómo van las cosas mal:

Burbuja de tubería: tiene una mancha que no salió en el lavado, por lo que decide lavarla nuevamente. Ahora la secadora está sentada allí, esperando que haga algo.

Cache Miss: el camión que entrega la ropa sucia está atascado en el tráfico. Ahora tiene 2 lavadoras y 2 secadoras, pero no está trabajando porque tiene que esperar.

Dependiendo de la frecuencia con la que las cosas salgan mal, no podremos realizar siempre 4 cargas cada ciclo, por lo que la cantidad real de trabajo realizado puede variar.

Predicción de rama: Bueno, comienzas a lavar la ropa limpia en caso de que la manches más tarde para que ya esté limpia ... bueno, aquí es donde se rompe la analogía ...


Buena analogía Lo voy a robar.
dmckee

66
Y hyperthreading es como tener a varias personas lavando en la misma lavandería.
Ronald Pottol

1
Predicción de sucursales: comienzas a lavar la ropa que crees que necesitarás en la próxima semana
Akash

2
Hyperthreading: comienza a aceptar la ropa de otras personas y anuncia la cantidad de lavadoras que tiene (1). Pronto, se da cuenta de que su lavadora tiene espacio para más que el par de pantalones que está lavando, no solo otro par de pantalones, sino algo más pequeño. Así que también te pones unos calcetines. Ahora anuncia 2 lavadoras y espera que la gente deje la ropa lo suficientemente diversa como para que siempre "llene los agujeros" con artículos más pequeños. Justo cuando este tipo que solo viene con 10 jeans sucios y 1 par de calcetines deja caer sus cosas, es más lento que nunca.
Florenz Kley

@ Akash ¿Lavas la ropa que aún no tiene manchas, por si acaso?
Kevin Panko

3

No exactamente. El ciclo al que te refieres es el ciclo del reloj y, dado que la mayoría de los procesadores modernos están en proceso, se necesitan varios ciclos de reloj para ejecutar 1 instrucción. (Esto es bueno porque permite que otras instrucciones comiencen a ejecutarse incluso antes de que termine la primera instrucción). Suponiendo que la circunstancia más ideal, probablemente sería alrededor de 8 mil millones de IPC, pero suceden todo tipo de cosas como dependencias, burbujas en la tubería. , ramas, etc., por lo que no siempre funciona.

Lo siento, es demasiado complicado para una respuesta directa. Jon Stokes hace un buen trabajo al explicarlo con este artículo .


2

Los días en que uno podía buscar (o incluso memorizar) el tiempo del ciclo para cada instrucción y saber cuántos relojes se necesitarían para que un cierto fragmento de código terminara ya pasaron para los chips de alta gama (pero todavía están con nosotros en algunos microcontroladores). Un núcleo de CPU moderno y de propósito general puede tener múltiples copias de varias unidades de ejecución diferentes en múltiples tuberías, accediendo a una memoria caché de etapas múltiples con su propia lógica, más la predicción de rama y la capacidad de ejecución especulativa. Tener múltiples núcleos en un solo dado arrastra en la lógica de consistencia de caché y otras complejidades.

Entonces, la respuesta corta es: más núcleos significa más capacidad para hacer las cosas, pero no de una manera agradable y predecible .


1

Ludwig explicó la diferencia entre CISC y RISC, pero olvidó mencionar que si bien las instrucciones RISC son simples y rápidas, hacen poco individualmente, por lo que debe unir varias para hacer lo mismo que una sola instrucción en un procesador CISC. Como resultado, algunas instrucciones RISC serán más rápidas, otras no.


0

Cycles es más un concepto por núcleo. Cada núcleo hace sus propios ciclos en paralelo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.