Articles

Explainer: L1 vs. L2 vs. L3 Cache

joka ikisessä suorittimessa, joka löytyy mistä tahansa tietokoneesta, halvasta kannettavasta tietokoneesta miljoonan dollarin palvelimeen, on jotain nimeltään cache. Todennäköisesti siinä on myös useita tasoja.

sen täytyy olla tärkeä, miksi se muuten olisi siellä? Mutta mitä cache tekee, ja miksi tarvitaan eri tasoilla tavaraa? Mitä ihmettä 12-way set associative edes tarkoittaa?

mitä välimuisti tarkalleen ottaen on?

TL;DR: se on pieni, mutta erittäin nopea muisti, joka istuu aivan suorittimen logiikkayksiköiden viereen.
mutta toki kätköistä voi oppia paljon muutakin…

aloitetaan kuvitteellisesta, maagisesta tallennusjärjestelmästä: se on äärettömän nopea, pystyy käsittelemään äärettömän määrän datatapahtumia kerralla ja pitää datan aina turvassa. Ei niin, että mitään edes etäisesti tätä on olemassa, mutta jos se olisi, prosessorin suunnittelu olisi paljon yksinkertaisempaa.

suorittimissa tarvittaisiin vain logiikkayksiköitä yhteenlaskuun, kertomiseen jne. ja järjestelmä, joka hoitaa tiedonsiirrot. Tämä johtuu siitä, että teoreettinen tallennusjärjestelmä voi heti lähettää ja vastaanottaa kaikki tarvittavat numerot; mikään logiikkayksiköistä ei jäisi odottamaan datasiirtoa.

mutta, kuten kaikki tiedämme, ei ole mitään maagista tallennustekniikkaa. Sen sijaan meillä on kova-tai kiinteän olomuodon asemia, joista parhaimmatkaan eivät pysty edes etäisesti käsittelemään kaikkia tyypillisen suorittimen vaatimia tiedonsiirtoja.

tiedon tallennuksen Suuri t ’ Phon

syynä on se, että nykyaikaiset suorittimet ovat uskomattoman nopeita — ne vievät vain yhden kellosyklin lisätäkseen kaksi 64 bitin kokonaislukuarvoa yhteen, ja 4 GHz: n taajuudella toimivalle suorittimelle tämä olisi vain 0.00000000025 sekuntia tai nanosekunnin vartin.

samaan aikaan pyörivät kiintolevyt vievät tuhansia nanosekunteja vain löytääkseen tiedon sisällä olevista levyistä saati siirtääkseen sitä, ja solid state-asemat vievät edelleen kymmeniä tai satoja nanosekunteja.

tällaisia asemia ei tietenkään voi rakentaa prosessoreihin, joten se tarkoittaa, että näiden kahden välillä on fyysinen ero. Tämä vain lisää aikaa tietojen siirtämiseen, mikä tekee asiat vielä huonommiksi.

tiedon tallennuksen Suuri a ’ uin, valitettavasti

joten tarvitsemme toisen tiedon tallennusjärjestelmän, joka istuu prosessorin ja päätallennuksen väliin. Sen täytyy olla nopeampi kuin asema, pystyä käsittelemään paljon tiedonsiirtoa samanaikaisesti, ja olla paljon lähempänä prosessori.

no, meillä on jo sellainen, ja sitä kutsutaan RAM-muistiksi, ja jokaisessa tietokonejärjestelmässä on niitä juuri tätä tarkoitusta varten.

lähes kaikki tällainen tallennustila on DRAM (dynamic random access memory) ja se pystyy siirtämään dataa paljon nopeammin kuin mikään asema.

kuitenkin, vaikka DRAM on supernopea, se ei voi tallentaa läheskään yhtä paljon dataa.

jotkin suurimmista DRAM-piirien valmistajista Micronin valmistamista DDR4-muistipiireistä sisältävät 32 gigatavua eli 4 gigatavua dataa; suurimpiin kiintolevyihin mahtuu 4 000 kertaa tätä enemmän.

joten vaikka olemme parantaneet tietoverkkomme nopeutta, tarvitaan lisäjärjestelmiä — laitteistoja ja ohjelmistoja — jotta voidaan selvittää, mitä dataa tulee pitää rajallisessa DRAM-määrässä valmiina suorittimelle.

ainakin DRAM voidaan valmistaa sirupakettiin (tunnetaan sulautettuna Dramina). Suorittimet ovat kuitenkin aika pieniä, joten niihin ei mahdu niin paljon.

