¿La profundidad y el número de etapas son la misma medida para una tubería de CPU?

1

¿Es cierto que la profundidad de una tubería de CPU y el número de etapas de una tubería de computadora son medidas diferentes? No hay mucha información al respecto si busco en google o busco en mis libros. Creo que la profundidad es una medida de la superposición de instrucciones, mientras que el número de etapas es una constante de hardware. Cuando aumenta el número de etapas, normalmente hace que la CPU sea más rápida, pero con un margen decreciente. Miré la ley de Almdahl sobre esto y el libro " Organización y diseño de computadoras "por Pattersson y Hennesay .

Cuantas más etapas, mayor es la profundidad, pero se afirma que puede haber un número óptimo de etapas o una profundidad óptima:

De acuerdo con (M.S. Hrishikeshi et al. 29º Simposio Internacional sobre Arquitectura de Computadoras)

  

La diferencia entre la profundidad de la tubería y las etapas de la tubería; es el   Profundidad lógica óptima por etapa de tubería, que es aproximadamente de 6 a 8 FO4   Retrasos del inversor. En eso, al disminuir la cantidad de lógica por   la etapa de la tubería aumenta la profundidad de la tubería, lo que a su vez reduce el IPC debido   Aumento de penalizaciones por predicción errónea y unidad funcional.   latencias Además, reduciendo la cantidad de lógica por pipeline.   etapa reduce la cantidad de trabajo útil por ciclo mientras no afecta   Gastos generales asociados con cierres, sesgo de reloj y jitter. Por lo tanto,   Las etapas de tubería más cortas hacen que la sobrecarga se convierta en una mayor   fracción del período de reloj, lo que reduce la frecuencia efectiva   ganancias.

    

1 respuesta

2

Argumentaría que la "profundidad" es una medida de la superposición de instrucciones en el sentido de que indica la cantidad de tiempo (número de ciclos de reloj) que debe transcurrir antes de que una instrucción posterior pueda utilizar el resultado de una instrucción.

Sin embargo, puede haber etapas de hardware adicionales (precarga y decodificación de instrucciones, escritura de memoria, etc.) que no contribuyen a esta latencia, por lo que el "número de etapas" podría ser mucho mayor que la "profundidad".

El concepto de "profundidad óptima" surge del hecho de que hacer una pequeña cantidad de trabajo en cada ciclo de reloj (tener un gran número de etapas) permite una frecuencia de reloj más alta, pero también aumenta la profundidad (latencia). Eventualmente, esto se convierte en una responsabilidad, ya que puede llegar al punto donde el compilador no tiene instrucciones útiles que pueda programar para llenar los vacíos impuestos por la latencia.

Esto no fue un gran problema para las supercomputadoras tempranas, ya que estaban enfocadas en el procesamiento de grandes arreglos o vectores de datos que no tenían dependencias de datos entre las operaciones individuales, por lo que podían permitirse tener tuberías profundas que funcionaban a altas frecuencias. . Sin embargo, los cálculos "aleatorios" sobre datos escalares generalmente tienen más dependencias de datos y requisitos de latencia mucho más cortos, lo que lleva a la necesidad de mantener la profundidad de la tubería relativamente pequeña. Si no se resuelve, este "cuello de botella escalar" puede limitar gravemente el rendimiento general de una aplicación, que es de lo que trata la Ley de Amdahl.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas