La arquitectura de procesador orientada a la latencia es la microarquitectura de un microprocesador diseñada para servir un hilo de computación serial con baja latencia. Esto es típico de la mayoría de las unidades centrales de procesamiento (CPU) desarrolladas desde la década de 1970. Estas arquitecturas, en general, buscan ejecutar tantas instrucciones como sea posible pertenecientes a un solo hilo serial, en un intervalo de tiempo determinado; sin embargo, el tiempo para ejecutar una sola instrucción completamente desde la etapa de búsqueda hasta la de retiro puede variar desde unos pocos ciclos hasta incluso unos cientos de ciclos en algunos casos. [ 1 ] Las arquitecturas de procesador orientadas a la latencia son lo opuesto a los procesadores orientados al rendimiento, que se preocupan más por el rendimiento total del sistema, en lugar de las latencias de servicio para todos los hilos individuales en los que trabajan. [ 2 ] [ 3 ]
La taxonomía de Flynn
Por lo general, las arquitecturas de procesadores orientadas a la latencia ejecutan una única tarea que opera sobre un único flujo de datos, por lo que se clasifican como SISD según la taxonomía de Flynn . Estas arquitecturas también pueden incluir extensiones del conjunto de instrucciones SIMD , como Intel MMX y SSE ; si bien estas extensiones operan sobre grandes conjuntos de datos, su objetivo principal es reducir la latencia general. [ 2 ]
Técnicas de implementación
Existen numerosas técnicas arquitectónicas empleadas para reducir la latencia general de una tarea de computación. Estas suelen implicar la adición de hardware adicional en la tubería para servir las instrucciones tan pronto como se obtienen de la memoria o la caché de instrucciones . Una característica notable de estas arquitecturas es que una parte significativa del chip se utiliza en componentes distintos de las Unidades de Ejecución . Esto se debe a que el objetivo es reducir el tiempo necesario para completar una tarea "típica" en un entorno de computación. Una tarea típica consiste en una secuencia de instrucciones, donde existe una alta dependencia de los resultados producidos por las instrucciones anteriores de la misma tarea. Por lo tanto, es lógico que el microprocesador dedique su tiempo a realizar muchas otras tareas además de los cálculos requeridos por las instrucciones individuales. Si los riesgos encontrados durante la computación no se resuelven rápidamente, la latencia del hilo aumenta. Esto se debe a que los riesgos detienen la ejecución de las instrucciones subsiguientes y, dependiendo de la implementación de la tubería, pueden detener el progreso por completo hasta que se resuelva la dependencia o provocar una avalancha de más riesgos en instrucciones futuras, lo que agrava aún más el tiempo de ejecución del hilo. [ 4 ] [ 5 ]
El espacio de diseño de las técnicas microarquitectónicas es muy amplio. A continuación, se presentan algunas de las técnicas más utilizadas para reducir la latencia general de un hilo de ejecución.
Arquitectura del conjunto de instrucciones (ISA)
La mayoría de las arquitecturas actuales utilizan instrucciones más cortas y sencillas, como la arquitectura de carga/almacenamiento , que ayudan a optimizar la canalización de instrucciones para una ejecución más rápida. Las instrucciones suelen tener todas el mismo tamaño, lo que también ayuda a optimizar la lógica de búsqueda de instrucciones. Este tipo de ISA se denomina arquitectura RISC . [ 6 ]
canalización de instrucciones
La segmentación (pipelining) superpone la ejecución de múltiples instrucciones del mismo hilo de ejecución para aumentar la frecuencia del reloj o el número de instrucciones que se completan por unidad de tiempo, reduciendo así el tiempo total de ejecución de un hilo. En lugar de esperar a que una sola instrucción complete todas sus etapas de ejecución, se procesan varias instrucciones simultáneamente en sus respectivas etapas dentro de la segmentación. [ a ]
Cambio de nombre de registro
Esta técnica se utiliza para aumentar de forma efectiva el tamaño total del archivo de registros más allá del especificado en el ISA para los programadores, y para eliminar dependencias falsas. Supongamos que tenemos dos instrucciones consecutivas que hacen referencia al mismo registro. La primera lee el registro mientras que la segunda escribe en él. Para mantener la corrección del programa, es esencial asegurarse de que la segunda instrucción no escriba en el registro antes de que la primera pueda leer su valor original. Este es un ejemplo de una dependencia de escritura después de lectura (WAR) . Para eliminar esta dependencia, la tubería "renombraría" la instrucción internamente asignándola a un registro interno. Por lo tanto, se permite que la instrucción se ejecute y los resultados producidos por ella estarán disponibles inmediatamente para todas las instrucciones subsiguientes, aunque el registro de destino real previsto por el programa se escribirá más tarde. De manera similar, si ambas instrucciones simplemente pretendieran escribir en el mismo registro mediante escritura después de escritura (WAW) , la tubería las renombraría y garantizaría que sus resultados estén disponibles para instrucciones futuras sin necesidad de serializar su ejecución. [ b ]
Organización de la memoria
Los distintos niveles de memoria, que incluyen cachés , memoria principal y almacenamiento no volátil como discos duros (donde residen las instrucciones y los datos del programa), están diseñados para aprovechar la localidad espacial y temporal con el fin de reducir el tiempo total de acceso a la memoria . Cuanto menos tiempo pase el procesador esperando a que se obtengan datos de la memoria, menor será el número de instrucciones que consumen recursos de la tubería mientras permanecen inactivas sin realizar ningún trabajo útil. La tubería de instrucciones se bloqueará por completo si todos sus búferes internos (por ejemplo, estaciones de reserva ) se llenan hasta su capacidad máxima. Por lo tanto, si las instrucciones consumen menos ciclos de inactividad dentro de la tubería, existe una mayor probabilidad de aprovechar el paralelismo a nivel de instrucción (ILP), ya que la lógica de búsqueda puede obtener un mayor número de instrucciones de la caché/memoria por unidad de tiempo. [ c ]
Ejecución especulativa
Una de las principales causas de bloqueos en la tubería son las dependencias del flujo de control, es decir, cuando no se conoce de antemano el resultado de una instrucción de bifurcación (lo cual suele ser el caso). Muchas arquitecturas actuales utilizan componentes predictores de bifurcación para adivinar el resultado de una bifurcación. La ejecución continúa por la ruta predicha para el programa, pero las instrucciones se marcan como especulativas. Si la predicción resulta ser correcta, se permite que las instrucciones se completen con éxito y actualicen sus resultados en el archivo de registros/memoria. Si la predicción fue incorrecta, todas las instrucciones especulativas se eliminan de la tubería y la ejecución se reinicia por la ruta correcta para el programa. Al mantener una alta precisión de predicción, la tubería puede aumentar significativamente el rendimiento del hilo en ejecución. [ d ]
Ejecución fuera de orden
No todas las instrucciones de un hilo tardan el mismo tiempo en ejecutarse. Las tuberías superescalares suelen tener múltiples rutas posibles para las instrucciones, dependiendo del estado actual y del tipo de instrucción. Por lo tanto, para aumentar las instrucciones por ciclo (IPC), la tubería permite la ejecución de instrucciones fuera de orden, de modo que las instrucciones posteriores del programa no se bloqueen debido a una instrucción que tardará más en completarse. Todas las instrucciones se registran en un búfer de reordenamiento cuando la tubería las recupera y se les permite finalizar (es decir, escribir sus resultados) en el orden del programa original para mantener la corrección. [ e ]
ejecución superescalar
Una tubería de instrucciones superescalar procesa múltiples instrucciones en cada ciclo de reloj, a diferencia de una tubería escalar simple. Esto aumenta el paralelismo a nivel de instrucción tantas veces como el número de instrucciones procesadas en cada ciclo, excepto cuando la tubería se detiene debido a dependencias de flujo de datos o de control. Aunque la tasa de finalización de las tuberías superescalares suele ser menor que su tasa de procesamiento, el número total de instrucciones ejecutadas por unidad de tiempo (> 1) generalmente es mayor que el de una tubería escalar. [ f ]
En contraste con las arquitecturas de procesadores orientadas al rendimiento.
En contraste, una arquitectura de procesador orientada al rendimiento está diseñada para maximizar la cantidad de "trabajo útil" realizado en un intervalo de tiempo significativo. El trabajo útil se refiere a cálculos extensos sobre una cantidad significativa de datos. Esto se logra mediante la paralelización de la carga de trabajo, de modo que se puedan realizar muchos cálculos simultáneamente. Los cálculos pueden pertenecer a una sola tarea o a un número limitado de tareas múltiples. El tiempo total requerido para completar una ejecución es significativamente mayor que el de una arquitectura de procesador orientada a la latencia; sin embargo, el tiempo total para completar un conjunto grande de cálculos se reduce significativamente. A menudo se sacrifica la latencia para lograr un mayor rendimiento por ciclo. [ 3 ] Como resultado, un procesador orientado a la latencia puede completar un solo cálculo significativamente más rápido que un procesador orientado al rendimiento; sin embargo, el procesador orientado al rendimiento podría estar realizando cientos de dichos cálculos cuando el procesador orientado a la latencia completa uno. [ 2 ]
Los procesadores orientados a la latencia emplean una superficie considerable del chip en estructuras de control sofisticadas, como la predicción de bifurcaciones, el reenvío de datos , el búfer de reordenamiento , grandes archivos de registros y cachés en cada procesador. Estas estructuras ayudan a reducir la latencia operativa y el tiempo de acceso a la memoria por instrucción, y a que los resultados estén disponibles lo antes posible. Por otro lado, las arquitecturas orientadas al rendimiento suelen tener multitud de procesadores con cachés mucho más pequeñas y una lógica de control más sencilla. Esto ayuda a utilizar de forma eficiente el ancho de banda de la memoria y a aumentar el número total de unidades de ejecución en la misma superficie del chip. [ 3 ]
Las GPU son un ejemplo típico de arquitecturas de procesadores orientadas al rendimiento.
Notas
- ↑ Organización y diseño de computadoras: la interfaz hardware/software , capítulo 4 [ 5 ]
- ↑ Arquitectura de computadoras: un enfoque cuantitativo , Sección 3.1 [ 4 ]
- ↑ Organización y diseño de computadoras: la interfaz hardware/software , capítulo 5 [ 5 ]
- ↑ Arquitectura de computadoras: un enfoque cuantitativo , Sección 3.3 [ 4 ]
- ↑ Arquitectura de computadoras: un enfoque cuantitativo , secciones 3.4, 3.5 [ 4 ]
- ↑ Arquitectura de computadoras: un enfoque cuantitativo , secciones 3.6-3.8 [ 4 ]
Referencias
- ^ Juan Pablo Shen; Mikko H. Lipasti (2013). Diseño de procesador moderno . Profesional de McGraw-Hill. ISBN 978-1478607830.
- 1 2 3 Yan Solihin (2016). Fundamentos de la arquitectura multinúcleo paralela . Chapman & Hall/CRC Computational Science. ISBN 978-1482211184.
- 1 2 3 Michael Garland; David B. Kirk (2010). "Understanding Throughput-Oriented Architectures" . Communications of the ACM . 53 (11): 58– 66. doi : 10.1145/1839676.1839694 .
- 1 2 3 4 5 John L. Hennessy; David A. Patterson (2013). Arquitectura de computadoras: un enfoque cuantitativo (Quinta ed.). Morgan Kaufmann Publishers. ISBN 978-0123838728.
- 1 2 3 David A. Patterson; John L. Hennessy (2013). Organización y diseño de computadoras: la interfaz hardware/software (quinta ed.). Morgan Kaufmann Publishers. ISBN 9780124078864.
- ↑ Bhandarkar, Dileep; Clark, Douglas W. (1 de enero de 1991). «Rendimiento a partir de la arquitectura: Comparación de un RISC y un CISC con una organización de hardware similar». Actas de la cuarta conferencia internacional sobre soporte arquitectónico para lenguajes de programación y sistemas operativos - ASPLOS-IV . ACM. págs. 310–319 . doi : 10.1145/106972.107003 . ISBN 0897913809.
- Microprocesadores