Skrivet av Sveklockarn:
Nä, det är inte alls så ”bara” att byta ut, inte minst ur perspektivet med all kompetens kring hårdvara och mjukvara (ofta omnämnt som legacy) som ska kastas på samma sophög enbart för att uppfinna hjulet på nytt.
Idealistsnacket om att ARM skulle ersätta x86 fanns redan för 25 år sedan, men det blev x86-64 som slog x86, precis som nästa logiska steg är x86S.
Övergången till 64-bitarsmiljö för Windows på x86 genomfördes på några få år, ändå tog det utan vidare 10 år innan det ens började tunna ut bland användarbasen. Windows fanns för övrigt till DEC Alpha, med Win32-stöd via emulering, så det saknar betydelse huruvida Windows går att köra på ARM idag relativt allt annat som skulle behöva ändras för att göra det till verklighet.
Ingen trodde (32-bit) Arm skulle ersätta x86 för 25 år sedan. Vid den tiden var en high-end x86 5-10 gånger snabbare än de snabbast Arm CPUer per MHz (och även då klockade x86 klart högre).
32-bit Arm finns kvar än idag, det används numera primärt i mikrokontrollers och liknande. 32-bit Arm är en helt annan instruktionsuppsättning jämfört med ARM64, d.v.s. ARM64 är inte en 64-bits utökning likt vad x86_64 är för x86.
32-bit Arm har en del fördelar i att maskinkoden tenderar vara otroligt kompakt (vilket är väldigt udda för en "RISC" ISA), men det som ger fördelar i kompakthet gjorde också 32-bit Arm CPUer väldigt svåra att ge hög prestanda per MHz.
Backar till 2016 år, till lanseringen av Cortex A72 (snabbaste ARM64 från Arm vid det läget) som bl.a. sitter i RPi 4, fanns samtidigt 6700K (d.v.s. Skylake). ARM64 var ett klart lyft i prestanda redan från start, men här var fortfarande x86_64 runt dubbelt så snabb per MHz och då den klockade högre var ST prestanda ~4,5-5 gånger högre. D.v.s. fortfarande helt orealistiskt att ersätta x86_64 på skrivbordet.
Kikar vi Raptor Cove och Zen4 där prestanda i genomsnitt är väldigt snarlika sett till prestanda per MHz (skiljer lite berodde på typ av last), båda har ~390 GB5 poäng per GHz ST. Cortex X3, som är den snabbaste Arm CPU som finns på marknaden men Cortex X4 är släppt och den har 13-15 % högre prestanda per MHz, har ca 470 GB5 poäng per GHz (så ca 20 % bättre perf/MHz mot Zen4/Raptor Cove).
ARM64 är nu förbi x86_64 i prestanda per MHz. Är fortfarande ett stor frekvensgap, men Cortex X3 går att klocka till ~3,6 GHz vilket ungefär motsvarar Zen4/Raptor Cove ~4,3 GHz (Cortex X4 borde öka det till motsvarande ~4,9 GHz).
Bästa perf/MHz för x86_64 bör rimligen 7x00X3D modellerna ha, "problemet" med dessa är att en 7800X3D består av ca 11 miljarder transistorer. Både Cortex X och definitivt Apples ARM64 kärnor är i dag lika stora som high-end x86_64 exluderat cache. Cortex X3 når sin prestanda med likvärdig storlek på L1$/L2$ som dagens x86_64, men typisk storlek på L3$ ligger på 8 MB eller mindre (liknande för Apple) vilket är väsentligt mindre än Intel/AMD.
I.e. ARM64 CPUer har långt bättre perf/transistor.
Ju mer vi "drabbas" av att Moores lag inte kan rädda kretsar från att bli allt dyrare, ju större pris/prestanda fördel kommer ARM64 få. Och ju mer man pushar mot absolut gränsen för hur mycket effekt en krets kan dra, ju större fördel kommer det vara att ha en design med högre perf/MHz.
Ovanpå det finns numera programvara för att dynamiskt konvertera binärkod för en ISA till en annan ISA i en relativt enkelt tillgänglig form: LLVM (Apache 2 licens). Både MacOS Rosetta 2 och Windows 11 Arm64EC bygger på denna teknik. Nu kör de specifikt x86_64->ARM64, men tekniken kan egentligen översätta mellan alla ISA som LLVM stödjer.
Arm64EC möjliggör inte bara att köra x86_64 binärer på ARM64 CPUer, det är också möjligt att kombinera "native" ARM64 och x86_64 (t.ex. ett ARM64 program som vill använda x86_64 plugins). Det är en förbättring mot Rosetta 2 som bara kan köra "rena" x86_64 binärer, så en "native" version kräver allt alla delar översätts.
Slutligen: historiskt har de största problemen med att översätta x86/x86_64 program handlat om tekniska skillnader i dåtidens RISC (som PowerPC, MIPS, SPARC och framförallt Alpha) i form av saker som "byte-order" (RISC körde typiskt big-endian, x86 kör little-endian), skillnader i läsa/skriva data "unaligned" (x86 har alltid tillåtet detta, historisk tillät inte RISC det då det komplicerar designen och dåligt för prestanda).
Både ARM64 och även RISC-V har "kastat in handduken" på dessa och fungerar precis som x86_64 på denna punkt. Det ökar rejält sannolikheten att det "bara handlar om att kompilera om programmet".
Vad det gäller Intel tycker jag utvecklingen av E-cores är långt mer spännande än P-cores. Det av flera orsaker, men en stor är att mikroarkitekturen hos Intels E-cores är väldigt lik Arms "middle cores", fast med x86_64 front-end.
Blir en intressant "kind of äpple-mot-äpple" jämförelse där bara ISA skiljer. Om nu Arrow Lake E-cores får perf/MHz mellan Willow Cove och Golden Cove så ser det rätt bra ut på den punkten (perf/MHz är snarlik mot Cortex A7x0 som är Arms "middle core"). Är snarlik peak-frekvens, men även fast E-cores har bra perf/W för att vara x86 är de i nuläget inte i närheten av A7x0 serien...
TL;DR x86_64 kommer inte försvinna inom överskådlig framtid, speciellt inte i Windows-världen. Men börjar det inte bli allt mer uppenbart att x86_64 allt mer är en bromskloss? Vi får en eller flera av: dyrare kretsar, långsammare kretsar och/eller strömtörstigare kretsar. Ju snabbare man kan komma bort från detta ju bättre för alla (utom möjligen Intel och AMD).