¿Hay casos en los que un solo ciclo es mejor que la canalización?

1

Mi profesor me ha preguntado

  

¿Cuándo la canalización es mejor que las CPU MIPS de un solo ciclo?

En realidad respondí "siempre", pero no estoy seguro de que esa sea la respuesta correcta. Si se excluye un aumento en la complejidad del diseño y la complejidad agregada en el manejo de riesgos, desde el punto de vista del rendimiento, ¿la canalización no siempre da mejores ( o iguales ) resultados?

EDIT: omití que estaba hablando de la arquitectura MIPS.

    
pregunta Giuseppe

4 respuestas

6

Depende de lo que quieres decir con "rendimiento". La canalización generalmente mejora el rendimiento, medido en términos de resultados por unidad de tiempo, pero aumenta la latencia, el tiempo que transcurre desde el principio hasta el final de cualquier cálculo en particular.

A veces lo último es más importante que lo anterior. En particular, si el código tiene muchas ramas condicionales con solo un pequeño número de otras instrucciones entre ellas, la latencia asociada con la decisión de la dirección de cada rama hace que sea imposible mantener la tubería llena de instrucciones útiles.

Por ejemplo, suponga que la conversión de una implementación de un solo ciclo a una canalización de cinco etapas le permite duplicar la velocidad del reloj, pero que una rama condicional requiere que limpie la tubería. Si el 20% de las instrucciones son ramas condicionales, la implementación segmentada ya se reduce al mismo rendimiento que la implementación original.

Una máquina de un solo ciclo usa cada ciclo de reloj, por lo que a 1 GHz, se necesitan 5 ns para ejecutar 5 instrucciones.

La máquina canalizada funciona a 2 GHz, por lo que descodifica las 5 instrucciones en 5 ciclos de reloj, o 2.5 ns. Pero se necesitan otros 5 ciclos (2.5 ns) hasta que se conozca el resultado de la rama, durante el cual no se pueden emitir otras instrucciones para la tubería. Solo después del décimo ciclo se puede descodificar la siguiente instrucción útil, lo que significa que esta máquina también tomó un total de 5 ns para ejecutar esas mismas instrucciones.

    
respondido por el Dave Tweed
5

Si está diseñando un sistema de control de hardware que depende en gran medida de una gran cantidad de señales de interrupción de varios sensores y temporizadores, un procesador canalizado puede degradar seriamente el rendimiento del sistema.

Debido a que las interrupciones causan apilamiento y bifurcación inmediatos, es posible que lo que se encuentra actualmente en la tubería deba abortarse y enjuagarse, o la interrupción puede mantenerse hasta que se elimine la tubería actual.

Ninguno es ventajoso si el tiempo de respuesta a la interrupción es crítico.

En el peor de los casos, con interrupciones aleatorias, un procesador de tuberías puede hacer que el sistema falle de forma catastrófica.

¿Se puede diseñar un procesador para evitar estos problemas? Posiblemente, pero eso no responde a tu pregunta tal como se te hizo.

    
respondido por el Trevor_G
3

Una de las ventajas de una CPU de un solo ciclo sobre una CPU segmentada es la previsibilidad. Esto es importante si está utilizando el procesador para operaciones de tiempo crítico, como el "bit banging" de bajo nivel o el procesamiento en tiempo real.

Un ejemplo es el procesador Sitara utilizado por Beaglebone. Además del procesador ARM principal, el chip contiene dos microcontroladores PRU (unidad programable en tiempo real), que tienen una implementación de un solo ciclo en lugar de canalizado. (Los detalles en esta presentación .) Dado que cada instrucción es predeciblemente toma 5ns, puede asegurarse de que se cumplan los requisitos en tiempo real.

    
respondido por el Ken Shirriff
2

Dave lo entiende bien, pero sus ejemplos son difíciles de seguir imo.

La canalización es la compensación entre rendimiento y latencia. Si canalizas, has añadido latencia.

Un ejemplo simple: si tiene una función DIVIDIR que toma 4 ciclos de tubería y una función ADD que toma 1 ciclo de tubería, pero todas las operaciones tienen que pasar por toda la tubería para llegar a la salida, los ADD ahora tomarían 4 ciclos en lugar de 1. La ventaja de esta tubería es que si dividiera muchas cosas, después de 3 ciclos, podría pasar 1 DIVISIÓN en cada ciclo de reloj mientras que sin una tubería, solo podría obtener 1 DIVISIÓN cada 4 relojes.

Hemos intercambiado 3 ciclos de tiempo de latencia en la función AGREGAR para obtener un mayor rendimiento DIVIDOS después de que se inicia la canalización.

Tenga en cuenta que este ejemplo es simplista y que cualquier arquitecto de hardware intentaría encontrar la forma de evitar la latencia para la función AGREGAR, pero esta es la idea básica que ofrecen los canales de compensación.

    
respondido por el horta

Lea otras preguntas en las etiquetas