Ik ken niet alle details maar in essentie komt het hierop neer. Op het moment dat je data uit het RAM-geheugen of van een SSD of harde schijf moet halen of daarop moet opslaan dan verlies je veel tijd (veel cycli). Ze proberen dat op te lossen door een klein stukje geheugen dicht op de CPU te zetten, de cache. Omdat de afstand klein moet zijn en hierdoor de capaciteit van dat geheugen klein is is de kans groot dat de data die je zoekt er niet in zit als je willekeurig hier data in zou opslaan, dus komen ze met slimme trucjes om de kans te vergroten dat precies die data die de CPU nodig heeft erin zit. Op het moment dat de vereiste data in de cache zit dan bespaar je een hoop tijd. Echter, als de vereiste data niet in de cache zit terwijl je die data uit de cache probeert te halen dan verlies je een hoop tijd. Het gaat erom dat het percentage hits (data zit in cache) groot genoeg is dat je meer tijd wint dan verliest Om het allemaal nog wat efficiënter te maken werken met ze diverse lagen van caches: L1 bevat weinig data (paar honderd KB?) en is erg snel te 'raadplegen' omdat het dichtbij de CPU zit, L2 bevat aanzienlijk meer data en is wat trager omdat het verder van de CPU zit, idem voor L3 t.o.v. L2. Heb je nu geen hit in L1 dan probeer je het in L2, heb je geen hit in L2 dan probeer je het in L3.Flamesz schreef op maandag 27 februari 2017 @ 21:21:
Wacht, hoe werkt een cache bij AMD dan? Ik dacht dat alle caches altijd werkten zoals je dat bij kabylake beschrijft.
Eerst eventjes een korte uitleg over associativiteit, om ervoor te zorgen dat je niet steeds eindeloos hoeft te zoeken om informatie te vinden worden adreslocaties van het RAM-geheugen gekoppeld aan adreslocaties van het cachegeheugen. Je kan dat op tal van manieren doen waarbij het een complexer is dan het ander en je voor- en nadelen hebt voor alle systemen. Wat je moet onthouden is dat er een systeem is om ervoor te zorgen dat je slechts in een klein deel van het cache-geheugen hoeft te zoeken en dat n-associativiteit inhoudt dat elke locatie van het RAM-geheugen aan n plaatsen in het cache-geheugen kan worden gekoppeld. Tot op zekere hoogte werkt hogere associativiteit effectiever, als het goed is uitgewerkt, maar is het ook complexer.
Wat betreft de vraag over de verschillen tussen exclusief en inclusief. Het verschil tussen wat het is is al aangegeven: bij inclusief cache staat alle data die in het lagere cacheniveau (dichter bij de CPU) staat ook in het hogere cacheniveau, bij exclusief staat alle data slechts in een van de beide. Het komt erop neer dat beide systemen voor en nadelen hebben. In exclusieve caches kan je uiteraard meer data opslaan bij dezelfde totale grootte, want je hoeft geen data dubbel op te slaan. Stel echter dat je in L2 bepaalde data vindt (wat inhoudt dat de CPU het vlak daarvoor in L1 probeerde en een miss had) dan hoef je in het geval van inclusieve cache slechts de data te kopiëren van L2 naar L1 terwijl je bij exclusieve cache de data moet ruilen (van L2 naar L1 en vice versa, als ik het goed begrijp omdat de CPU meestal die data nog meer nodig gaat hebben in de nabije toekomst). Als daarentegen iets uit de cache moet worden verwijderd dan moet je bij exclusieve cache in alle lagen die samen exclusief zijn nagaan of dat die data daar wel of niet in staat terwijl je bij inclusieve cache slechts in de hoogste cache hoeft te kijken en dan weet of dat je in de lagere caches eveneens de data moet verwijderen, het eerste kost meer tijd. Het verwijderen gaat dan weer sneller bij exclusieve cache. Kortom, een hoop tradeoffs, het domein van ingenieurs.
Uiteraard moet je ook een balans zoeken tussen de hoeveelheid cache en de hoeveel ruimte die je overhoudt voor bijvoorbeeld brancheprediction, floating point units etc.
Bij brancheprediction (AMD noemt het volgens mij nu neural network of zo
Je voert 100 keer dezelfde stap uit en dit is goed te voorspellen, dat je dan 1 keer een forse straf krijgt voor het verkeerd gokken dat dit patroon wordt herhaald is niet zo relevant omdat je 100 keer succesvol goed gokt en tijd bespaart. Dit is een illustratie van hoe branchprediction werkt maar de uitvoering is natuurlijk heel erg complex.
Als er hier mensen zijn die er veel meer over weten en die willen het aanvullen of iets nuanceren, voel je vrij.