Gabriel Enrique González · Transcript · · Updated
Arquitectura de Computadoras y Técnicas Digitales 2020 Clase: Superescalares: filminas 49 a 68 – Transcript
Video by Gabriel Enrique González · Watch the original on YouTube

Use this video with Pro
Reading, copying and transcript downloads are free. Create saved AI results for this video with a signed-in Pro account ($9/month).
Transcript
Search ignores accents. All transcript text stays visible.
bueno ya habiendo visto la descripción estructural en la que llegamos a una arquitectura y a ver todos los componentes del procesador que vemos que son muchos más componentes es una arquitectura mucho más compleja que la arquitectura escalar básica que manejábamos hasta el momento lo que vamos a hacer es encarar la descripción funcional o sea vamos a analizar que
debiera hacer el procesador súper escalar vamos a describir qué estructuras necesitamos que nos permitan llevar adelante esa ejecución para que todo el flujo de instrucciones de los programas puedan desarrollarse puedan procesarse con con total tranquilidad dentro de la tapa del procesador sí
si miramos un super escalar desde el punto de vista de su funcionamiento bueno en general con cualquier procesador pasa pero nos estamos concentrando acá en un súper escalar lo vamos a ver que lo que tenemos que analizar es cuál es el comportamiento de los tres flujos principales que son el flujo de instrucciones el flujo de datos y el flujo de interacción con la memoria así que obviamente están asociados a los
tres grandes tipos de instrucciones que son los saltos respecto del flujo de instrucciones en la luz respecto del flujo de datos y la memoria respecto del flujo de memoria si la idea el objetivo importante acá es maximizar el volumen de instrucciones procesadas en los tres flujos esto es para tarde y que los flujos funcionen su vida mente
sin bloqueos está bien si analizamos en una estructura reducida en una arquitectura reducida del súper escalar cuáles son los tres flujos bueno enseguida notamos que el flujo de memoria es todo el proceso que ocurre desde qué en el en la unidad de cálculo de dirección se calcula la dirección de
acceso a memoria y se hace el acceso para almacenar o recuperar un dato y se lo pone en el flujo de ejecución del procesador el flujo de instrucciones es aquel que ocurre desde que yo traigo la instrucción al procesador con el fecha porque pasa por la decodificación y está relacionado el flujo de instrucciones con lo que pasa con las
instrucciones de salto las instrucciones de saltos rompen secuencias en ejecución de instrucciones y obligan a saltar a otras partes del programa entonces lo que me interesa es qué es lo que pasa hasta que se produce la ejecución de una instrucción de salto en particular con lo cual se sabe si el salto condicional obviamente va a ser efectivo o no va a ser efectivo
y en función de eso que es lo siguiente que se va a cargar en el racing para continuar con la ejecución sí entonces en principio no nos preocupamos tanto por la ejecución secuencial de instrucciones porque esa sabemos que funciona bien sino por qué hacemos en el caso de excepciones o sea en caso de que aparezca una instrucción de salto condicional si de qué manera tratamos de
aumentar el rendimiento de manera de saber cuanto antes si ese salto es un salto condicional que se va a cumplir si no se cumple sabemos que continuamos con la instrucción que está abajo en el salto que es lo esperado para cualquier instrucción si esta secuencia pero si el salto ese se va a cumplir necesitamos saberlo cuanto antes para asegurarnos de no seguir ejecutando instrucciones por
la rama de salto no tomado y pasar enseguida ejecutar instrucciones de las ramas de salto tomado y por último el flujo de datos es aquel que tiene que ver con qué es lo que pasa con los datos dentro del programa los datos están almacenados en el banco de registros en algún punto por esta zona de acá y entonces qué es lo que pasa desde que leo
un dato de un registro y todo el proceso que ese dato va a seguir hasta que se genera un resultado que modifica el registro acá lo que me importa es el tema siguiente desde que una instrucción tiene sus operando para poder ejecutar hasta que la instrucción salva el resultado pasan unos cuantos ciclos de reloj la inscripción es virtualmente está en la estación de reserva está en las unidades funcionales
luego está en el búfer del reordenamiento esperando salir luego la unidad de compresión actualiza el banco de registros ese lapso es un lapso posiblemente grande para que instrucciones que necesitan el registro destino de de esa instrucción estén esperando si es un lapso en el cual también tenemos que evitar que instrucciones lean el banco de registros el registro en particular que ha sido
modificado para asegurarnos de que no habían datos incorrectos sí vamos a ver el primero de los flujos el flujo de instrucciones ya habíamos visto desde cursos anteriores que existen distintas formas de proceder o de manejar los saltos si
vimos en el curso anterior una técnica bastante sencilla que es la de salto que es una técnica que en general aplica el compilador que lo que hace es un reordenamiento de las instrucciones de manera de poner instrucciones que sé que seguro siempre se van a ejecutar posteriores a la instrucción de salto de manera de no frenar la instrucción de salto cuando
ocurre y dejar que mientras se decide o mientras se ejecuta la instrucción de salto hasta saber si la condición es verdadera o falsa se ejecutan instrucciones que de todos modos se hubieran ejecutado sí i otro grupo de técnicas de procesamiento de salto tiene que ver con situaciones
que se toman dentro del procesador o sea en lugar de soluciones como el salto que es una solución mediante mente de software y tomar soluciones de hardware en donde la solución más sencilla es el bloqueo si tengo una instrucción de salto condicional no resuelta hasta que se resuelva bloqueo la lectura de instrucciones sí la siguiente técnica es la especulación
esto es si tengo una instrucción de salto condicional no resuelta hasta tanto se resuelva especuló por un resultado para esa condición del salto y entonces el año pasado en general utilizábamos técnicas de especulación por salto tomado o salto efectivo o por salto no tomado por lo que sería salto
no efectivo y eran estáticas esto es diseñábamos o trabajábamos con un procesador que utilizaba una de esas dos predicciones o una de esas dos especulaciones vamos a ver acá en los procesadores ya más elaborados que se pueden hacer predicciones dinámicas en función de de sucesos pasados para con esa instrucción de salto o sea la historia de los altos y hay otras técnicas un
poco más agresivas para hacer especulaciones dinámicas respecto de qué va a ser un salto en particular en un momento en particular del programa sí y después si la arquitectura de hardware lo permite están los procesamientos de saltos multi vías en donde básicamente lo que buscan estas estas técnicas es si dispongo de suficiente hardware esto es
de suficientes rutas de cálculo alternativas lo que hago es mandar a ejecutar instrucciones de ambas vías de la ruta de salto tomado de la ruta de salto no tomarlo que la eficiencia decae pero teniendo unidades de cálculos disponibles o sea teniendo hardware del procesador disponible para tal efecto
y se mandan ejecutar instrucciones de ambos caminos y uno de los caminos siempre va a ser el correcto y entonces se gana tiempo y muchas dentro de las técnicas más agresivas están las técnicas de instrucciones predicadas que básicamente lo que buscan es la eliminación de saltos y la conversión de saltos en dependencias de datos entonces buscó desaparecer las independencias de control y convertirlas en dependencias
de datos siguen estando siguen siendo dependencias el problema sigue estando pero ahora lo trato como la dependencia de datos y puesto que tenemos bastantes mecanismos para el tratamiento de dependencias de datos dentro del procesador lo trató como una dependencia más sí cómo es este tema de los saltos si nos
ponemos a examinar un poco más en detalle si teniendo acá una ruta de datos super escalar clásica en un flujo secuencial normal esto es si no existe ninguna instrucción de salto en ejecución tenemos un rendimiento máximo si estamos leyendo esas instrucciones de codificar las instrucciones despachamos de hasta s
instrucciones a distintas estaciones de reserva y si nos ponemos a ver tenemos por ejemplo acá para una ruta con un grado s con un grado por supuesto n con un grado n lo que tenemos es que perdemos hasta tres por el grado del procesador ciclos o hasta tres por el grado de
procesador de instrucciones en en instrucciones que están almacenadas en este bazar de acá y en este bajar de acá y están almacenadas en algunos de estos barras de acá si si yo voy avanzando voy a tener que hago el phising entonces tengo tres instrucciones acá en el siguiente fecha estas tres instrucciones pasan acá y tengo otras tres acá y en el siguiente facing esas tres instrucciones van a distribuirse en algunas de estas
estaciones de reserva voy a tener tres instrucciones acá voy a tener tres instrucciones acá por ejemplo para un grado tres si más todas las instrucciones que tengo eventualmente en ejecución en las rutas de cálculo de la salud y si ocurre un salto eventualmente tengo que eliminar todas esas instrucciones que estén a la espera fíjense que una instrucción de salto va a progresar igual que todas las demás
instrucciones hasta su ruta correspondiente entonces cuando el salto se verifica como salto tomado o salto no tomado tengo grupos de instrucciones acá grupos de instrucciones acá hay grupos de instrucciones acá si se pierde entre por l ciclos y la penalización en instrucciones es 3 por el ancho del padre sí obviamente la situación no es la misma
para saltos incondicionales que para saltos condicionales el salto incondicional siempre ocurre si entonces lo único que debo esperar es el tiempo que progrese la instrucción hasta que se pueda calcular el target en la dirección del salto en general los saltos incondicionales tienen algunos motores de direccionamiento de para hacer para hacer saltos absolutos esto es ya
proveen una dirección de memoria absoluta donde saltar o a lo sumo es un poco relativa respecto del pc entonces se puede poner lógica adicional para poder hacer el cálculo del darse t en la decodificación y entonces a lo sumo pierdo un ciclo en los saltos condicionales debo cumplir dos requisitos debo calcular el target al igual que en el caso de las instrucciones incondicionales aunque ese target
también en muchos casos depende a veces de registros entonces tengo que avanzar un poco más para hacer el cálculo en este de acá si lo cual nuevamente me llena más el pipe de instrucciones que posible potencialmente se van a eliminar pero además debo calcular la condición si entonces sé que va a haber una instrucción de salto pero no sé si el salto se va a efectuar o no