Dingen die je niet wist dat je CPU voor je doet (video)
CPU

In de oppervlakte weten we allemaal dat de beste processors degene zijn die meer met minder kunnen doen, de grootst mogelijke snelheid ontwikkelen zonder hun energieverbruik de hoogte in te jagen, maar zodra we de grens van de basisspecificaties overschrijden, ontdekken we dat moderne processors in het algemeen proberen alles wat er doorheen gaat vooraf te berekenen, te anticiperen en te voorspellen. De youtuber Matt Godbolt beschrijft dit aan de hand van vijf weinig bekende aspecten voor de gemiddelde gebruiker, en ondanks hun technische complexiteit blijven ze fascinerend.

Een van de eerste dingen die iedereen zich herinnert van de eerste Atom-processors is dat ze traag als slakken waren. In essentie koos Intel ervoor om laag verbruik boven prestaties te stellen, met een nieuwe architectuur op basis van oude concepten, en een van de dingen die bleef liggen was de out-of-order-executie.

Waar gaat het over? In losse termen is het een van de vele trucs die hedendaagse processors tot hun beschikking hebben om de uitvoering van instructies te versnellen. Wie deze trucs beter wil begrijpen, moet zich verdiepen in de vreemde wereld van architecturen, en in het bijzonder die ontwikkeld door Intel. Het alternatief is deze video van Matt Godbolt te bekijken, die er vijf beschrijft:

Vijf dingen die een CPU doet

  • Ze proberen te raden hoe je gegevens worden benaderd en patronen herkennen, een vorm van prefetching die zich vertaalt in een belangrijke snelheidswinst. Met andere woorden, ze laden automatisch cacheregels voordat je ze nodig hebt, en lopen zo een stap voor op het proces.
  • Ze zetten CISC (Complex Instruction Set Computing) om in RISC (Reduced Instruction Set Computing). De bewerkingen van de eerste architectuur worden omgezet in een reeks microcode of micro-operaties die onafhankelijk kunnen worden geprogrammeerd, wat winst oplevert in eenvoud en efficiëntie.
  • Ze herschikken de uitvoering van code. De volgorde waarin code wordt geschreven is niet de volgorde waarin deze door de processors wordt uitgevoerd. De onafhankelijkheid tussen blokken maakt het mogelijk instructies uit te voeren terwijl een andere groep in afwachting is.
  • Ze zetten code om naar SSA. SSA eenvoudig uitleggen is een enorme uitdaging, maar Godbolt reduceert het tot een reeks optimalisaties die controleren of code werkelijk onafhankelijk is (essentieel voor de voorgaande acties), en als dat niet zo is, herschrijven ze het zodat het die eigenschap krijgt. In zijn voorbeeld gebruikt hij fictieve registers zoals EAX1 en EAX2.
  • Ze voorspellen de toekomst. Dit is waar de zogenaamde sprongvoorspeller tussenkomt, die, zoals de naam suggereert, de taak heeft te anticiperen of een voorwaardelijke sprong al dan niet zal plaatsvinden, en de resultaten als speculatief classificeert. Als de voorspelling faalt, worden ze weggegooid. Als hij klopt, zijn ze al geladen. Meer snelheid.

Kortom: gegevensvooraf laden, omzetten naar microcode, out-of-order-executie, hernoemen van registers en sprongvoorspelling. Als iets hiervan je doet denken aan die gemene jongens Spectre en Meltdown, dan is dat omdat ze in zekere zin voortkomen uit zwakheden in deze taken. De relatie tussen snelheid en beveiliging vereist een veel delicater evenwicht dan we dachten...

https://old.neoteo.com/como-trabaja-un-cpu/