En el ámbito del diseño de unidades centrales de procesamiento (CPU) , los riesgos son problemas con la segmentación de instrucciones en las microarquitecturas de CPU cuando la siguiente instrucción no puede ejecutarse en el siguiente ciclo de reloj, [ 1 ] y pueden conducir a resultados de cálculo incorrectos. Tres tipos comunes de riesgos son los riesgos de datos, los riesgos estructurales y los riesgos de control (riesgos de ramificación). [ 2 ]
Existen varios métodos para lidiar con los peligros, incluyendo bloqueos /burbujeo de tuberías, reenvío de operandos y, en el caso de ejecución fuera de orden , el método de marcador y el algoritmo de Tomasulo .
Fondo
En un procesador segmentado, las instrucciones se ejecutan en varias etapas, de modo que en cualquier momento se procesan varias instrucciones en las distintas fases de la segmentación, como la búsqueda y la ejecución. Existen diversas microarquitecturas de segmentación de instrucciones , y estas pueden ejecutarse fuera de orden . Se produce un riesgo cuando dos o más de estas instrucciones simultáneas (posiblemente fuera de orden) entran en conflicto.
Tipos
Riesgos estructurales
Se produce un riesgo estructural cuando dos (o más) instrucciones que ya se encuentran en una secuencia de procesamiento requieren el mismo recurso. Como resultado, las instrucciones deben ejecutarse en serie en lugar de en paralelo para una parte de la secuencia. Los riesgos estructurales a veces se denominan riesgos de recursos.
Ejemplo: Situación en la que varias instrucciones están listas para entrar en la fase de ejecución, pero solo hay una ALU (Unidad Aritmético-Lógica). Una solución a este problema de recursos es aumentar los recursos disponibles, mediante el uso de múltiples puertos de acceso a la memoria principal y múltiples ALU.
Riesgos de control (riesgos de ramificación o riesgos de instrucción)
El riesgo de control se produce cuando la lógica de control predice incorrectamente qué rama del programa se ejecutará, introduciendo así una secuencia de instrucciones en la tubería que posteriormente se descartan. El término riesgo de rama también se refiere a un riesgo de control.
Burbujeo en el oleoducto
El bloqueo de la tubería , también conocido como interrupción o detención de la tubería , es un método para evitar riesgos de datos, estructurales y de bifurcación. A medida que se obtienen las instrucciones, la lógica de control determina si podría ocurrir un riesgo. Si es así, la lógica de control inserta instrucciones de no operación ( NOP ) en la tubería. De esta forma, antes de que se ejecute la siguiente instrucción (que causaría el riesgo), la anterior habrá tenido tiempo suficiente para finalizar y evitar el riesgo. Si el número de NOP es igual al número de etapas de la tubería, el procesador se ha liberado de todas las instrucciones y puede continuar sin riesgos. Todas las formas de detención introducen un retraso antes de que el procesador pueda reanudar la ejecución.
El vaciado de la tubería ocurre cuando una instrucción de salto se dirige a una nueva ubicación de memoria, invalidando todas las etapas anteriores de la tubería. Estas etapas anteriores se borran, permitiendo que la tubería continúe en la nueva instrucción indicada por el salto. [ 3 ] [ 4 ]
Riesgos de datos
Existen varias soluciones y algoritmos principales que se utilizan para resolver los riesgos de los datos:
- insertar una burbuja de canalización cada vez que se encuentre una dependencia de lectura después de escritura (RAW), lo que garantiza un aumento de la latencia o
- Utilice la ejecución fuera de orden para evitar potencialmente la necesidad de burbujas en la tubería.
- Utilice el reenvío de operandos para usar datos de etapas posteriores en la canalización.
En el caso de ejecución fuera de orden , el algoritmo utilizado puede ser:
- marcador , en cuyo caso se necesita una burbuja de tubería solo cuando no hay ninguna unidad funcional disponible
- El algoritmo de Tomasulo , que utiliza el cambio de nombre de los registros , permite la emisión continua de instrucciones.
La tarea de eliminar las dependencias de datos puede delegarse al compilador, que puede insertar un número adecuado de instrucciones NOP entre las instrucciones dependientes para garantizar un funcionamiento correcto, o reordenar las instrucciones cuando sea posible.
Reenvío de operandos
Ejemplos
- En los siguientes ejemplos, los valores calculados aparecen en negrita , mientras que los números de registro no.
Por ejemplo, para escribir el valor 3 en el registro 1 (que ya contiene un 6), y luego sumar 7 al registro 1 y almacenar el resultado en el registro 2, es decir:
i0: R1 = 6 i1: R1 = 3 i2: R2 = R1 + 7 = 10
Tras la ejecución, el registro 2 debería contener el valor 10. Sin embargo, si i1 (escribe 3 en el registro 1) no sale completamente de la tubería antes de que i2 comience a ejecutarse, significa que R1 no contiene el valor 3 cuando i2 realiza su suma. En tal caso, i2 suma 7 al valor anterior del registro 1 ( 6 ), por lo que el registro 2 contiene 13 en su lugar, es decir:
i0: R1 = 6 i2: R2 = R1 + 7 = 13 i1: R1 = 3
Este error se produce porque i2 lee el Registro 1 antes de que i1 haya confirmado/almacenado el resultado de su operación de escritura en el Registro 1. Por lo tanto, cuando i2 está leyendo el contenido del Registro 1, el Registro 1 todavía contiene 6 , no 3 .
El reenvío (que se describe a continuación) ayuda a corregir dichos errores al depender del hecho de que la salida de i1 (que es 3 ) puede ser utilizada por instrucciones posteriores antes de que el valor 3 se confirme/almacene en el Registro 1.
En este ejemplo, el reenvío implica que no hay que esperar a que la instrucción i1 guarde su salida en el Registro 1 (en este caso, la salida es 3 ) antes de ponerla a disposición de la siguiente instrucción (en este caso, i2). El resultado es que i2 utiliza el valor correcto (el más reciente) del Registro 1: la confirmación/almacenamiento se realizó de inmediato y no mediante segmentación.
Con el reenvío habilitado, la etapa de decodificación/ejecución de instrucciones (ID/EX) de la tubería ahora tiene dos entradas: el valor leído del registro especificado (en este ejemplo, el valor 6 del Registro 1) y el nuevo valor del Registro 1 (en este ejemplo, este valor es 3 ), que se envía desde la siguiente etapa de ejecución de instrucciones/acceso a memoria (EX/MEM). Se utiliza lógica de control adicional para determinar qué entrada usar.
Controlar los riesgos (riesgos de las ramas)
Para evitar riesgos de control, las microarquitecturas pueden:
- insertar una burbuja de tubería (discutida anteriormente), garantizada para aumentar la latencia , o
- Utilizar la predicción de bifurcaciones y, esencialmente, hacer conjeturas fundamentadas sobre qué instrucciones insertar, en cuyo caso solo se necesitará una burbuja de tubería en caso de una predicción incorrecta.
En caso de que una bifurcación provoque una burbuja en la tubería después de que instrucciones incorrectas hayan entrado en ella, se debe tener cuidado para evitar que cualquiera de las instrucciones cargadas incorrectamente tenga algún efecto en el estado del procesador, excluyendo la energía desperdiciada al procesarlas antes de que se descubriera que se habían cargado incorrectamente.
Otras técnicas
La latencia de la memoria es otro factor que los diseñadores deben tener en cuenta, ya que el retraso puede reducir el rendimiento. Los distintos tipos de memoria tienen diferentes tiempos de acceso. Por lo tanto, al elegir un tipo de memoria adecuado, los diseñadores pueden mejorar el rendimiento de la ruta de datos segmentada. [ 5 ]
Véase también
Referencias
- ↑ Patterson y Hennessy 2009 , pág. 335.
- ↑ Patterson y Hennessy 2009 , págs. 335–343.
- ↑ "Esquemas de predicción de ramificaciones" . cs.iastate.edu . 2001-04-06 . Consultado el 2014-07-19 .
- ↑ "Datos y riesgos de control" . classes.soe.ucsc.edu . 23 de febrero de 2004. Consultado el 19 de julio de 2014 .
- ↑ Cheng, Ching-Hwa (27-12-2012). "Ejemplo de diseño de latencia de memoria útil para el desarrollo de un microprocesador embebido de alto rendimiento con canalización de prevención de riesgos" . VLSI Design . 2013 : 1–10 . doi : 10.1155/2013/425105 .
General
- Patterson, David ; Hennessy, John (2009). Organización y diseño de computadoras (4.ª ed.). Morgan Kaufmann . ISBN 978-0-12-374493-7.
- Patterson, David; Hennessy, John (2011). Arquitectura de computadoras: un enfoque cuantitativo (5.ª ed.). Morgan Kaufmann . ISBN 978-0-12-383872-8.
- Shen, John P.; Lipasti, Mikko H. (2013) [2004]. "2.2.3.2 Identificación de riesgos en la tubería" . Diseño de procesadores modernos: Fundamentos de los procesadores superescalares . Waveland Press. págs. 73–78 . ISBN 9781478610762.
Enlaces externos
- "Segmentación automática a partir de especificaciones de ruta de datos transaccionales" (PDF) . Consultado el 23 de julio de 2014 .
- Tulsen, Dean (18 de enero de 2005). "Riesgos de los oleoductos" (PDF) .
- Procesamiento de instrucciones