10 MB dramia vain Xbox 360: n grafiikkasuorittimen vasemmalla puolella. Lähde: CPU Grave Yard

suurin osa DRAMISTA sijaitsee aivan prosessorin vieressä, kytkettynä emolevyyn, ja se on aina lähinnä suoritinta, tietokonejärjestelmässä. Silti se ei ole tarpeeksi nopea…

DRAM kestää edelleen noin 100 nanosekuntia datan löytämiseen, mutta ainakin se voi siirtää miljardeja bittejä joka sekunti. Näyttää siltä, että tarvitsemme toisen muistivaiheen, siirtyäksemme prosessorin yksiköiden ja dramin väliin.

Enter stage left: SRAM (staattinen Random access memory). Jos DRAM käyttää mikroskooppisia kondensaattoreita tallentamaan tietoja sähkövarauksen muodossa, SRAM käyttää transistoreja tekemään saman asian ja nämä voivat toimia lähes yhtä nopeasti kuin prosessorin logiikkayksiköt (noin 10 kertaa nopeammin kuin DRAM).

SRAMISSA on tietysti varjopuoli ja jälleen kerran kyse on avaruudesta.

transistoripohjainen muisti vie paljon enemmän tilaa kuin DRAM: samankokoiselle 4 GB DDR4-sirulle saisi alle 100 MB: n edestä SRAM-muistia. Mutta koska se tehdään samalla prosessilla kuin suorittimen luominen, SRAM voidaan rakentaa suoraan prosessorin sisälle, mahdollisimman lähelle logiikkayksiköitä.

transistoripohjainen muisti vie paljon enemmän tilaa kuin DRAM: samankokoiselle 4 GB DDR4-sirulle saisi alle 100 MB: n edestä SRAM-muistia.

jokaisella lisävaiheella olemme lisänneet liikkumisnopeutta noin, sen verran kuin voimme tallentaa. Voisimme lisätä lisää osia, joista jokainen olisi nopeampi mutta pienempi.

ja niin päädymme teknisempään määritelmään siitä, mitä välimuisti on: se on useita kortteleita SRAM, kaikki sijaitsevat prosessorin sisällä; niitä käytetään varmistamaan, että logiikkayksiköt pidetään mahdollisimman kiireisinä, lähettämällä ja tallentamalla dataa supernopeilla nopeuksilla. Oletko tyytyväinen? Hyvä , koska tästä tulee paljon monimutkaisempaa!

välimuisti: monitasoinen parkkipaikka

kuten keskustelimme, välimuistia tarvitaan, koska ei ole maagista tallennusjärjestelmää, joka pysyisi suorittimen logiikkayksiköiden datavaatimusten tasalla. Nykyaikaiset suorittimet ja grafiikkasuorittimet sisältävät joukon SRAM-lohkoja, jotka ovat sisäisesti järjestäytyneet hierarkiaan — välimuistisarjan, joka on järjestetty seuraavasti:

yllä olevassa kuvassa suoritinta edustaa musta dashed-suorakulmio. ALUs (aritmeettisen logiikan yksiköt) ovat äärivasemmalla; nämä rakenteet antavat prosessorille virtaa ja käsittelevät sirun tekemää matematiikkaa. Vaikka se ei teknisesti ole välimuisti, lähimpänä muistia Alusille ovat rekisterit (ne on ryhmitelty yhteen rekisteritiedostoksi).

jokainen näistä sisältää yhden luvun, kuten 64-bittisen kokonaisluvun; itse arvo voi olla jonkin tiedon pala, tietyn käskyn koodi tai jonkin muun datan muistiosoite.

rekisteritiedosto työpöydällä olevassa suorittimessa on melko pieni — esimerkiksi Intelin Core i9-9900K: ssa niitä on kaksi pankkia kussakin ytimessä, ja kokonaislukujen yksi sisältää vain 180 64-bittistä rekisteriä. Toisessa rekisteritiedostossa, vektoreille (pienille numeroryhmille), on 168 256-bittistä merkintää. Rekisteritiedoston kokonaismäärä kullekin ytimelle on siis hieman alle 7 kB. Vertailun vuoksi Nvidia GeForce RTX 2080 Ti: n Suoratoistomoniprosessoreissa (GPU: n vastine suorittimen ytimelle) rekisteritiedoston koko on 256 kB.

