Skrivet av Schnitz:
Håller helt med. x86 känns uttjatat efter att ha ältats i decennie efter decennie. Är det inte dags att ta nästa steg i utvecklingen någon gång? Att tro att x86 skulle vara någon slags arkitekturernas utopi som håller för årtusenden av utveckling inom alla olika slags tillämpningar är bara löjligt.
Många gillar att tala om vad usel x86 är som arkitektur. Men tittar man på det som betyder något idag så är det faktiskt en riktigt bra kompromiss.
En fördel ARM haft mot många andra RISC arkitekturer är klart kompaktare kod, något som leder till att större del av programmet får plats i cache, något som både ger bättre prestanda och lägre strömförbrukning (man slipper använda externa bussar). ARM har ett extra kompakt instruktionsett som kallas Thumb/Thumb2 som saknar vissa finesser från "vanlig" ARM kod, men om man inte behöver dessa så får man ett ännu kompaktare program.
Så det är inte förvånande att ARM är populär på enheter som måste ha lång strömförbrukning.
Men titta på denna jämförelse mellan olika arkitekturers kod-densitet. x86_64 (AMD64) program blir i genomsnitt märkbart kompaktare än ARM-thumb! I.e. 64-bitars varianten av x86 genererar kompaktare kod än 32-bitars varianten av en begränsad form av ARM instruktioner, vanlig ARM kod är mindre tät. Det betyder att x86_64 kod är mer cache-vänlig jämfört med ARM kod.
I slutet av 80-talet och början av 90-talet så hade RISC CPUer högre klockfrekvens jämfört med samtida CISC CPUer. Den begränsade faktor på CISC var decode steget som jämfört med RISC var väldigt komplicerat (väldigt stor andel av transistorerna gick till decodern). Idag står decode steget i en CISC för någon enstaka procent och den största flaskhalsen här RAM. x86_64 är väldigt kompakt -> kräver mindre RAM bandbredd -> BRA!
Internt så är alla Intel och AMD processorer en RISC (sedan PPro och K5), decode steget blåser upp x86 instruktioner till 1 eller flera interna RISC instruktioner, man kan se det som en form av kod komprimering. Det är en stor anledning till x86 dominerar single-thread prestanda idag.
ARM har fortfarande fördelar över x86 vad det gäller strömförbrukning, men frågan om det beror på att Intel/AMD inte fokuserat på detta förut eller om det finns mer fundamentala saker bakom. Intel visade igår upp Haswell körandes från solceller... Haswell är efterföljaren till Ivy Bridge och har en prestanda som ligger i en helt annan klass än ens den absolut snabbast ARM CPU som finns idag. Även om ARM skulle lyckas fördubbla prestanda varje år fram till Haswell släpps (extremt osannolikt) så skulle man inte komma speciellt nära prestandamässigt, framförallt inte på single-thread prestanda.
32-bitars x86 hade en rad begränsningar, men AMD gjorde ett extremt gott jobb i att ta bort dessa begränsningar när de skapade x86_64. Man dubblade antal heltalsregister (x86_64 har 16 register, precis som ARM) och man skrotade den gamla FPU designen med en stack och ersatte den med 16 st flyttalsregister som också används som 128-bitas SSE register (256-bitar om man har AVX som BD och SNB). Alla RISCar har en optimering för anrop till funktioner som inte anropar någon annan funktion (löv-funktion), AMD lyckades skapa samma prestandavinst i x86_64 utan att offra ett register som man gör i RISC med något de kallar "red zone"!
Så x86_64 är inte perfekt, men frågan är om det finns någon annan ISA som är bättre idag när man väger in alla faktorer...
Edit: både Atom och Brazos stödjer x86_64 redan idag. ARM har fortfarande inte färdigställt sin 64-bitars ISA. Telefoner och framförallt pekplattor kommer väldigt snart få problem med att 32-bitar inte räcker till för mängden RAM man stoppar in.