Cuántos ciclos de bloqueo resultaron de una bifurcación predicha incorrectamente en la canalización de instrucciones

He estado resolviendo el siguiente problema de ejercicio del libro Computer Organization de Patterson y Hennessy:

La importancia de tener un buen predictor de saltos depende de la frecuencia con la que se ejecuten los saltos condicionales. Junto con la precisión del predictor de bifurcaciones, esto determinará cuánto tiempo se pasa estancado debido a bifurcaciones mal pronosticadas. En este ejercicio, suponga que el desglose de las instrucciones dinámicas en varias categorías de instrucción es el siguiente: Además, suponga las siguientes precisiones del predictor de bifurcación: Los ciclos de bloqueo debido a bifurcaciones mal pronosticadas aumentan el CPI. ¿Cuál es el CPI adicional debido a las bifurcaciones mal predichas con el predictor siempre tomado? Suponga que los resultados de la bifurcación se determinan en la etapa EX, que no hay riesgos de datos y que no se utilizan intervalos de demora.ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

La solución dada fue:

Cada rama que no sea predicha correctamente por el predictor siempre tomado causará 3 ciclos de bloqueo, por lo que tenemos:
ingrese la descripción de la imagen aquí

Duda

Estaba pensando en cómo la bifurcación predicha incorrectamente puede causar 3 ciclos de bloqueo. Pude adivinar solo 2 ciclos de pérdida. Considere la secuencia de instrucciones:

BEQ R1, R2, Label
INSNX
INSNY
:
:
Label: TINS1
TINS2

Dónde,

  • BEQes rama si igual instrucción.
  • TINSsignifica instrucción objetivo.
  • INSNsignifica instrucciones junto a BEQ.

Considere que se usa el "predictor de toma de rama estática" que siempre obtiene previamente la instrucción de destino de la rama, pensando que siempre se tomará la rama. Sin embargo, suponga que la predicción falla y las dos instrucciones precargadas deben descartarse. ¿No debería esta ejecución causar dos ciclos de bloqueo como se explica a continuación?

BEQ       F   D   E  
TINS1         F   D   X        (Branch Taken prediction, target instruction prefetched,      
                                but prediction failed, thus instruction cancelled)
TINS2             F   X        (prediction failed, thus instruction cancelled)
INSNX                 F   D... (Instruction after BEQ executed)

             |<--->|           (Two instructions cancelled. 
                                Isnt this equals two stall cycles?)

¿No prueba esto que el resultado de la bifurcación predicho incorrectamente en 2 ciclos de parada? ¿Qué me estoy perdiendo?

