var exakt L1, L2 och L3 cachar finns i datorn?

Låt oss börja med detta:

jag tror att Senaste SMP-processorer använder 3 nivå cachar så jag vill förstå Cache nivå hierarki och deras arkitektur .

för att förstå cachar behöver du veta några saker:

en CPU har register. Värden i det kan användas direkt. Ingenting är snabbare.

men vi kan inte lägga oändliga register till ett chip. Dessa saker tar plats. Om vi gör chipet större blir det dyrare. En del av det beror på att vi behöver ett större chip (mer kisel), men också för att antalet chips med problem ökar.

(bild en imaginär skiva med 500 cm2. Jag klippte 10 chips från det, varje chip 50cm2 i storlek. En av dem är trasig. Jag kasserar det och jag lämnade det 9 arbets chips. Ta nu samma skiva och jag skär en 100 chips från den, var och en tio gånger så liten. En av dem om de är trasiga. Jag kasserar det trasiga chipet och jag sitter kvar med 99 arbetschips. Det är en bråkdel av den förlust jag annars skulle ha haft. För att kompensera för de större marker jag skulle behöva be högre priser. Mer än bara priset för extra kisel)

detta är en av anledningarna till att vi vill ha små, prisvärda chips.

men ju närmare cachen är CPU, desto snabbare kan den nås.

Detta är också lätt att förklara; elektriska signaler färdas nära ljushastighet. Det är snabbt men fortfarande en ändlig hastighet. Modern CPU arbete med GHz klockor. Det är också snabbt. Om jag tar en 4 GHz CPU kan en elektrisk signal resa ca 7,5 cm per klocka. Det är 7,5 cm i rak linje. (Chips är allt annat än raka anslutningar). I praktiken behöver du betydligt mindre än de 7, 5 cm eftersom det inte tillåter någon tid för chipsen att presentera de begärda uppgifterna och för att signalen ska resa tillbaka.

Bottom line, vi vill ha cachen så fysiskt så nära som möjligt. Vilket betyder stora marker.

dessa två måste balanseras (prestanda kontra kostnad).

var exakt finns L1 -, L2-och L3-cacharna i en dator?

förutsatt PC stil endast hårdvara (stordatorer är helt annorlunda, bland annat i prestanda vs. >

IBM XT
den ursprungliga 4.77 Mhz en: ingen cache. CPU kommer åt minnet direkt. En läsning från minnet skulle följa detta mönster:

  • CPU: n sätter adressen den vill läsa på minnesbussen och hävdar läsflaggan
  • minnet sätter data på databussen.
  • CPU kopierar data från databussen till sina interna register.

80286 (1982)
fortfarande ingen cache. Minnesåtkomst var inte ett stort problem för versionerna med lägre hastighet (6Mhz), men den snabbare modellen sprang upp till 20MHz och behövde ofta fördröja när man kom åt minnet.

du får då ett scenario som detta:

  • CPU: n sätter adressen den vill läsa på minnesbussen och hävdar läsflaggan
  • minnet börjar sätta data på databussen. CPU väntar.
  • minnet slutade få data och det är nu stabilt på databussen.
  • CPU kopierar data från databussen till sina interna register.

det är ett extra steg tillbringade väntar på minnet. På ett modernt system som lätt kan vara 12 steg, vilket är anledningen till att vi har cache.

80386: (1985)
CPU: erna blir snabbare. Både per klocka och genom att köra med högre klockhastigheter.
RAM blir snabbare, men inte lika mycket snabbare som Processorer.
som ett resultat behövs fler väntetillstånd.Vissa moderkort arbetar runt detta genom att lägga till cache (det skulle vara 1: A nivå cache) på moderkortet.

en läsning från minnet börjar nu med en kontroll om data redan finns i cachen. Om det är det läses från mycket snabbare cache. Om inte samma procedur som beskrivs med 80286

80486: (1989)
detta är den första CPU i denna generation som har lite cache på CPU.
det är en 8KB enhetlig cache vilket innebär att den används för data och instruktioner.

runt den här tiden blir det vanligt att sätta 256KB snabbt statiskt minne på moderkortet som 2: A nivå cache. Således 1: A nivå cache på CPU, 2: A nivå cache på moderkortet.

486 moderkort med CPU-plats och 2: A nivå cache markerad

80586 (1993)
586 eller Pentium-1 använder en cache på delad nivå 1. 8 KB vardera för data och instruktioner. Cachen delades så att data-och instruktionscacherna kunde anpassas individuellt för deras specifika användning. Du har fortfarande en liten men mycket snabb 1: A cache nära CPU, och en större men långsammare 2: a cache på moderkortet. (På ett större fysiskt avstånd).

i samma pentium 1-område producerade Intel Pentium Pro (’80686’). Beroende på modell hade detta chip en 256KB, 512KB eller 1MB ombord cache. Det var också mycket dyrare, vilket är lätt att förklara med följande bild.

bild av en pentium Pro CPU, 256KB cache modell

Observera att halva utrymmet i chipet används av cachen. Och det här är för 256KB-modellen. Mer cache var tekniskt möjligt och vissa modeller producerades med 512KB och 1MB cachar. Marknadspriset för dessa var högt.

märker också att detta chip innehåller två dör. En med den faktiska CPU och 1: A cache, och en andra dö med 256kb 2: a cache.

Pentium-2

pentium 2 är en Pentium pro kärna. Av ekonomiska skäl finns ingen 2: a cache i CPU. Istället vad säljs en en CPU oss en PCB med separata chips för CPU (och 1: A cache) och 2: a cache.

när tekniken fortskrider och vi börjar sätta skapa chips med mindre komponenter blir det ekonomiskt möjligt att sätta 2: a cachen tillbaka i själva CPU-formen. Men det finns fortfarande en splittring. Mycket snabb 1: A cache snuggled upp till CPU. Med en 1: A cache per CPU-kärna och en större men mindre snabb 2: a cache bredvid kärnan.

 bild av en pentium 2 ' CPU '(både med och utan omslag)

Pentium-3
Pentium-4
detta ändras inte för pentium-3 eller pentium-4.

runt denna tid har vi nått en praktisk gräns för hur snabbt vi kan klocka processorer. En 8086 eller en 80286 behövde inte kylas. En pentium – 4 som körs på 3.0 GHz producerar så mycket värme och använder så mycket kraft att det blir mer praktiskt att sätta två separata CPU på moderkortet snarare än en snabb.

(två 2.0 GHz CPU: er skulle använda mindre ström än en enda identisk 3.0 GHz CPU, men kunde göra mer arbete).

detta kan lösas på tre sätt:

  1. gör CPU: erna effektivare, så de gör mer arbete med samma hastighet.
  2. använd flera processorer
  3. använd flera processorer i samma ’chip’.

1) är en pågående process. Det är inte nytt och det kommer inte att sluta.

