stringtranslate.com

Canalización de instrucciones

En ingeniería informática , la canalización de instrucciones es una técnica para implementar paralelismo a nivel de instrucciones dentro de un solo procesador. La canalización intenta mantener cada parte del procesador ocupada con alguna instrucción dividiendo las instrucciones entrantes en una serie de pasos secuenciales (la " canalización " del mismo nombre) realizados por diferentes unidades de procesador con diferentes partes de instrucciones procesadas en paralelo.

Concepto y motivación

En una computadora canalizada, las instrucciones fluyen a través de la unidad central de procesamiento (CPU) en etapas. Por ejemplo, podría tener una etapa para cada paso del ciclo de von Neumann : buscar la instrucción, buscar los operandos, ejecutar la instrucción, escribir los resultados. Una computadora canalizada generalmente tiene "registros de canalización" después de cada etapa. Estos almacenan información de las instrucciones y cálculos para que las puertas lógicas de la siguiente etapa puedan realizar el siguiente paso.

Esta disposición permite que la CPU complete una instrucción en cada ciclo de reloj. Es común que las etapas pares operen en un borde del reloj de onda cuadrada, mientras que las etapas impares operan en el otro borde. Esto permite un mayor rendimiento de la CPU que una computadora de varios ciclos a una velocidad de reloj determinada , pero puede aumentar la latencia debido a la sobrecarga adicional del proceso de canalización en sí. Además, aunque la lógica electrónica tiene una velocidad máxima fija, una computadora canalizada se puede hacer más rápida o más lenta variando el número de etapas en la canalización. Con más etapas, cada etapa hace menos trabajo, por lo que la etapa tiene menos retrasos desde las puertas lógicas y podría funcionar a una velocidad de reloj más alta.

Un modelo de computadora canalizado suele ser el más económico, cuando el costo se mide como puertas lógicas por instrucción por segundo. En cada instante, una instrucción se encuentra en una sola etapa del proceso y, en promedio, una etapa del proceso es menos costosa que una computadora de ciclos múltiples. Además, cuando se hace bien, la mayor parte de la lógica de la computadora canalizada está en uso la mayor parte del tiempo. Por el contrario, las computadoras averiadas suelen tener grandes cantidades de lógica inactiva en un instante dado. Cálculos similares suelen mostrar que una computadora canalizada utiliza menos energía por instrucción.

Sin embargo, una computadora canalizada suele ser más compleja y costosa que una computadora multiciclo comparable. Normalmente tiene más puertas lógicas, registros y una unidad de control más compleja. De manera similar, podría usar más energía total, mientras usa menos energía por instrucción. Las CPU fuera de servicio generalmente pueden realizar más instrucciones por segundo porque pueden realizar varias instrucciones a la vez.

En una computadora canalizada, la unidad de control organiza el flujo para que se inicie, continúe y se detenga según lo ordene un programa. Los datos de las instrucciones generalmente se pasan en registros de canalización de una etapa a la siguiente, con una parte de lógica de control algo separada para cada etapa. La unidad de control también asegura que las instrucciones en cada etapa no perjudiquen el funcionamiento de las instrucciones en otras etapas. Por ejemplo, si dos etapas deben utilizar el mismo dato, la lógica de control garantiza que los usos se realicen en la secuencia correcta.

Cuando funciona de manera eficiente, una computadora canalizada tendrá una instrucción en cada etapa. Luego trabaja en todas esas instrucciones al mismo tiempo. Puede finalizar aproximadamente una instrucción por cada ciclo de su reloj. Pero cuando un programa cambia a una secuencia diferente de instrucciones, la canalización a veces debe descartar los datos en proceso y reiniciarse. Esto se llama "estancamiento".

Gran parte del diseño de una computadora canalizada evita la interferencia entre las etapas y reduce las pérdidas.

Numero de pasos

El número de pasos dependientes varía según la arquitectura de la máquina. Por ejemplo:

A medida que la canalización se hace "más profunda" (con un mayor número de pasos dependientes), un paso determinado se puede implementar con circuitos más simples, lo que puede permitir que el reloj del procesador funcione más rápido. [3] Estos oleoductos pueden denominarse superductos. [4]

