instruction armsim architecture assembly arm pipelining

architecture - armsim instruction set



¿Qué es la canalización? ¿Cómo aumenta la velocidad de ejecución? (5)

De hecho, hay hardware separado para ir a buscar. Hay un montón de bits de hardware por separado, dispuestos en una tubería. Cada parte está ejecutando una parte de una instrucción separada al mismo tiempo. En cada borde del reloj, los resultados de una etapa se transmiten a la siguiente.

Creo que ninguna pregunta es tonta si te molesta. Tengo esta pregunta sobre el revestimiento de tuberías

¿Qué es revestimiento de tuberías?

La teoría dice que: " Con la canalización, la CPU comienza a ejecutar una segunda instrucción antes de que se complete la primera instrucción. La canalización da como resultado un procesamiento más rápido porque la CPU no tiene que esperar una instrucción para completar el ciclo de la máquina".

Mi pregunta es si estoy trabajando en un sistema de procesador único, donde solo se puede ejecutar una instrucción a la vez, ¿cómo es posible que la operación simultánea de recuperación de la próxima instrucción se realice cuando mi CPU está ocupada? Si me falta claridad conceptual, arroja algo de luz sobre mí. Si hay hardware por separado que hace que el procesamiento simultáneo ocurra, ¿qué es? Amablemente explica.



Pensé que se utilizó cuando hay ramas en el código, y la lógica predice qué rama se tomará, y precarga las instrucciones para esa rama en una memoria caché. Si la predicción es falsa, debe descartar esas instrucciones y cargar la alternativa, lo que da como resultado una pérdida. Pero creo que hay patrones en el código que hacen que la predicción sea cierta más a menudo que no, especialmente con compiladores modernos que repiten patrones una y otra vez.

No estoy al tanto de la implementación real, pero realmente no creo que se necesite hardware adicional, aunque es útil para una velocidad óptima.


Pipelining no tiene nada que ver con los sistemas de uno o varios procesadores. Tiene que ver con pensar mucho acerca de los pasos que se deben seguir al ejecutar una sola instrucción en una máquina, en hardware.

Imagine que desea implementar la instrucción MIPS "add-immediate", addi $d, $s, $t , que agrega un entero almacenado en el registro nombrado por $s a un entero $t codificado directamente en la instrucción, y almacena el resultado en el registro nombrado por $t . Piensa en los pasos que necesitarías para hacer eso. Aquí hay una forma de desglosarlo (por ejemplo, esto no necesariamente se corresponde con el hardware real):

  1. Analice la instrucción (codificada en binario) para descubrir qué instrucción es.
  2. Una vez que reconozca que es una instrucción addi , analice los registros de origen y destino y el entero literal para agregar.
  3. Lea el registro apropiado y calcule la suma de su valor y el entero inmediato.
  4. Escriba el resultado en el registro de resultados nombrado.

Ahora recuerde, todo esto debe ser construido en hardware, lo que significa que hay circuitos físicos asociados con cada una de estas cosas. Y si ejecutara una instrucción a la vez, tres cuartas partes de estos circuitos permanecerían inactivos, sin hacer nada todo el tiempo. Pipelining aprovecha esta observación: si el procesador necesita ejecutar dos instrucciones addi en una fila, entonces puede:

  1. Identifica el primero
  2. Analice el primero e identifique el segundo con circuitos que de lo contrario estarían inactivos
  3. Agregue el primero y analice el segundo
  4. Escriba el primero y agregue el segundo
  5. Escribe el segundo

Entonces, aunque cada instrucción toma 4 rondas de procesamiento, el procesador ha terminado dos instrucciones en solo 5 rondas en total.

Esto se complica debido al hecho de que a veces tienes que esperar que termine una instrucción antes de saber qué hacer en la siguiente (o incluso cuál es la siguiente), pero esa es la idea básica.


Piense en esos Cómo se hizo u otros programas de televisión donde ve una fábrica en acción. Piense en lo que puede haber leído o visto sobre una fábrica de automóviles. El "Coche" se mueve a través de la fábrica, comenzando como un marco o cuerpo y se le agregan cosas a medida que se mueve. Si te sientas en la parte exterior del edificio verías neumáticos y latas de pintura y rollos de alambre y acero que entrarían en el edificio y un flujo constante de autos que saldrían. El hecho de que sea una fábrica única (uniprocesador) no significa que no pueda tener una línea de ensamblaje (tubería). Un uniprocesador con una tubería no está necesariamente ejecutando necesariamente una instrucción a la vez más de lo que el automóvil de la fábrica se construye un auto a la vez. Un poco de la construcción de ese auto ocurre en cada estación que pasa, de la misma manera la ejecución de su programa ocurre un poco en cada estación en la tubería.

Las etapas simples típicas en la tubería son captar, decodificar y ejecutar, tres etapas. se requieren tres relojes para ejecutar una instrucción, mínimo (generalmente muchos más debido a que la E / S es lenta) digamos tres etapas en la tubería. Mientras que la instrucción a está en la fase de ejecución, aunque tenga la instrucción b decodificada y la instrucción c sea captada. De vuelta a la fábrica de automóviles, pueden producir "un automóvil cada 7 minutos", lo que no significa que se tarden 7 minutos en fabricar un automóvil, puede llevar una semana fabricar un automóvil, pero comienzan uno nuevo cada 7 minutos y el promedio el tiempo en cada estación es tal que puede sacar uno por la puerta cada 7 minutos. Lo mismo aquí, con una canalización no significa que puede buscar, descodificar y ejecutar los tres pasos a la velocidad del reloj del procesador. Al igual que la fábrica, es más de lo normal. Si puede alimentar cada una de las etapas en la tubería a la velocidad del reloj del procesador, entonces completará una instrucción por reloj (si está diseñado para hacerlo). estos días no puedes alimentar los datos / instrucciones tan rápido y hay puestos de tuberías, etc. que te hacen tener que empezar de nuevo o descartar algunos de los avances y hacer copias de seguridad de algunos.

Pipelining simplemente está tomando un enfoque de línea de ensamblaje para ejecutar instrucciones en un procesador.