Mezipaměť mikroprocesoru je mezipaměť (supersekundární paměť), kterou používá počítačový mikroprocesor ke snížení průměrné doby přístupu do paměti počítače . Je to jedna z vyšších úrovní hierarchie paměti [1] . Mezipaměť používá malou, velmi rychlou paměť (obvykle typu SRAM ), která ukládá kopie často používaných dat z hlavní paměti. Pokud je většina požadavků na paměť zpracována mezipamětí, průměrná latence přístupu do paměti se přiblíží latenci mezipaměti.
Když procesor potřebuje získat přístup k paměti, aby mohl číst nebo zapisovat data, nejprve zkontroluje, zda je v mezipaměti dostupná kopie. Pokud je kontrola úspěšná, procesor provede operaci pomocí mezipaměti, což je mnohem rychlejší než použití pomalejší hlavní paměti. Další informace o latenci paměti naleznete v části Latence SDRAM : tCAS, tRCD, tRP, tRAS.
Data mezi mezipamětí a pamětí se přenášejí v blocích s pevnou velikostí, nazývaných také mezipaměti nebo bloky mezipaměti .
Většina moderních mikroprocesorů pro počítače a servery má alespoň tři nezávislé mezipaměti: mezipaměť instrukcí pro urychlení načítání strojového kódu , datovou mezipaměť pro urychlení čtení a zápisu dat a překladovou asociativní vyrovnávací paměť (TLB) pro urychlení překladu. virtuálních (logických) adres na fyzické, jak pro instrukce, tak pro data. Datová mezipaměť je často implementována jako vrstvená mezipaměť (L1, L2, L3, L4).
Zvětšení velikosti cache může mít pozitivní vliv na výkon téměř všech aplikací [2] , i když v některých případech je efekt zanedbatelný [3] . Práce cache paměti je pro programátora obvykle transparentní, nicméně pro její efektivní využití se v některých případech používají speciální algoritmické techniky, které mění pořadí obcházení dat v RAM nebo zvyšují jejich lokalizaci (například násobením blokové matice ) [4] .
Tato část popisuje typickou mezipaměť dat a některé typy mezipaměti instrukcí; překladová asociační vyrovnávací paměť (TLB) může být složitější, ale mezipaměť instrukcí může být jednodušší. Diagram vpravo ukazuje hlavní a vyrovnávací paměť. Každý řádek je skupina paměťových buněk obsahujících data uspořádaná do řádků mezipaměti . Velikost každého řádku mezipaměti se může lišit procesor od procesoru, ale u většiny procesorů x86 je to 64 bajtů. Velikost řádku mezipaměti je obvykle větší než velikost dat, ke kterým lze přistupovat z jediné strojové instrukce (typické velikosti jsou od 1 do 16 bajtů). Každá skupina dat v paměti o velikosti 1 řádku cache má pořadové číslo. Pro hlavní paměť je toto číslo adresa paměti s nejméně významnými vyřazenými bity. V mezipaměti každého řádku mezipaměti je navíc přiřazen tag , což je adresa dat duplikovaných v tomto řádku mezipaměti v hlavní paměti.
Když procesor přistupuje k paměti, nejprve zkontroluje, zda mezipaměť ukládá data požadovaná z paměti. Za tímto účelem je adresa požadavku porovnána s hodnotami všech značek mezipaměti, ve kterých mohou být tato data uložena. Případ shody s tagem libovolného řádku cache se nazývá cache hit ( anglicky cache hit ), opačný případ se nazývá cache miss ( anglicky cache miss ). Zásah do mezipaměti umožňuje procesoru okamžitě číst nebo zapisovat data do řádku mezipaměti s odpovídajícím tagem. Poměr počtu zásahů do mezipaměti k celkovému počtu požadavků na paměť se nazývá četnost zásahů , je to míra účinnosti mezipaměti pro vybraný algoritmus nebo program.
V případě miss je v cache přidělen nový záznam, v jehož tagu je zapsána adresa aktuálního požadavku, a v samotném řádku cache - data z paměti po přečtení nebo data k zápisu do paměti. Čtení zmešká zpoždění provedení, protože vyžadují, aby data byla požadována v pomalejší hlavní paměti. Chyby při zápisu nemusí způsobit zpoždění, protože zapisovaná data lze okamžitě uložit do mezipaměti a jejich zápis do hlavní paměti lze provést na pozadí. Mezipaměti instrukcí fungují v podstatě stejným způsobem jako výše uvedený algoritmus mezipaměti dat, ale pro instrukce se vydávají pouze požadavky na čtení. Instrukční a datové mezipaměti mohou být odděleny pro zvýšení výkonu (princip používaný v architektuře Harvard ) nebo zkombinovány pro zjednodušení hardwarové implementace.
Chcete-li přidat data do mezipaměti po chybě mezipaměti, může být nutné odstranit dříve zapsaná data . K výběru řádku mezipaměti, který má být nahrazen, se používá heuristika nazvaná nahrazení politika . Hlavním problémem algoritmu je předpovědět, který řádek s největší pravděpodobností nebude pro následné operace potřeba. Kvalitativní předpovědi jsou složité a hardwarové mezipaměti používají jednoduchá pravidla, jako je LRU . Označení určitých oblastí paměti jako neuložitelných do mezipaměti zlepšuje výkon tím, že zabraňuje ukládání do mezipaměti zřídka používaných dat . Chyby pro takovou paměť nevytvářejí kopie dat v mezipaměti.
Při zápisu dat do mezipaměti musí existovat určitý časový okamžik, kdy budou zapsána do hlavní paměti. Tento čas je řízen zásadou zápisu . V případě mezipaměti pro zápis má jakýkoli zápis do mezipaměti za následek okamžitý zápis do paměti. Další typ keší, zpětný zápis eng. zpětný zápis (někdy také nazývaný copy-back ), odkládá zápis na pozdější dobu. V takových cache je sledován stav cache řádků, které ještě nebyly vyprázdněny do paměti (označené bitem “dirty” ) . dirty ). Zápis do paměti se provádí, když je taková linka vyřazena z mezipaměti. Chybějící vyrovnávací paměť pomocí zásady zpětného zápisu tedy může vyžadovat dva přístupy do paměti, jeden pro resetování stavu starého řádku a jeden pro čtení nových dat.
Existují také smíšené politiky. Mezipaměť lze zapisovat , ale pro snížení počtu transakcí na sběrnici mohou být zápisy dočasně zařazeny do fronty a vzájemně sloučeny.
Data v hlavní paměti může upravovat nejen procesor, ale také periferie využívající přímý přístup do paměti nebo jiné procesory ve víceprocesorovém systému. Změna dat způsobí, že kopie v mezipaměti bude zastaralá ( zastaralý stav ). V jiné implementaci, když jeden procesor upravuje data v mezipaměti, kopie těchto dat v mezipaměti ostatních procesorů budou označeny jako zastaralé. Aby byl obsah více keší aktuální, používá se speciální koherenční protokol .
Typická struktura záznamu cache
Datový blok | štítek | trochu relevance |
Datový blok (řádek mezipaměti) obsahuje přímou kopii dat z hlavní paměti. Čerstvý bit znamená, že tento záznam obsahuje aktuální (nejnovější) kopii.
Struktura adresy
štítek | index | zaujatost |
Adresa paměti je rozdělena (od vysokých bitů po nízké bity) na tag, index a offset . Délka indexového pole je bitů a odpovídá řádku (řádku) cache použité pro zápis. Délka odsazení je .
Asociativita je kompromis. Kontrola více záznamů vyžaduje více energie, plochy čipu a potenciálně i času. Pokud by existovalo 10 míst, kde by algoritmus vystěhování mohl zmapovat umístění paměti, pak by kontrola tohoto umístění mezipaměti vyžadovala podívat se na 10 položek mezipaměti. Na druhou stranu mezipaměti s vysokou asociativitou podléhají méně chybám (viz „konfliktní chyby“ níže) a procesor tráví méně času čtením z pomalé hlavní paměti. Existuje empirické pozorování, že zdvojnásobení asociativity (z přímého mapování na 2-kanálové nebo ze 2- na 4-kanálové) má přibližně stejný dopad na míru zásahu jako zdvojnásobení velikosti mezipaměti. Zvýšení asociativnosti přes 4 kanály má malý vliv na snížení chybovosti a obvykle se provádí z jiných důvodů, jako jsou průsečíky virtuálních adres.
V pořadí zhoršení (prodloužení doby trvání kontroly zásahu) a zlepšení (snížení počtu chyb):
Chybějící čtení z mezipaměti instrukcí. Obvykle dává velmi dlouhé zpoždění, protože procesor nemůže pokračovat ve vykonávání programu (alespoň aktuální vlákno provádění) a musí nečinně čekat na načtení instrukce z paměti.
Zmeškané čtení z mezipaměti dat. Obvykle poskytuje menší latenci, protože instrukce, které nezávisí na požadovaných datech, mohou pokračovat ve vykonávání, zatímco je požadavek zpracováván v hlavní paměti. Po přijetí dat z paměti můžete pokračovat ve vykonávání závislých instrukcí.
Chybí zápis do mezipaměti dat. Obvykle poskytuje nejmenší latenci, protože zápis může být zařazen do fronty a následné instrukce jsou prakticky neomezené ve svých možnostech. Procesor může pokračovat ve své práci, s výjimkou případu chybného zápisu s plnou frontou.
Většina procesorů pro všeobecné použití implementuje nějakou formu virtuální paměti . Stručně řečeno, každý program běžící na počítači vidí svůj vlastní zjednodušený adresní prostor obsahující pouze kód a data tohoto programu. Každý program používá svůj vlastní virtuální adresní prostor, bez ohledu na jeho umístění ve fyzické paměti.
Přítomnost virtuální paměti vyžaduje, aby procesor přeložil virtuální (matematické) adresy používané programem na fyzické adresy odpovídající skutečnému umístění v RAM. Část procesoru, která provádí tento převod, se nazývá jednotka správy paměti (MMU). Pro urychlení překladů byla do MMU přidána mezipaměť nedávno použitých mapování (korespondence virtuálních a fyzických adres) nazvaná Translation Lookaside Buffer (TLB).
Pro další popis jsou důležité tři vlastnosti procesu překladu adres:
Je také důležité poznamenat, že rané systémy virtuální paměti byly velmi pomalé, protože vyžadovaly kontrolu tabulky stránek (uložené v hlavní paměti RAM) před jakýmkoliv přístupem do paměti programu. Bez použití cachování pro mapování snižují takové systémy rychlost práce s pamětí asi 2krát. Proto je použití TLB velmi důležité a někdy jeho přidání do procesorů předcházelo vzniku konvenčních datových a instrukčních cache.
Ve vztahu k virtuálnímu adresování lze datové a instrukční cache rozdělit do 4 typů. Adresy v mezipaměti se používají pro dva různé účely: indexování a označování.
Rychlost těchto akcí (latence načítání z paměti) je kritická pro výkon procesoru, a proto je většina moderních L1 cache virtuálně indexována, což alespoň umožňuje MMU dotazovat se na TLB současně s vyžádáním dat z cache.
Virtuální indexování však není nejlepší volbou pro jiné úrovně mezipaměti. Náklady na detekci průniků virtuálních adres (aliasing) se zvyšují s velikostí mezipaměti a v důsledku toho většina implementací L2 a dalších úrovní mezipaměti používá indexování fyzických adres.
Po poměrně dlouhou dobu cache používaly pro tagy fyzické i virtuální adresy, i když virtuální tagování je dnes velmi vzácné. Pokud požadavek TLB skončí před požadavkem mezipaměti, fyzická adresa bude k dispozici pro porovnání s tagem v době, kdy je potřeba, a proto není vyžadováno žádné virtuální tagování. Velké cache jsou častěji označeny fyzickými adresami a pouze malé, rychlé cache používají virtuální adresy pro značky. V moderních procesorech pro všeobecné použití bylo virtuální značkování nahrazeno mechanismem vhints, popsaným níže.
Virtuální indexování a průniky virtuálních adres Problém homonym a synonym Kolorování stránkyVětšina moderních procesorů obsahuje několik interagujících mezipamětí.
Specializované kešeSuperskalární CPU přistupují k paměti z několika fází pipeline : čtení instrukce (instrukce načítání), převod virtuálních adres na fyzické, čtení dat (data fetch). Zřejmým řešením je použití různých fyzických mezipamětí pro každý z těchto případů, takže neexistuje žádný spor o přístup k jednomu z fyzických zdrojů z různých fází potrubí. Potrubí tedy obvykle vede k alespoň třem samostatným mezipaměti: mezipaměť instrukcí, mezipaměť překladu TLB a mezipaměť dat, z nichž každá se specializuje na jiný úkol.
Zřetězené procesory využívající oddělené mezipaměti pro data a instrukce (takové procesory jsou nyní všudypřítomné) se nazývají procesory Harvardské architektury . Zpočátku se tento termín používal pro počítače, ve kterých jsou instrukce a data zcela odděleny a uloženy v různých paměťových zařízeních. Takové úplné oddělení se však neukázalo populární a většina moderních počítačů má jediné hlavní paměťové zařízení, takže je lze považovat za stroje von Neumannovy architektury .
Víceúrovňové cacheJedním z problémů je základní problém vyrovnávání latence mezipaměti a četnosti zásahů. Větší mezipaměti mají vyšší návštěvnost, ale také vyšší latenci. Aby se zmírnilo napětí mezi těmito dvěma, většina počítačů používá více úrovní mezipaměti, když malé a rychlé mezipaměti následují pomalejší velké mezipaměti (aktuálně až 3 úrovně v hierarchii mezipaměti).
V ojedinělých případech jsou implementovány 4 úrovně cache [6] [7] .
Vrstvené keše obvykle fungují postupně od menších keší po větší. Nejprve se zkontroluje nejmenší a nejrychlejší mezipaměť první úrovně (L1), v případě zásahu procesor pokračuje v práci vysokou rychlostí. Pokud menší mezipaměť chybí, zkontroluje se další o něco větší a pomalejší mezipaměť druhé úrovně (L2) atd., dokud nedojde k požadavku na hlavní RAM.
Jak se zvyšuje rozdíl zpoždění mezi RAM a nejrychlejší mezipamětí, některé procesory zvyšují počet úrovní mezipaměti (u některých až 3 úrovně na čipu). Například procesor Alpha 21164 v roce 1995 měl na čipu L3 cache o velikosti 96 kB; IBM POWER4 v roce 2001 měl až čtyři 32 MB L3 vyrovnávací paměti [8] na samostatných matricích, sdílených více jádry; Itanium 2 v roce 2003 mělo 6 MB L3 cache na čipu; Xeon MP kód "Tulsa" v roce 2006 - 16 MB L3 cache na čipu, sdílená 2 jádry; Phenom II v roce 2008 - až 6 MB univerzální L3 cache; Intel Core i7 v roce 2008 – 8 MB mezipaměti L3 na čipu, která je zahrnutá a sdílená mezi všemi jádry. Užitečnost mezipaměti L3 závisí na povaze přístupů do paměti programu.
Konečně na druhé straně paměťové hierarchie je samotný registrový soubor mikroprocesoru, který lze považovat za nejmenší a nejrychlejší cache v systému se speciálními vlastnostmi (například statické plánování kompilátorem při alokaci registrů, když přiděluje data z RAM do registru). Podrobnosti viz optimalizace hnízda smyček . Soubory registrů mohou být také hierarchické: Cray-1 (v roce 1976) měl 8 adresových "A" registrů a 8 obecných skalárních "S" registrů . Stroj dále obsahoval sadu 64 adresových "B" a 64 skalárních "T" registrů, ke kterým byl přístup delší, ale stále výrazně rychlejší než hlavní RAM. Tyto registry byly zavedeny kvůli nedostatku mezipaměti dat ve stroji (ačkoli ve stroji byla mezipaměť instrukcí)
Víceúrovňové cache vyžadují nová architektonická řešení.
Některé procesory mohou například vyžadovat, aby všechna data uložená v L1 cache byla také uložena v L2 cache. Takové páry keší se nazývají přísně inkluzivní . Jiné procesory (například AMD Athlon) takový požadavek mít nemusí, pak se cache nazývají exkluzivní (exkluzivní) - data mohou být buď v L1 nebo L2 cache, ale nikdy nemohou být v obou současně.
Doposud jiné procesory (jako Pentium II, Pentium III a Pentium 4) nevyžadují, aby data v mezipaměti první úrovně byla umístěna také do mezipaměti druhé úrovně, ale nadále to dělají. Neexistuje žádný všeobecně přijímaný název pro tuto přechodnou politiku, i když se často používá termín hlavně zahrnující .
Výhodou exkluzivních mezipamětí je, že ukládají více dat. Tato výhoda je větší, když je velikost exkluzivní mezipaměti L1 srovnatelná s mezipamětí L2, a menší, když je mezipaměť L2 mnohonásobně větší než mezipaměť L1. Když L1 mine a L2 přistoupí na zásah, řádek mezipaměti hitů v L2 se vymění za řádek v L1.
Mezipaměť obětíMezipaměť obětí nebo vyrovnávací paměť obětí [9] ) (doslova mezipaměť obětí) je malá specializovaná mezipaměť, která uchovává ty řádky mezipaměti, které byly nedávno vyřazeny z hlavní vyrovnávací paměti mikroprocesoru, když byly nahrazeny. Tato keš se nachází mezi hlavní keší a její angličtinou. doplňovací cesta . Mezipaměť obětí je obvykle plně asociativní a slouží ke snížení počtu nezdařených konfliktů. Mnoho běžně používaných programů nevyžaduje úplné asociativní mapování pro všechny pokusy o přístup do paměti. Statisticky bude jen malá část přístupů do paměti vyžadovat vysoký stupeň asociativnosti. Právě pro takové požadavky se používá mezipaměť obětí, která poskytuje vysokou asociativitu pro takové vzácné požadavky. Navrhl to Norman Jouppi (DEC) v roce 1990 [10] . Velikost takové cache se může pohybovat od 4 do 16 cache linek [11] .
Trace cacheJedním z nejextrémnějších případů specializace mezipaměti je mezipaměť trace používaná v procesorech Intel Pentium 4 . Mezipaměť trasování je mechanismus pro zvýšení propustnosti zatížení instrukcí a pro snížení rozptylu tepla (v případě Pentia 4) ukládáním dekódovaných tras instrukcí. Tato mezipaměť tedy eliminovala práci dekodéru při opětovném spouštění nedávno provedeného kódu.
Jednou z prvních publikací o mezipaměti trasování byl článek z roku 1996 od týmu autorů ( Eric Rotenberg , Steve Bennett a Jim Smith ) s názvem „Trace Cache: Přístup s nízkou latencí k načítání instrukcí s vysokou šířkou pásma“. (Trace Cache: Přístup s nízkou latencí pro pokyny k načítání s vysokou propustností).
Mezipaměť trasování ukládá dekódované instrukce buď po jejich dekódování, nebo po jejich dokončení. Obecně jsou instrukce přidávány do mezipaměti trasování ve skupinách, které jsou buď základními bloky , nebo dynamickými trasováními. Dynamické trasování (cesta provádění) se skládá pouze z instrukcí, jejichž výsledky byly významné (použité později), a odstraňuje instrukce, které jsou v neprováděných větvích, navíc dynamické trasování může být spojením několika základních bloků. Tato funkce umožňuje zavaděči instrukcí v procesoru načíst několik základních bloků najednou, aniž by se museli starat o přítomnost větví v prováděcím vláknu.
Řádky trasování jsou uloženy ve vyrovnávací paměti trasování na adresách odpovídajících čítači instrukcí první strojové instrukce ze trasování, ke kterému byla přidána sada vlastností predikce větvení. Toto adresování vám umožňuje ukládat různé stopy provádění, které začínají na stejné adrese, ale představují různé situace v důsledku predikce větvení. Ve fázi načítání instrukce potrubí instrukcí se ke kontrole, zda jsou stopy v mezipaměti, používají jak aktuální čítač instrukcí (počítač programu), tak stav prediktoru větvení. Pokud dojde k zásahu, je trasovací vedení přivedeno přímo do potrubí bez nutnosti dotazování normální (L2) mezipaměti nebo hlavní paměti RAM. Mezipaměť trasování dodává strojové instrukce na vstup kanálu, dokud se trasovací řádek nevyčerpá nebo dokud v kanálu nenastane chyba predikce. V případě, že dojde k chybě, mezipaměť trasování začne vytvářet další řádek trasování načtením strojového kódu z mezipaměti nebo z paměti.
Podobné mezipaměti trasování byly použity v Pentiu 4 k ukládání dekódovaných mikro-operací a mikrokódů, které implementují složité x86 instrukce. Smith, Rotenberg a Bennett's paper Plné znění viz Citeseer .
V počátcích mikroprocesorové technologie byl přístup do paměti jen o málo pomalejší než přístup k registru procesoru. Od 80. let [12] se ale výkonnostní propast mezi procesory a pamětí zvětšuje. Mikroprocesory se zdokonalovaly rychleji než paměť, zejména pokud jde o frekvenci provozu, takže paměť se stala překážkou při dosahování plného výkonu systému. Ačkoli bylo technicky možné mít hlavní paměť stejně rychlou jako CPU, byla zvolena ekonomičtější cesta: použít nadměrné množství nízkorychlostní paměti, ale zavést do systému malou, ale rychlou mezipaměť, aby se zmírnila mezera ve výkonu. Ve výsledku jsme tak získali řádově větší množství paměti, za přibližně stejnou cenu a s mírnou ztrátou celkového výkonu.
Čtení dat z mezipaměti u moderních procesorů obvykle trvá déle než jeden hodinový cyklus. Doba provádění programů je citlivá na zpoždění při čtení z mezipaměti dat první úrovně. Mnoho úsilí vývojářů, stejně jako síla a plocha krystalu při vytváření procesoru, je věnováno zrychlení provozu mezipaměti.
Nejjednodušší cache je virtuálně indexovaná přímo mapovaná cache. Virtuální adresa je vypočítána pomocí akumulátoru, odpovídající část adresy je přidělena a použita k indexování paměti SRAM, která vrátí stažená data. Data mohou být zarovnána podle bajtů v bajtovém posuvníku a poté předána do další operace. Při tomto čtení není vyžadována žádná kontrola tagů, ve skutečnosti není potřeba tag ani číst. Později v procesu, než se dokončí provádění instrukce čtení, bude třeba značku přečíst a porovnat s virtuální adresou, aby se ověřilo, že došlo k přístupu do mezipaměti. Pokud by došlo k chybě, bylo by vyžadováno čtení z paměti nebo pomalejší mezipaměť s další aktualizací příslušné mezipaměti a restartováním kanálu.
Asociativní mezipaměť je složitější, protože k určení, kterou část mezipaměti vybrat, je třeba načíst určitou variantu značky. N-cestná sada-asociativní cache první úrovně typicky čte všech N možných tagů současně a N dat paralelně, poté porovnává tagy s adresou a vybírá data spojená s odpovídajícím tagem. Ukládání do mezipaměti úrovně 2, aby se šetřila energie, někdy nejprve čtěte tagy a teprve potom čtěte jeden datový prvek z dat SRAM.
Diagram vpravo by měl ukazovat, jak se používají různé části adresy. Bit 31 adresy je nejvýznamnější bit (nejvýznamnější), bit 0 je nejméně významný bit (nejméně významný). Diagram ukazuje dvě paměti SRAM, indexování a multiplexování pro 4 kB, 2-cestnou sadu asociativní, virtuální indexovanou a virtuální tagovanou mezipaměť s 64 bajtovými bloky, 32bitovou šířkou čtení a 32bitovou virtuální adresou.
Protože cache má 4KB a řádky mají 64 bajtů, ukládá 64 řádků a můžeme počítat dvakrát z tagu SRAM, který obsahuje 32 sloupců, z nichž každý obsahuje dvojici 21bitových tagů. Ačkoli lze k indexování dat tagu a SRAM použít jakoukoli funkci virtuálního adresování bitů 31 až 6, nejsnáze se používají nejméně významné bity. Kromě toho, protože mezipaměť má 4 KB a má čtyřbajtovou čtecí cestu a dvě čtecí cesty na přístup, mají data SRAM 512 řádků o šířce 8 bajtů.
Modernější mezipaměť by pravděpodobně byla 16K, 4cestná, asociativní, virtuální indexovaná, virtuálně přístupná a fyzicky značená (tag), s 32bitovými řádky, 32bitovou šířkou sběrnice pro čtení a 36bitovým fyzickým adresováním. Opakování cesty čtení pro takovou mezipaměť vypadá velmi podobně jako výše uvedené. Čtou se virtuální hity místo značek ? ( anglicky vhits ) a opět se podmnožina přiřadí k virtuální adrese. Později, v kanálu, je virtuální adresa přeložena na fyzickou adresu TLB a je čtena fyzická značka (pouze jedna, protože virtuální přístup poskytuje cestu pro čtení mezipaměti). Nakonec se fyzická adresa porovná s fyzickou značkou, aby se určilo, zda došlo k zásahu.
Některé procesory SPARC měly mezipaměti L1 zrychlené o několik zpoždění brány pomocí dekodérů SRAM namísto přidávače virtuální adresy. Podrobnosti viz en:Součet adresovaný dekodér .
Když mikroprocesory x86 dosáhly frekvencí 20 megahertzů nebo více (počínaje Intel 80386 ), bylo přidáno malé množství rychlé vyrovnávací paměti, aby se zvýšil výkon. To bylo nutné kvůli skutečnosti, že DRAM používaná jako systémová RAM měla značné zpoždění (až 120 ns) a vyžadovala cykly k aktualizaci. Mezipaměť byla postavena na dražší, ale mnohem rychlejší SRAM , která v té době měla zpoždění 15-20ns. První vyrovnávací paměti byly externí vůči procesoru a byly často umístěny na základní desce jako 8 nebo 9 čipů v balíčcích DIP , uspořádaných v zásuvkách, aby se vyrovnávací paměť mohla zvětšovat nebo zmenšovat. Některé verze procesoru I386 podporovaly 16 až 64 KB externí mezipaměti [13] .
S uvedením procesoru Intel 80486 bylo 8 kB vyrovnávací paměti integrováno přímo do matrice mikroprocesoru. Tato mezipaměť byla nazvána L1 (úroveň jedna, eng. level 1 ), aby se odlišila od pomalejší mezipaměti základní desky s názvem L2 (druhá úroveň, eng. level 2 ). Ty byly mnohem větší, až 256 kB.
V budoucnu byly případy oddělení mezipaměti provedeny pouze na základě úvah o marketingové politice, například u mikroprocesoru Celeron , postaveného na jádře Pentium II .
Mikroprocesor Pentium využívá samostatnou mezipaměť, instrukce a data [14] . Address Translation Buffer (TLB) překládá adresu v RAM na odpovídající adresu v mezipaměti. Datová mezipaměť Pentium využívá metodu zpětného zápisu , která umožňuje upravovat data v mezipaměti bez dalšího přístupu k paměti RAM (data se do paměti RAM zapisují pouze tehdy, když jsou odstraněna z mezipaměti) a protokol MESI (Modified, Exclusive, Shared, Invalid) , který zajišťuje koherenci dat v mezipaměti procesoru a v paměti RAM při práci ve víceprocesorovém systému.
Každá ze samostatných mezipamětí, dat a instrukcí mikroprocesoru Pentium MMX má velikost 16 kB a obsahuje dva porty, jeden pro každý spouštěcí kanál. Datová mezipaměť má vyrovnávací paměť pro překlad adres (TLB).
Další implementace mezipaměti v x86 se objevila v Pentium Pro , ve kterém je mezipaměť druhé úrovně (kombinovaná pro data a příkazy, velikost 256-512 kB) umístěna ve stejném balíčku s procesorem a mezipaměť první úrovně, Velikost 8 kB, oddělená pro data a příkazy, a zvýšila svou frekvenci na frekvenci jádra. Později se mezipaměť druhé úrovně začala nacházet na stejném čipu jako procesor.
Dual Independent Bus je nová architektura mezipaměti, která používá různé sběrnice pro připojení jádra procesoru k hlavní paměti RAM. Mezipaměť L1 je dvouportová, neblokující a podporuje jednu operaci načtení a jednu operaci zápisu na takt. Běží na taktovací frekvenci procesoru. Za cyklus se přenese 64 bitů.
V mikroprocesoru Pentium II byla zvýšena mezipaměť první úrovně - 16 KB pro data a 16 KB pro instrukce. Pro mezipaměť druhé úrovně je použita BSRAM umístěná na stejné desce jako procesor v kazetě SEC pro instalaci do slotu 1 .
S rostoucí oblibou vícejádrových procesorů se k čipu začaly přidávat cache třetí úrovně, označované jako L3. Tuto úroveň mezipaměti lze sdílet mezi více jádry a umožnit efektivní komunikaci mezi jádry. Jeho objem je obvykle větší než celková velikost mezipaměti všech jader k němu připojených a může dosáhnout 16 MB.
Mezipaměť základní desky zůstala populární až do éry Pentium MMX a přestala se používat se zavedením SDRAM a rostoucím rozdílem mezi frekvencí sběrnice procesoru a frekvencí jádra procesoru: mezipaměť na základní desce se stala jen o málo rychlejší než hlavní RAM.
Příklad mezipaměti (jádro procesoru K8)
Je znázorněno schéma cache jádra mikroprocesoru AMD K8, které ukazuje jak specializované cache, tak jejich víceúrovňový charakter.
Jádro používá čtyři různé specializované cache: instrukční cache, instrukce TLB, data TLB a data cache:
Toto jádro také používá víceúrovňové mezipaměti: dvouúrovňové instrukční a datové TLB (na druhé úrovni jsou uloženy pouze záznamy 4KB mapování) a mezipaměť druhé úrovně (L2), sjednocená pro práci s daty i instrukcemi. cache 1. úrovně a pro různé TLB. Mezipaměť L2 je výhradní pro data L1 a instrukce L1, to znamená, že každý 8bajtový blok v mezipaměti může být buď v instrukcích L1, nebo datech L1 nebo L2. Jedinou výjimkou jsou bajty tvořící záznamy PTE, které mohou být v TLB a v datové mezipaměti současně během zpracování virtuálního mapování OS. V takovém případě je OS zodpovědný za rychlé resetování TLB po aktualizaci záznamů překladu.
V mikroprocesoru DEC Alpha 21164 (vydáno v listopadu 1995 na 333 MHz) může mezipaměť první úrovně podporovat řadu (až 21) neošetřených chyb. Existuje šestiprvkový soubor nezpracovaných chybných adres (MAF ), každý prvek obsahuje adresu a registr, který se má načíst při chybě (jestliže chybné adresy patří do stejné mezipaměti, jsou v MAF považovány za jeden prvek).
Kromě samostatných mezipamětí L1 pro zápis obsahuje procesorový čip částečně asociativní mezipaměť L2 se zpětným zápisem a řadič mezipaměti L3, který pracuje v synchronním i asynchronním režimu.
Březen 1997 DEC Alpha 21164PC má externí L2 cache; velikost mezipaměti instrukcí zvýšena na 16 KB.
Mikroprocesor DEC Alpha 21264 nemá mezipaměť druhé úrovně (jejíž řadič je přesto umístěn na čipu), ale mezipaměť první úrovně je zvětšena na 128 kB (po 64 kB pro mezipaměť instrukcí a mezipaměť dat, resp. ).
Hewlett-Packard PA-8000 pro vědecké a inženýrské výpočty obsahuje vyrovnávací paměť pro změnu pořadí adres ( ARB ), která sleduje všechny příkazy načítání/ukládání, což snižuje latenci adresování externí mezipaměti dat a instrukcí, která se v tomto procesoru může zvýšit. na 4 MB. Avšak ani efektivní řízení externí mezipaměti pomocí vysokorychlostních řídicích linek a přednačítání dat a příkazů z hlavní paměti do mezipaměti nevykompenzovalo nízkou rychlost a vysoké náklady.
Tyto nedostatky byly odstraněny u PA-8500, u kterého bylo vzhledem k technologii 0,25 mikronu možné přidat na čip 512 kB instrukční cache a 1 MB datové cache.
Postaveno na Harvardské architektuře PowerPC 620 obsahuje dvě vestavěné mezipaměti, každou o kapacitě 32 kB, které mají vlastní jednotky pro správu paměti ( MMU ) a fungují nezávisle na sobě . Příkazy a adresy větví jsou ukládány do mezipaměti BTAC ( Branch-Target Address Cache ) .
Rozhraní sběrnice procesoru zahrnuje plnou implementaci podpory mezipaměti L2 (až 128 MB, běžící na frekvenci procesoru nebo dvakrát/čtyřikrát nižší) a nevyžaduje další cykly pro řízení provozu externí mezipaměti. Je implementována kombinace pass-through a writeback a také podpora protokolu MESI.
L1 cache použitá v RA-10000 má svá specifika - každý příkaz v cache je vybaven přídavným čtyřbitovým tagem, který se používá při dalším dekódování a klasifikaci příkazu.
procesorů | Technologie digitálních|||||||||
---|---|---|---|---|---|---|---|---|---|
Architektura | |||||||||
Architektura instrukční sady | |||||||||
strojové slovo | |||||||||
Rovnoběžnost |
| ||||||||
Implementace | |||||||||
Komponenty | |||||||||
Řízení spotřeby |