it-swarm-es.tech

¿Qué son las "instrucciones por ciclo"?

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 podría ejecutar cuatro instrucciones por ciclo, por lo que una CPU de cuatro núcleos que se ejecutara a 2Ghz ejecutaría 8 mil millones de operaciones por segundo. ¿Es este el caso?

Estoy seguro de que es simplificar demasiado las cosas, pero si hay una guía o algo más que pueda usar para aclararme, definitivamente estoy abierto a ideas.

23
Matt Simmons

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 se necesitan varios ciclos para procesar. En las arquitecturas más 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 (acierto/error de caché, predicción de rama, etc.). Hay tablas para buscar esas cosas. A menudo, también hay herramientas para medir cuántos ciclos toma una instrucción determinada en determinadas circunstancias (consulte contadores de rendimiento ).

Si está interesado en los detalles de Intel, el Manual de referencia de optimización de 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 requiere solo unos pocos (a menudo solo un) ciclo.

Superescalar

Pero independientemente de CISC o RISC, existe la arquitectura superescalar. La CPU no procesa una instrucción tras otra, sino que trabaja en muchas instrucciones simultáneamente, muy parecido a una línea de ensamblaje.

La consecuencia es: si simplemente busca los ciclos para cada instrucción de su programa y luego los suma todos, terminará con un número muy alto. Suponga 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 de varias instrucciones por ciclo.

22
Ludwig Weinzierl

La forma en que me gusta pensar es con una analogía de lavado. Las instrucciones de la CPU son como un montón de ropa. Necesita 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 harían funcionar la lavadora, luego la secadora, y tomarían 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. Entonces, 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 lavadoras y cárgalas ambas. Cuando terminen, busca 2 secadoras y úsalas ambas. Ahora puedes lavar y secar 2 cargas en 60 minutos. Eso es 2 cargas en 2 ciclos. Cada carga todavía toma 2 ciclos, pero ahora puede hacer más. El tiempo promedio ahora es de 1 carga por ciclo.

Superescalar con tubería : Lave las 2 primeras cargas, luego, mientras se secan, cargue las lavadoras con las 2 cargas siguientes. Ahora, las 2 primeras cargas todavía requieren 2 ciclos, y luego las 2 siguientes se terminan después de 1 ciclo más. Entonces, la mayoría de las veces, termina 2 cargas en cada ciclo.

Varios núcleos : Dale la mitad de tu ropa a tu madre, que también tiene 2 lavadoras y 2 secadoras. Con ambos trabajando juntos, puede hacer el doble de trabajo. Esto es similar al superescalar, pero ligeramente diferente. En lugar de tener 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 hacer ocho veces más lavandería que antes en la misma cantidad de tiempo, sin tener que crear máquinas más rápidas. (Doble velocidad de reloj: lavadoras que solo necesitan 15 minutos para funcionar).

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

Burbuja de tubería : Tienes una mancha que no salió en el lavado, así que decides lavarla nuevamente. Ahora la secadora está ahí, esperando que se 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 vayan mal, no siempre podremos hacer 4 cargas en cada ciclo, por lo que la cantidad real de trabajo realizado puede variar.

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

32
Kevin Panko

No exactamente. El ciclo al que se refiere es el ciclo de reloj y, dado que la mayoría de los procesadores modernos están en proceso, se necesitan varios ciclos de reloj para que se ejecute 1 instrucción. (Esto es bueno porque permite que otras instrucciones comiencen a ejecutarse incluso antes de que finalice la primera instrucción). Suponiendo 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 .

3
hyperslug

Los días en los que uno podía buscar (o incluso memorizar) el tiempo de ciclo para cada instrucción y saber cuántos relojes se necesitarían para que un cierto fragmento de código terminara han pasado hace mucho tiempo para los chips de alta gama (pero todavía están con nosotros en algunos microcontroladores). Un núcleo de CPU moderno y de uso general puede tener múltiples copias de varias unidades de ejecución diferentes en múltiples canalizaciones, accediendo a una memoria caché de múltiples etapas con su propia lógica, además de la capacidad de predicción de ramas y ejecución especulativa. Tener múltiples núcleos en un solo dado arrastra la lógica de consistencia de la 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.

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

1
Synetech

Los ciclos son más un concepto por núcleo. Cada núcleo tiene sus propios ciclos en paralelo.

0
Joakim Elofsson