2) gjordes tidigt (t.ex. med dubbla Pentium-1 Moderkort och NX-chipset). Hittills var det enda alternativet för att bygga en snabbare dator.

3) kräver processorer där flera ’cpu-kärnor’ är inbyggda i ett enda chip. (Vi kallade sedan den CPU en dual core CPU för att öka förvirringen. Tack marknadsföring:))

dessa dagar hänvisar vi bara till CPU som en ’kärna’ för att undvika förvirring.

du får nu chips som pentium-D (duo), som i princip är två pentium-4-kärnor på samma chip.

 tidig pentium-D (2 P4 kärnor)

kom ihåg bilden av den gamla pentium-Pro? Med den enorma cachestorleken?
se de två stora områdena på den här bilden?

det visar sig att vi kan dela den 2: a cachen mellan båda CPU-kärnorna. Hastigheten skulle sjunka något, men en 512kib delad 2: a cache är ofta snabbare än att lägga till två oberoende 2: A nivå cachar av halva storleken.

detta är viktigt för din fråga.

det betyder att om du läser något från en CPU-kärna och senare försöker läsa den från en annan kärna som delar samma cache som du får en cache-träff. Minnet behöver inte nås.

eftersom program migrerar mellan CPU: er, beroende på belastningen, antalet kärnor och Schemaläggaren kan du få ytterligare prestanda genom att fästa program som använder samma data till samma CPU (cache träffar på L1 och lägre) eller på samma CPU: er som delar L2-cache (och därmed får missar på L1, men träffar på L2-cache läser).

således på senare modeller ser du delade nivå 2-cachar.

 bild av en öppen Kärna2 CPU

om du programmerar för moderna processorer har du två alternativ:

  1. stör inte. Operativsystemet ska kunna schemalägga saker. Schemaläggaren har stor inverkan på datorns prestanda och människor har lagt mycket arbete på att optimera detta. Om du inte gör något konstigt eller optimerar för en specifik modell av PC är du bättre med standard Schemaläggaren.
  2. om du behöver varenda bit av prestanda och snabbare hårdvara är inte ett alternativ, sedan försöka lämna slitbanor som har tillgång till samma data på samma kärna eller på en kärna med tillgång till en delad cache.

jag inser att jag ännu inte har nämnt L3 cache, men de är inte annorlunda. En L3-cache fungerar på samma sätt. Större än L2, långsammare än L2. Och det delas ofta mellan kärnor. Om det är närvarande är det mycket större än L2-cachen (annars skulle det inte vara meningsfullt) och det delas ofta med alla kärnor.

 modernCPUwithL3.png

Lämna ett svar

Din e-postadress kommer inte publiceras.