Optimización de Rendimiento en Arquitectura DLX Superescalar: Planificación y Desenrollamiento de Bucles
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 3,7 KB
12A: Gestión de Contención y Latencia en Segmentación DLX
Resolución de Contención Estructural
La gestión de la contención es crucial para el rendimiento del procesador.
- Ambos problemas pueden resolverse detectando esta contención como un riesgo estructural y retrasando la emisión de la instrucción de punto flotante.
- La contención también se puede eliminar suministrando dos puertos adicionales, uno de lectura y otro de escritura, en el fichero de registros de punto flotante.
- También sería necesario añadir algunos caminos de desvío adicionales para evitar la pérdida de rendimiento.
Latencia de Carga y Retardos
- En nuestra segmentación básica de DLX, las cargas tienen una latencia de un ciclo de reloj; esto impedía que una instrucción utilizase el resultado sin detención.
- En la segmentación superescalar, el resultado de una instrucción de carga no se puede utilizar en el mismo ciclo de reloj ni en el siguiente.
- Lo anterior significa que las tres instrucciones siguientes no pueden utilizar el resultado de la carga sin detención; sin puertos extra, las transferencias entre los conjuntos de registros están afectadas de la misma manera. El retardo de los saltos también llega a ser de tres instrucciones.
Explotación del Paralelismo
Para explotar efectivamente el paralelismo disponible en una máquina superescalar, necesitaremos implementar técnicas más ambiciosas de planificación del compilador, así como una decodificación más compleja de instrucciones.
- Desenrollar el bucle ayuda a generar mayores fragmentos lineales para su planificación.
Transición: --> 12B
12B: Planificación y Desenrollamiento de Bucles en DLX Superescalar
Ejemplo de Planificación y Desenrollamiento
Ejemplo: Cómo funciona la planificación y el desenrollamiento de bucles en una versión superescalar de DLX con los mismos retardos en ciclos de reloj.
¿Cómo se planificaría el bucle desenrollado en una segmentación superescalar para DLX? Para planificarlo sin retardos, necesitaremos desenrollarlo para hacer cinco copias del cuerpo.
Rendimiento del Código Planificado y Desenrollado
A continuación, se describe el código planificado y desenrollado como aparecería en un DLX superescalar:
- Este bucle superescalar desenrollado se ejecuta ahora en 12 ciclos de reloj por iteración, o 2,4 ciclos de reloj por elemento, frente a 3,5 para el bucle planificado y desenrollado de la segmentación ordinaria de DLX.
- En este ejemplo, el rendimiento del DLX superescalar está limitado por el equilibrio entre los cálculos enteros y de punto flotante.
Mejora de la Eficiencia (Factor 2,5)
Cuando se planificó, el bucle original se ejecutaba a 6 ciclos de reloj por iteración. Hemos mejorado esto en un factor de 2,5:
- Más de la mitad de la mejora procede de desenrollar el bucle, que nos llevaba de 6 a 3,5 ciclos.
- El resto proviene de emitir más de una instrucción por ciclo de reloj.
Ventajas de la Arquitectura Superescalar General
Idealmente, nuestra máquina superescalar tomará dos instrucciones y las emitirá si la primera es entera y la segunda de punto flotante. Si no cumplen este patrón, que puede detectarse rápidamente, entonces se distribuyen secuencialmente.
Esto apunta a una de las principales ventajas de una máquina superescalar general: hay poco impacto en la densidad de código y se pueden ejecutar programas incluso sin planificación.
Transición: ---> 13A