Se dice que un procesador está completamente canalizado si puede obtener una instrucción en cada ciclo. Por lo tanto, si algunas instrucciones o condiciones requieren retrasos que inhiben la obtención de nuevas instrucciones, el procesador no está completamente canalizado.

Historia

Los usos fundamentales de la canalización se dieron en el proyecto ILLIAC II y en el proyecto IBM Stretch , aunque anteriormente se utilizó una versión simple en el Z1 en 1939 y en el Z3 en 1941. [5]

La canalización comenzó en serio a finales de la década de 1970 en supercomputadoras como los procesadores vectoriales y los procesadores de matriz. [ cita necesaria ] Una de las primeras supercomputadoras fue la serie Cyber ​​construida por Control Data Corporation. Su arquitecto principal, Seymour Cray , dirigió más tarde Cray Research. Cray desarrolló la línea XMP de supercomputadoras, utilizando canalización para funciones de multiplicación y suma/resta. Más tarde, Star Technologies añadió el paralelismo (varias funciones canalizadas trabajando en paralelo), desarrollado por Roger Chen. En 1984, Star Technologies añadió el circuito dividido por tuberías desarrollado por James Bradley. A mediados de la década de 1980, muchas empresas diferentes de todo el mundo utilizaban la canalización. [ cita necesaria ]

La canalización no se limitó a las supercomputadoras. En 1976, la computadora central de propósito general de la serie 470 de Amdahl Corporation tenía una tubería de 7 pasos y un circuito de predicción de ramas patentado. [ cita necesaria ]

Peligros

El modelo de ejecución secuencial supone que cada instrucción se completa antes de que comience la siguiente; Esta suposición no es cierta en un procesador canalizado. Una situación en la que el resultado esperado es problemático se conoce como peligro . Imagine las siguientes dos instrucciones de registro para un procesador hipotético:

1: suma 1 a R52: copiar R5 a R6

Si el procesador tiene los 5 pasos enumerados en la ilustración inicial (el 'canal básico de cinco etapas' al comienzo del artículo), la instrucción 1 se recuperará en el momento t 1 y su ejecución se completará en t 5 . La instrucción 2 se recuperaría en t 2 y se completaría en t 6 . La primera instrucción podría depositar el número incrementado en R5 como su quinto paso (escritura de registro) en t 5 . Pero la segunda instrucción podría obtener el número de R5 (para copiar a R6) en su segundo paso (decodificar la instrucción y recuperar el registro) en el momento t 3 . Parece que la primera instrucción no habría incrementado el valor para entonces. El código anterior invoca un peligro.

Es posible que escribir programas de computadora en un lenguaje compilado no genere estas preocupaciones, ya que el compilador podría diseñarse para generar código de máquina que evite peligros.

Soluciones alternativas

En algunos de los primeros procesadores DSP y RISC, la documentación aconseja a los programadores evitar dichas dependencias en instrucciones adyacentes y casi adyacentes (llamadas ranuras de retardo ), o declara que la segunda instrucción utiliza un valor antiguo en lugar del valor deseado (en el ejemplo anterior, el El procesador podría copiar de forma contraria a la intuición el valor no incrementado) o declara que el valor que utiliza no está definido. Es posible que el programador tenga trabajo no relacionado que el procesador pueda realizar mientras tanto; o, para garantizar resultados correctos, el programador puede insertar NOP en el código, anulando en parte las ventajas de la canalización.

Soluciones

Los procesadores canalizados comúnmente usan tres técnicas para funcionar como se espera cuando el programador asume que cada instrucción se completa antes de que comience la siguiente:

Sucursales

Una desviación de la secuencia de instrucciones normal a menudo implica un peligro. A menos que el procesador pueda dar efecto a la bifurcación en un solo ciclo de tiempo, la canalización continuará obteniendo instrucciones de forma secuencial. No se puede permitir que dichas instrucciones surtan efecto porque el programador ha desviado el control a otra parte del programa.

