Op Real World Technologies is een nieuw artikel van Paul DeMone verschenen waarin de werking van Intels IA-32 Execution Layer uit de doeken wordt gedaan. Dit stukje software, dat sinds vorige week te downloaden is, zorgt ervoor dat x86-applicaties op een Itanium-processor niet langer dramatisch langzaam zijn, maar met de snelheid van een even hoog geklokte Xeon-processor door de pipeline vliegen. Deze performanceboost wordt bereikt door x86-instructies te vertalen naar IA-64, in plaats van ze naar de geïntegreerde x86-hardware te sturen. Het concept lijkt veel op hetgeen wat DEC in 1995 deed met FX!32, de software die x86-programma's liet draaien op Windows NT voor de Alpha.
FX!32 werd in Windows NT verankerd aan de systeemaanroep CreateProcess
, waarmee een nieuw programma gestart wordt. Op het moment dat deze routine een poging tot het uitvoeren van x86-code herkende greep het in. Er was een simpele tabel waarin voor iedere x86-instructie een serie van gemiddeld zo'n 45 Alpha-instructies stond die netto hetzelfde resultaat opleverden. Op zich nog geen heel erg efficiënt systeem, maar de grote truc was dat er tijdens het draaien informatie werd verzameld over het gedrag van het programma, en FX!32 op de achtergrond begon met het schrijven en optimaliseren van Alpha-code met dezelfde functionaliteit. Naar mate een stuk x86-software dus vaker werd gebruikt hoefde er steeds minder on-the-fly vertaald te worden, waardoor de emulatie wel tien keer sneller kon gaan dan de eerste keer. Het was zelfs een tijdje zo dat een Alpha met FX!32 veruit het snelste platform was om x86-software op te draaien.
De IA-32 Execution Layer werkt grotendeels volgens dezelfde principes, alleen wordt er geen permanente database van voor-vertaalde code bijgehouden. Wanneer een programma gestart wordt begint in eerste instantie "cold code translation", waarbij gebruikt gemaakt wordt van tabellen en templates om groepjes van vier of vijf instructies te vertalen. Zodra de emulator merkt dat een bepaald groepje wel erg vaak langkomt zal worden besloten om dat stuk te gaan optimaliseren. Deze "hot code translation" kost twintig keer zoveel tijd als de standaard vertaling, maar omdat een processor in de praktijk vaak meer dan negentig procent van de tijd bezig is in minder dan tien procent van de code, betaalt deze investering zichzelf ruimschoots terug. Tijdens SPEC CPU 2000, een benchmark die uit 26 applicaties bestaat, spendeert de processor 95% van de tijd aan het draaien van "hot code" en slechts 3% aan het vertalen. De 1,5GHz Itanium 2 scoort 105%, 99% en 133% ten opzichte van een 1,6GHz Xeon in respectievelijk SPECint 2000, SPECfp 2000 en SysMark 2002. Deze resultaten zijn zeker drie keer zo goed als voorheen mogelijk was, en de conclusie is dan ook dat Intel zich voortaan de kosten en moeite van native x86-hardware kan besparen.
