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.
cpu
computer-architecture
Matt Simmons
fuente
fuente
Respuestas:
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.
fuente
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 ...
fuente
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 .
fuente
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 .
fuente
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.
fuente
Cycles es más un concepto por núcleo. Cada núcleo hace sus propios ciclos en paralelo.
fuente