rekisterit ovat SRAM, aivan kuten välimuistit, mutta ne ovat yhtä nopeita kuin niiden tarjoamat alukset, työntäen dataa sisään ja ulos yhden kellosyklin aikana. Mutta niitä ei ole suunniteltu pitämään kovin paljon tietoa (vain yksi pala sitä), minkä vuoksi siellä on aina joitakin suurempia muistilohkoja lähellä: Tämä on tason 1 välimuisti.

Intel Skylake-suoritin, joka zoomattiin yhteen ytimeen. Lähde: Wikichip

yllä oleva kuva on zoomattu kuva yhdestä ytimestä Intelin Skylake-työpöytäprosessorin suunnittelusta.

ALUs ja rekisteritiedostot näkyvät äärivasemmistossa, korostettuna vihreällä. Kuvan ylä-keskellä, valkoisella, on tason 1 datavälimuisti. Tämä ei sisällä paljon tietoa, vain 32 kB, mutta kuten rekisterit, se on hyvin lähellä logiikkayksiköitä ja toimii samalla nopeudella kuin ne.

toinen valkoinen suorakulmio ilmaisee tason 1 käskyvälimuistin, joka on myös kooltaan 32 kB. Nimensä mukaisesti tämä tallentaa erilaisia komentoja valmiina jaettavaksi pienempiin, niin sanottuihin mikro-operaatioihin (jotka yleensä merkitään µops: ksi), jotta ALUs voidaan suorittaa. Niillekin on välimuisti, ja sen voisi luokitella tasolle 0, koska se on pienempi (vain 1 500 operaatiota) ja lähempänä kuin L1-välimuistit.

saatat ihmetellä, miksi nämä SRAM-palikat ovat niin pieniä; miksi ne eivät ole megatavun kokoisia? Yhdessä data-ja opetuskätköt vievät sirussa lähes saman verran tilaa kuin tärkeimmät logiikkayksiköt, joten niiden suurentaminen kasvattaisi muotin kokonaiskokoa.

mutta pääsyy siihen, että niillä on vain muutama kB, on se, että datan etsimiseen ja hakemiseen tarvittava aika kasvaa muistikapasiteetin kasvaessa. L1-välimuistin on oltava todella nopea, ja siksi on saavutettava kompromissi koon ja nopeuden välillä-parhaimmillaan tietojen saaminen tästä välimuistista, käyttövalmiina, kestää noin 5 kellosykliä (pidempään liukulukuarvoille).

Skylaken L2-välimuisti: 256 kB SRAMin hyvyyttä

, mutta jos tämä olisi ainoa välimuisti suorittimen sisällä, sen suorituskyky osuisi äkilliseen seinään. Tämän vuoksi niissä kaikissa on ydinten sisään rakennettu toinen muistitaso: tason 2 välimuisti. Tämä on yleinen säilytyslohko, joka pitää kiinni ohjeista ja tiedoista.

se on aina melko vähän suurempi kuin taso 1: AMD Zen 2-suorittimet pakkaavat jopa 512 kB, joten alemman tason välimuistit voidaan pitää hyvin mukana. Tämä ylimääräinen koko tulee kalliiksi, vaikka, ja se kestää karkeasti kaksi kertaa niin kauan löytää ja siirtää tietoja tästä välimuistista, verrattuna tasolle 1.

mennen ajassa taaksepäin, Alkuperäisen Intel Pentiumin aikoihin, tason 2 välimuisti oli erillinen siru, joko pienellä plug-in-piirilevyllä (kuten RAM-DIMM) tai sisäänrakennettuna emolevyyn. Lopulta se työskenteli tiensä CPU paketti itse, kunnes lopulta Integroitu CPU die, kuten Pentium III ja AMD K6-III suorittimet.

tätä kehitystä seurasi pian toinen välimuistitaso, siellä tukemaan muita alempia tasoja, ja se syntyi moniytimien sirujen nousun myötä.

Intel Kaby Lake chip. Lähde: Wikichip

Tämä kuva Intel Kaby Lake-sirusta näyttää 4 ydintä vasemmassa keskellä (integroitu GPU vie lähes puolet kuolee, oikealla). Jokaisella ytimellä on oma ”yksityinen” joukko tason 1 ja 2 välimuistit (valkoinen ja keltainen kohokohtia), mutta ne tulevat myös kolmas joukko SRAM lohkot.

tason 3 välimuisti, vaikka se on suoraan yhden ytimen ympärillä, on täysin jaettu muiden kanssa — jokainen voi vapaasti käyttää toisen L3-välimuistin sisältöä. Se on paljon suurempi (välillä 2 ja 32 MB), mutta myös paljon hitaampi, keskimäärin yli 30 sykliä, varsinkin jos ydin tarvitsee käyttää dataa, joka on lohko välimuistin jonkin matkan päässä.