¿Podría consultar la(s) página(s) y la edición del libro? Y has considerado (¿o deberías? No sé...) un ciclo para actualizar el propio predictor de rama (este es un predictor de 2 bits, por lo que el estado debe actualizarse, ¿sí?)
No, ni yo en la explicación más inferior ni la solución del libro consideraron el ciclo para actualizar el predictor de rama. De hecho, no estaba al tanto de la necesidad de dicho ciclo, ya que nunca me encontré con tal problema. Sin embargo, no creo que tengamos que considerarlo aquí, ya que el problema dice explícitamente "¿Cuál es el CPI adicional debido a las bifurcaciones mal pronosticadas con el predictor siempre tomado?" (Segunda última línea en la primera cita). El "predictor siempre tomado" es un predictor estático que asume que siempre se tomará esa rama.
Lo que me hizo preguntarte es que también veo en tu pregunta la columna "2 bits" en una tabla allí. Sin embargo, también veo que esos porcentajes en esa tabla tampoco se aplican. Entonces, supongo que debo aceptar su punto sobre el uso del predictor estático. Mi error. Todavía me gustaría saber qué edición y qué página.
[...continuación del último comentario] Estoy resolviendo el ejercicio 4.23.1 (página 431) de Organización y diseño de computadoras (la interfaz de hardware/software), 4.ª edición de Patterson y Hennessy . El mismo problema se encuentra en el libro Computer Organization and Design RISC-V Edition: The Hardware Software Interface de Patterson y Hennessy pero en el Ejercicio 4.28.
Es el grupo de preguntas que involucra también otras preguntas relacionadas con predictores. Estoy atascado con este específico. (edición y página en comentario anterior)
No tengo el libro, nunca lo leí. (Sin embargo, he realizado un trabajo muy modesto en Intel relacionado con RTL y pruebas de conjuntos de chips). ¿Es esta una instrucción típica de latencia de 5 ciclos que usa ciclos IF , DECODE , EXEC , MEM , WRITE BACK ? (Ya entiendo que esto está canalizado, ya que es un hecho teniendo en cuenta la pregunta). ¿Y se detecta el peligro de la rama en MEM ?
Perdón por la respuesta tardía :(. Sí, es una canalización de 5 etapas con exactamente cinco etapas como usted anotó. Hasta donde lo leí, de forma predeterminada, todos los problemas y la explicación siguieron "ejecución de rama en EXEC". Siempre que se haga en DECODE, el problema declaró explícitamente que Book nunca dijo "en etapa MEM".
DECODE se produce antes o durante la decodificación de la propia bifurcación condicional. Por lo tanto, implica que los registros de origen se direccionan inmediatamente durante la decodificación y se aplican a alguna lógica adicional para ese propósito, antes, con el estado reenviado por delante, si es necesario. No ha mencionado nada de esto en su pregunta, si es así. Y es importante, creo. Además, ahora me pregunto si la rama ALU (sumador) también se ha movido a la etapa DECODE. Parece que debe ser. ¿Puedes confirmar más detalles aquí? (Disfruto pensando en estas cosas, ya que me lleva algunas décadas atrás. Pero el contexto y los detalles importan).
Súper siento responder tan tarde. Hice esta pregunta unos días antes de mi examen y la dejé porque no tenía suficiente tiempo para entrar en detalles y tenía otras cosas acumuladas. Ahora que no borré el examen, estoy revisando. (1) "DECODE se produce antes/durante la decodificación de la propia bifurcación condicional". - la última palabra debe ser "evaluada" (2) En todo el capítulo, el libro asume que los operandos fuente se leen en la segunda mitad del ciclo de la etapa de decodificación. (3) ¿Por qué crees que "ALU (sumador) se ha movido a la etapa DECODE"? [de nuevo, cena, perdón por la respuesta súper tardía]
hey @jonk algo sobre este hombre? por favor... 😢

Respuestas (2)

Entonces, la razón por la cual una bifurcación pronosticada incorrectamente puede causar 3 ciclos de bloqueo es porque en este problema se establece: "Suponga que los resultados de la bifurcación se determinan en la etapa EX..." Esto significa que nos lleva 3 ciclos de reloj para determinar si se toma o no una sucursal. Volviendo a su escenario, es posible que se pregunte cómo se aplica esto a las instrucciones TINS, en otras palabras, las instrucciones de destino. Mirando el primer TINS1, podemos observar que esa instrucción toma COMO MÁXIMO 3 ciclos de reloj antes de pasar a INSNX. Si se pregunta por qué, debe comprender que nuestra rama está prevista en la etapa de ejecución, que es de 3 CICLOS DE RELOJ. Por lo tanto, si nos bifurcamos a ISNX, tendremos una penalización de 3 CICLOS DE RELOJpara eliminar potencialmente 3 (TINS1, TINS2, TINS3) instrucciones. Consulte la página 308, figura 4.59 de Computer Organisation by Patterson and Hennessy Risc-V edition para tener una mejor visualización de lo que quiero decir. El problema es muy parecido. Espero que esto ayude.

BEQ       F   D   E  
TINS1         F   D   X        (Branch Taken prediction, target instruction prefetched,      
                                but prediction failed, thus instruction cancelled)
TINS2             F   X        (prediction failed, thus instruction cancelled)
INSNX                 F   D... (Instruction after BEQ executed)

             |<--->|           (Two instructions cancelled. 
                                Isnt this equals two stall cycles?)

Si compara la descripción del problema de Computer Organization and Design Fourth/Fifth edition de Patterson & Hennessy y la de MIPS 6th edition/RISC-V 1st/2nd edition, notará que las versiones posteriores actualizaron la descripción del problema como "los resultados de las ramas se determinan en la etapa ID y aplicado en la etapa EX" para resolver la ambigüedad anterior. La comparación de registros, la determinación de los resultados de bifurcación o la prueba de bifurcación son diferentes de la decisión de bifurcar, la aplicación de los resultados de bifurcación o la selección de bifurcación. La determinación y la aplicación pueden ser diferentes o pueden ser las mismas, dependiendo de la implementación.

Este problema usa implícitamente la implementación del pipeline clásico en el libro de texto, donde la determinación de los resultados de la bifurcación está en la etapa EX y la aplicación de los resultados de la bifurcación está en la etapa MEM, es decir, para decidir si la bifurcación se toma o no. tomado todavía está en la etapa MEM. Dada esta suposición, es claro que se insertarían 3 puestos y se impondrían 3 ciclos de reloj de penalización (puede consultar la Figura 4.61 de la quinta edición o la Figura 4.59 de RISC-V 1ra edición o la Figura 4.63 de RISC-V 2da edición).