Beruflich Dokumente
Kultur Dokumente
1.
Antecedentes
Departamento de Matem
aticas, Facultad de Ciencias, UNAM. jose@matem.unam.mx
54
2.
Problemas de emulaci
on
55
Figura 2.1: La segunda instruccion del codigo de X86 genera una excepci
on de divisi
on por cero. Al fragmentar y reacomodar las operaciones mas
elementales, en que cada instruccion de X86 es dividida por una maquina
VLIW, puede ocurrir que sean ejecutados fragmentos de instruccion que
nunca sera ejecutados en el X86.
ma instrucci
on de un programa genera una excepcion de division por cero,
sup
ongase tambien que el X86 es emulado por una maquina VLIW capaz de
fragmentar cada instrucci
on de X86 en cuatro subtareas elementales paralelizables, a las que llamaremos atomos, y que es capaz de ejecutar hasta 8
atomos simult
aneamente, es decir su palabra de instruccion tiene 8 campos,
uno para cada subtarea. Imaginemos ahora que los atomos son reordenadas
como se muestra en la figura 2.1. En este caso ocurre que algunos atomos
que nunca debieron ocurrir, por estar despues de la instruccion que genera
la excepci
on, si son ejecutados en la maquina emuladora y, en principio,
pueden cambiar su estado, un estado que en el X86 emulado nunca hubiera
sido alcanzado.
Luego de analizar este problema, los ingenieros de Transmeta determinaron que la clave era mantener, en la maquina emuladora, un conjunto de
registros que conservaran el estado de la maquina emulada.
La fragmentaci
on en
atomos y el reordenamiento de estos no son tareas
exclusivas de las arquitecturas VLIW, se hace tambien para lograr ILP en
otras arquitecturas y para resolver el problema mencionado suele utilizarse
hardware complicado que, en esencia, regresa la maquina de estados del
procesador hasta un estado consistente, en cuanto se da cuenta de que ha
ocurrido una excepci
on y que se han ejecutado partes de instrucciones que
no ocurrir
an.
La soluci
on de Transmeta es diferente [2]. Todos los registros que mantienen el estado de la m
aquina emulada son duplicados, por cada uno de
ellos en realidad hay dos, una copia de trabajo y otra oculta (shadow en
terminologa Transmeta). Los atomos, en su ejecucion alteran solo la copia
de trabajo, hasta haber ejecutado todos los atomos correspondientes a un
bloque de instrucciones de X86. Entonces la copia de trabajo se respalda en
la oculta. A esta operaci
on se le llama commit. Si en alg
un momento durante
la ejecuci
on se detecta una excepcion entonces se regresa rapidamente a el
u
ltimo estado consistente copiando el respaldo oculto a la copia de trabajo,
a esto se le llama rollback. Luego se procede a ejecutar el mismo bloque de
atomos, pero esta vez en el orden en el que los ejecutara un X86, as cuando ocurra la excepci
on, ocurrira del mismo modo, al mismo tiempo y en el
56
load R30,[x]
...
store data,[y]
...
load R31,[x]
(instrucciones que usan R31)
load R30,[x]
...
store data,[y]
...
(instrucciones que usan R30)
Esto nos ahorra un acceso a memoria, que por supuesto, es muy lento para
la velocidad usual del procesador. Pero solo es posible hacer esto si el store
de la lnea 3, que estamos suponiendo que es el u
nico store que ocurre, no
altera el contenido de la localidad x. Es decir si x y y direccionan la misma
localidad de memoria entonces eliminar el segundo load es un error, porque
no se accede al mismo valor.
Para resolver este problema, Transmeta implemento dos operaciones que
acceden a memoria y verifican que no haya alias, dos maneras diferentes de
referirse a la misma localidad: ldp (load and protect) y stam (store and
trap). En nuestro ejemplo el uso de estas instrucciones se vera as:
ldp R30,[x]
...
stam data,[y]
(instrucciones que usan R30)
La primera lnea carga en el registro 30 el contenido de la localidad x y
marca esa localidad como protegida, recuerda x. El stam verifica si y y x
son la misma direcci
on, en cuyo caso la optimizacion resulta en un error, entonces interrumpe la actual ejecucion, recupera el u
ltimo estado consistente
y ejecuta conservadoramente el codigo de X86.
57
Figura 3.2: Molecula de Crusoe. Cada molecula esta constituida por cuatro
o memos
atomos (instrucciones al estilo RISC) ejecutables en paralelo en
unidades funcionales diferentes.
3.
ADD
ADD
MOV
SUB
EAX,
EBX,
ASI,
ECX,
(ESP)
(ESP)
(EBP)
5
ld
add
ld
add
ld
sub
r30,
eax,
r31,
ebx,
esi,
ecx,
[esp]
eax, r30
[esp]
ebx, r31
[ebp]
ecx, 5
ld r30, [esp]
add eax, eax, r30
add ebx, ebx, r30
59
4
5
ld esi, [ebp]
sub ecx, ecx, 5
lo que es f
acil de reordenar y acomodar en dos moleculas:
ld r30, [esp]; sub ecx, ecx, 5
ld esi, [ebp]; add eax, eax, r30; add ebx, ebx, r30
4.
Aspectos t
ecnicos
5.
No sin raz
on, los ingenieros de Transmeta hacen notar que los benchmarks usuales est
an orientados a equipos desktop, cuyos requerimientos de
60
61
de datos y dem
as ocupan todo ese espacio que puede llegar a ser muy significativo. Code Morphing es indispensable en todo momento para que la
m
aquina funcione, es esencial para el procesador mismo, as que es como si
toda esa RAM que ocupa no existiera. Si juntaramos el costo de RAM y
el del procesador obtendramos una cantidad mayor que la necesaria para
comprar un procesador menos exigente y mas rapido.
Esperemos que se salve, tiene muchas buenas ideas, ideas que prometen
algo mejor de lo que ahora vemos.
Referencias
[1] Ramakrishna, Rau y Joseph A. Fisher, Instruction-Level Parallel Processing: History, Overview, and Perspective, The Journal of Supercomputing, 7, 1993, pp. 7-9. Tambien aparece en la referencia [7], pp.
288-308.
[2] Klaiber, Alexander, The Technology Behind Crusoe Processors, Transmeta Corporation, enero 2000.
[3] Geppert Linda y Tekla S. Perry, Transmetas Magic Show, Spectrum,
IEEE, 37(5), mayo 2000.
[4] Crusoe Processor, Model TM5400, Transmeta
http://www.transmeta.com, enero 18 de 2000.
Corporation,
[5] Crusoe Processor Benchmarl Report, Mobile Platform Benchmark Results, Transmeta Corporation, http://www.transmeta.com, febrero 3
de 2000.
[6] McKenna, Daniel, Mobile Platform Benchmarks, A Methodology
for Evaluating Mobile Computing Devices, Transmeta Corporation,
http://www.transmeta.com, febrero 3 de 2000.
[7] Hill, Mark D., N. P. Jouppi y G. S. Sohi (editores), Readings in Coumputer Architecture, Morgan Kaufmann, 2000.
62