alla näkyy AMD: n Zen 2-arkkitehtuurissa yksi ydin: 32 kB tason 1 Tiedot ja ohjeet välimuistit valkoinen, 512 KB Taso 2 keltainen, ja valtava 4 MB lohko L3 välimuisti punaisella.

AMD Zen 2-suoritin, zoomattu yhden ytimen laukauksella. Lähde: Fritzchens Fritz

odota hetki. Miten 32 kB voi viedä enemmän fyysistä tilaa kuin 512 kB? Jos Taso 1 sisältää niin vähän dataa, miksi se on suhteellisesti niin paljon suurempi kuin L2 tai L3 välimuisti?

enemmän kuin pelkkä numero

välimuisti parantaa suorituskykyä nopeuttamalla tiedonsiirtoa logiikkayksiköille ja pitämällä kopiota usein käytetyistä ohjeista ja tiedoista lähistöllä. Välimuistiin tallennetut tiedot jaetaan kahteen osaan: itse tieto ja sijainti, jossa se alun perin sijaitsi järjestelmän muistissa/tallennustilassa — tätä osoitetta kutsutaan välimuistitunnisteeksi.

kun suoritin suorittaa toiminnon, joka haluaa lukea tai kirjoittaa tietoja muistista / muistiin, se alkaa tarkistamalla tason 1 välimuistin tunnisteet. Jos vaadittu on läsnä (välimuistin osuma), että tiedot voidaan sitten käyttää lähes välittömästi. Välimuistin menetys tapahtuu, kun vaadittu tunniste ei ole alimmalla välimuistitasolla.

L1-välimuistiin luodaan siis uusi tagi, ja muu suoritinarkkitehtuuri ottaa vallan, metsästäen takaisin muiden välimuistitasojen läpi (aina tarvittaessa takaisin päätallennusasemalle asti) löytääkseen kyseisen tagin tiedot. Mutta jotta L1-välimuistissa olisi tilaa tälle uudelle tunnisteelle, jotain muuta on poikkeuksetta käynnistettävä L2: een.

tämä johtaa lähes jatkuvaan tietojen sekoittumiseen, jotka kaikki saavutetaan vain kourallisessa kellosyklejä. Ainoa tapa saavuttaa tämä on ottaa monimutkainen rakenne ympärille SRAM, käsitellä hallinta tietojen. Laita toinen tapa: jos suorittimen ydin koostuisi vain yhdestä alusta, niin L1-välimuisti olisi paljon yksinkertaisempi, mutta koska niitä on kymmeniä (joista monet jongleeraavat kahta ohjeketjua), välimuisti vaatii useita yhteyksiä pitääkseen kaiken liikkeessä.

voit käyttää ilmaisia ohjelmia, kuten CPU-Z: tä, oman tietokoneesi käynnistävän prosessorin välimuistitietojen tarkistamiseen. Mutta mitä kaikki tämä tieto merkitsee? Tärkeä elementti on label set associative – tässä on kyse säännöistä, joita sovelletaan siihen, miten tieto lohkoja järjestelmämuistista kopioidaan välimuistiin.

edellä mainitut välimuistitiedot koskevat Intel Core i7-9700K: ta. sen 1-tason välimuistit jaetaan kukin 64 pieneen lohkoon, joita kutsutaan joukoiksi, ja jokainen näistä jaetaan edelleen välimuistiriveihin (kooltaan 64 tavua). Set associative tarkoittaa sitä, että tietopalikka järjestelmämuistista kartoitetaan välimuistilinjoille yhdessä tietyssä joukossa sen sijaan, että se olisi vapaasti kartoitettavissa missä tahansa.

8-tie-osa kertoo, että yhteen lohkoon voidaan liittää joukon 8 välimuistiviivaa. Mitä suurempi assosiatiivisuuden taso (eli enemmän ”tapoja”) on, sitä paremmat mahdollisuudet on saada välimuistin osuma, kun suoritin lähtee jahtaamaan dataa, ja välimuistin aiheuttamien rangaistusten väheneminen huteja. Haittapuolia ovat, että se lisää monimutkaisuutta, lisääntynyt virrankulutus, ja voi myös vähentää suorituskykyä, koska on enemmän välimuistilinjoja käsitellä lohkon tietoja.

L1+L2 inclusive cache, L3 victim cache, write-back polices, even ECC. Lähde: Fritzchens Fritz

