Mezipaměť procesoru

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 7. září 2020; kontroly vyžadují 15 úprav .

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] .

Jak to funguje

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 .

Struktura záznamu mezipaměti

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

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):

  1. přímá mapovaná mezipaměť - nejlepší  čas zásahu, a tedy nejlepší volba pro velké mezipaměti;
  2. 2-kanálová multiasociativní  mezipaměť 2-way set související cache ;
  3. 2-way skewed asociativní cache ( André Seznec  )
  4. 4-way set associative cache ( ang.  4-way set associative cache );
  5. plně asociativní  cache plně asociativní cache  - nejlepší (nejnižší) procento chyb (miss rate) a nejlepší volba pro extrémně vysoké náklady při chybějících (miss penalty).
Pseudoasociativní cache

Typy 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.

Miss kategorie ( Three Cs )

  • Povinná zmeškání – zmeškané zprávy způsobené prvním uvedením požadované adresy. Velikosti keší a jejich asociativita nemají vliv na počet těchto miss. Pomoci může předběžné načítání, softwarové i hardwarové, stejně jako zvětšení velikosti řádku mezipaměti (jako forma předběžného načítání hardwaru). Takové miss jsou někdy označovány jako „studené miss“.
  • Chybějící kapacity - Chyby způsobené výhradně konečnou velikostí mezipaměti, vyskytující se bez ohledu na stupeň asociativnosti nebo velikost řádku vyrovnávací paměti. Graf takových chyb proti velikosti mezipaměti může poskytnout určitou míru časové lokality sady požadavků na paměť. Stojí za zmínku, že neexistuje žádná koncepce plné mezipaměti, prázdné mezipaměti nebo téměř plné mezipaměti, protože mezipaměti procesoru mají linky mezipaměti téměř po celou dobu zaneprázdněné, a proto téměř každé vytvoření nové linky bude vyžadovat vyčištění již zaneprázdněného.
  • Conflict misses - nedopatření způsobené konfliktem. Lze se jim vyhnout, pokud cache nevyklidila vstup dříve. Lze je dále rozdělit na chybná místa způsobená mapováním (konkrétní hodnota asociativnosti) a chybná nahrazení, která jsou způsobena konkrétním algoritmem pro výběr záznamů k nahrazení.

Překlad adres

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:

  • Zpoždění: Fyzická adresa bude přijata z MMU až o nějaký čas později, až několik cyklů, poté, co je na vstup MMU dodána virtuální adresa z generátoru adres.
  • Překryvný efekt: Více virtuálních adres může odpovídat jedné fyzické adrese. Většina procesorů zaručuje, že všechny zápisy na fyzickou adresu budou provedeny v pořadí určeném programem. Tato vlastnost vyžaduje ověření, že v mezipaměti je aktuálně pouze jedna kopie dat z fyzické adresy.
  • Mapovací jednotka: Virtuální adresní prostor je stránkovaný - bloky paměti pevné velikosti začínající na adresách, které jsou násobky jejich velikosti. Například 4 GB adresního prostoru lze rozdělit na 1 048 576 4 KB stránek, z nichž každá může nezávisle mapovat fyzické stránky. Moderní procesory často podporují více velikostí stránek současně, například 4 KB a 2 MB pro x86-64, a některé moderní procesory AMD také podporují 1 GB.

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í.

  • Fyzicky indexované, fyzicky označené (PIPT) – fyzicky indexované a fyzicky označené. Takové mezipaměti jsou jednoduché a vyhýbají se problémům s aliasingem, ale jsou pomalé, protože před přístupem do mezipaměti je vyžadován požadavek na fyzickou adresu v TLB. Tento požadavek může způsobit vynechání TLB a další zásah do hlavní paměti před kontrolou dat v mezipaměti.
  • Virtuálně indexované, virtuálně označené (VIVT) – virtuálně indexované a virtuálně označené. Jak značkování, tak indexování používají virtuální adresu. Díky tomu jsou kontroly přítomnosti dat v mezipaměti rychlejší, bez nutnosti volání do MMU. Problém překrývání však nastává, když se více virtuálních adres mapuje na stejnou fyzickou adresu. V tomto případě budou data ukládána do mezipaměti dvakrát, což značně komplikuje udržení koherence. Dalším problémem jsou homonyma, situace, kdy je stejná virtuální adresa (například v různých procesech) mapována na různé fyzické adresy. Stává se nemožným rozlišit taková mapování pouze podle virtuálního indexu. Možná řešení: vyprázdnění mezipaměti při přepínání mezi úlohami (přepínání kontextu), vyžadování neprotínání adresních prostorů procesu, označování virtuálních adres pomocí ID adresního prostoru (ASID) nebo používání fyzických značek. Problém nastává také při změně mapování virtuálních adres na fyzické, což vyžaduje resetování řádků cache, u kterých se mapování změnilo.
  • Virtuálně indexované, fyzicky označené (VIPT) – virtuálně indexované a fyzicky označené. Index používá virtuální adresu, zatímco značka používá fyzickou adresu. Výhodou oproti prvnímu typu je nižší latence, protože můžete vyhledat řádek mezipaměti současně s překladem TLB adresy, ale porovnání značek je zpožděno, dokud nezískáte fyzickou adresu. Výhodou oproti druhému typu je detekce homonym, protože tag obsahuje fyzickou adresu. Tento typ vyžaduje pro značku více bitů, protože indexové bity používají jiný typ adresování.
  • Fyzicky indexované, virtuálně tagované  – fyzicky indexované a virtuálně tagované cache jsou považovány za zbytečné a okrajové a mají čistě akademický zájem [5] .

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í značkování a mechanismus vhints

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ánky

