Skrivet av Sveklockarn:
Intel har förvisso försökt kapa bakåtkompatibilitet flera gånger sedan 70-talet, senast med Itanium, men det beror inte på vad moderna utvecklare/kompilatorer använder utan att befintlig kod i förekommande fall är för kostsam eller svår att skriva om. När jag sökte lite så ringde en klocka att jag läst att Intel på något sätt implementerat RISC, men det var typ 20 år sedan eller något liknande jag läste det i en datortidning, men hittade nyss denna tråd på Stack Overflow som behandlar ämnet:
https://stackoverflow.com/questions/5806589/why-does-intel-hi...
Det är långt enklare att byta CPU-arkitektur idag än det någonsin varit. Dels p.g.a. att assembler knappt längre används, kod skrivet i allt från C och uppåt behöver i teorin (mer om det strax) bara kompileras om. Ovanpå det utvecklas allt mer i s.k. script-språk (JavaScript, Python, m.fl.), en fördel hos dessa är att de är helt CPU-arkitekturoberoende.
Att kompilera om kod, framförallt C och C++, har historiskt varit rätt komplicerat då man ofta behövt använda olika kompilatorer för olika CPU-arkitekturer. Kanske ett problem i sig, men vi börjar rätt mycket gå mot en monokultur för C och C++ i form av LLVM. En extremt trevlig sak med LLVM (och tillsammans med dess licens den stora orsaken till populariteten i allt från CPUer, till GPUer och NPUer använder LLVM idag) är att man inte längre kompilerar till maskinkod (inte ens för x86).
Istället kompileras allt till ett mellanformat där majoriteten av alla optimeringar utförs. Detta mellanformat översätts sedan till maskinkod för x86, x86_64, ARM, ARM64, PowerPC, RISC-V 64 eller vad det nu må vara av olika LLVM-back:ends (en per arkitektur). Finns massor med fördelar med denna design, de flesta har att göra med kompilatorn själv: back-ends fungerar oavsett vilket programspråk koden ursprungligen skrevs i, optimeringar av mellanformat kommer alla back-ends till del så man slipper dubbeljobb, mycket enklare att översätta mellanformatet på en konsekvent sätt till maskinkod etc.
Men i fallet "överge x86" finns en annan gigantiskt fördel: använder man LLVM används ju exakt samma kompilator oavsett om man i slutändan får ut x86, ARM eller RISC-V. Majoriteten av alla problem med att porta t.ex. spel till en annan CPU har historiskt kommit från att överhuvudtaget kunna kompilera koden då det handlat om olika kompilatorer, det är ett problem som idag är helt eliminerat! Finns några andra potentiella problem, PowerPC -> x86 för MacOS fick ju trilskas med big-endian vs little-endian problematik samt rätt omgående även 32-bit vs 64-bit problematik. Att gå från x86_64 till ARM64 har ingen av de problemen, båda är little-endian och båda är 64-bit.
Skrivet av Sveklockarn:
Den största plattformen för vad? Det är ju inte så att folk kommer göra sig av med x86-datorn för att den nya brödrosten har en ARM. Vem kör ARM för desktop idag?
Ingen, man allt eftersom ARM64 börjat rulla ut i datacenter så har trycket ökat från utvecklare att de även vill kunna köra sina färdiga program direkt på desktop.
Microsofts Surface X (ARM64 baserad) är inte en produkt, det är deras motsvarighet till det dev-kit Apple skickat ut till utvecklare för att de ska kunna börja testa sina program för MacOS på ARM64. Microsoft är fullt medvetna om att ARM64 ser ut att ha en ljus framtid i datacenter, endera fixar man en Windows som faktiskt fungerar bra ihop med ARM64 eller så tvingar man i praktiken utvecklare att gå till MacOS. Steve Ballmer må ha fått ett par saker om bakfoten, men har var helt korrekt i att det som tog Windows till deras nuvarande position var att man väldigt tidigt hade en plattform som utvecklare gillade att använda -> massor med program skrevs till Windows.
Angående brödrosten: man måste inse att ARM har två distinkta instruktionsuppsättningar, lite som PowerPC och x86. ARM (32-bit ARM) och ARM64 är helt inkompatibla på binärnivå. ARM har fördelar i riktigt små saker, bl.a. då ARM instruktionerna ger extremt kompakt kod (samma C/C++ program blir väsentligt kompaktare på ARM än på x86_64 eller ARM64). Problemet med ARM är att samma sak som gör koden extremt kompakt gör den också extremt svår att skala upp till "breda" designer.
ARM64 är specifikt designat för att göra det enkelt att designa kompilatorer för (för "inget" skrivs längre i assembler). En klar majoritet av alla x86-instruktioner används inte längre, vissa passar extremt illa för dagens x86 (som internt är RISC:ar) medan många andra inte lämpar sig att användas av en kompilator. De x86-instruktioner som faktiskt används idag är väldigt RISC-lika, i praktiken har x86_64 en nackdel mot ARM64 i att det typiskt tar färre ARM64 instruktioner att göra något än x86_64 instruktioner. Ett rätt stort problem där ARM64 ovanpå det är specifikt designat så man ofta kan hitta instruktioner som är oberoende -> går att effektivt göra väldigt breda CPUer.
Skrivet av Sveklockarn:
Apple är inget riktmärke för utvecklingen i världen heller, för då hade vi alla suttit här och tröskat på varsin PowerPC... eller varför inte Motorola 68000.
Varför bytte Apple från 68k till PowerPC? Jo, för PowerPC var mycket snabbare.
Varför bytte Apple från PowerPC till x86? Jo, för utanför lite flyttalstunga specialfall var x86 mycket snabbare.
Varför byter Apple från x86_64 till ARM64? Jo, för Ipad Pro (A12Z) är redan idag snabbare än alla MBA-modeller och snabbare än de flesta MBP-modeller man har, då har A12Z förra generations CPU och är fläktlös!
Samma sak ser vi datacenter och nu även på HCP. Världens snabbaste superdator är idag ARM64 baserad och rimligen är Ampere Alteras 80-käriga CPU den snabbaste CPU per sockel som existerar då den har 80-kärnor, all-core frekvens på 3,3 GHz och utför ungefär lika mycket per cykel som Skylake/Zen2.
M.a.o det finns en mönster här...
Skrivet av Sveklockarn:
Det är inte hemanvändare som kommer styra utvecklingen imorgon heller, så x86 kommer garanterat att finnas kvar i någon form en lång tid framöver. Intel började ju uppenbarligen separera x86-funktionaliteten i sina x86-CPUer redan 1995 med introduktionen av Pentium Pro/P6-arkitekturen (se tidigare länk i tråden till Stack Overflow), så de är knappast oförberedda för en framtid utan x86... det är bara att det inte har hänt hittills.
Istället för IA-64 så fick vi AMD64, så att säga.
x86 kommer finnas kvar väldigt länge tack vare Windows. Men Microsoft kommer sätta rejäl fart med Windows on ARM64 om Apples kommande CPU för MacOS ens är i närhet så bra som förhandssnacket gör gällande!