¿Qué es la ejecución fuera de orden?

Las computadoras son máquinas complejas sin ninguna parte más compleja que la CPU. En un nivel de descripción general básico, parece que la CPU debería ser relativamente simple. Toma una serie de comandos, los procesa y luego genera los datos. Sin embargo, esto se parece poco al funcionamiento real de las CPU modernas.

Subescalar a superescalar

Las primeras CPU eran exactamente como cabría esperar. Tomaron las instrucciones individualmente, en el orden en que se les dieron, las procesaron hasta completarlas y luego pasaron a la siguiente instrucción. Las CPU de este tipo eran subescalares, capaces de completar menos de una instrucción por ciclo de reloj. Los diseñadores de CPU identificaron que había muchas etapas diferentes para completar una instrucción. Cada una de estas etapas requería un hardware diferente. Esto significaba que cuando se ejecutaba una sola instrucción a través de toda la secuencia a la vez, algunas partes del hardware permanecían inactivas. En cualquier tipo de procesador, el hardware inactivo es un hardware inútil.

Para utilizar este hardware inactivo, los diseños de CPU se actualizaron para utilizar un enfoque de canalización. Esto separó aún más el hardware para cada etapa, pero permitió que todos se utilizaran al mismo tiempo mediante una serie de instrucciones. Si bien aún tomó algunos ciclos para que cada instrucción pasara por la canalización, el rendimiento general fue de una instrucción por ciclo. Esto hizo que las CPU fueran escalares.

Para poder hacer más, los procesadores debían hacerse súper escalares. Para lograr esto, se implementaron múltiples tuberías paralelas.

Mantener las canalizaciones alimentadas con datos

El principal problema de rendimiento de las computadoras suele ser la latencia de la memoria. Muchas instrucciones operan con datos, por lo que es necesario que los datos estén disponibles para que se ejecute la instrucción. La pregunta es, ¿qué haces si necesitas esperar esos datos porque no están disponibles de inmediato? Tradicionalmente, la respuesta era detenerse y esperar a que estuviera disponible. Esto deja toda la canalización vacía, potencialmente durante cientos de ciclos de CPU. Las cosas empeoran aún más cuando dos instrucciones en canalizaciones paralelas necesitan esperar la memoria, ya que la primera detendrá incluso la solicitud de los datos de la segunda. Si bien la memoria caché de la CPU puede ayudar a resolver este problema, todavía no puede solucionarlo. Se necesitaba un nuevo paradigma para resolverlo. Ese cambio de paradigma fue la ejecución fuera de orden o OOO.

La primera etapa de una tubería es decodificar la instrucción. Esto significa determinar qué se debe hacer y verificar que los datos necesarios para la operación estén disponibles. En una CPU OOO, las instrucciones decodificadas se agregan a una cola. Solo se eliminan de la cola y se procesan cuando los datos que necesitan están disponibles. Críticamente, no importa en qué orden se agregaron las instrucciones a la cola. Si una instrucción anterior está esperando datos, una instrucción más reciente puede saltarse si está lista para funcionar. Los procesadores OOO pueden reordenar las instrucciones que se supone que deben procesar en función de la cola de próximas instrucciones y cuáles de ellas están listas para ejecutarse.

Dependencias críticas

Este proceso supone dos cosas. En primer lugar, que es posible identificar y manejar de manera confiable las verdaderas dependencias. En segundo lugar, que puede manejar e identificar de manera confiable las dependencias falsas. ¿Cuál es la diferencia? Bueno, una verdadera dependencia es una dependencia que no se puede mitigar en absoluto en un sistema OOO. El ejemplo más sencillo es el de lectura tras escritura. Si tiene una instrucción que se supone que debe escribir algunos datos y otra que se supone que lee esos datos, no hay forma de poder reordenar esas instrucciones. Deben completarse en el orden en que se presentaron, o obtendrá datos sin sentido.

Una dependencia falsa es aquella que se puede ocultar con otro truco ingenioso. Tomemos el ejemplo de escribir después de leer. A primera vista, podría pensar que no puede sobrescribir datos antes de haberlos leído. Aunque las cosas no son tan simples. ¿Qué sucede si tiene otro lugar donde puede escribir los datos nuevos y luego puede intercambiar los datos nuevos y antiguos una vez que se hayan leído los datos antiguos? Este es el proceso de cambio de nombre de registro y es fundamental para el procesamiento OOO.

Normalmente, un conjunto de instrucciones define un número determinado de registros arquitectónicos que se utilizan en el sistema. Literalmente no puedes dirigirte a ningún otro. Pero, ¿qué pasa si haces registros de sobreaprovisionamiento? Puede simplemente ocultarlos en su mayor parte, usarlos para almacenar datos que aún no deberían haberse procesado y luego simplemente intercambiar las etiquetas de los registros ocultos y arquitectónicos cuando la línea de tiempo vuelva a ser correcta. En cualquier momento, existe la cantidad exacta de registros arquitectónicos, solo que no siempre están necesariamente en el mismo lugar. Una analogía del mundo real sería el escritorio compartido.

Conclusión

La ejecución fuera de orden es un paradigma de procesamiento en el que la CPU puede reordenar dinámicamente las instrucciones en el momento de la ejecución. Esto se hace sobre la base de las primeras instrucciones emitidas que tienen datos disponibles. Esto significa que las instrucciones que se cargan en la canalización siempre están listas para ejecutarse y no hay demoras mientras se esperan los datos. Por supuesto, es necesario tener una cola lo suficientemente larga como para que no se llene de instrucciones en espera de datos, pero eso es un desafío de implementación. La ejecución de OOO se basa en el cambio de nombre de registro para ocultar dependencias falsas. Incluso si estas instrucciones se ejecutan realmente fuera de orden, los registros se renombran de tal manera que ocultan este hecho al resto de la computadora.



¿Cómo reparar el controlador WUDFRd que no se pudo cargar en Windows 10?

¿Cómo reparar el controlador WUDFRd que no se pudo cargar en Windows 10?

¿Se enfrenta al mensaje de error al iniciar su computadora que dice que el controlador WUDFRd no se pudo cargar en su computadora?

Cómo reparar el código de error 0x0003 de la experiencia NVIDIA GeForce

Cómo reparar el código de error 0x0003 de la experiencia NVIDIA GeForce

¿Tiene el código de error 0x0003 de la experiencia NVIDIA GeForce en su escritorio? En caso afirmativo, lea el blog para descubrir cómo solucionar este error de forma rápida y sencilla.

Cómo quitar una GPU de una PC con Windows en 2023

Cómo quitar una GPU de una PC con Windows en 2023

¿Necesitas quitar la GPU de tu PC? Únase a mí mientras explico cómo quitar una GPU de su PC en esta guía paso a paso.

Cómo instalar un SSD NVMe en una computadora de escritorio y una computadora portátil

Cómo instalar un SSD NVMe en una computadora de escritorio y una computadora portátil

¿Compró un nuevo SSD NVMe M.2 pero no sabe cómo instalarlo? Siga leyendo para aprender cómo instalar un SSD NVMe en una computadora portátil o de escritorio.

¿Qué es una bomba lógica?

¿Qué es una bomba lógica?

Una bomba lógica es un incidente de seguridad en el que un atacante establece una acción retrasada. Sigue leyendo para saber más.

¿Qué es Stuxnet?

¿Qué es Stuxnet?

Stuxnet era un gusano que se propagaba a sí mismo. Fue el primer uso de un arma cibernética y la primera instancia de malware.

¿Qué es un hacker ético?

¿Qué es un hacker ético?

Un hacker ético es un hacker que actúa dentro de los límites de la ley. Sigue leyendo para saber más sobre el tema.

¿Qué es el cifrado simétrico?

¿Qué es el cifrado simétrico?

Hay muchas partes diferentes de la criptografía. Sin embargo, si desea cifrar algunos datos, hay dos tipos de algoritmos que puede usar: simétrico

Cómo hacer una prueba de estrés de GPU en 2023: + 6 mejores herramientas

Cómo hacer una prueba de estrés de GPU en 2023: + 6 mejores herramientas

¿Quiere hacer una prueba de estrés de la GPU en su PC con Windows para garantizar un rendimiento confiable para los juegos de alta definición? ¡Lea esta guía de GPU de prueba de estrés ahora!

¿Qué es un hash criptográfico?

¿Qué es un hash criptográfico?

Los conceptos básicos de los algoritmos de cifrado son bastante fáciles de entender. Se toma una entrada o texto sin formato junto con una clave y el algoritmo la procesa. El