Hierarchie mezipaměti v moderních mikroprocesorech

Většina moderních procesorů obsahuje několik interagujících mezipamětí.

Specializované keše

Superskalá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é cache

Jední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í)

Exkluzivita (exkluzivita) a inkluzivita

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 cache

Jední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 .

Implementace

Historie

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 .

V X86

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:

  • Instrukční mezipaměť se skládá z 64bajtových bloků, které jsou kopií hlavní paměti, a mohou načíst až 16 bajtů na takt. Každý bajt v této cache je uložen v 10 bitech místo 8 a hranice instrukcí jsou vyznačeny v extra bitech (tj. cache provádí částečné předdekódování). Ke kontrole integrity dat se používá pouze parita, nikoli ECC, protože paritní bit zabírá méně místa a v případě selhání mohou být poškozená data aktualizována správnou verzí z paměti.
  • Instrukce TLB obsahuje kopie záznamů tabulky stránek. Pro každý požadavek na čtení příkazů je vyžadován překlad matematických adres na fyzické. Záznamy překladu jsou 4bajtové a 8bajtové a TLB je rozděleno na 2 části, v tomto pořadí jedna pro mapování 4 kB a druhá pro mapování 2 a 4 MB (velké stránky). Takový oddíl zjednodušuje plně asociativní vyhledávací schémata v každé z částí. Operační systémy a aplikace mohou používat mapování různých velikostí pro části virtuálního adresového prostoru.
  • Datový TLB je duální a oba buffery obsahují stejnou sadu záznamů. Jejich dualita umožňuje provádět každý cyklus překladu pro dva požadavky na data současně. Stejně jako instrukce TLB je tento buffer rozdělen mezi dva druhy záznamů.
  • Datová mezipaměť obsahuje 64bajtové kopie paměťových bloků. Je rozdělena do 8 bank (bank), z nichž každá obsahuje 8 kilobajtů dat. Mezipaměť umožňuje dva požadavky na 8bajtová data každý cyklus za předpokladu, že požadavky jsou zpracovávány různými bankami. Struktury značek v mezipaměti jsou duplikované, protože každý 64bajtový blok je distribuován do všech 8 bank. Pokud jsou v jednom cyklu zadány 2 požadavky, pracují s vlastní kopií informací o značce.

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.

DEC Alpha

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. ).

PA-RISC

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.

PowerPC

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.

MIPS

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.

Aktuální vývoj

Poznámky

  1. Korneev V. V., Kiselev A. V. 1.2.3 Strukturální metody pro snížení doby přístupu do paměti // Moderní mikroprocesory. - M .: "Znalosti", 1998. - S. 75-76. — 240 s. - 5000 výtisků.  - ISBN 5-98251-050-6 .
  2. Závislost výkonu procesoru na velikosti L2 cache . Získáno 20. října 2011. Archivováno z originálu 22. října 2011.
  3. AMD Athlon II X4 nebo Phenom II: Vliv mezipaměti L3 na výkon . Datum přístupu: 12. ledna 2015. Archivováno z originálu 15. července 2014.
  4. Intel 64 and IA-32 Architectures Software Developer's Manual. Svazek 1: Základní architektura. Číslo objednávky 253665-021.
  5. Porozumění ukládání do mezipaměti . Linux Journal. Získáno 2. května 2010. Archivováno z originálu dne 27. dubna 2012.
  6. https://www.theregister.co.uk/2004/05/06/hp_mx2_itaniummodule/ Archivováno 10. srpna 2017 na Wayback Machine „HP zabalilo mx2 32 MB mezipaměti L4“
  7. https://www.theregister.co.uk/2010/07/23/ibm_z196_mainframe_processor/ Archivováno 10. srpna 2017 na Wayback Machine „L4 cache memory, kterou většina serverů nemá. (IBM přidala před pár lety do svých čipových sad EXA pro procesory Xeon od Intelu nějakou L4 cache). Tato mezipaměť L4 je nezbytná z jednoho klíčového důvodu“
  8. Recenze procesoru IBM POWER4. Ixbtlabs Archived 13 July 2011 at Wayback Machine "Důležitou vlastností L3 cache je schopnost kombinovat samostatné cache čipů POWER4 až do velikosti 4 (128 MB), což umožňuje použití prokládání adres pro urychlení přístupu."
  9. Podrobná studie architektury AMD64 Archivováno 27. ledna 2012 na Wayback Machine // ixbt.com , „The Cache Subsystem. Vyhledávání a analýza změn»
  10. NPJouppi. "Zlepšení výkonu přímo mapované mezipaměti přidáním malé plně asociativní mezipaměti a vyrovnávací paměti předběžného načtení." — 17th Annual International Symposium on Computer Architecture, 1990. Proceedings., DOI:10.1109/ISCA.1990.134547
  11. Simulátor mezipaměti obětí . Získáno 12. ledna 2012. Archivováno z originálu 2. května 2010.
  12. Mezera výkonu procesor-paměť (downlink) . acm.org. Získáno 8. listopadu 2007. Archivováno z originálu 27. dubna 2012. 
  13. Guk M. 4. Ukládání do mezipaměti // Procesory Pentium II, Pentium Pro a jen Pentium. - M .: Piter, 1999. - S. 126-143. — 288 s. - 7000 výtisků.  - ISBN 5-8046-0043-5 .
  14. Korneev V. V., Kiselev A. V. 2.2.1.2 Oddělené instrukční a datové cache // Moderní mikroprocesory. - M .: "Znalosti", 1998. - S. 75-76. — 240 s. - 5000 výtisků.  - ISBN 5-98251-050-6 .

Viz také

Odkazy