Anslut till Senaste Tekniska Nyheter, Bloggar, Recensioner

x86-instruktionens egna tillägg: ett slöseri med tid, pengar och energi

Agner Fog, en dansk expert på mjukvaruoptimering göra en vädjan för en öppen och standardiserad procedur för x86-instruktionsuppsättningar. Vid första anblicken kan detta tyckas vara en diskussion som inte berör de flesta av oss. När allt kommer omkring kommer de stackars själar som måste programmera de vansinnigt komplexa x86-kompilatorerna att ta hand om det kompletta kaoset som kallas “the x86 ISA”, eller hur? Varför ska den genomsnittlige utvecklaren, systemadministratören eller hårdvaruentusiasten bry sig?

Agner berättar mycket detaljerat varför de inkompatibla SSE-xx-tilläggen och andra ISA-tillägg var och är en ganska dålig idé, men låt mig sammanfatta det i några citat:

  • “Det totala antalet x86-instruktioner är långt över tusen“(!!)
  • “CPU-sändning … gör koden större, och den är så kostsam när det gäller utvecklingstid och underhållskostnader att det nästan aldrig görs på ett sätt som optimerar tillräckligt för alla märken av CPU: er.”
  • “avkodningen av instruktioner kan vara en allvarlig flaskhals, och det blir värre ju mer komplicerade instruktionskoderna är”
  • Kostnaderna för att stödja föråldrade instruktioner är inte försumbara. Du behöver stora avrättningsenheter för att stödja ett stort antal instruktioner. Detta innebär mer kiselutrymme, längre datavägar, mer strömförbrukning och långsammare exekvering.

Sammanfattningsvis: Intel och AMD:s egenutvecklade x86-tillägg kostar oss alla pengar. Hur mycket är svårt att beräkna, men våra processorer förbrukar extra energi och presterar sämre eftersom avkodare och exekveringsenheter är onödigt komplicerade. Programvaruindustrin slösar bort en hel del tid och ansträngning på att stödja olika tillägg.

Inte övertygad, tänker fortfarande att detta bara rör HPC-publiken? Virtualiseringsplattformarna innehåller upp till 8 % mer kod bara för att stödja de inkompatibla virtualiseringsinstruktionerna som erbjuder nästan exakt samma funktioner. Varje VMM är 4 % större på grund av detta. Så oavsett om du kör Hyper-V, VMware ESX eller Xen, slösar du bort värdefullt RAM-utrymme. Det är naturligtvis inte dramatiskt, men det är onödigt slöseri. Mycket värre är att denna ostandardiserade x86-utvidgningsstök har gjort det mycket svårare för datacenter att ta steget mot en riktigt dynamisk miljö där du kan ladda balanserade virtuella datorer och därmed flytta applikationer från en server till en annan i farten. Det är omöjligt att flytta (vmotion, live-migrera) en virtuell dator från Intel till AMD-servrar, från nyare till (vissa) äldre, och du behöver fiffla med CPU-masker i vissa situationer bara för att få det att fungera (och läsa komplexa tekniska dokument). Bör 99 % av marknaden förlora pengar och flexibilitet eftersom 1 % av marknaden kan få en prestationshöjning?

Anledningen till att Intel och AMD fortfarande fortsätter med detta är att vissa personer inombords känner att de kan skapa en “konkurrensfördel”. Jag tror att denna “konkurrensfördel” är försumbar: hur många har köpt en Intel “Nehalem”-processor eftersom den har de nya SSE 4.2-instruktionerna? Hur mycket programvara stöder ytterligare ett x86-instruktionstillägg?

Så jag stöder fullt ut Agner Fog i sin strävan till en (något) mindre kaotisk och mer standardiserad x86-instruktionsuppsättning.