SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 5. PROCESADORES SUPERESCALARES: PLANIFICACIÓN DINÁMICA. OBJETIVOS. En esta práctica se trata de estudiar, por un lado, el aumento de prestaciones que se consigue con procesadores superescalares, y por otro, el coste hardware que se necesita para conseguir tal aumento, estudiando los grados de superescalaridad m=1, 4, 6. Se observarán diferentes casos en los que prácticamente se alcanza el límite del flujo de datos (data-flow limit), de manera que aumentando el número de recursos, no se aumentan las prestaciones. Se manejará un simulador visual desarrollado como un proyecto Fin de carrera dentro del Departamento de Arquitectura y Tecnología de Computadores de la Universidad de Sevilla: SUPERTOMASIM (SUPERescalar TOMasulo SIMulator). Éste simula un procesador didáctico superescalar y superencadenado de un modelo de RISC típico de 32 bits (llamado DLX), que dispone de scheduling dinámico (algoritmo de Tomasulo). Además son configurables tanto el grado de superescalaridad como los recursos del procesador (UF, CDB, RS, etc). PREPARACIÓN. Descripción del simulador SUPERTOMASIM. Este simulador admite cualquier código RISC (del DLX), con algunas restricciones que se explican en el apartado de preparación de la práctica. Como se ve en la siguiente figura, muestra el cronograma que se está ejecutando y el estado completo (RS, registros, memoria, etc.) del procesador simulado. Las etiquetas se llaman igual que las RS. Los registros y RS que esperan por una etiqueta (por existir una dependencia real RAW) muestran tal nombre en lugar del valor (por ejemplo en los registros R1, R2 y en las RS STORE01, STORE02 de la figura). Además permite configurar en el menú Ventanas->Configuración (cuadro de diálogo inferior derecho de la imagen): Duración de cada UF (Num Fases EXE) Número de RS (Num RS) Número de UF (Unid Fun) m = Grado de Superescalaridad (Grado Escalaridad) Grado de superencadenamiento de la fase IS (Num Fases IS) Número de CDB (Num CDB) Fase en la que se realiza la predicción de la BTB (Pred BTB en Fase) El cronograma y configuración se pueden salvar en ficheros aparte (el cronograma tiene cada fase separada por tabuladores para que se pueda copiar fácilmente por ejemplo en una hoja de Excel). Algunas consideraciones sobre la arquitectura que simula SUPERTOMASIM son: Dpto. Arquitectura y Tecnología de Computadores SPD. Práctica 5. pág 1
En cuanto a emisión, siempre intenta emitir m (Grado de Superescalaridad) instrucciones. No simula la evolución de BTB, pero si predice saltos en función de un fichero llamado BTB.txt (se explicará en otra práctica) Toda los registros internos del algoritmo son visibles y du contenido es correcto, pero no se van a usar en esta asignatura (contenido de las R.S., de los registros, de las Registros temporales). Fichero de código para preparar. Trabajaremos primero con un bucle simple para ver el máximo IPC que se puede conseguir aumentando el grado de superescalaridad y los recursos de un procesador. CODIGO SPD_TOMASIM2.s.data arrayx:.float 1 2 3 4 5 6 7 8 9 10 11 12 fin:.byte 33 ;solo para marcar el fin del vector..text addi r1,r0, arrayx ;Puntero a Arrayx lf f11, 0(r1) ; carga el valor 1.0 en f11 addi r1, r1, 4 bucle: lf f5, 0(r1) ; carga elem del vector addf f5, f11, f5 sf -4(r1), f5 addi r1, r1, 4 slti r3, r1, fin bnez r3, bucle xor r3, r3, r3 ;instr inutil solo para que se vea bien que es la rama sig. al salto trap 0 ; es una interrupción software (simulada) para que termine la ejecución. Piense y resuelva las siguientes preguntas sobre el código dado: a) Qué hace? b) Cómo se podrían escribir en código de alto nivel? c) Es desenrollable directamente? REALIZACIÓN DE LA PRÁCTICA. Ejecutar el Simulador SUPERTOMASIM. El simulador es la primera parte de un proyecto de simulación de procesadores superescalares, y algunos detalles de la interfaz de usuario están aún incompletos, son poco amigables o no detectan ciertos errores de entrada. Por tanto, se van a dar los ficheros de ensamblador en el laboratorio para evitar que salgan ciertos errores. Otras consideraciones sobre la arquitectura que simula SUPERTOMASIM son: La ventana de instrucciones tiene m instrucciones (cuando hay un salto o un fallo de BTB se tiene que vaciar). El grado de IF es igual que el de IS (m IF = m IS ) Especula con las instrucciones sucesivas al salto, y las aborta tras la fase WB del salto si la predicción de un salto fue errónea (introduciendo el símbolo AB ), aunque no implementa hardware para la especulación (p ej, buffer de reordenación). Las instrucciones especulativas que serán abortadas por error de predicción muestran su cronograma y reservan RS, pero no modifican el estado del procesador (no escriben nunca ni en la memoria ni en los registros), y por lo tanto puede que no se ejecuten correctamente (esto no afectará al resultado del código ni al rendimiento IPC, ya que estas instrucciones se abortarán de cualquier forma). Cada bloqueo estructural se muestra repitiendo la fase que no puede avanzar. Por ejemplo: IF IF IF IS significa que han habido dos ciclos de bloqueo porque IS no pudo ejecutarse (según notación de clase: IF - - IS). Cuando ejecute código RISC DLX, debe tener en cuenta los siguientes pormenores: No use la ejecución completa (botón ): es muy lenta. Ejecute paso a paso o de 5 en 5 ciclos (teclas F7, F8). El número máximo de RS de cada tipo es 150. El número máximo de UF de cada tipo es 10. Podría interrumpirse la simulación si se superan estos límites (no se chequean estos rangos en la configuración). Para cambiar cualquier parámetro de la configuración (cuadro de diálogo de configuración: ventanas- >configuración) o para cambiar de código simulado, debe primero resetear el simulador con la opción: Archivo-> Limpiar. Se pierde evidentemente todo el cronograma anterior. La configuración se puede salvar en un fichero (con la opción GUARDAR) y luego recuperarla (opción CARGAR). Las estadísticas que muestra SUPERTOMASIM incluyen las instrucciones finales (NOP y trap) y por tanto, estas estadísticas no son las que se piden. Para la predicción de saltos debe existir un fichero de nombre btb.txt que contenga en cada línea la dirección de cada salto en hexadecimal (comenzando por 0X), el símbolo ; y las siglas T o NT. Se da preparado para esta práctica, siendo siempre la predicción TOMADO Dpto. Arquitectura y Tecnología de Computadores SPD. Práctica 5. pág 2
Para DLX ESCALAR (grado superescalaridad=1) 1. Antes de cargar código, cargar la configuración del fichero configuracion1.xml (si estuviera deshabilitado la carga, resetear el simulador con la opción: Archivo-> Limpiar). Esta debe ser: máximo número de CDB (para evitar conflictos y posibles esperas por el CDB). Duración de UF de ADD-FP debe ser 7 ciclos. 10 RS de INT y 10 UF INT para evitar bloqueos por culpa de agotamiento de ellas. Tener en cuenta que en SUPERTOMASIM las UF no están segmentadas, por tanto para emular su segmentación, aumente el número de UF hasta tantas como su duración (hacer el parámetro Unid Func igual al Num Fases EXE). Se pide: a) Ahora cargue el código spd_tomasim2.s. Ejecute de 5 en 5 ciclos (tecla F8). Mueva Scroll del cronograma para poder ver los últimos ciclos. Cuál es la cadena crítica de ejecución (cadena de RAWs más larga) en una única iteración? b) Buscar el estacionario del bucle (Mueva Scroll del cronograma). Anotar cuantos ciclos pasan desde el primer IF del bucle hasta el WB más tardío. c) cuánto vale el CPIreal del bucle en el estacionario? Para DLX SUPERESCALAR (grados superescalaridad=3,4) 2. Resetear el simulador con la opción: Archivo-> Limpiar y utilizar la configuración del fichero configuracion2.xml, que es realista para un procesador de propósito general (GPP); así: Como puede ver, se han aumentado el número de RS de ADDF y Store (para que no haya bloqueos por estas dos instrucciones en el estacionario del bucle). d) Cambie el grado de superescalaridad a 3. Cargar el código. Ejecutar bastantes iteraciones Se consigue el máximo rendimiento posible para este caso m=3? e) Vuelva a poner el grado de superescalaridad a 4. Cargar el código. Cuál es el CPI de control para las dos primeras iteraciones y por qué no es nulo? f) Buscar el estacionario del bucle. Se espera un CPI ideal de 1/4, pero, cuál es el CPI real? g) Comprobar la ecuación: CPIreal = CPIideal + CPIdatos+ CPIcontrol. h) Medir los ciclos de penalidad de control para la última iteración. i) Medir el número de instrucciones abortadas por la penalidad de control de la última iteración. Dpto. Arquitectura y Tecnología de Computadores SPD. Práctica 5. pág 3
DLX SUPERESCALAR (grado superescalaridad=6) 3. SUPERTOMASIM no dispone de una unidad de búsqueda de instrucciones inteligente (IFU; Instr. Fetch Unit). Para emularla, de manera que el CPI control sea cero (excepto en la última iteración del bucle), vamos a poner el grado de superescalaridad igual que el número de instrucciones del bucle. Resetee con: Archivo-> Limpiar y aumente el grado superescalaridad a 6 (usar opción Ventanas->Configuración) y aumentar el número de RS de ADDF y Store necesarios (recordar: número máximo de RS de cada tipo es 150) para que no haya bloqueos por estas dos instrucciones en el estacionario del bucle. Ahora tenemos un procesador que es muy agresivo, pero posible para un procesador de propósito general (GPP). j) Vuelva a cargar el código. Ya no hay bloqueos de control, pero el CPI real en el estacionario no será 1/6. Medirlo. k) Puede inferir cuáles son las causas que aumentan el CPI ahora (que finalmente implica un agotamiento de R.S.)? SI se aumentaran las R.S. se evitarían los bloqueos en el estacionario? l) Cuál es ahora la cadena crítica de ejecución (cadena de RAWs más larga) en el estacionario de muchas iteraciones? m) Comprobar la ecuación: CPIreal = CPIideal + CPIdatos+ CPIcontrol. Dpto. Arquitectura y Tecnología de Computadores SPD. Práctica 5. pág 4
ALUMNO: SPD. 3º GIC. PRÁCTICA 5. TABLA RESULTADOS a) b) c) d) e) f) g) h) i) j) k) l) m) Dpto. Arquitectura y Tecnología de Computadores SPD. Práctica 5. pág 5