Wat is de CPU-cache?

Moderne CPU's werken ongelooflijk snel; ze kunnen aanzienlijk beter presteren dan het systeem-RAM. Deze onbalans in snelheid tussen CPU en geheugen zou ertoe leiden dat uw processor vaak inactief is, wachtend op gegevens die ernaar worden verzonden, zodat hij een proces kan blijven uitvoeren. Om dit te voorkomen, waardoor CPU's steeds sneller kunnen blijven draaien, wordt een CPU-cache gebruikt.

Hoe versnelt een CPU-cache een CPU?

De CPU-cache is ontworpen om zo snel mogelijk te zijn en om vervolgens gegevens te cachen die de CPU opvraagt. De snelheid van de CPU-cache is op drie manieren geoptimaliseerd: latentie, bandbreedte en nabijheid. De CPU-cache werkt met zeer lage latenties, waardoor de tijd die nodig is voordat een resultaat wordt geretourneerd, wordt geminimaliseerd. De Intel i9-9900k heeft bijvoorbeeld een cache-latentie van 0,8, 2,4 en 11,1 nanoseconden voor respectievelijk de L1-, L2- en L3-cache. Ter vergelijking: de latentie van moderne high-speed RAM is in de orde van 14 nanoseconden.

Tip: De cache-niveaus zullen later in meer detail worden uitgelegd, maar de lagere cachelagen zijn sneller maar duurder en hebben dus een lagere capaciteit. Een nanoseconde is een miljardste van een seconde, dus een latentie van 0,8 seconden betekent dat het minder dan een miljardste van een seconde duurt om een ​​resultaat te retourneren.

In termen van bandbreedte biedt de CPU-cache aanzienlijke prestatieverbeteringen ten opzichte van traditionele opslag en RAM. Leessnelheden van de L1- en L3-cache kunnen pieken op respectievelijk 2,3 TB/s en 370 GB/s, terwijl de bandbreedte van RAM doorgaans rond de 40 GB/s ligt. Deze verhoogde bandbreedte betekent dat de CPU-cache gegevens veel sneller naar de CPU kan overbrengen dan RAM dat kan.

Om de maximaal mogelijke snelheden te bereiken, is de CPU-cache eigenlijk ingebouwd in het silicium van de CPU-matrijs zelf. Dit minimaliseert de afstand die elektrische signalen moeten afleggen, waardoor de latentie zo laag mogelijk blijft. Toen bijvoorbeeld de L3-cache voor het eerst werd verplaatst van het moederbord naar de CPU-chip, kon de toenmalige processor (Pentium 4 EE) een prestatieverbetering van 10-20% behalen.

CPU-cache-architectuur

Moderne CPU's gebruiken over het algemeen drie lagen CPU-cache met het label L1-3, waarbij caches met een lager nummer dichter bij de CPU-kernen liggen, sneller en duurder zijn. Elke individuele CPU-core in een multi-core CPU heeft zijn eigen L1-cache. Het is meestal opgesplitst in twee delen, de L1I en L1D. De L1I wordt gebruikt om instructies voor de CPU in de cache op te slaan, terwijl L1D wordt gebruikt om de gegevens waarop die instructies moeten worden uitgevoerd in de cache op te slaan.

Elke CPU-kern heeft meestal ook zijn eigen L2-cache op een moderne CPU. De L2-cache is groter en langzamer dan de L1-cache en wordt voornamelijk gebruikt om gegevens op te slaan die anders niet in de L2-cache zouden passen. Door een speciale L2-cache per core te hebben, wordt cacheconflict vermeden. Cacheconflict is waar verschillende kernen vechten om cacheruimte voor hun eigen workloads te claimen, wat ertoe kan leiden dat belangrijke gegevens uit de cache worden gewist.

De L3-cache wordt doorgaans gedeeld tussen alle CPU-kernen van de processor. Nogmaals, de L3-cache is langzamer dan de L2-cache, maar is goedkoper en groter. Door een gedeelde cache te bieden, is het mogelijk om de hoeveelheid gegevens te verminderen die zou worden gedupliceerd op lagere niveaus van per-core cache.

Tip: in cachegroottes heeft Intel's i9-9900K bijvoorbeeld een 64 KB L1 en een 256 KB L2-cache per core (voor een totaal van 512 KB L1 en 2 MB L2), hij heeft ook een 16 MB gedeelde L3-cache.

Hoe wordt de CPU-cache gebruikt?

Alle niveaus van de CPU-cache worden gebruikt om de processorprestaties te versnellen door gegevens uit het RAM-geheugen te cachen. Wanneer een CPU gegevens opvraagt, doorzoekt deze meestal eerst de cachelagen in een poging om de gegevens zo snel mogelijk te krijgen. Als de gegevens worden gevonden in een cache-hit, kan de CPU doorgaan met de verwerking. Als de gegevens zich niet in de cache bevinden, in een zogenaamde cachemisser, moet de CPU het RAM-geheugen controleren en vervolgens de harde schijf als de gegevens er ook niet zijn. De snellere lagen worden altijd eerst gecontroleerd op maximale prestaties.

Om de CPU te helpen de gegevens die hij nodig heeft in de cache te hebben wanneer hij deze nodig heeft, probeert de cache vooruit te lopen welke gegevens de CPU vervolgens nodig heeft. Als de CPU bijvoorbeeld wat gegevens heeft opgevraagd voor een afbeelding die hij aan het renderen is, kan de cache proberen preventief meer van de afbeeldingsgegevens in de cache te plaatsen, zodat deze zo snel mogelijk naar de CPU kunnen worden gevoerd.