Una rama condicional es aún más problemática. El procesador puede bifurcarse o no, dependiendo de un cálculo que aún no se ha producido. Varios procesadores pueden detenerse, intentar la predicción de bifurcación y pueden comenzar a ejecutar dos secuencias de programa diferentes ( ejecución ansiosa ), cada una asumiendo que la bifurcación se toma o no, descartando todo el trabajo relacionado con la suposición incorrecta. [a]

Un procesador con una implementación de predicción de bifurcación que normalmente realiza predicciones correctas puede minimizar la penalización de rendimiento derivada de la bifurcación. Sin embargo, si las ramas se predicen mal, puede generar más trabajo para el procesador, como eliminar de la canalización la ruta de código incorrecta que comenzó la ejecución antes de reanudarla en la ubicación correcta.

Los programas escritos para un procesador canalizado evitan deliberadamente la bifurcación para minimizar la posible pérdida de velocidad. Por ejemplo, el programador puede manejar el caso habitual con ejecución secuencial y bifurcarse sólo al detectar casos inusuales. El uso de programas como gcov para analizar la cobertura del código permite al programador medir con qué frecuencia se ejecutan realmente determinadas ramas y obtener información para optimizar el código. En algunos casos, un programador puede manejar tanto el caso habitual como el caso inusual con código sin ramificaciones .

Situaciones especiales

Programas automodificables
La técnica de código automodificado puede resultar problemática en un procesador canalizado. En esta técnica, uno de los efectos de un programa es modificar sus propias instrucciones futuras. Si el procesador tiene un caché de instrucciones , es posible que la instrucción original ya se haya copiado en una cola de entrada de captación previa y la modificación no tendrá efecto. Algunos procesadores, como el Zilog Z280, pueden configurar sus memorias caché en el chip para búsquedas de datos únicamente, o como parte de su espacio de direcciones de memoria normal, y evitar tales dificultades con instrucciones automodificables.
Instrucciones ininterrumpidas
Una instrucción puede ser ininterrumpible para garantizar su atomicidad , como cuando intercambia dos elementos. Un procesador secuencial permite interrupciones entre instrucciones, pero un procesador de canalización superpone instrucciones, por lo que la ejecución de una instrucción ininterrumpible hace que partes de instrucciones ordinarias también sean ininterrumpibles. El error de coma de Cyrix bloquearía un sistema de un solo núcleo utilizando un bucle infinito en el que siempre había una instrucción ininterrumpible en proceso.

Consideraciones de diseño

Velocidad
La canalización mantiene ocupadas todas las partes del procesador y aumenta la cantidad de trabajo útil que el procesador puede realizar en un tiempo determinado. La canalización normalmente reduce el tiempo del ciclo del procesador y aumenta el rendimiento de las instrucciones. La ventaja de la velocidad disminuye en la medida en que la ejecución encuentra peligros que requieren que la ejecución se ralentice por debajo de su ritmo ideal. Un procesador no canalizado ejecuta solo una instrucción a la vez. El inicio de la siguiente instrucción se retrasa no por peligros sino incondicionalmente.
La necesidad de un procesador canalizado de organizar todo su trabajo en pasos modulares puede requerir la duplicación de registros, lo que aumenta la latencia de algunas instrucciones.
Economía
Al simplificar cada paso dependiente, la canalización puede permitir operaciones complejas de manera más económica que agregar circuitos complejos, como para cálculos numéricos. Sin embargo, un procesador que se niega a buscar una mayor velocidad con canalización puede ser más simple y más barato de fabricar.
Previsibilidad
En comparación con entornos donde el programador necesita evitar o solucionar peligros, el uso de un procesador no canalizado puede facilitar la programación y la capacitación de programadores. El procesador no canalizado también facilita la predicción del momento exacto de una secuencia determinada de instrucciones.

Ejemplo ilustrado

A la derecha hay una canalización genérica con cuatro etapas: buscar, decodificar, ejecutar y reescribir. El cuadro gris superior es la lista de instrucciones en espera de ser ejecutadas, el cuadro gris inferior es la lista de instrucciones que han completado su ejecución y el cuadro blanco del medio es la canalización.

