A mikroprocesszor -gyorsítótár egy gyorsítótár (szuper-szekunder memória), amelyet a számítógép mikroprocesszora használ a számítógép memóriájához való átlagos hozzáférési idő csökkentésére . Ez a memóriahierarchia egyik felső szintje [1] . A gyorsítótár kicsi, nagyon gyors memóriát használ (általában SRAM típusú ), amely a fő memóriából gyakran elért adatok másolatait tárolja. Ha a legtöbb memóriakérelmet a gyorsítótár dolgozza fel, az átlagos memóriaelérési késleltetés megközelíti a gyorsítótár késését.
Amikor a processzornak hozzá kell férnie a memóriához az adatok olvasásához vagy írásához, először ellenőrzi, hogy van-e másolat a gyorsítótárban. Ha az ellenőrzés sikeres, a processzor a gyorsítótár segítségével hajtja végre a műveletet, ami sokkal gyorsabb, mint a lassabb főmemória használata. A memória késleltetésével kapcsolatban lásd : SDRAM késleltetés : tCAS, tRCD, tRP, tRAS.
A gyorsítótár és a memória közötti adatok fix méretű blokkokban, más néven cache vonalakban vagy gyorsítótár blokkokban kerülnek átvitelre .
A legtöbb modern számítógépekhez és szerverekhez készült mikroprocesszor legalább három független gyorsítótárral rendelkezik: egy utasítás-gyorsítótár a gépi kód betöltésének felgyorsítására , egy adatgyorsítótár az adatok olvasásának és írásának felgyorsítására, valamint egy fordítási asszociatív puffer (TLB) a fordítás felgyorsítására. virtuális (logikai) címek fizikai címekké alakítása, például utasítások és adatok számára. Az adatgyorsítótárat gyakran réteges gyorsítótárként (L1, L2, L3, L4) valósítják meg.
A gyorsítótár méretének növelése szinte minden alkalmazás teljesítményére pozitív hatással lehet [2] , bár egyes esetekben a hatás elhanyagolható [3] . A cache memória munkája általában átlátható a programozó számára, azonban a hatékony használat érdekében bizonyos esetekben speciális algoritmikus technikákat alkalmaznak, amelyek megváltoztatják az adatok megkerülésének sorrendjét a RAM-ban, vagy növelik a lokalitásukat (például blokkmátrix szorzással ). ) [4] .
Ez a rész egy tipikus adatgyorsítótárat és néhány utasítás-gyorsítótár típust ír le; a fordítási asszociációs puffer (TLB) bonyolultabb lehet, de az utasítás-gyorsítótár egyszerűbb lehet. A jobb oldali diagram a fő és a gyorsítótárat mutatja. Minden sor memóriacellák egy csoportja, amelyek gyorsítótár-sorokba rendezett adatokat tartalmaznak . Az egyes gyorsítótársorok mérete processzoronként változhat, de a legtöbb x86-os processzornál 64 bájt. A gyorsítótár sor mérete általában nagyobb, mint az egyetlen gépi utasításból elérhető adatméret (tipikus méretek 1-16 bájt). A memóriában lévő, 1 gyorsítótár-sor méretű adatcsoportok sorozatszámmal rendelkeznek. A főmemória esetében ez a szám az a memóriacím, amelyben a legkisebb jelentőségű bitek vannak eldobva. Az egyes cache-sorok gyorsítótárában a címke is hozzá van rendelve , amely a fő memóriában ebben a gyorsítótár-sorban duplikált adatok címe.
Amikor a processzor hozzáfér a memóriához, először ellenőrzi, hogy a gyorsítótár tárolja-e a memóriából kért adatokat. Ehhez a kérés címét összehasonlítja az összes gyorsítótár-címke értékével, amelyben ezek az adatok tárolhatók. Bármely gyorsítótár sor címkéjével való egyezés esetét gyorsítótár találatnak ( angol cache hit ), az ellenkező esetet cache missnek ( angol cache miss ) nevezzük . A gyorsítótár találata lehetővé teszi a processzor számára, hogy az egyező címkével azonnal adatokat olvasson vagy írjon a gyorsítótár sorába. A gyorsítótár-találatok számának és a memóriakérések teljes számának arányát találati aránynak nevezzük , ez a gyorsítótár hatékonyságának mértéke a kiválasztott algoritmus vagy program esetében.
Hiány esetén a gyorsítótárban egy új bejegyzés kerül kiosztásra, amelynek címkéjébe az aktuális kérés címe kerül beírásra, és magában a gyorsítótár sorában - a memóriából az olvasás utáni adatok vagy a memóriába írandó adatok. Az olvasási hibák késleltetik a végrehajtást, mert a lassabb főmemóriában kell adatokat kérni. Az írási hiányosságok nem okozhatnak késleltetést, mivel az írandó adatok azonnal a gyorsítótárban tárolhatók, a főmemóriába írása pedig a háttérben történhet. Az utasítás-gyorsítótárak nagyjából ugyanúgy működnek, mint a fenti adatgyorsítótár-algoritmus, de csak az utasítások olvasási kérelmei vannak. Az utasítás- és adatgyorsítótárak szétválaszthatók a teljesítmény növelése érdekében (ez a Harvard architektúrában használatos elv ), vagy kombinálhatók a hardver megvalósításának egyszerűsítésére.
A gyorsítótár kihagyása utáni adatok hozzáadásához a gyorsítótárhoz szükség lehet a korábban írt adatok kiürítésére . A lecserélni kívánt gyorsítótár-sor kiválasztásához a helyettesítési irányelvnek nevezett heurisztika kerül felhasználásra . Az algoritmus fő problémája, hogy megjósolja, melyik sorra valószínűleg nincs szükség a következő műveletekhez. A minőségi előrejelzések összetettek, és a hardveres gyorsítótárak egyszerű szabályokat használnak, mint például az LRU . A memória bizonyos területeinek nem gyorsítótárazhatóként való megjelölése javítja a teljesítményt azáltal, hogy megakadályozza a ritkán használt adatok gyorsítótárazását . Az ilyen memória hiányai nem hoznak létre másolatokat a gyorsítótárban lévő adatokról.
Amikor adatokat ír a gyorsítótárba, meg kell adni egy bizonyos időpontot, amikor az adatok a fő memóriába kerülnek. Ezt az időt az írási szabályzat szabályozza . Átírási gyorsítótárak esetén a gyorsítótárba történő bármilyen írás azonnali írást eredményez a memóriába. Egy másik típusú gyorsítótár, visszaírás eng. visszaírás (néha másolás-visszaírásnak is nevezik ), elhalasztja az írást egy későbbi időpontra. Az ilyen gyorsítótáraknál a még memóriába nem ürített gyorsítótár-sorok állapotát figyelik (a „piszkos” bittel jelölve ) . dirty ). A memóriába írás akkor történik, amikor egy ilyen sort kiürítenek a gyorsítótárból. Így egy visszaírási házirendet használó gyorsítótár-kihagyáshoz két memória-hozzáférésre lehet szükség, az egyik a régi sor állapotának visszaállítására, a másik pedig az új adatok olvasására.
Vannak vegyes politikák is. A gyorsítótár átírható , de a buszon lebonyolított tranzakciók számának csökkentése érdekében az írások ideiglenesen sorba helyezhetők és összevonhatók egymással.
A főmemóriában lévő adatokat nem csak a processzor, hanem a közvetlen memóriaelérést használó perifériák , vagy többprocesszoros rendszerben más processzorok is módosíthatják. Az adatok megváltoztatásával a gyorsítótárban lévő másolat elavulttá válik (az elavult állapot ). Egy másik megvalósításban, amikor az egyik processzor módosítja a gyorsítótárban lévő adatokat, a többi processzor gyorsítótárában lévő adatok másolatai elavultként lesznek megjelölve. A több gyorsítótár tartalmának naprakészen tartása érdekében egy speciális koherencia protokollt használnak .
Tipikus gyorsítótár-beviteli struktúra
Adatblokk | címke | egy kis relevancia |
Az adatblokk (cache sor) a fő memóriából származó adatok közvetlen másolatát tartalmazza. A friss bit azt jelenti, hogy ez a bejegyzés egy naprakész (legutóbbi) másolatot tartalmaz.
Címstruktúra
címke | index | Elfogultság |
A memóriacím fel van osztva (a magas bitektől az alacsony bitekig) Címkére, indexre és eltolásra . Az indexmező hossza bit, és az íráshoz használt gyorsítótár sorának (sorának) felel meg. Az eltolás hossza .
Az asszociativitás kompromisszum. Több rekord ellenőrzése több energiát, chip területet és potenciálisan időt igényel. Ha 10 hely lenne, ahol a kilakoltatási algoritmus le tudna térképezni egy memóriahelyet, akkor a gyorsítótár helyének ellenőrzéséhez 10 gyorsítótárbejegyzést kellene megnézni. Másrészt a nagy asszociativitással rendelkező gyorsítótárak kevesebb kihagyásnak vannak kitéve (lásd alább az "ütköző hiányosságokat"), és a processzor kevesebb időt tölt a lassú főmemóriából való olvasással. Egy empirikus megfigyelés szerint az asszociativitás megkétszerezése (közvetlen leképezésről 2-csatornásra vagy 2-ről 4-csatornára) körülbelül ugyanolyan hatással van a találati arányra , mint a gyorsítótár méretének megkétszerezése. Az asszociativitás 4 csatornán keresztüli növelése csekély hatással van a kihagyási arány csökkentésére , és általában más okok miatt történik, például a virtuális címek metszéspontja miatt.
Rosszabb (a találati ellenőrzés időtartamának növelése) és javulás (kihagyások számának csökkentése) sorrendjében:
Elmulasztott olvasás az utasítás gyorsítótárból. Általában nagyon hosszú késleltetést ad, mert a processzor nem tudja folytatni a program végrehajtását (legalábbis az aktuális végrehajtási szálat), és tétlenül kell várnia, amíg az utasítás betöltődik a memóriából.
Elmulasztott olvasás az adatgyorsítótárból. Általában kevesebb késleltetést ad, mivel azok az utasítások, amelyek nem függnek a kért adatoktól, továbbra is végrehajthatók, amíg a kérés feldolgozása folyamatban van a fő memóriában. Miután megkapta az adatokat a memóriából, folytathatja a függő utasítások végrehajtását.
Az adatgyorsítótár írási hiánya. Általában ez adja a legkevesebb késleltetést, mivel az írást sorba lehet helyezni, és a későbbi utasítások lehetőségei gyakorlatilag korlátlanok. A processzor folytathatja munkáját, kivéve a teljes sorban állás esetén bekövetkező írási hiányosságot.
A legtöbb általános célú processzor megvalósít valamilyen virtuális memóriát . Röviden, minden gépen futó program látja a saját egyszerűsített címterét, amely csak az adott program kódját és adatait tartalmazza. Bármely program saját virtuális címterét használja, függetlenül a fizikai memóriában elfoglalt helyétől.
A virtuális memória jelenléte megköveteli, hogy a processzor a program által használt virtuális (matematikai) címeket a RAM-ban lévő valós helynek megfelelő fizikai címekké alakítsa. A processzor azon részét, amely ezt az átalakítást végzi, memóriakezelő egységnek (MMU) nevezik. A fordítások felgyorsítása érdekében a közelmúltban használt leképezések (a virtuális és fizikai címek megfelelésének) gyorsítótárát a Translation Lookaside Buffer (TLB) néven hozzáadták az MMU-hoz.
A címfordítási folyamat három jellemzője fontos a további leíráshoz:
Fontos megjegyezni azt is, hogy a korai virtuális memória rendszerek nagyon lassúak voltak, mivel a (fő RAM-ban tárolt) oldaltáblázatot ellenőrizni kellett, mielőtt bármilyen programmemória-hozzáférést végrehajtottak. A leképezések gyorsítótárazása nélkül az ilyen rendszerek körülbelül kétszeresére csökkentik a memóriával való munka sebességét. Ezért a TLB használata nagyon fontos, és néha a processzorokhoz való hozzáadása megelőzte a hagyományos adat- és utasítás-gyorsítótárak megjelenését.
A virtuális címzés kapcsán az adat- és utasításgyorsítótárak 4 típusra oszthatók. A gyorsítótárban lévő címeket két különböző célra használják: indexelésre és címkézésre.
Ezeknek a műveleteknek a sebessége (a memóriából történő késleltetés) kritikus a processzor teljesítménye szempontjából, ezért a legtöbb modern L1 gyorsítótár gyakorlatilag indexelve van, ami legalább lehetővé teszi az MMU számára, hogy lekérdezze a TLB-t a gyorsítótárból való adatkéréssel egy időben.
A virtuális indexelés azonban nem a legjobb választás a gyorsítótár más szintjeihez. A virtuális címek metszéspontjainak (aliasing) észlelésének költsége a gyorsítótár méretével nő, és ennek eredményeként az L2 és további gyorsítótárszintek legtöbb megvalósítása fizikai címindexelést használ.
A gyorsítótárak meglehetősen hosszú ideig mind fizikai, mind virtuális címeket használtak a címkékhez, bár a virtuális címkézés manapság nagyon ritka. Ha a TLB-kérés a gyorsítótár-kérés előtt véget ér, a fizikai cím elérhető lesz a címkével való összehasonlításhoz, mire szükség van rá, ezért nincs szükség virtuális címkézésre. A nagy gyorsítótárak gyakrabban vannak címkézve fizikai címekkel, és csak a kis, gyors gyorsítótárak használnak virtuális címeket a címkékhez. A modern általános célú processzorokban a virtuális címkézést az alábbiakban ismertetett vhint mechanizmus váltotta fel.
Virtuális indexelés és virtuális címek metszéspontjai A homonimák és szinonimák problémája OldalszínezésA legtöbb modern processzor több kölcsönható gyorsítótárat tartalmaz.
Speciális gyorsítótárakA szuperskaláris CPU-k a folyamat több szakaszából érik el a memóriát : utasítást olvasnak (utasításlehívás), virtuális címeket fordítanak le fizikai címekre, adatokat olvasnak (adatlehívás). A kézenfekvő megoldás az, hogy ezekhez az esetekhez különböző fizikai gyorsítótárakat használnak, így nincs vita a folyamat különböző szakaszaiból származó fizikai erőforrások egyikéhez való hozzáférésért. Így a folyamat általában legalább három különálló gyorsítótárat eredményez: egy utasítás-gyorsítótárat, egy TLB -fordítási gyorsítótárat és egy adatgyorsítótárat, amelyek mindegyike más-más feladatra specializálódott.
Az adatokhoz és utasításokhoz külön gyorsítótárat használó csővezetékes processzorokat (az ilyen processzorok ma már mindenütt jelen vannak) Harvard architektúrájú processzoroknak nevezik . Kezdetben ezt a kifejezést olyan számítógépekre használták, amelyekben az utasításokat és az adatokat teljesen elválasztják egymástól, és különböző memóriaeszközökön tárolják. Az ilyen teljes szétválasztás azonban nem bizonyult népszerűnek, és a legtöbb modern számítógép egyetlen fő memóriaeszközzel rendelkezik, így a Neumann architektúrájú gépeknek tekinthetők .
Többszintű gyorsítótárakAz egyik probléma a gyorsítótár késésének és a találati arány egyensúlyának alapvető problémája. A nagyobb gyorsítótárak találati aránya magasabb, de a késleltetésük is nagyobb. A kettő közötti feszültség enyhítése érdekében a legtöbb számítógép több szintű gyorsítótárat használ, amikor a kis és gyors gyorsítótárakat lassabb, nagy gyorsítótárak követik (jelenleg legfeljebb 3 szint a gyorsítótár-hierarchiában).
Elszigetelt esetekben 4 cache szintet valósítanak meg [6] [7] .
A réteges gyorsítótárak általában sorban működnek a kisebb gyorsítótáraktól a nagyobbakig. Először az első szint (L1) legkisebb és leggyorsabb gyorsítótárát ellenőrzik, találat esetén a processzor nagy sebességgel dolgozik tovább. Ha a kisebb gyorsítótár hiányzik, a következő, valamivel nagyobb és lassabb második szintű (L2) gyorsítótár kerül ellenőrzésre, és így tovább, amíg nem érkezik kérés a fő RAM-hoz.
Ahogy a RAM és a leggyorsabb gyorsítótár közötti késleltetési különbség növekszik, egyes processzorok növelik a gyorsítótárszintek számát (egyes esetekben akár 3 szint is egy chipen). Például az Alpha 21164 processzor 1995-ben 96 kB-os L3 gyorsítótárral rendelkezett; Az IBM POWER4 2001-ben akár négy 32 MB-os L3 gyorsítótárral [8] rendelkezett különálló lemezeken, amelyeket több mag osztott meg; A 2003-as Itanium 2 -ben 6 MB L3 gyorsítótár volt a chipen; Xeon MP kód "Tulsa" 2006-ban - 16 MB L3 gyorsítótár a chipen, 2 mag osztja meg; Phenom II 2008-ban - akár 6 MB univerzális L3 gyorsítótár; Intel Core i7 2008-ban – 8 MB chipen belüli L3 gyorsítótár, amely magában foglalja és megosztva az összes mag között. Az L3 gyorsítótár hasznossága a program memóriaeléréseinek természetétől függ.
Végül a memóriahierarchia másik oldalán található magának a mikroprocesszornak a regiszterfájlja , amely a rendszer legkisebb és leggyorsabb gyorsítótárának tekinthető speciális tulajdonságokkal (például statikus ütemezés a fordító által a regiszterek lefoglalásakor, amikor lefoglalja adatok a RAM-ból egy regiszterbe). A részletekért lásd a hurokfészek optimalizálását . A regiszterfájlok hierarchikusak is lehetnek: a Cray-1 (1976-ban) 8 "A" címregiszterrel és 8 általános célú skalár "S" regiszterrel rendelkezett . A gép egy 64 "B" címből és 64 skaláris "T" regiszterből álló készletet is tartalmazott, amelyek elérése hosszabb ideig tartott, de így is lényegesen gyorsabban, mint a fő RAM. Ezeket a regisztereket a gép adatgyorsítótárának hiánya miatt vezették be (bár volt a gépben utasítás-gyorsítótár)
A többszintű gyorsítótárak új építészeti megoldásokat igényelnek.
Például egyes processzorok megkövetelhetik, hogy az L1 gyorsítótárban tárolt összes adatot az L2 gyorsítótárban is tárolják. Az ilyen gyorsítótárpárokat szigorúan inkluzívnak nevezzük . Más processzorok (például AMD Athlon) nem rendelkeznek ilyen előírással, akkor a gyorsítótárakat kizárólagosnak (exkluzívnak) nevezik - az adatok lehetnek L1 vagy L2 gyorsítótárban, de soha nem lehetnek mindkettőben egyszerre.
Eddig más processzorok (például a Pentium II, Pentium III és Pentium 4) nem követelték meg, hogy az első szintű gyorsítótár adatait a második szintű gyorsítótárban is elhelyezzék, azonban továbbra is ezt teszik. Ennek a köztes politikának nincs általánosan elfogadott neve, bár gyakran használják a főként befogadó kifejezést .
Az exkluzív gyorsítótárak előnye, hogy több adatot tárolnak. Ez az előny nagyobb, ha a kizárólagos L1 gyorsítótár mérete összemérhető az L2 gyorsítótáréval, és kisebb, ha az L2 gyorsítótár sokszorosa az L1 gyorsítótárénak. Amikor az L1 kihagy, és az L2 hozzáfér egy találathoz, az L2-ben található találati gyorsítótár sora felcserélődik az L1-ben lévő sorral.
Áldozat gyorsítótárAz áldozati gyorsítótár vagy az áldozati puffer [9] ) (szó szerint Victim cache) egy kis speciális gyorsítótár, amely azokat a gyorsítótár-sorokat tárolja, amelyek a közelmúltban kikerültek a fő mikroprocesszor gyorsítótárából, amikor lecserélték őket. Ez a gyorsítótár a fő gyorsítótár és az angol nyelv között található. utántöltő út . Az áldozat gyorsítótár általában teljesen asszociatív, és a konfliktuskihagyások számának csökkentését szolgálja. Sok gyakran használt program nem igényel teljes asszociatív leképezést minden memória-hozzáférési kísérlethez. Statisztikailag a memóriaeléréseknek csak kis hányada igényel nagyfokú asszociativitást. Az ilyen kérésekhez az áldozat gyorsítótárat használják, amely magas asszociativitást biztosít az ilyen ritka kérések számára. Norman Jouppi (DEC) javasolta 1990-ben [10] . Egy ilyen gyorsítótár mérete 4 és 16 gyorsítótár-sor között változhat [11] .
Nyomkövetési gyorsítótárA gyorsítótár-specializáció egyik legszélsőségesebb esete az Intel Pentium 4 processzorokban használt nyomkövetési gyorsítótár . A nyomkövetési gyorsítótár egy olyan mechanizmus, amely növeli az utasításterhelés átvitelét és csökkenti a hőleadást (a Pentium 4 esetében) a dekódolt utasításnyomok tárolásával. Így ez a gyorsítótár megszüntette a dekódoló munkáját a nemrég végrehajtott kód újrafuttatása során.
A nyomkövetési gyorsítótárakról szóló egyik legkorábbi publikáció egy szerzőcsoport ( Eric Rotenberg , Steve Bennett és Jim Smith ) 1996-os tanulmánya volt, melynek címe : "Trace Cache: a Low Latency Approach to High Bandwidth Instruction Fetching". (Nyomkövetési gyorsítótár: Alacsony késleltetésű megközelítés nagy áteresztőképességű betöltési utasításokhoz).
A nyomkövetési gyorsítótár a dekódolt utasításokat dekódolásuk vagy végrehajtásuk után tárolja. Az utasítások általában olyan csoportokban kerülnek hozzáadásra a nyomkövetési gyorsítótárhoz, amelyek vagy alapvető blokkok vagy dinamikus nyomkövetések. A dinamikus nyomkövetés (végrehajtási útvonal) csak olyan utasításokból áll, amelyek eredményei jelentősek voltak (később felhasználták), és eltávolítja azokat az utasításokat, amelyek nem végrehajtó ágakban vannak, emellett egy dinamikus nyomkövetés több alapblokk uniója is lehet. Ez a funkció lehetővé teszi, hogy a processzor utasításbetöltője egyszerre több alapvető blokkot töltsön be anélkül, hogy aggódnia kellene a végrehajtási szálban lévő ágak miatt.
A nyomkövetési vonalak a nyomkövetési gyorsítótárban vannak tárolva a nyomkövetésből származó első gépi utasítás utasításszámlálójának megfelelő címeken, amelyhez egy sor elágazás előrejelzési szolgáltatást adtunk. Ez a címzés lehetővé teszi különböző végrehajtási nyomok tárolását, amelyek ugyanarról a címről indulnak, de az elágazás előrejelzése következtében eltérő helyzeteket képviselnek. Az utasításfolyamat utasításlekérési szakaszában mind az aktuális utasításszámláló (programszámláló), mind az elágazás-előrejelző állapota használatos annak ellenőrzésére, hogy vannak-e nyomok a gyorsítótárban. Ha találat történik, a nyomkövetési vonal közvetlenül a folyamatba kerül a normál (L2) gyorsítótár vagy a fő RAM lekérdezése nélkül. A nyomkövetési gyorsítótár a gépi utasításokat továbbítja a folyamat bemenetéhez, amíg a nyomkövetési vonal el nem fogy, vagy amíg előrejelzési hiba nem történik a folyamatban. Hiány esetén a nyomkövetési gyorsítótár elkezdi felépíteni a következő nyomkövetési sort a gépi kód betöltésével a gyorsítótárból vagy a memóriából.
Hasonló nyomkövetési gyorsítótárakat használtak a Pentium 4-ben a dekódolt mikroműveletek és az összetett x86-os utasításokat megvalósító mikrokód tárolására. Smith, Rotenberg és Bennett tanulmánya A teljes szövegért lásd a Citeseer -t .
A mikroprocesszoros technológia korai napjaiban a memória-hozzáférés csak valamivel volt lassabb, mint a processzorregiszterhez való hozzáférés. Ám az 1980-as évek [12] óta a processzorok és a memória közötti teljesítménykülönbség tovább nőtt. A mikroprocesszorok gyorsabban fejlődtek, mint a memória, különösen a működési gyakoriság tekintetében, így a memória a szűk keresztmetszet lett a rendszer teljes teljesítményének elérésében. Bár technikailag lehetséges volt egy olyan gyors főmemória, mint a CPU, egy gazdaságosabb utat választottak: túl sok kis sebességű memóriát használtak, de egy kicsi, de gyors gyorsítótárat vezettek be a rendszerbe, hogy csökkentsék a teljesítménybeli különbségeket. Ennek eredményeként egy nagyságrenddel nagyobb mennyiségű memóriát kaptunk, körülbelül azonos áron és kis teljesítményveszteséggel.
Az adatok gyorsítótárból való kiolvasása a modern processzorok esetében általában több órajelet vesz igénybe. A programok végrehajtási ideje érzékeny az első szintű adatgyorsítótárból történő olvasási késésekre. A fejlesztők sok erőfeszítését, valamint a kristály teljesítményét és területét a processzor létrehozásakor fordítják a gyorsítótárak működésének felgyorsítására.
A legegyszerűbb gyorsítótár egy gyakorlatilag indexelt, közvetlen leképezésű gyorsítótár. A virtuális cím kiszámítása akkumulátor segítségével történik, a cím megfelelő része kiosztásra kerül, és a letöltött adatokat visszaadó SRAM indexelésére használja. Az adatok byte-hoz igazíthatók egy byte shifterben, majd továbbíthatók a következő művelethez. Ezzel az olvasással nincs szükség címkeellenőrzésre, sőt, még a címkét sem kell olvasni. A folyamat későbbi szakaszában, mielőtt az olvasási utasítás végrehajtása befejeződik, a címkét be kell olvasni, és össze kell hasonlítani a virtuális címmel, hogy ellenőrizzük, történt-e gyorsítótár-találat. Hiány esetén a memóriából való olvasás vagy lassabb gyorsítótár szükséges, a kérdéses gyorsítótár további frissítése és a folyamat újraindítása.
Az asszociatív gyorsítótár összetettebb, mivel a címke néhány változatát be kell olvasni annak meghatározásához, hogy a gyorsítótár melyik részét kell kiválasztani. Az első szintű N-utas készlet-asszociatív gyorsítótár jellemzően az összes N lehetséges címkét egyszerre és N adatot párhuzamosan olvas be, majd összehasonlítja a címkéket a címmel, és kiválasztja az egyező címkéhez társított adatokat. A 2. szintű gyorsítótárak az energiatakarékosság érdekében néha először a címkéket olvassák be, és csak azután olvassanak el egy adatelemet az SRAM-adatokból.
A jobb oldali diagramnak meg kell mutatnia, hogyan használják a cím különböző részeit. A cím 31. bitje a legjelentősebb bit (legszignifikánsabb), a 0. bit a legkisebb jelentőségű bit (legkevésbé jelentős). A diagram két SRAM-ot mutat, indexelést és multiplexelést egy 4 kB-os, 2-utas halmazasszociatív, virtuális indexelt és virtuális címkézett gyorsítótárhoz, 64 bájtos blokkokkal, 32 bites olvasási szélességgel és 32 bites virtuális címmel.
Mivel a gyorsítótár 4 KB, a sorok pedig 64 bájtosak, 64 sort tárol, és kétszer számolhatunk az SRAM címkéből, amely 32 oszlopot tartalmaz, amelyek mindegyike egy pár 21 bites címkét tartalmaz. Bár a 31–6. bitek bármely virtuális címzési funkciója használható a címke és az SRAM adatok indexelésére, a legkevésbé jelentős bitek a legkönnyebben használhatók. Továbbá, mivel a gyorsítótár 4 KB, négy bájtos olvasási útvonallal és hozzáférésenként két olvasási útvonallal rendelkezik, az SRAM adatok 512 sor 8 bájt szélesek.
Egy modernebb gyorsítótár valószínűleg 16 KB-s, 4 utas, set-asszociatív, virtuális indexelt, virtuálisan eltalált és fizikailag címkézett (tag), 32 bites vonalakkal, 32 bites olvasási buszszélességgel és 36 bites fizikai címzéssel. Az ilyen gyorsítótár olvasási útvonalának ismétlődése nagyon hasonlít a fent tárgyaltakhoz. A virtuális találatokat olvassák a címkék helyett ? ( angol vhits ), és ismét a részhalmazt a virtuális címhez illesztjük. Később a folyamat során a virtuális címet lefordítják a TLB fizikai címére, és beolvassák a fizikai címkét (csak egyet, mivel a virtuális találat biztosítja a gyorsítótár olvasási útvonalát). Végül a fizikai címet összehasonlítja a fizikai címkével, hogy megállapítsa, történt-e találat.
Egyes SPARC processzorok L1 gyorsítótárait több kapukésleltetés gyorsította fel SRAM dekóderek használatával virtuális címösszeadó helyett. A részletekért lásd az en:Sum addressed dekóder című részt .
Amikor az x86 -os mikroprocesszorok elérték a 20 megahertzes vagy annál nagyobb frekvenciát (az Intel 80386 -tól kezdve ), a teljesítmény növelése érdekében kis mennyiségű gyors gyorsítótárat adtak hozzá. Erre azért volt szükség, mert a rendszer-RAM-ként használt DRAM jelentős késéseket (akár 120 ns-t) tartalmazott, és frissítési ciklusokat igényelt. A gyorsítótár a drágább, de sokkal gyorsabb SRAM köré épült , amely akkoriban 15-20ns-os késleltetéssel rendelkezett. A korai gyorsítótárak a processzoron kívül voltak, és gyakran az alaplapon helyezkedtek el 8 vagy 9 chip formájában, DIP -csomagokban , aljzatokba rendezve, hogy lehetővé tegyék a gyorsítótár növekedését vagy csökkenését. Az I386 processzor egyes verziói 16-64 KB külső gyorsítótárat támogatnak [13] .
Az Intel 80486 processzor kiadásával 8 kB gyorsítótár került beépítésre közvetlenül a mikroprocesszor szerszámba. Ezt a gyorsítótárat L1-nek (első szint, angol 1. szint ) nevezték el, hogy megkülönböztessék a lassabb, L2 nevű alaplapi gyorsítótártól (második szint, angol 2. szint ). Az utóbbiak sokkal nagyobbak voltak, akár 256 kB-ig.
A jövőben a gyorsítótár-leválasztás esetei csak marketingpolitikai megfontolások alapján történtek, például a Pentium II magra épülő Celeron mikroprocesszorban .
A Pentium mikroprocesszor külön gyorsítótárat, utasításokat és adatokat használ [14] . Az Address Translation Buffer (TLB) a RAM-ban lévő címet a gyorsítótárban lévő megfelelő címre fordítja. A Pentium adatgyorsítótár a visszaírási módszert használja , amely lehetővé teszi a gyorsítótárban lévő adatok módosítását a RAM-hoz való további hozzáférés nélkül (az adatok csak akkor íródnak a RAM-ba, ha eltávolítják a gyorsítótárból) és a MESI protokollt (Módosított, Exclusive, Shared, Invalid) , amely biztosítja az adatok koherenciáját a processzor gyorsítótáraiban és a RAM-ban, ha többprocesszoros rendszerben dolgozik.
A Pentium MMX mikroprocesszor különálló gyorsítótárai, adatai és utasításai 16 kB méretűek, és két portot tartalmaznak, egyet minden végrehajtási folyamathoz. Az adatgyorsítótár címfordító pufferrel (TLB) rendelkezik.
A gyorsítótárak következő megvalósítása x86-ban a Pentium Pro -ban jelent meg, amelyben a második szintű gyorsítótár (az adatokhoz és parancsokhoz kombinálva, 256-512 kB méretű) egy csomagban van elhelyezve a processzorral és az első szintű gyorsítótárral, 8 kB méretű, külön az adatokhoz és a parancsokhoz, frekvenciáját pedig a magfrekvenciára emelte. Később a második szintű gyorsítótár ugyanazon a chipen kezdett elhelyezkedni, mint a processzor.
A Dual Independent Bus egy új gyorsítótár-architektúra, amely különböző buszokat használ a processzormag és a fő RAM összekapcsolására. Az L1 gyorsítótár kétportos, nem blokkoló, és óránként egy betöltési és egy írási műveletet támogat. A processzor órajelén fut. Ciklusonként 64 bit kerül átvitelre.
A Pentium II mikroprocesszorban megnövelték az első szintű gyorsítótárat – 16 KB az adatok és 16 KB az utasítások számára. A második szintű gyorsítótárhoz BSRAM-ot használnak, amely ugyanazon a kártyán található, mint a processzor a SEC kazettában az 1. bővítőhelybe való telepítéshez .
A többmagos processzorok növekvő népszerűségével harmadik szintű gyorsítótárak, az L3 néven kezdték hozzáadni a chipet. Ez a gyorsítótárszint megosztható több mag között, és hatékony kommunikációt tesz lehetővé a magok között. Kötete általában nagyobb, mint a hozzá csatlakoztatott összes mag teljes gyorsítótár mérete, és elérheti a 16 MB-ot.
Az alaplapi gyorsítótár a Pentium MMX korszakáig népszerű maradt , és az SDRAM bevezetésével, valamint a processzorbusz-frekvencia és a processzormag-frekvencia közötti növekvő különbséggel megszűnt: az alaplap gyorsítótára alig lett gyorsabb, mint a fő RAM.
Példa gyorsítótárra (K8 processzormag)
Megjelenik az AMD K8 mikroprocesszor mag gyorsítótárainak sémája, amely bemutatja a speciális gyorsítótárakat és azok többszintű jellegét.
A kernel négy különböző speciális gyorsítótárat használ: utasítás-gyorsítótár, utasítás-TLB, adat-TLB és adatgyorsítótár:
Ez a mag többszintű gyorsítótárakat is használ: kétszintű utasítás- és adat-TLB-ket (a második szinten csak a 4 KB-os leképezések rekordjai tárolódnak), valamint egy második szintű gyorsítótárat (L2), amely egységesen működik az adatokkal és az utasításokkal is. az 1. szintű gyorsítótárak és a különböző TLB-k számára. Az L2 gyorsítótár kizárólag az L1 adatokra és az L1 utasításokra vonatkozik, azaz minden gyorsítótárazott 8 bájtos csonk lehet L1 utasításokban, L1 adatokban vagy L2 utasításokban. Az egyetlen kivétel a PTE rekordokat alkotó bájtok, amelyek az operációs rendszer virtuális leképezési feldolgozása során egyszerre lehetnek a TLB-ben és az adatgyorsítótárban. Ilyen esetben az operációs rendszer felelős a TLB azonnali visszaállításáért a fordítási bejegyzések frissítése után.
A DEC Alpha 21164 mikroprocesszorban (amely 1995 novemberében jelent meg 333 MHz-en) az első szintű gyorsítótár számos (legfeljebb 21) kezeletlen kihagyást képes támogatni. Létezik egy hat elemből álló nyers hiányzó címfájl (MAF ), minden elem tartalmaz egy címet és egy regisztert, hogy betölthető legyen a hiányosság (ha a hiányzó címek ugyanahhoz a gyorsítótár-sorhoz tartoznak, a MAF egy elemként kezeli őket).
A processzorchip a külön írási L1 gyorsítótárak mellett tartalmaz egy részben asszociatív visszaíró L2 gyorsítótárat és egy L3 cache vezérlőt, amely szinkron és aszinkron módban is működik.
Az 1997. márciusi DEC Alpha 21164PC külső L2 gyorsítótárral rendelkezik; Az utasítás-gyorsítótár mérete 16 KB-ra nőtt.
A DEC Alpha 21264 mikroprocesszor nem rendelkezik második szintű gyorsítótárral (amelynek vezérlője ennek ellenére chipen található), de az első szintű gyorsítótár 128 kB-ra nőtt (az utasítás-gyorsítótár és az adatgyorsítótár esetében egyenként 64 kB). ).
A tudományos és mérnöki számítástechnikai Hewlett-Packard PA-8000 egy cím-átrendezési puffert ( ARB ) tartalmaz, amely nyomon követi az összes betöltési/tárolási parancsot, ami csökkenti a külső adatok és az utasítás-gyorsítótár címzésének késleltetését, amely ebben a processzorban felfelé ívelhető. 4 MB-ig. Azonban még a külső gyorsítótár nagysebességű vezérlővonalakkal, valamint a fő memóriából a gyorsítótárba történő előzetes letöltésével és a parancsok hatékony vezérlése sem kompenzálta az alacsony sebességet és a magas költségeket.
Ezeket a hiányosságokat kiküszöbölték a PA-8500-ban, amelyben a 0,25 mikronos folyamattechnológiának köszönhetően 512 kB utasítás-gyorsítótárral és 1 MB adatgyorsítótárral lehetett a chipet hozzáadni.
A Harvard architektúrára épülő PowerPC 620 két beépített gyorsítótárat tartalmaz, egyenként 32 kB kapacitással, amelyek saját memóriakezelő egységgel ( MMU ) rendelkeznek, és egymástól függetlenül működnek . A parancsok és az ágak címei a BTAC gyorsítótárban (Banch -Target Address Cache ) vannak tárolva .
A processzor busz interfésze tartalmazza az L2 gyorsítótár támogatás teljes megvalósítását (128 MB-ig, a processzor frekvenciáján vagy kétszer/négyszer kevesebben fut), és nem igényel további ciklusokat a külső gyorsítótár működésének vezérléséhez. Az áthárítás és a visszaírás kombinációja, valamint a MESI protokoll támogatása valósul meg.
Az RA-10000-ben használt L1 gyorsítótárnak megvannak a maga sajátosságai - a gyorsítótárban lévő minden parancs egy további négybites címkével van ellátva, amelyet a parancs további dekódolásához és osztályozásához használnak.
processzortechnológiák | Digitális|||||||||
---|---|---|---|---|---|---|---|---|---|
Építészet | |||||||||
Instruction Set Architecture | |||||||||
gépszó | |||||||||
Párhuzamosság |
| ||||||||
Megvalósítások | |||||||||
Alkatrészek | |||||||||
Energiagazdálkodás |