¿La profundidad y el número de etapas son la misma medida para una canalización de CPU?

¿Es cierto que la profundidad de una tubería de CPU y la cantidad 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, generalmente 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" de Pattersson y Hennesay .

ingrese la descripción de la imagen aquí

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

Según (MS Hrishikeshi et. al. el 29º Simposio Internacional sobre Arquitectura de Computadores)

La diferencia entre la profundidad de la tubería y las etapas de la tubería; es la profundidad lógica óptima por etapa de tubería, que es de aproximadamente 6 a 8 retrasos del inversor de FO4. En eso, al disminuir la cantidad de lógica por etapa de tubería, aumenta la profundidad de la tubería, lo que a su vez reduce el IPC debido al aumento de las penalizaciones por errores de predicción de rama y las latencias de las unidades funcionales. Además, la reducción de la cantidad de lógica por etapa de canalización reduce la cantidad de trabajo útil por ciclo sin afectar los gastos generales asociados con bloqueos, desfases de reloj y fluctuaciones. Por lo tanto, las etapas de tubería más cortas hacen que la sobrecarga se convierta en una fracción mayor del período del reloj, lo que reduce las ganancias de frecuencia efectivas.

Estoy de acuerdo en que esos términos en ese contexto son intercambiables.

Respuestas (1)

Yo dirí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 el resultado de una instrucción pueda ser utilizado por una instrucción posterior.

Sin embargo, puede haber etapas de hardware adicionales (búsqueda previa y decodificación de instrucciones, escritura en memoria, etc.) que no contribuyan a esta latencia, por lo que el "número de etapas" podría ser 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 una gran cantidad de etapas) permite una frecuencia de reloj más alta, pero también aumenta la profundidad (latencia). Eventualmente, esto se convierte en una responsabilidad, porque puede llegar al punto en que el compilador no tenga instrucciones útiles que pueda programar para llenar los vacíos impuestos por la latencia.

Esto no fue un gran problema para las primeras supercomputadoras, porque estaban enfocadas en procesar grandes arreglos o vectores de datos que no tenían dependencias de datos entre las operaciones individuales, por lo que podían permitirse tener canalizaciones profundas que se ejecutaban a altas frecuencias. Sin embargo, los cálculos "aleatorios" en 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 canalización relativamente pequeña. Si no se soluciona, este "cuello de botella escalar" puede limitar gravemente el rendimiento general de una aplicación, que es de lo que se trata la Ley de Amdahl.

Solo agrego que la ejecución especulativa (generalmente predicción de ramificación, pero, por ejemplo, también es posible la especulación de memoria) difumina aún más la distinción. La profundidad efectiva experimentada por cualquier instrucción dada depende en gran medida del contexto.