Sistemas Informáticos Curso 2005-2006 ESTUDIO COMPARADO DE ARQUITECTURAS GALS-SMT (Globalmente Asíncronos Localmente Síncronos – Simultaneous Multithreading) Omar Aragón César Boullosa Serrano Tania Orell Orgaz Dirigido por: Juan Lanchares Dávila Dpto. Arquitectura de Computadores y Automática (DACYA) Facultad de informática Universidad complutense de Madrid RESUMEN: En este trabajo se realizará un estudio de una arquitectura resultado de la unión de un diseño SMT y otro GALS (MCD). Esta arquitectura nunca ha sido probada, por lo que los parámetros iniciales no están ajustados para aprovechar las ventajas que ofrece un diseño SMT. Dividiremos el trabajo en dos partes bien diferenciadas. En la primera sintonizaremos los parámetros de la arquitectura para un mejor aprovechamiento del diseño SMT. Una vez conseguido esto, en la segunda parte, estudiaremos los dominios de reloj óptimos en los que tendríamos que dividir el sistema. Para esto, realizaremos un estudio de los canales de comunicación, buscando aquellos que tienen un mayor impacto en el rendimiento para descubrir los cuellos de botella. PALABRAS CLAVE: SMT, GALS, MCD, reloj, canales, penalizaciones, dominios. SUMMARY: In this work, we will cary out a study of an architecture which is the result of the link of an SMT design and a GALS design (MCD). This architecture has never been tested, therefore, the initial parameters are not adjusted to take advantage of an SMT design. We will split the work in two clearly different parts. In the first one, the parameters of the architecture will be fit in order to get a better use of the SMT design. Once this target is achieved, we will study the optimal clock domains in which the system should be split. To achieve this goal, we will carry out a study about the communication channels, looking for those ones with higher impact on the performance to discover the bottlenecks. KEY WORDS: SMT, GALS, MCD, clock, channels, penalties, domains. 2 ÍNDICE 1.- Introducción …………………………………………………………….. 4 2.- Estado del arte 2.1.- Diseños GALS …………………………..……………………… 6 2.2.- Diseños SMT …………………………………………………. 23 3.- Arquitectura 3.1.- Introducción …………………………………………………… 33 3.2.- Repertorio de instrucciones …………………………………. 33 3.3.- Arquitectura ................................................................................ 34 4.- Simulación 4.1.- Introducción ................................................................................ 39 4.2.- Pruebas para el ajuste de la arquitectura ................................ 40 4.3.- Estudio de las penalizaciones .................................................... 45 4.4.- Conclusiones y trabajo futuro .................................................. 49 5.- Bibliografía ............................................................................................... 51 6.- Apéndice A: Información sobre los benchmarks utilizados ................ 54 3 1) INTRODUCCIÓN Una característica importante de los diseños de procesadores que hoy en día dominan el mercado es el uso de un reloj global (son síncronos). La simulación de estos tipos de procesadores es sencilla, y hay muchas herramientas disponibles para su diseño. Sin embargo, el uso de este reloj global, hace que su señal tenga que llegar a todos los módulos del procesador, lo que supone mayor esfuerzo de diseño, a la vez que implica una mayor necesidad de área y un mayor consumo de potencia. Un pensamiento lógico para evitar todos los problemas derivados del reloj es utilizar un procesador totalmente asíncrono, sin embargo su desarrollo presenta graves problemas al no existir herramientas de diseño aceptadas y eficaces. Una solución a los problemas generados por los dos tipos de diseño de procesadores mencionados anteriormente, es usar diseños GALS (globalmente asíncronos, localmente síncronos). De esta forma se podrían combinar las ventajas de ambos y minimizar sus inconvenientes. El circuito se divide en varios dominios de reloj, cada uno trabajando a una frecuencia diferente. La comunicación entre los distintos módulos se realiza de forma asíncrona, evitando así el uso de un reloj global. Además, el hecho de que cada dominio pueda trabajar a una frecuencia diferente, hace que se puedan elegir aquellas bajo las cuales los dominios presentan mejores comportamientos. Por otro lado, para aumentar las capacidades del procesador, hace falta incrementar el paralelismo de todas las formas posibles. Estas formas son el paralelismo a nivel de instrucción, y a nivel de hilo. Una microarquitectura capaz de conseguir esto, es la Simultaneous Multithreading. Este diseño, hereda de los superescalares la habilidad de lanzar varias instrucciones cada ciclo, y de los multihilo, la habilidad de la coexistencia de varios hilos de ejecución en el pipeline. Esto hace que haya una mayor eficiencia en el uso de los recursos, y que sea más sencillo apantallar las paradas de un único hilo. Vistas las ventajas de ambos planteamientos, parece lógico pensar que el uso de una arquitectura SMT-GALS pueda ser ventajoso en cuanto a la distribución del reloj a la par que incrementa el rendimiento debido a la ejecución de múltiples hilos simultáneamente.Nuestro estudio se centrará en una arquitectura de éste tipo. El diseño GALS, aunque hace desaparecer la dificultad del uso de un reloj global, no ofrece una mejora en el rendimiento debido a las penalizaciones. Pero esta ligera degradación del rendimiento puede ser compensada por el hecho de que la arquitectura sea también SMT. En este trabajo, partiendo de una arquitectura SMT-GALS con parámetros no ajustados para un correcto funcionamiento SMT, los sintonizaremos para obtener una arquitectura con buen rendimiento en ejecuciones con varios hilos. Una vez la tenemos, nuestro trabajo se centrará en la búsqueda de los dominios de reloj óptimos, estudiando las penalizaciones que aparecen en los canales de comunicación dado el carácter GALS de la arquitectura, y su impacto en el rendimiento. 4 Esta memoria se divide en tres partes: En la primera parte comentamos ampliamente las características del mercado actualmente en lo que se refiere a GALS y a Simultaneous Multithreading. En la segunda parte explicamos los detalles de la microarquitectura que hemos usado. La tercera parte se centra en nuestros resultados, explicando el método de simulación usado, así como los resultados obtenidos y sus conclusiones 5 2) ESTADO DEL ARTE 2.1) Los diseños GALS (Globalmente Asíncronos Localmente Síncronos) En el diseño de procesadores nos encontramos con dos alternativas extremas, los procesadores totalmente síncronos y los totalmente asíncronos, que a continuación pasamos a describir. 2.1.1) Procesadores totalmente síncronos: Son diseños en los que un único reloj se distribuye a lo largo de todo el sistema. La progresión del desarrollo de los circuitos síncronos se basa en la discretización del tiempo. Esto facilita la descripción de los circuitos, ya que el diseñador hace la hipótesis de que todas las operaciones del circuito acaban en un determinado tiempo para ser muestreadas con el siguiente pulso de reloj. Además, la observación de los valores en los ciclos de reloj, facilita la simulación y el desarrollo del diseño. La verificación del mismo se convierte en un problema de estudiar los retardos en las funciones combinacionales lógicas entre registros, y este proceso puede ser automatizado. El estilo de diseño síncrono en conjunción con los lenguajes de descripción de hardware de alto nivel, las herramientas elaboradas y los avances tecnológicos concernientes a la densidad de integración, han permitido grandes avances para el diseño y el desarrollo de los computadores. Por todo esto los diseños síncronos siguen dominando el mercado en la actualidad. En contrapartida, el uso de un reloj global, que tiene que alimentar a todos y cada uno de los módulos que componen el diseño total, requiere un cableado del reloj más complejo para que éste alcance a todos los módulos. Ello supone un gran esfuerzo de diseño y una necesidad de ocupar mayor área, desencadenando una serie de inconvenientes y problemas importantes que describiremos a continuación. El retardo del reloj: Debido a que un único reloj tiene que llegar a todos los módulos incluidos los más lejanos (el tamaño de la oblea es cada vez mayor), se produce un problema, el retardo del reloj (tamaños cada vez más grandes, cables cada vez más largos y por consiguiente hay un retardo mayor hasta que la señal del reloj alcanza a todos los módulos), que es una causa importante de la pérdida de rendimiento en un procesador. La disipación de potencia: El consumo de potencia es un gran problema que afecta negativamente al rendimiento del procesador porque produce el calentamiento de ciertas partes del chip lo que tiene como efecto que éste funcione más lentamente. Esta disipación se debe a dos motivos: Cada señal del reloj que llega a un módulo provoca que los transistores del módulo cambien de estado (aunque puedan luego volver al estado 6 anterior), y con cada cambio de estado en un transistor se consume potencia. La mayor longitud del cableado implica mayor consumo de potencia en el mismo. A su vez, el consumo de potencia se ve aumentado debido a que los avances en el diseño de arquitecturas implican un mayor número de transistores, lo que consume más potencia, y al mismo tiempo se descubren mejores tecnologías que permiten un mayor número de transistores por unidad de superficie, lo que hace que se incremente el consumo por unidad de área. Una de las soluciones planteadas para evitar este consumo de potencia es inhabilitar el reloj en aquellas zonas que se encuentran inoperativas, pero los resultados no fueron suficientes. Todo eso hizo que los investigadores vieran en los diseños totalmente asíncronos una atractiva alternativa de diseño. Hoy en día unos de los temas de investigación más importantes en el mundo del diseño de procesadores es cómo reducir este consumo de potencia [1]. El desfase del reloj: Aunque la distribución del reloj global se intenta diseñar de manera que llegue casi instantáneamente a todos los módulos, este objetivo no siempre se consigue, dando lugar a otro de los problemas que degradan el rendimiento: el desfase del reloj. Éste consiste en que la señal del reloj llega a los distintos módulos en instantes de tiempo diferentes, lo que provoca que un módulo que recibe dicha señal más tarde que el resto cargue información errónea. Para remediar este problema se invierte un gran esfuerzo de diseño en distribuir el reloj de forma óptima [2] y aún así no siempre es posible eliminar este desfase del reloj. 2.1.2) Procesadores totalmente asíncronos: Son diseños que no tienen reloj global, eliminando así los problemas derivados del mismo. Pero estos sistemas presentan un grave problema: las herramientas de diseño automático no están todavía muy desarrolladas, por lo que resultan mucho más costosos tanto el diseño como la validación de los sistemas. Por este motivo, la mayoría de los procesadores totalmente asíncronos existentes son de desarrollo académico, y prácticamente ninguno ha sido comercializado. 7 Ejemplos: 1. Caltech [3]: se diseñó en el año 1988 y fue el primer microprocesador totalmente asíncrono. Es un RISC de 16 bits. No trató ser un diseño de procesador formal, estaba pensado para la experimentación en diseño de circuitos y desarrollo de métodos de prueba. Los diseñadores estimaron la velocidad de ejecución en 15 MIPS. 2. FAM (Fully Asynchronous Microprocessor) [3]: cuenta con 18 instrucciones en su repertorio. Es experimental, igual que el anterior. Tiene 32 bits en la ruta de datos y 32 registros de 32 bits. Tiene una arquitectura RISC segmentada de cuatro etapas que son: búsqueda, memoria, decodificación y ejecución. La caché contiene instrucciones y datos, y se accede a ella en la primera y cuarta etapa, lo cual produce un conflicto que se resuelve mediante el protocolo de arbitraje. Su velocidad de ejecución son 300 MIPS. 3. NSR (Nonsynchronous RISC) [3, 4]: Contiene 5 bloques concurrentes que son análogos a las etapas del pipeline estándar de un sistema síncrono: búsqueda, decodificación, ejecución, acceso a memoria y escritura en registro. Tiene también una cola FIFO para minimizar las paradas causadas por las instrucciones con mayor latencia. Su velocidad de ejecución es de 1’3 MIPS. Su repertorio de instrucciones consta de 16 instrucciones. 4. CFPP (Counterflow pipeline processor) [3]: fue desarrollado en 1994 por Sun Microsystems. Las instrucciones fluyen a través del pipeline en una dirección, pero los datos que genera fluyen en la dirección opuesta. El único requisito es que la instrucción primero tiene que encontrarse con los operandos fuente mientras fluyen en sentidos opuestos. Una vez finalizada la instrucción continúa fluyendo hasta llegar al banco de registros, donde se deposita el resultado. Además se inserta el resultado en el flujo opuesto del pipeline. Ventajas: - Ejecución especulativa - Ejecución fuera de orden. - Asíncronos vs. síncronos: El CFPP fue diseñado para un procesador asíncrono. Sin embargo, puede ser implementado también como un procesador síncrono. - Control local: requiere sólo información local para decidir cuando puede avanzar un elemento en el pipeline. - Regularidad: tiene una estructura muy regular. - Comunicación local: se comunica solamente con los vecinos - Modularidad - Simplicidad 5. Amulet: Amulet3 es un microprocesador con funcionalidad completa que soporta interrupciones y fallos de memoria. Amulet3 se basa en el diseño de una implementación asíncrona del conjunto de instrucciones ARM (Advanced Risc Machine). El Amulet1 que se desarrolló durante 8 1991-1993, mostró que el diseño complejo asíncrono es posible y el Amulet2 que las ventajas de los diseños asíncronos pueden ser realizadas en la práctica. Amulet3 (1996-1998) se desarrolló para establecer la viabilidad comercial del diseño asíncrono. El objetivo del proyecto Amulet3 es producir una implementación asíncrona de una arquitectura ARM competitiva en términos de eficiencia en cuanto a potencia y ejecución con el último núcleo ARM basado en reloj. Es de los pocos procesadores comerciales totalmente asíncronos. La ruta de datos del Amulet3 es: La unidad de prefetch: Es la responsable de generar direcciones para la memoria de instrucciones que se envían mediante el registro de instrucción de dirección (IAR, en la siguiente figura). La unidad de prefetch tiene una organización paralela, y computa especulativamente todas las salidas en 9 paralelo para después seleccionar el curso apropiado de la acción en el multiplexor final. Aunque esta especulación causa actividad innecesaria (y por lo tanto consume más potencia) es necesario para tener el rendimiento deseado. Normalmente las direcciones de salida de una secuencia ascendente son un simple bucle que contiene un incrementador. Cuando hay un salto, este bucle puede ser interrumpido asíncronamente y cargado con una nueva dirección de la ALU. Características de la unidad de prefetch: - Predicción de saltos: Usa el “branch target buffer” (BTB), que predice que el salto siempre se toma. - Paradas e interrupciones: Cuando llega una interrupción a la etapa prefetch, el contador de programa se carga con la dirección de la rutina de servicio (que se genera en la unidad EU de la figura 2) y comienza la etapa de prefetch para este nuevo código. - Saltos indirectos: La unidad de ejecución pasa el valor de la dirección del load del PC a la unidad de prefetch mediante el camino de la dirección de salto en paralelo con la iniciación de otras transferencias de registros en el interfaz de datos. Este valor vuelve a la unidad de prefetch mediante IND de la figura 2, donde comienza la etapa de prefetch. Decodificador Thumb: Las instrucciones ARM, de 32 bits, más usadas se pueden comprimir a un formato Thumb, de 16 bits. Éstas pueden a su vez descomprimirse. Este decodificador recibe paquetes de instrucciones de 32 bits que pueden contener una única instrucción de este tamaño, dos 10
Description: