Está en la página 1de 7

PROCESADORES CRUSOE DE TRANSMETA INTRODUCCIN Desde hace ya algunos aos, la tendencia general en la fabricacin de CPUs se ha basado en conseguir sobre

todo dos objetivos: Compatibilidad con la arquitectura llamada x86. El mayor rendimiento posible en aplicaciones. Para lograr ambos objetivos, los principales fabricantes (como Intel o AMD) fabrican procesadores cada vez ms rpidos y complejos, con una arquitectura interna de tipo RISC. Por tanto, para lograr ejecutar las instrucciones de la familia x86, estas CPUs realizan una traduccin del cdigo mediante un hardware especfico. Las CPUs modernas poseen otro hardware especial para optimizar y reordenar cdigo en tiempo de ejecucin. Todos estos elementos hardware requieren espacio en la CPU y consumen energa elctrica. El procesador Crusoe, en cambio, traslada estas funciones a una capa de software, muy estrechamente ligada al hardware de la CPU, resultando un procesador con menos superficie de silicio y menor consumo. Esto significa que los recursos habituales de una CPU como los encargados de la ejecucin de instrucciones, sumas, restas, multiplicaciones, etc. son compartidos por los procesos de usuario y los especficos para las funciones de traduccin de cdigo, renombrado de registros, reordenamiento de instrucciones, etc. Este software de conversin de cdigo (Code Morphing) reside en una ROM especial de la CPU, de tal manera que sea el primer software en ser cargado por la CPU, situndose desde ese momento como una capa intermedia entre las aplicaciones software (incluido el sistema operativo) y el hardware. Se trata de una CPU de tipo VLIW (Very Long Instruction Word), capaz de ejecutar hasta 4 operaciones por ciclo de reloj. A continuacin pasaremos a describir los detalles tcnicos de esta nueva familia de procesadores. ESTRUCTURA INTERNA Debido a la exclusin de elementos de hardware complejos (y caros), debido a la realizacin de ese trabajo por la capa de software, los procesadores Crusoe poseen una estructura interna simple y muy eficiente, compuesta por: Dos unidades enteras (Integer ALU). Una unidad de coma flotante (Floating Point Unit). Una unidad de memoria para operaciones de lectura y escritura (Load / Store Unit). Una unidad de salto (Branch Unit). Las instrucciones pueden ser de 64 o 128 bits, y el fabricante les llama molculas. Cada molcula puede contener hasta cuatro instrucciones de tipo RISC, llamadas tomos. Todo los tomos de una molcula son ejecutados en paralelo, y la estructura de la molcula informa de cmo dichos tomos deben ser conducidos hacia su correspondiente unidad de proceso, logrando as simplificar el hardware de decodificacin y planificacin de las operaciones. Las molculas se ejecutan en orden, evitando as complejo hardware para operaciones fuera de secuencia. 1

Para conseguir que el procesador ejecute instrucciones a la mxima velocidad, las molculas se intenta que estn lo ms llenas posible de tomos. Figura 1. Una molcula puede contener hasta cuatro tomos, que son ejecutados en paralelo. El banco de registros est formado por 64 registros enteros, %r0 al %r63. Parte de estos registros pueden estar usados por el software de Code Morphing. El ensamblador definido para este procesador, que observaremos ms tarde, representa una molcula por lnea, con tomos separados por el smbolo punto y coma. Los procesadores superescalares actuales, basados en la arquitectura x86 de Intel, disponen de un hardware dedicado a funciones tales como reordenar las instrucciones fuera de secuencia. Dicho hardware consume mucha energa, adems de ocupar ms espacio de silicio. EL SOFTWARE DE TRANSFORMACIN DE CDIGO (CODE MORPHING) El Code Morphing es fundamentalmente un sistema software de traduccin dinmica, un programa que compila instrucciones del juego de instrucciones de una determinada arquitectura, transformndolas en el correspondiente cdigo interno del Crusoe. El Code Morphing reside en una ROM y es el primer programa en ejecutarse al arrancar el procesador. El Code Morphing soporta ISA, y es lo nico que el cdigo x86 puede ver; el nico programa escrito directamente para el entorno VLIW es el propio Code Morphing. En la figura 2 se muestra grficamente la relacin entre el cdigo x86, el software Code Morphing y el procesador Crusoe. Figura 2. El software Code Morphing media entre el software x86 y el procesador Crusoe. Una ventaja de tener como nico programa en contacto con el hardware de la mquina el Code Morphing es que para modificar el comportamiento, o realizar optimizaciones basta con modificar el Code Morphing, sin afectar los cambios a las aplicaciones escritas para x86. Este ocultamiento de la arquitectura bajo una capa de software soluciona en gran medida un problema que poseen los procesadores VLIW tradicionales, e incluso los x86 tradicionales, ya que exponen detalles sobre el pipeline del procesador a los compiladores. Esto requiere que los programas binarios antiguos deban ser recompilados, si no para permitir que sigan funcionando, al menos para poder aprovechar las mejoras que aporta el nuevo hardware. Este problema se aborda por los procesadores Crusoe, ya que el Code Morphing siempre recompila y optimiza el cdigo x86 que est ejecutando. Inevitablemente, esta optimizacin dinmica de cdigo requiere ciclos de reloj, que podran ser usados por otros programas de usuario. DIVISIN ENTRE CAPAS: HARDWARE Y SOFTWARE. Emular una CPU x86 es tarea dificil, dada la complejidad de la arquitectura x86. La eleccin de que funciones implementar en software y cuales en hardware es un gran reto de la ingeniera, en el que intervienen aspectos como coste y complejidad, rendimiento global y consumo de energa. En sus primeros productos, la empresa Transmeta ha trazado la lnea divisoria entre hardware y software de tal forma que el software se encarga de la compleja tarea de decodificar las instrucciones x86 y generar molculas paralelas, que el hardware ejecuta a travs de un motor VLIW muy simple, pero de gran velocidad. Unas pocas funciones hardware, que explicaremos ms adelante, han sido aadidas para proporcionar un mejor soporte a la traduccin dinmica. Esta lnea divisoria entre hardware y software puede ser modificada, de manera que favorezca las exigencias de otro sector de productos, como por ejemplo servidores de gama alta.

La figura 3 muestra de manera grfica la divisin que utiliza el procesador Crusoe. DECODIFICACIN Y PLANIFICACIN Los procesadores x86 superescalares extraen instrucciones x86 binarias de la memoria y la decodifican en microoperaciones, que son reordenadas por un hardware especfico de planificacin e introducidas en las unidades funcionales para una ejecucin en paralelo. En cambio, el Code Morphing puede traducir un grupo de instrucciones x86 a la vez. Mientras que los x86 tradicionales traducen una instruccin x86 cada vez que se ejecuta, el software de Transmeta traduce las instrucciones una sola vez, guardando el resultado de la traduccin en una cache de traduccin, de tal forma que la prxima vez que se ejecute esa instruccin se evitar el paso de la traduccin, ejecutando el cdigo optimizado que se encuentra en la cach de traduccin. Implementar el paso de traduccin in software abre nuevas oportunidades y retos. Debido a que un procesador fuera de secuencia (outoforder) debe traducir y planificar instrucciones cada vez que se ejecutan, deben hacerlo de manera muy rpida. Esto limita drsticamente los tipos de transformaciones que puede producir dicho hardware. La aproximacin que realiza el Code Morphing, en cambio, puede amortizar el coste de la traduccin en varias ejecuciones, permitindole usar algoritmos de traduccin y planificacin mucho ms sofisticados. Adems, el coste energtico tambin se reduce, al no tener que realizar esas funciones hardware cada ejecucin de una instruccin. Finalmente, el software de traduccin puede optimizar el cdigo generado y potencialmente reducir el nmero de instrucciones ejecutadas en una traduccin. Dicho de otra forma, Code Morphing puede acelerar la ejecucin al tiempo que reduce el consumo de energa y el calor disipado. CACHE La cache de traduccin, junto con el cdigo del Code Morphing, reside en un espacio de memoria separado, inaccesible para el cdigo x86. Para un mejor rendimiento, el software Code Morphing se copia a s mismo de ROM a DRAM en la fase de inicio. El tamao de este espacio de memoria puede ser especificado en el arranque, o el sistema operativo puede hacer dicho espacio ajustable. Como todo sistema de cache, la tcnica de reutilizacin de traducciones del Code Morphing toma ventaja de la proximidad de referencias. Ms concretamente, el sistema de traduccin explota el alto grado de ratios de repeticion (el nmero de veces que un bloque traducido es ejecutado en media) observado en las aplicaciones reales. Tras haberse traducido un bloque, las repetidas ejecuciones tienen xito en la cach de traduccin y el hardware puede ejecutar la traduccin optimizada a la mxima velocidad. Algunos programas de benchmark tratan de realizar una gran cantidad de operaciones en poco tiempo, con muy poca repeticin, algo que difiere del uso normal de las aplicaciones. El bajo rendimiento del Code Morphing en dichas pruebas se hace evidente. En cambio, el Code Morphing aprende sobre los programas cada vez que se ejecutan, y optimiza su ejecucin para que cada vez sta sea ms rpida. FILTRADO Generalmente, en las aplicaciones tpicas una pequea parte del cdigo (a menudo menos del 10%) ocupa ms del 95% del tiempo de ejecucin. Es por ello que el sistema de traduccin debe escoger cuidadosamente cuanto esfuerzo dedicar a la traduccin de todo cdigo x86 que le llegue. El Code Morphing incluye gran variedad de modos de ejecucin para el cdigo x86, que van desde la interpretacin (que no tiene penalizacin por traduccin, pero ejecuta cdigo x86 ms despacio), pasando por la traduccin usando generacin muy simple, hasta cdigo altamente optimizado (que requiere ms tiempo de 3

traduccin, pero ejecuta mucho ms rpido una vez generado). Un sofisticado conjunto de heursticas ayudan a elegir entre esos modos de ejecucin basndose en la informacin que dinmicamente aporta el cdigo durante su ejecucin. PREDICCIN Y SELECCIN DE CAMINO Una de las muchas formas que el Code Morphing tiene de recibir informacin de un programa x86 es la de instrumentar traducciones: el traductor incluye cdigo cuyo nico propsito es recoger informacin tal como frecuencias de ejecucin del bloque, o histrico de saltos. Esta informacin puede ser usada posteriormente para decidir cundo y qu optimizar y traducir. Por ejemplo, si un salto x86 tiene un comportamiento frecuente (por ejemplo, normalmente salta), el sistema puede optimizar en mayor medida la parte de cdigo a la cual se suele saltar. En otro caso, para saltos ms equilibrados (que pueden o no ser tomados, por ejemplo), el traductor puede ejecutar especulatvamente ambas partes de cdigo y seleccionar el resultado correcto despus. Anlogamente, sabiendo con qu frecuencia se ejecuta una parte del cdigo x86 ayuda a decidir cunto se debe intentar optimizar ese cdigo. Este tipo de decisiones sera extremadamente difcil de abordar por las implementaciones x86 tradicionales, basadas nicamente en hardware. EJEMPLO DE TRADUCCIN DE INSTRUCCIONES Suponiendo que los algoritmos de filtrado y seleccin de camino han elegido el siguiente conjunto de instrucciones x86 para su traduccin: A. addl %eax, (%esp) // load data from stack, add to %eax B. addl %ebx, (%esp) // ditto, for %ebx C. movl %esi,(%ebp) // load %esi from memory D. subl %ecx,5 // subtract 5 from %ecx register En una primera pasada, el sistema de traduccin decodifica las instrucciones x86 y las traduce a una secuencia simple de tomos. En este punto, todava es fcil de ver la correspondencia entre el cdigo original y el generado. (Los registros %r30 y %r31 se usan como temporales para operaciones de lectura de memoria.) ld %r30, [%esp] //load from stack, into temporary add.c %eax,%eax,%r30 //add to %eax, set condition codes ld %r31, [%esp] add.c %ebx,%ebx,%r31 ld %esi, [%ebp] sub.c %ecx,%ecx,5 En una segunda pasada, el optimizador aplica optimizaciones bien conocidas por los compiladores. Esta fase pone de manifiesto optimizaciones que una implementacin slo de hardware no puede hacer: una traduccin basada en software puede eliminar tomos del flujo de instrucciones, en lugar de simplemente reordenarlas. En este ejemplo, todas menos la ltima opcin de comando de establecimiento de condicin (.c) son 4

innecesarias, y uno de los tomos de carga (ld) es redundante, quedando menos tomos para ejecutar. ld %r30, [%esp] //load from stack only once add %eax,%eax,%r30 add %ebx,%ebx,%r30 //reuse data loaded earlier ld %esi, [%ebp] sub.c %ecx,%ecx,5 //only this last condition code needed En un ltimo paso, el scheduler reordena los tomos agrupndolos en molculas individuales. Este proceso es similar al realizado por el hardware llamado dispatcher de los procesadores de fuera de secuencia. En cambio, usar software para planificar el cdigo, resulta ms flexible a la hora de usar algoritmos de planificacin ms efectivos. Tras la planificacin hemos reducido las cuatro instrucciones x86 originales a dos molculas. 1. ld %r30, [%esp]; sub.c %ecx,ecx,5 2. ld %esi, [%ebp]; add %eax,eax,%r30; add %ebx,%ebx,%r30 SOPORTE HARDWARE DEL CODE MORPHING La traduccin dinmica en los procesadores convencionales supondra un rendimiento bastante pobre. El procesador Crusoe, en cambio, ha sido diseado desde un principio con la idea de la traduccin dinmica, logrando por tanto un buen rendimiento en dicha tarea. Seguidamente, discutiremos tres funcionalidades hardware para dar soporte a excepciones, ejecucin especulativa, optimizacin de operaciones de memoria, y cdigo automodificable. EXCEPCIONES Y ESPECULACIN Sin un hardware especfico es generalmente difcil, para un sistema de traduccin dinmico, modelizar correctamente la semntica de las excepciones logrando a su vez un rendimiento adecuado. La razn es que la semntica de las excepciones impone severas restricciones sobre la planificacin de instrucciones. Consideremos el ejemplo anterior, en el que el siguiente cdigo x86: A. addl %eax, (%esp) // load data from stack, add to %eax B. addl %ebx, (%esp) // ditto, for %ebx C. movl %esi,(%ebp) // load %esi from memory D. subl %ecx,5 // subtract 5 from %ecx register se traduca en las dos molculas siguientes: 1. ld %r30, [%esp]; sub.c %ecx,ecx,5 2. ld %esi, [%ebp]; add %eax,eax,%r30; add %ebx,%ebx,%r30 En la arquitectura ISA de los x86, las excepciones son precisas, cuando una instruccin genera una excepcin, todas las instrucciones precedentes deben completarse antes de ser comunicada dicha excepcin, y ninguna de 5

las instrucciones posteriores deben completarse. Se puede observar que en la traduccin mostrada, los tomos se suceden fuera de secuencia respecto al cdigo x86 original. Supongamos ahora que durante la ejecucin la instruccin de carga (ld) de la molcula 2, correspondiente a la instruccin x86 C, genera un fallo de pgina. Sin embargo, en ese instante, el procesador ha ejecutado ya cdigo en la molcula 1 correspondiente a la instruccin D, lo cual viola las reglas de las excepciones precisas. Resolver este problema sin un hardware especfico restringe la planificacin de instrucciones de manera indebida, o requiere instrucciones adicionales, cada una reduciendo el rendimiento del sistema en el caso comn en que no ocurran excepciones. Los procesadores con ejecucin fuera de secuencia tradicionales tambin padecen este problema. Normalmente utilizan mecanismos complejos de hardware para retrasar o deshacer los efectos de microoperaciones ejecutadas demasiado pronto. El procesador Crusoe proporciona una solucin hardware mucho ms simple que trabaja codo con codo con el software Code Morphing. A todos los registros que contienen informacin sobre el estado x86 se les realiza una operacin de shadow, es decir, existen dos copias de cada registro, la actualmente en ejecucin y la shadow. Los tomos normales slo actualizan la copia actual de los registros. Cuando la ejecucin alcanza el final de una traduccin sin encontrar una excepcin, una operacin especial de actualizado (commit) copia todos los registros actuales a sus correspondientes registros shadow. Por otra parte, si cualquier excepcin a nivel x86 ocurre durante la traduccin, el sistema deshace los efectos de todas las molculas ejecutadas desde el principio de la traduccin. Esto se realiza mediante una operacin llamada de rollback, que restaura los valores de los registros actuales con las copias (shadow) existentes previamente a la traduccin. En este punto, el Code Morphing reejecuta las instrucciones x86 cuidadosamente, es decir, en su orden original, con el fin de determinar la posicin concreta de la excepcin. Deshacer cambios en la memoria es ligeramente ms complejo. El procesador Crusoe mantiene las operaciones de escritura (store) llenando los datos almacenados en un buffer (gated store buffer), de donde slo son llevados a memoria en la operacin antes comentada de commit. En una operacin de restauracin, las operaciones de store que no han recibido la operacin de commit, pueden ser simplemente borradas del buffer. Para aumentar la velocidad en el caso ms comn (sin excepciones), el hardware del procesador Crusoe est diseado para que las operaciones de actualizado (commit) sean prcticamente gratuitas. ALIAS DE HARDWARE Cuanta ms libertad posea el planificador para mover tomos en el llenado de molculas, mejor cdigo generar normalmente. Uno de los mayores lmites a esta libertad viene dada por las potenciales dependencias entre operaciones de memoria. En particular, a menudo sera deseable reordenar operaciones de lectura delante de operaciones de escritura. En cambio, hacer esto es incorrecto si la operacin de lectura usa datos de la operacin de escritura, y esta no es tarea fcilmente realizable en tiempo de traduccin. El procesador Crusoe proporciona el innovador sistema de hardware alias que ataja en cierta medida el problema. Cuando el traductor mueve una operacin de lectura delante de una de escritura, convierte la de lectura en una de lecturayproteccin (que adems de leer los datos tambin registra las direcciones y tamao de los datos ledos) y la de escritura en una de escriturabajomascaradealias (que verifica regiones protegidas). Si la operacin de escritura sobreescribe los datos antes ledos, el procesador lanza una excepcin y el sistema puede realizar la correccin. Usando este mecanismo, siempre es seguro el reordenamiento de instrucciones de lectura y escritura en memoria. De nuevo, el procesador Crusoe proporciona un mecanismo hardware muy simple, que combinado con software es capaz de resolver el problema. CDIGO AUTOMODIFICABLE

A veces, las instrucciones x86 en memoria se sobreescriben, bien porque el sistema operativo est cargando un nuevo programa, o porque una aplicacin est utilizando cdigo automodificable. Cuando ocurre esto al cdigo ya traducido, el Code Morphing debe ser avisado para evitar que ejecute cdigo antiguo errneamente. Con este fin, cuando el sistema traduce un bloque de cdigo x86, protege contra escritura la pgina de memoria x86 que contiene ese cdigo. Esto lo hace utilizando un bit dedicado en la entrada de esa pgina, situada en la unidad de manejo de la memoria (MMU). Como sucede con otros detalles del hardware VLIW, ese bit es invisible para el software x86. Cuando una pgina protegida es escrita, el remedio ms simple es invalidar el o las traduccion(es) implicada(s). Como el sistema aprende de manera dinmica acerca del comportamiento del programa, utiliza estrategias muy sofisticadas. ARQUITECTURA DEL MODELO TM5400 El procesador Crusoe incorpora unidades enteras y de coma flotante, caches separadas de instrucciones y datos, una cache de nivel 2 con poltica writeback, unidad de manejo de memoria (MMU) e instrucciones multimedia. Adems de estas caractersticas, el dispositivo dispone de un controlador de memoria DDR SDRAM, un controlador SDR RDRAM, un controlador de bus PCI y un controlador ROM serie. A continuacin describiremos brevemente los detalles tcnicos del modelo ms alto de la actual gama: el TM5400. Procesador capaz de operar en el rango de 500700 MHz. Cache de nivel 1 de de 64KB integrada, cache de datos de nivel 1 de 64KB, y cache de nivel 2 de 256KB con poltica writeback. Controlador de memoria DDR SDRAM con interfaz de 100133MHz y 2.5V Controlador de memoria SDR SDRAM con interfaz de 66133MHz y 3.3V Controlador de bus PCI con interfaz de 33MHz y 3.3V LongRun: sistema avanzado de administracin de enega 12 W a 500700MHz, 1.21.6 V con aplicaciones multimedia tpicas. 30 mW en sistema suspendido. Completo soporte de System Management Mode (SSM) Encapsulado cermico compacto BGA de 474 pines. En la figura 4 se puede observar a grandes rasgos el diagrama de bloques del procesador Crusoe TM5400 de Transmeta. Figura 4. Diagrama de bloques del Crusoe TM5400.

También podría gustarte