laten we beginnen met dit:
ik denk dat de laatste SMP processors gebruik maakt van 3 niveau caches dus Ik wil Cache niveau hiërarchie en hun architectuur te begrijpen .
om caches te begrijpen moet u een paar dingen weten:
een CPU heeft registers. Waarden daarin kunnen direct worden gebruikt. Niets is sneller.
we kunnen echter geen oneindige registers aan een chip toevoegen. Deze dingen nemen ruimte in beslag. Als we de chip groter maken, wordt het duurder. Deels omdat we een grotere chip nodig hebben (meer silicium), maar ook omdat het aantal chips met problemen toeneemt.
(afbeelding een imaginaire wafer met 500 cm2. Ik snijd er 10 chips van, elke chip 50cm2 groot. Een van hen is kapot. Ik gooi het weg en ik ben er nog 9 werkende chips. Neem nu dezelfde wafer en ik snijd er 100 chips van, elk tien keer zo klein. Een van hen is kapot. Ik gooi de kapotte chip weg en ik heb nog 99 werkende chips over. Dat is een fractie van het verlies dat ik anders zou hebben gehad. Om de grotere chips te compenseren zou ik hogere prijzen moeten vragen. Meer dan alleen de prijs voor het extra silicium)
dit is een van de redenen waarom we kleine, betaalbare chips willen.
echter, hoe dichter de cache bij de CPU is, hoe sneller het toegankelijk is.
dit is ook gemakkelijk te verklaren; elektrische signalen reizen in de buurt van de lichtsnelheid. Dat is snel, maar nog steeds een eindige snelheid. Moderne CPU werken met GHz klokken. Dat is ook snel. Als ik een 4 GHz CPU neem dan kan een elektrisch signaal ongeveer 7,5 cm per klok teek reizen. Dat is 7,5 cm in rechte lijn. (Chips zijn allesbehalve rechte verbindingen). In de praktijk heb je aanzienlijk minder dan die 7,5 cm nodig, omdat dat geen tijd geeft voor de chips om de gevraagde gegevens te presenteren en voor het signaal om terug te reizen.
Bottom line, we willen de cache zo fysiek mogelijk zo dicht mogelijk bij. Dat betekent grote chips.
deze twee moeten in evenwicht zijn (prestatie versus kosten).
waar bevinden de Caches L1, L2 en L3 zich precies in een computer?
uitgaande van PC stijl alleen hardware (mainframes zijn heel verschillend, inclusief in de prestaties vs. kostenbalans);
IBM XT
de oorspronkelijke 4,77 Mhz: geen cache. CPU heeft direct toegang tot het geheugen. Een lezing uit het geheugen zou dit patroon volgen:
- de CPU plaatst het adres dat het wil lezen op de geheugenbus en bevestigt de leesvlag
- geheugen plaatst de gegevens op de gegevensbus.
- de CPU kopieert de gegevens van de gegevensbus naar de interne registers.
80286 (1982)
nog steeds geen cache. Toegang tot het geheugen was geen groot probleem voor de lagere snelheid versies (6Mhz), maar het snellere model liep tot 20Mhz en vaak nodig om vertraging bij de toegang tot het geheugen.
dan krijg je een scenario als dit:
- de CPU plaatst het adres dat het wil lezen op de geheugenbus en bevestigt de leesvlag
- het geheugen begint de gegevens op de gegevensbus te plaatsen. De CPU wacht.
- geheugen klaar met het ophalen van de data en het is nu stabiel op de data bus.
- de CPU kopieert de gegevens van de gegevensbus naar de interne registers.
dat is een extra stap die wordt besteed aan het wachten op het geheugen. Op een modern systeem dat gemakkelijk 12 stappen kan zijn, daarom hebben we cache.
80386: (1985)
de CPU ‘ s worden sneller. Zowel per klok, en door te draaien op hogere kloksnelheden.
RAM wordt sneller, maar niet zo veel sneller als CPU ‘ s.
als gevolg hiervan zijn meer wachttoestanden nodig.Sommige moederborden werken rond dit door het toevoegen van cache (dat zou 1e niveau cache) op het moederbord.
een lezen vanuit het geheugen begint nu met een controle of de gegevens al in de cache zitten. Als het is het wordt gelezen uit de veel snellere cache. Indien niet dezelfde procedure als beschreven met de 80286
80486: (1989)
Dit is de eerste CPU van deze generatie die enige cache op de CPU heeft.
het is een 8KB unified cache wat betekent dat het wordt gebruikt voor gegevens en instructies.
rond deze tijd wordt het gebruikelijk om 256KB snel statisch geheugen op het moederbord te plaatsen als cache op het 2e niveau. Dus 1e niveau cache op de CPU, 2e niveau cache op het moederbord.
80586 (1993)
de 586 of Pentium-1 gebruikt een split level 1 cache. 8 KB elk Voor gegevens en instructies. De cache werd gesplitst zodat de data en instructie caches individueel konden worden afgestemd voor hun specifieke gebruik. Je hebt nog steeds een kleine maar zeer snelle 1e cache in de buurt van de CPU, en een grotere maar langzamere 2e cache op het moederbord. (Op een grotere fysieke afstand).In hetzelfde pentium 1 Gebied produceerde Intel de Pentium Pro (‘80686’). Afhankelijk van het model had deze chip een cache van 256Kb, 512KB of 1MB aan boord. Het was ook veel duurder, Dat is gemakkelijk uit te leggen met de volgende foto.
merk op dat de helft van de ruimte in de chip wordt gebruikt door de cache. En dit is voor het 256KB model. Meer cache was technisch mogelijk en sommige modellen werden geproduceerd met 512KB en 1MB caches. De marktprijs hiervoor was hoog.
merk ook op dat deze chip twee matrijzen bevat. Een met de werkelijke CPU en 1e cache, en een tweede die met 256KB 2e cache.
Pentium-2
pentium 2 is een pentium Pro-kern. Om economische redenen is er geen 2e cache in de CPU. In plaats daarvan wat wordt verkocht een CPU us Een PCB met aparte chips voor CPU (en 1e cache) en 2e cache.
naarmate de technologie vordert en we beginnen met put create chips met kleinere componenten wordt het financieel mogelijk om de 2e cache terug te zetten in de werkelijke CPU die. Er is echter nog steeds een splitsing. Zeer snelle 1e cache geknuffeld tot aan de CPU. Met een 1e cache per CPU core en een grotere maar minder snelle 2e cache naast de core.
Pentium-3
Pentium-4
dit verandert niet voor de pentium-3 of de pentium-4.
rond deze tijd hebben we een praktische limiet bereikt over hoe snel we CPU ‘ s kunnen klokken. Een 8086 of een 80286 had geen koeling nodig. Een pentium-4 draait op 3.0 GHz produceert zoveel warmte en gebruikt zoveel vermogen dat het praktischer wordt om twee aparte CPU ‘ s op het moederbord te plaatsen in plaats van één snelle.
(twee 2,0 GHz CPU ‘ s zouden minder vermogen gebruiken dan een identieke 3,0 GHz CPU, maar zouden toch meer werk kunnen doen).
dit kan op drie manieren worden opgelost:
- maak de CPU ‘ s efficiënter, zodat ze meer werk doen op dezelfde snelheid.
- gebruik meerdere CPU ‘s
- gebruik meerdere CPU’s in dezelfde ‘chip’.
1) is een continu proces. Het is niet nieuw en het zal niet stoppen.
2) werd vroeg uitgevoerd (bijvoorbeeld met dubbele Pentium-1 moederborden en de NX-chipset). Tot nu toe was dat de enige optie voor het bouwen van een snellere PC.
3) vereist CPU ’s waarbij meerdere’ cpu-kern ‘ in één enkele chip zijn ingebouwd. (We noemden die CPU een dual core CPU om de verwarring te vergroten. Thank you marketing:))
deze dagen verwijzen we gewoon naar de CPU als een ‘core’ om verwarring te voorkomen.
je krijgt nu chips zoals de pentium-D (duo), wat in principe twee pentium-4 kernen op dezelfde chip is.
herinner je je de foto van de oude pentium-Pro? Met de enorme cachegrootte?
zie de twee grote gebieden in deze afbeelding?
het blijkt dat we die 2e cache tussen beide CPU-cores kunnen delen. Snelheid zou iets dalen, maar een 512kib gedeelde 2e cache is vaak sneller dan het toevoegen van twee onafhankelijke 2e niveau caches van de helft van de grootte.
dit is belangrijk voor uw vraag.
het betekent dat als je iets van een CPU core leest en later probeert het te lezen van een andere core die dezelfde cache deelt, dat je een cache hit krijgt. Het geheugen hoeft niet geopend te worden.
omdat programma ’s migreren tussen CPU’ s, afhankelijk van de belasting, het aantal core en de planner, kunt u extra prestaties verkrijgen door programma ’s die dezelfde gegevens gebruiken aan dezelfde CPU te koppelen (cache hits op L1 en lager) of op dezelfde CPU’ s die L2 cache delen (en dus misses krijgen op L1, maar hits op L2 cache leest).
dus op latere modellen ziet u gedeelde niveau 2 caches.
als u programmeert voor moderne CPU ‘ s dan hebt u twee opties:
- doe geen moeite. Het besturingssysteem moet in staat zijn om dingen te plannen. De planner heeft een grote impact op de prestaties van de computer en mensen hebben veel moeite gedaan om dit te optimaliseren. Tenzij je iets raars doet of optimaliseert voor één specifiek model van PC ben je beter af met de standaard scheduler.
- als u elk laatste stukje van de prestaties nodig hebt en snellere hardware is geen optie, probeer dan de treads die toegang hebben tot dezelfde gegevens op dezelfde core of op een core met toegang tot een gedeelde cache te verlaten.
Ik realiseer me dat ik L3 cache nog niet heb genoemd, maar ze zijn niet anders. Een L3 cache werkt op dezelfde manier. Groter dan L2, langzamer dan L2. En het wordt vaak gedeeld tussen kernen. Als het aanwezig is is het een stuk groter dan de L2 cache (anders zou het geen zin hebben) en het wordt vaak gedeeld met alle cores.