La ejecución es la siguiente:

Tubería genérica de 4 etapas; los cuadros de colores representan instrucciones independientes entre sí

burbuja de oleoducto

Una burbuja en el ciclo 3 retrasa la ejecución.

Un procesador canalizado puede hacer frente a los peligros deteniéndose y creando una burbuja en el canal, lo que da lugar a uno o más ciclos en los que no sucede nada útil.

En la ilustración de la derecha, en el ciclo 3, el procesador no puede decodificar la instrucción violeta, quizás porque determina que la decodificación depende de los resultados producidos por la ejecución de la instrucción verde. La instrucción verde puede pasar a la etapa de ejecución y luego a la etapa de escritura diferida según lo programado, pero la instrucción violeta se detiene durante un ciclo en la etapa de recuperación. La instrucción azul, que debía recuperarse durante el ciclo 3, se detiene durante un ciclo, al igual que la instrucción roja posterior.

Debido a la burbuja (los óvalos azules en la ilustración), el circuito de decodificación del procesador está inactivo durante el ciclo 3. Su circuito de ejecución está inactivo durante el ciclo 4 y su circuito de escritura inversa está inactivo durante el ciclo 5.

Cuando la burbuja sale de la tubería (en el ciclo 6), se reanuda la ejecución normal. Pero ahora todo tiene un ciclo de retraso. Se necesitarán 8 ciclos (ciclos 1 a 8) en lugar de 7 para ejecutar completamente las cuatro instrucciones que se muestran en colores. [b]

Ver también

Notas

  1. ^ Los primeros procesadores canalizados sin ninguna de estas heurísticas, como el procesador PA-RISC de Hewlett-Packard , solucionaban los peligros simplemente advirtiendo al programador; en este caso, una o más instrucciones que siguen a la bifurcación se ejecutarían independientemente de que se tomara o no la bifurcación. Esto podría resultar útil; por ejemplo, después de calcular un número en un registro, se podría seguir una rama condicional cargando en el registro un valor más útil para cálculos posteriores tanto en el caso de rama como en el de no rama.
  2. ^ Sin embargo, tenga en cuenta que, incluso con la burbuja, el procesador aún puede, al menos en este caso, ejecutar la secuencia de instrucciones mucho más rápido que un procesador no canalizado.

Referencias

  1. ^ Glaskowsky, Peter (18 de agosto de 2003). "NPU extraordinaria de Xeleated: el primer procesador de paquetes de 40 Gb/s del mundo tiene 200 CPU". Informe del microprocesador . 18 (8): 12-14 . Consultado el 20 de marzo de 2017 .
  2. ^ "Xeleated lleva la tecnología programable de 40 Gbits/S a la corriente principal de Ethernet". 31 de mayo de 2003.
  3. ^ Juan Pablo Shen, Mikko H. Lipasti (2004). Diseño de procesador moderno. Profesional de McGraw-Hill . ISBN 9780070570641.
  4. ^ Sunggu Lee (2000). Diseño de Computadoras y Otros Dispositivos Digitales Complejos. Prentice Hall . ISBN 9780130402677.
  5. ^ Rojas, Raúl (abril-junio de 1997). "El legado de Konrad Zuse: la arquitectura del Z1 y Z3" (PDF) . Anales IEEE de la historia de la informática . 19 (2): 5–16. doi : 10.1109/85.586067. Archivado (PDF) desde el original el 3 de julio de 2022 . Consultado el 3 de julio de 2022 .(12 páginas)
  6. ^ "CMSC 411 Conferencia 19, Canalización de reenvío de datos". Departamento de Ingeniería Eléctrica y Ciencias de la Computación del Condado de Baltimore de la Universidad de Maryland . Consultado el 22 de enero de 2020 .
  7. ^ "Computación de alto rendimiento, Apuntes de clase 11". hpc.serc.iisc.ernet.in. Septiembre de 2000. Archivado desde el original el 27 de diciembre de 2013 . Consultado el 8 de febrero de 2014 .

enlaces externos