toinen näkökulma välimuistin monimutkaisuuteen liittyy siihen, miten dataa säilytetään eri tasoilla. Säännöt on asetettu niin sanotussa inkluusiopolitiikassa. Esimerkiksi Intelin Ydinprosessoreissa on täysin kattava L1+L3-välimuisti. Tämä tarkoittaa, että sama data esimerkiksi tasolla 1 voi olla myös tasolla 3. Tämä saattaa vaikuttaa siltä, että se tuhlaa arvokasta välimuistitilaa, mutta etuna on, että jos prosessori saa missin, etsiessään tunnistetta alemmalta tasolta, sen ei tarvitse metsästää ylemmältä tasolta löytääkseen sen.

samoissa prosessoreissa L2-välimuisti on ei-inklusiivinen: mitään sinne tallennettua tietoa ei ole kopioitu toiselle tasolle. Tämä säästää tilaa, mutta ei tulos sirun muistijärjestelmä ottaa etsiä läpi L3 (joka on aina paljon suurempi) löytää jäänyt tag. Uhrikätköt ovat samanlaisia kuin tämä, mutta niitä käytetään tallennettuihin tietoihin, jotka työnnetään pois alemmalta tasolta-esimerkiksi AMD: n Zen 2-prosessorit käyttävät L3-uhrikätköä, joka vain tallentaa tietoja L2: sta.

välimuistille on muitakin käytäntöjä, kuten se, kun tieto kirjoitetaan välimuistiin ja järjestelmän päämuistiin. Näitä kutsutaan kirjoituskäytännöiksi ja suurin osa nykyisistä suorittimista käyttää kirjoituskäytäntöjä; tämä tarkoittaa sitä, että kun tiedot kirjoitetaan välimuistitasolle, on viive ennen kuin järjestelmämuisti päivittyy kopiolla siitä. Useimmiten tämä tauko kestää niin kauan kuin tiedot pysyvät välimuistissa — vain kun se on käynnistetty, RAM saa tiedot.

Nvidian GA100-grafiikkasuoritin, jossa on yhteensä 20 MB L1: tä ja 40 MB L2-välimuistia

prosessorisuunnittelijoille, välimuistin määrän, tyypin ja politiikan valinnassa on kyse halun suurempaan prosessorikykyyn tasapainottamisesta monimutkaistumista ja vaadittua tilaa vastaan. Jos se oli mahdollista olla 20 MB, 1000-way täysin assosiatiivinen tason 1 välimuistit ilman pelimerkkejä tulossa koko Manhattan (ja kuluttaa samanlaista valtaa), niin meillä kaikilla on Tietokoneet urheilu tällaisia pelimerkkejä!

nykyisten suorittimien alin kätkötaso ei ole juuri muuttunut viimeisen vuosikymmenen aikana. Tason 3 välimuistin koko on kuitenkin jatkanut kasvuaan. Vuosikymmen sitten, voit saada 12 MB sitä, jos olit onnekas tarpeeksi omistaa $999 Intel i7-980X. puolet siitä määrästä tänään, saat 64 MB.

Cache, pähkinänkuoressa: absolutely needed, absolutely awesome pieces of technology. Emme ole tarkastelleet muita välimuistityyppejä suorittimissa ja GPU: ssa (kuten käännöksen hakupuskurit tai tekstuurikätköt), mutta koska ne kaikki noudattavat yksinkertaista rakennetta ja tasoa, kuten olemme käsitelleet täällä, ne eivät ehkä kuulosta niin monimutkaisilta.

Omistitko tietokoneen, jonka emolevyllä oli L2-välimuisti? Entä ne kolikkopohjaiset Pentium II-ja Celeron-suorittimet (esim. 300A), jotka tulivat daughterboardiin? Muistatko ensimmäisen CPU, joka oli jaettu L3? Kerro meille kommenttiosiossa.

ostosten pikanäppäimet:
  • AMD Ryzen 9 3900X Amazonilla
  • AMD Ryzen 9 3950X Amazonilla
  • Intel Core i9-10900k Amazonilla
  • AMD Ryzen 7 3700X Amazonilla
  • Intel Core i7-10700k Amazonilla
  • AMD Ryzen 5 3600 Amazonilla
  • -10600k Amazonilla

Jatka lukemista. Selittäjät Techspotissa

  • Wi-Fi 6 selitti: seuraavan sukupolven Wi-Fi
  • Mitä ovat Tensoriytimet?
  • mikä on Chip Binning?