¿Cómo puede el número de ciclos de reloj requeridos para completar una instrucción en un procesador canalizado menos que la latencia de la tubería?

5

No soy nuevo en arquitectura de computadoras, pero solo tengo experiencia académica con la implementación de microarquitecturas.

He escuchado y leído esto muchas veces, pero nunca me molesté en comprender la afirmación: Algunas instrucciones se completan en 1 o 2 ciclos de reloj, mientras que las instrucciones más complejas dicen que el entero o el punto flotante se completan en 2, 4, 6 ciclos de reloj o cargue / almacene en ciclos de reloj de 80-100 debido a una memoria lenta.

Ahora estoy seguro de que la mayoría de los procesadores, ya sea embebidos o de escritorio, tienen pocas etapas de tuberías, desde 5 etapas hasta 30 etapas. Por lo tanto, la latencia para cada instrucción debe ser igual a la profundidad de la tubería o al número de etapas de la tubería. Además, el rendimiento de un solo procesador escalar de tubería puede ser de un máximo de 1 IPC (Instrucciones por ciclo). Pero, ¿cómo pueden algunas instrucciones terminar en 1,2 o 4 ciclos de reloj para un procesador con 10 etapas o 12 etapas? ¿Puede alguien explicarme eso?

PS: Lo único que puedo entender es que tal vez algunas etapas están marcadas como una etapa de Ciclo múltiple, como se hace generalmente durante la STA y el cierre de tiempo. ¿Y que están tratando de decir que la ejecución de la instrucción toma 1cc, 2cc, 4cc, etc. en esa etapa particular de varios ciclos?

    
pregunta nurabha

3 respuestas

3

En general, el tiempo de ejecución de la instrucción no se mide desde el momento en que ingresa a la tubería hasta el momento en que sale, sino más bien desde el momento en que pasa un punto arbitrario en la tubería hasta el momento en que la siguiente instrucción pasa ese punto. Si ninguna instrucción toma más de, por ejemplo. 20 ciclos para abrirse paso a través de la tubería, medir el tiempo para que una secuencia de instrucciones pase por un estado arbitrario producirá un resultado que está dentro de los 20 ciclos del tiempo real requerido para ejecutar la secuencia completa desde el principio hasta el final. Dado que los programadores generalmente están mucho menos interesados en el tiempo para ejecutar una sola instrucción, que en el tiempo requerido para ejecutar secuencias que contienen muchas instrucciones (a menudo miles, si no más), generalmente solo se preocuparán de la canalización en los casos en que puede agregar una costo no constante para el tiempo de ejecución general (por ejemplo, si la ejecución repetida de una secuencia de instrucciones agregará un bloqueo de tubería cada vez).

    
respondido por el supercat
2

La longitud de la tubería es solo el retraso entre la entrada y la salida.

Los ciclos de finalización son la cantidad de tiempo que necesita por operación.

Esto no es lo mismo, uno es "retraso" y el otro es "velocidad". Por lo tanto, es perfectamente posible tener tuberías y varios ciclos por instrucción en cualquier proporción.

Suponga que tiene una tubería de 5 etapas y necesita 3 ciclos por instrucción. Esto significa que los siguientes dos ciclos después de aplicar una entrada, la unidad no está lista para aceptar una nueva entrada. Además de eso, hay un retraso de 5 ciclos debido a la tubería. Por lo tanto, se requieren 8 ciclos desde la aplicación de la entrada hasta que el resultado esté disponible. Pero con respecto al rendimiento, solo se necesitan 3 ciclos por operación. Es decir. Aunque el primer resultado no se completa por completo, en el tercer ciclo se puede aceptar una nueva entrada y el cálculo se inicia (y los resultados se obtienen 8 ciclos más tarde).

Con una tubería, está haciendo cosas en paralelo (a costa de la demora), que de otro modo tendría que hacer en serie (más ciclos por operación).

    
respondido por el Andreas H.
2

Me parece imposible tener una instrucción que pueda proceder a través de todas las etapas de canalización (Fetch - > Decode - > ...) en uno o dos ciclos de reloj. El "tiempo de ejecución" como lo mencionaste es, probablemente, una especie de jerga.

La mejor suposición que puedo hacer sin poder ver todo el contexto de la declaración que lo desconcierta, es que estos números representan el "estancamiento" de la tubería cuando se ejecuta la instrucción de algún tipo. La otra forma de decirlo es que este número representa el rendimiento teórico de la tubería si solo se ejecutaran las instrucciones de este tipo.

Por ejemplo:

  • Si las únicas instrucciones que se suministran a la canalización podrían ser Mover entre registros, el rendimiento de la tubería sería igual a 1: en cada ciclo de reloj se completa una instrucción.
  • Si la única instrucción que se suministra a la canalización podría ser Cargar desde la memoria, el rendimiento de la tubería sería igual a \ $ \ frac {1} {100} \ $ (asumiendo que esta instrucción detiene la tubería por 100 horas) ciclos).

En las CPU modernas de múltiples tuberías no hay mucho uso solo del "tiempo de ejecución de instrucciones" en bruto. El empleo de almacenamiento en caché multinivel, ejecución fuera de orden, ramificación predictiva y muchos más, complica el análisis y mitiga la penalización de estancamiento de un solo canal. A veces esta penalización puede reducirse a cero.

Sí, la fuente de este bloqueo de la tubería es el hecho de que algunas instrucciones pueden tener etapas de "múltiples ciclos". Sin embargo, el uso de "multiciclo" en este contexto no siempre es el mismo que el uso de "multiciclo" en el contexto de las herramientas STA. La etapa de multiciclos de la tubería puede ser una etapa combinatoria que lleva pocos ciclos de reloj (en cuyo caso también debe definirse como multiciclo para herramientas STA), o puede ser una etapa secuencial que requiere más de un ciclo de reloj único para completa (en cuyo caso aún debe cumplir con el cronograma como una etapa de ciclo único).

    
respondido por el Vasiliy

Lea otras preguntas en las etiquetas