¿Qué es el lavado de tuberías en microprocesadores?

1

Estoy leyendo el libro "Sistema operativo de escritura desde cero" de Nick Blundell. En uno de los capítulos, se explica cómo hacemos la transición del modo de 16 bits al modo de 32 bits. Dice que antes de pasar al modo de 32 bits, debemos asegurarnos de que se ejecuten todas las instrucciones en el modo de 16 bits que se encuentran actualmente dentro de la tubería (tubería de instrucciones dentro de la CPU). Para lograr esto, dice, deberíamos hacer un gran salto, lo que provoca un enrojecimiento de la tubería que, según el libro, está completando todas las instrucciones que se encuentran actualmente en las diferentes etapas de la tubería. Pero lo que entendí sobre el lavado de tuberías es eliminar todas las instrucciones después de la bifurcación condicional de la tubería de instrucciones debido a un cambio en el flujo del programa.
Estoy confundido entre estas descripciones, ¿podría alguien explicar lo que sucede durante el lavado de tuberías?
Además, el libro dice que un salto cercano puede no ser suficiente para hacer el lavado de tuberías. No entiendo esto también.
Hay una pregunta similar: Bloqueo y lavado en MIPS Piplining

Pero, ¿podría alguien explicarme sobre esto con algo más de detalle?
¡Gracias de antemano!

    
pregunta sarthak

2 respuestas

1

Los procesadores tienen muchos trucos matemáticos realmente ingeniosos que pueden hacer para optimizar las cosas y reducir los tiempos de los ciclos, pero la mayoría de ellos dependen de que el próximo paso sea predecible. El procesador, por sí solo, no puede examinar una instrucción sin ejecutarla, por lo que solo se pueden poner en orden ciertos comandos, porque los siguientes pasos son completamente predecibles.

La lógica condicional no se puede predecir. El procesador solo sabe que se le ha ordenado ir desde donde está, a donde quiere que esté el próximo. Recuerde que la tubería tiene (o podría tener) asuntos pendientes cuando descubre este comando. Entonces, como característica incorporada, antes de que el procesador ejecute la lógica condicional (en este caso, el salto) permitirá que la tubería se vacíe y detectará que está vacía internamente.

En algunos casos, un salto cercano compilado en el código de la máquina puede optimizarse en algo que el procesador no trata como condicional: si ese salto cercano es para un propósito común, el procesador podría continuar con la canalización. Esta es la razón por la que se recomienda un gran salto para asegurarse de que el procesador realmente enjuague la tubería.

    
respondido por el Sean Boddy
0

Bueno, no sé el procesador con el que estás trabajando, pero te lo diré desde un punto de vista genérico de la CPU.

Las CPU modernas están canalizadas, esto significa que las instrucciones se ejecutan en "etapas" discretas. Cada etapa de la tubería trata con una instrucción, si la primera instrucción del programa ha abandonado la etapa de obtención de instrucciones, esa etapa podría obtener otra instrucción, tan pronto como la primera instrucción abandone la etapa de decodificación de instrucciones, la instrucción de decodificación podría obtener otra instrucción. desde la fase de búsqueda de instrucciones y así sucesivamente.

El problema es que si tiene una instrucción como jnz (o bnz) "saltar si no es cero" en medio del flujo de instrucciones, no se puede ejecutar hasta que todas las instrucciones que lo precedieron se ejecuten completamente y el registro de bandera se estabilice en un estado conocido. Esto hará que la tubería inserte burbujas (efectivamente instrucciones NOP) hasta que la tubería esté al ras y se pueda ejecutar el jnz. Si la CPU tiene una unidad de predicción de bifurcación, ejecutará el JNZ independientemente de las otras instrucciones (ejecución especulativa) y luego verificará si el salto fue correcto.

Creo que este JNZ (BRNZ) o cualquier otra instrucción de salto condicional es de lo que habla el libro. Probablemente el procesador del que se habla no tenga una ejecución especulativa y la inserción de un salto condicional a la siguiente instrucción tendrá el efecto secundario de vaciar la tubería.

    
respondido por el Jorge Aldo

Lea otras preguntas en las etiquetas