Registrovat soubor - Register file

Soubor registru je řada registrů procesoru v centrální procesorové jednotky (CPU). Registrační bankovnictví je způsob použití jediného jména pro přístup k více různým fyzickým registrům v závislosti na provozním režimu. Moderní soubory registrů na bázi integrovaných obvodů jsou obvykle implementovány prostřednictvím rychlých statických RAM s více porty. Takové RAM se vyznačují vyhrazenými porty pro čtení a zápis, zatímco běžné víceportové SRAM obvykle čtou a zapisují přes stejné porty.

Architektura instrukční sady CPU bude téměř vždy definovat sadu registrů, které se používají k fázování dat mezi pamětí a funkčními jednotkami na čipu. V jednodušších CPU tyto architektonické registry odpovídají jedna za jednu záznamům v souboru fyzického registru (PRF) v CPU. Složitější CPU používají přejmenovávání registrů , takže mapování fyzického záznamu ukládá konkrétní architektonický registr se během provádění dynamicky mění. Registrační soubor je součástí architektury a je viditelný pro programátora, na rozdíl od konceptu transparentních mezipamětí .

Registrace přepnutí banky

Registrační soubory mohou být spojeny dohromady jako registrační banky. Procesor může mít více než jednu registrovanou banku.

Procesory ARM mají jak bankovní, tak nebankovní registry. Zatímco všechny režimy vždy sdílejí stejné fyzické registry pro prvních osm obecných registrů, R0 až R7, fyzický registr, na který směřují bankovní registry, R8 až R14, závisí na provozním režimu, ve kterém se procesor nachází. Zejména Fast Interrupt Režim požadavku (FIQ) má vlastní banku registrů pro R8 až R12, přičemž architektura také poskytuje soukromý ukazatel zásobníku (R13) pro každý režim přerušení.

Procesory x86 používají přepínání kontextu a rychlé přerušení pro přepínání mezi instrukcí, dekodérem, GPR a registrovými soubory, pokud jich je před vydáním instrukce více, ale toto existuje pouze na procesorech, které podporují superskalár. Přepínání kontextu je však zcela odlišný mechanismus než banka registrů ARM v registrech.

MODCOMP a později 8051 kompatibilní s procesory používají bity ve stavovém slově program zvolit právě aktivní registrační banku.

Implementace

Reg.soubor array.png

Obvyklá konvence rozložení je, že se jednoduché pole čte svisle. To znamená, že jeden řádek slova, který běží horizontálně, způsobí, že řada bitových buněk umístí svá data na bitové řádky, které běží vertikálně. Smyslné zesilovače , které převádějí bitové řádky čtení s nízkým výkyvem na logické úrovně s plným výkyvem, jsou obvykle dole (podle konvence). Větší soubory registru jsou pak někdy konstruovány skládáním zrcadlených a otočených jednoduchých polí.

Registrační soubory mají jeden řádek slova na záznam na port, jeden bitový řádek na bit šířky na port pro čtení a dva bitové řádky na bit šířky na port pro zápis. Každá bitová buňka má také Vdd a Vss. Plocha stoupání drátu se proto zvyšuje se čtvercem počtu portů a oblast tranzistoru se lineárně zvyšuje. V určitém okamžiku může být menší a/nebo rychlejší mít více nadbytečných souborů registru s menším počtem portů pro čtení, než jeden soubor registru se všemi porty pro čtení. MIPS R8000 je celé číslo jednotky, například, měl 9 čtení 4 zápis otvor 32 vstupní 64-bit souboru registru implementována v procesu, 0,7 um, které by mohly být vidět při pohledu na čipu z tržních podmínek.

Dva oblíbené přístupy k rozdělování registrů do více registrových souborů jsou konfigurace distribuovaných registračních souborů a konfigurace souborů rozdělených registrů.

V zásadě by jakoukoli operaci, kterou by bylo možné provést pomocí souboru registru o šířce 64 bitů s mnoha porty pro čtení a zápis, bylo možné provést pomocí jediného souboru registru o šířce 8 bitů s jediným portem pro čtení a jedním portem pro zápis. Nicméně, bit-level paralelismus širokých souborů registru s mnoha porty umožňuje jim běžet mnohem rychleji, a proto mohou dělat operace v jednom cyklu, který bude trvat mnoho cyklů s menším počtem portů nebo šířkou užší bit nebo obojí.

Šířka v bitech souboru registru je obvykle počet bitů ve velikosti slova procesoru . Občas je o něco širší, aby bylo možné ke každému registru připojit „extra“ bity, například jedový bit. Pokud je šířka datového slova odlišná od šířky adresy - nebo v některých případech, například u 68 000 , i když mají stejnou šířku - jsou registry adres v samostatném souboru registrů než registry dat.

Dekodér

  • Dekodér je často rozdělen na předdekodér a vlastní dekodér.
  • Dekodér je řada bran AND, které řídí řádky slov.
  • Na každý port pro čtení nebo zápis je jeden dekodér. Pokud má pole například čtyři porty pro čtení a dva zápisy, má 6 řádků slova na bitovou buňku v poli a šest bran AND na řádek v dekodéru. Všimněte si, že dekodér musí být přizpůsoben rozteči k poli, což nutí tyto AND brány být široké a krátké

Pole

Typický soubor registru-„trojitý port“, schopný číst ze 2 registrů a zapisovat do 1 registru současně-je vytvořen z bitových buněk, jako je tento.

Základní schéma pro bitovou buňku:

  • Stav je uložen v páru střídačů.
  • Data jsou načtena tranzistorem NMOS na bitovou linku.
  • Data se zapisují tak, že se jedna nebo druhá strana zkrátí na uzemnění pomocí hromádky dvou NM.
  • Takže: čtecí porty vyžadují jeden tranzistor na bitovou buňku, zapisovací porty čtyři.

Je možné mnoho optimalizací:

  • Sdílení čar mezi buňkami, například Vdd a Vss.
  • Čtené bitové řádky jsou často přednabité na něco mezi Vdd a Vss.
  • Čtené bitové řádky se často houpají jen zlomkem cesty k Vdd nebo Vss. Smyslový zesilovač převádí tento malý výkyvný signál na plnou logickou úroveň. Malé výkyvné signály jsou rychlejší, protože bitová linka má malý pohon, ale velkou parazitní kapacitu.
  • Zápisové bitové řádky mohou být spleteny tak, aby se párovaly stejně jako blízké čtené bitové řádky. Protože jsou bitové řádky zápisu v plném proudu, mohou způsobit značné poruchy čtení bitových řádků.
  • Pokud je Vdd vodorovná čára, lze ji vypnout dalším dekodérem, pokud některý z portů pro zápis zapisuje tento řádek během tohoto cyklu. Tato optimalizace zvyšuje rychlost zápisu.
  • Techniky, které snižují energii používanou soubory registrů, jsou užitečné v elektronice s nízkým výkonem

Mikroarchitektura

Většina registrových souborů nevytváří žádné zvláštní opatření, které by bránilo více portům pro zápis současně psát stejnou položku. Místo toho hardware pro plánování instrukcí zajišťuje, že pouze jedna instrukce v jakémkoli konkrétním cyklu zapíše konkrétní položku. Pokud je vydáno více instrukcí cílících na stejný registr, mají všechny kromě jednoho vypnuté povolení zápisu.

Zkříženým střídačům trvá určitý konečný čas, než se po operaci zápisu ustálí, během níž bude operace čtení trvat buď déle, nebo vrátí odpadky. Je běžné, že mají multiplexery bypassu, které obcházejí zapsaná data na čtecí porty, když je zadáno simultánní čtení a zápis do stejné položky. Tyto multiplexery bypassu jsou často součástí větší bypassové sítě, která předává výsledky, které ještě nebyly potvrzeny mezi funkčními jednotkami.

Soubor registru je obvykle přizpůsoben rozteči datové cesty , které slouží. Sladění rozteče zabraňuje tomu, aby mnoho sběrnic procházelo rohy datapatů, což by zabíralo hodně plochy. Ale protože každá jednotka musí mít stejnou bitovou rozteč, každá jednotka v datové cestě skončí s bitovou roztečí vynucenou nejširší jednotkou, což může plýtvat oblastí v ostatních jednotkách. Registrace souborů, protože mají dva vodiče na bit na každý port pro zápis a protože všechny bitové řádky musí kontaktovat křemík v každé bitové buňce, může často nastavit rozteč datové cesty.

Oblast může být někdy uložena na strojích s více jednotkami v datové cestě tím, že mají dvě datové cesty vedle sebe, z nichž každá má menší bitovou rozteč, než by měla jedna datová cesta. Tento případ obvykle vynutí více kopií souboru registru, jednu pro každou datovou cestu.

Například Alpha 21264 (EV6) byla první velkou mikroarchitekturou, která implementovala „Shadow Register File Architecture“. Měl dvě kopie souboru s celočíselným registrem a dvě kopie registru s plovoucí desetinnou čárkou, které se nacházely na jeho předním konci (budoucí a zmenšený soubor, každý obsahoval 2 porty pro čtení a 2 pro zápis), a trvalo další cyklus pro šíření dat mezi nimi během přepínání kontextu. Logika problému se pokusila snížit počet operací předávajících data mezi těmito dvěma a výrazně zlepšila její celočíselný výkon a pomohla snížit dopad omezeného počtu GPR na superskalární a spekulativní provádění. Design byl později přizpůsoben SPARC , MIPS a některými pozdějšími implementacemi x86.

MIPS používá více souborů registru stejně; jednotka R8000 s plovoucí desetinnou čárkou měla dvě kopie souboru registru s plovoucí desetinnou čárkou, každá se čtyřmi porty pro zápis a čtyřmi porty pro čtení, a obě kopie zapisovala současně s přepínáním kontextu. Nepodporoval však celočíselné operace a soubor registru celých čísel stále zůstal jako jeden. Později byly soubory stínových registrů opuštěny v novějších provedeních ve prospěch vloženého trhu.

SPARC používá „Shadow Register Soubor Architecture“, jak je dobře pro jeho vysokou koncovou čarou. Mělo až 4 kopie celočíselných registrových souborů (budoucí, v důchodu, škálované, poškrábané, každý obsahující 7 čtecích 4 zapisovacích portů) a 2 kopie souboru s plovoucí desetinnou čárkou. Nicméně, na rozdíl od Alpha a x86, jsou umístěny v backendu jako vyřazovací jednotka hned po své Out of Order Unit a přejmenování registrových souborů a nenačítají instrukce během fáze načítání instrukcí a dekódování a přepínání kontextu je v tomto designu zbytečné.

IBM používá stejný mechanismus jako mnoho velkých mikroprocesorů, hluboce sloučí registrový soubor s dekodérem, ale jeho registrový soubor pracuje nezávisle na straně dekodéru a nezahrnuje přepínání kontextu, které se liší od Alpha a x86. většina jeho registrového souboru neslouží pouze pro jeho vyhrazený dekodér, ale až do úrovně vlákna. Například POWER8 má až 8 dekodérů instrukcí, ale až 32 registrových souborů po 32 registrech pro obecné použití (4 porty pro čtení a 4 pro zápis), aby bylo možné simultánní multithreading , jehož instrukci nelze použít v žádném jiném registru (nedostatek přepínání kontextu.).

V řadě procesorů x86 typický procesor před 486 neměl soubor individuálních registrů, protože všechny registry obecného účelu pracovaly přímo s jeho dekodérem a zásobník x87 push byl umístěn v samotné jednotce s plovoucí desetinnou čárkou. Počínaje Pentiem je typický procesor x86 kompatibilní s Pentiem integrován s jednou kopií souboru portového architektonického registru s jedním portem, který obsahuje 8 architektonických registrů, 8 řídicích registrů, 8 registrů ladění, 8 registrů stavových kódů, 8 nejmenovaných registrů založených na jednom ukazateli instrukcí , jeden vlajkový registr a 6 segmentových registrů v jednom souboru.

Jedna kopie 8 x87 FP push down stack ve výchozím nastavení, MMX registr byl virtuálně simulován z x87 stacku a vyžadoval x86 registr pro poskytování MMX instrukcí a aliasů pro existující stack. Na P6 lze instrukci nezávisle ukládat a provádět souběžně v počátečních fázích potrubí před dekódováním do mikrooperací a přejmenováním při provádění mimo pořadí. Počínaje P6 nevyžadují všechny registrační soubory další cyklus pro šíření dat, registrační soubory jako architektonické a s plovoucí desetinnou čárkou jsou umístěny mezi vyrovnávací pamětí kódu a dekodéry, nazývané „retire buffer“, Reorder buffer a OoOE a připojeny v rámci kruhové sběrnice (16 bajtů). Samotný registrový soubor stále zůstává jedním registračním souborem x86 a jedním zásobníkem x87 a oba slouží jako ukládání do důchodu. Jeho soubor registru x86 se zvýšil na duální porty, aby se zvýšila šířka pásma pro ukládání výsledků. Registry jako debug/kód podmínky/kontrola/nepojmenovaný/příznak byly odstraněny z hlavního souboru registru a umístěny do jednotlivých souborů mezi mikrooperační ROM a instrukční sekvencer. Pouze nepřístupné registry, jako je segmentový registr, jsou nyní odděleny od souboru obecného registru (kromě ukazatele instrukce); nyní jsou umístěny mezi plánovačem a alokátorem instrukcí, aby se usnadnilo přejmenování registru a spuštění mimo pořadí. Zásobník x87 byl později sloučen se souborem registru s plovoucí desetinnou čárkou poté, co 128bitový registr XMM debutoval v Pentium III, ale soubor registru XMM je stále umístěn odděleně od souborů celočíselného registru x86.

Pozdější implementace P6 (Pentium M, Yonah) představila „Shadow Register File Architecture“, která se rozšířila na 2 kopie dvojportového souboru celočíselných architektonických registrů a sestává z přepínání kontextu (mezi budoucím a retirered souborem a souborem v měřítku pomocí stejného triku, který byl použit mezi integerem a floatingem směřovat). Bylo to za účelem vyřešení zúžení registru, které existuje v architektuře x86 po zavedení mikro op fúze, ale stále má 8 záznamů 32bitové architektonické registry pro celkovou kapacitu 32 bytů na soubor (registr segmentů a ukazatel instrukcí zůstávají v souboru , ačkoli jsou pro program nepřístupné) jako spekulativní soubor. Druhý soubor je podáván jako zmenšený soubor stínového registru, který bez přepnutí kontextu neumožňuje samostatně ukládat některé instrukce. Některé instrukce z SSE2/SSE3/SSSE3 vyžadují tuto funkci pro celočíselný provoz, například instrukce jako PSHUFB, PMADDUBSW, PHSUBW, PHSUBD, PHSUBSW, PHADDW, PHADDD, PHADDSW by vyžadovaly načtení EAX/EBX/ECX/EDX z obou registrů, ačkoli to bylo neobvyklé, že procesor x86 využíval jiný registrový soubor se stejnou instrukcí; většinou je druhý soubor podáván jako soubor s obnoveným měřítkem. Architektura Pentium M stále zůstává jedním dvojportovým registrovým souborem FP (8 položek MM/XMM) sdíleným se třemi dekodéry a registr FP nemá soubor stínového registru, protože jeho architektura souborů stínového registru neobsahovala funkci s plovoucí desetinnou čárkou. Procesor po P6, architektonický registrový soubor je externí a vyhledává se v backendu procesoru po vyřazení, naproti internímu registrovému souboru, který je umístěn ve vnitřním jádru pro přejmenování/změnu pořadí vyrovnávací paměti registru. V Core 2 je však nyní v jednotce s názvem RAT „tabulka aliasů registrů“, která se nachází s alokátorem instrukcí, ale má stejnou velikost registru jako důchod. Core 2 zvětšilo sběrnici vnitřního prstence na 24 bajtů (umožňuje dekódování více než 3 instrukcí) a rozšířilo soubor registru z duálního portování (jedno čtení/jeden zápis) na čtyřportový (dva čtení/dva zápisy), registr stále zůstává 8 záznamy v 32bitových a 32 bajtech (nezahrnuje 6 segmentový registr a jeden ukazatel instrukce, protože nemohou mít přístup do souboru jakýmkoli kódem/instrukcí) v celkové velikosti souboru a rozšířeny na 16 položek v x64 pro celkovou velikost 128 bytů na soubor. Z Pentium M se zvýšil jeho pipeline port a dekodér, ale jsou umístěny s tabulkou alokátorů místo vyrovnávací paměti kódu. Jeho soubor registru FP XMM se také zvyšuje na čtyřportovaný (2 čtení/2 zápis), registr stále zůstává 8 záznamů ve 32 bitech a rozšířen na 16 záznamů v režimu x64 a číslo stále zůstává 1, protože jeho architektura souboru stínového registru nezahrnuje plovoucí bodové/SSE funkce.

V pozdějších implementacích x86, jako je Nehalem a novější procesory, jsou celočíselné a plovoucí desetinné čárky nyní začleněny do unifikovaného souborového registru s více porty (šest čtení a dva zápisy) (8 + 8 v 32bitové a 16 + 16) v x64 na soubor), zatímco registrační soubor rozšířen na 2 s vylepšenou „Shadow Register File Architecture“ jako oblíbený způsob provádění hypervláknových vláken a každé vlákno používá pro svůj dekodér nezávislé registrační soubory. Později Sandy Bridge a dále nahradily tabulku stínových registrů a architektonické registry mnohem větším a ještě pokroknějším souborem fyzického registru před dekódováním do vyrovnávací paměti pro změnu pořadí. Pohyboval se po Sandy Bridge a dále už nenesl architektonický registr.

Na lince Atom byla moderní zjednodušená revize P5. Obsahuje jednotlivé kopie sdílení souborů registru s vláknem a dekodérem. Soubor registru je design se dvěma porty, 8/16 položek GPRS, ladicí registr 8/16 záznamů a kód stavu 8/16 položek jsou integrovány do stejného souboru. Má však 64bitový stínový registr s osmi položkami a 64bitový nepojmenovaný registr s osmi položkami, které jsou nyní na rozdíl od původního návrhu P5 odděleny od hlavních GPR a jsou umístěny za prováděcí jednotkou, a soubor těchto registrů je jedním portem a nevystavovat instrukcím, jako je zmenšený soubor stínového registru nalezený na Core/Core2 (soubor stínového registru jsou vytvořeny z architektonických registrů a Bonnell neměl kvůli tomu, že nemá "Shadow Register File Architecture"), nicméně soubor lze použít pro účely přejmenování nedostatek provedení mimo pořadí nalezený na architektuře Bonnell. Měl také jednu kopii souboru registru s plovoucí desetinnou čárkou XMM na vlákno. Rozdíl oproti Nehalemu je v tom, že Bonnell nemá jednotný soubor registru a nemá žádný vyhrazený soubor registru pro své hypervlákno. Místo toho Bonnell používá pro svůj podproces samostatný registr přejmenování, přestože není mimo provoz. Podobně jako Bonnell, Larrabee a Xeon Phi mají také pouze jeden soubor univerzálních registrů pro obecné účely, ale Larrabee má až 16 registrových souborů XMM (8 záznamů na soubor) a Xeon Phi má až 128 registračních souborů AVX-512 , z nichž každý obsahuje 32 512bitových registrů ZMM pro ukládání vektorových instrukcí, které mohou být velké jako mezipaměť L2.

Existují některé další řádky x86 společnosti Intel, které ve svém vnitřním provedení nemají soubor registru, Geode GX a Vortex86 a mnoho vestavěných procesorů, které nejsou kompatibilní s procesory rané 80x86 s procesorem Pentium nebo s reverzním inženýrstvím. Většina z nich proto nemá registrační soubor pro své dekodéry, ale jejich GPR se používají jednotlivě. Pentium 4 , na druhé straně, nemá registrový soubor pro svůj dekodér, protože jeho x86 GPR neexistovaly v jeho struktuře, kvůli zavedení fyzického sjednoceného přejmenovacího registru (podobně jako Sandy Bridge, ale mírně odlišný kvůli neschopnosti Pentia 4 použít registr před pojmenováním) pro pokus nahradit soubor architektonického registru a přeskočit schéma dekódování x86. Místo toho používá SSE pro provádění celých čísel a ukládání před ALU a po výsledku, SSE2/SSE3/SSSE3 používají stejný mechanismus také pro svou celočíselnou operaci.

Počáteční konstrukce AMD, jako je K6, nemá registrový soubor jako Intel a nepodporuje „Shadow Register File Architecture“, protože její nedostatek kontextového přepínače a bypass měniče, které jsou nezbytné, vyžaduje, aby soubor registru správně fungoval. Místo toho používají samostatné GPR, které přímo odkazují na tabulku registrů přejmenování pro její OoOE CPU s vyhrazeným celočíselným dekodérem a plovoucím dekodérem. Mechanismus je podobný řadě procesorů Intel před Pentium. Například procesor K6 má čtyři int (jeden osmimístný dočasný poškrábaný registrový soubor + jeden osmimístný budoucí registrační soubor + jeden osmipolohový načtený registrační soubor + osmimístný nepojmenovaný registrační soubor) a dva FP přejmenovací soubory registrů ( dva soubory s osmi položkami x87 ST, jeden jde fadd a jeden jde fmov), které přímo odkazují na jeho x86 EAX pro přejmenování celých čísel a registr XMM0 pro přejmenování s plovoucí desetinnou čárkou, ale později Athlon zahrnoval „stínový registr“ do svého předního konce, je zvětšen až na 40 záznamů sjednocený registrový soubor za účelem celočíselné operace před dekódováním obsahuje soubor registru 8 záznamů stírací registr + 16 budoucích registračních souborů GPR + 16 nejmenovaných registrových souborů GPR. V pozdějších návrzích AMD upouští od návrhu stínového registru a upřednostňuje architekturu K6 s individuálním návrhem přímého propojení GPR. Stejně jako Phenom má tři soubory int register a dva soubory registru SSE, které jsou umístěny v souboru fyzického registru přímo propojeného s GPR. Na Bulldozeru se však zmenší na jedno celé číslo + jedno s plovoucí desetinnou čárkou . Stejně jako rané designy AMD, většina výrobců x86, jako jsou Cyrix, VIA, DM&P a SIS, používala stejný mechanismus, což vedlo k nedostatku celočíselného výkonu bez přejmenování registru pro jejich CPU v pořadí. Společnosti jako Cyrix a AMD musely zvýšit velikost mezipaměti v naději, že sníží problémové místo. Celočíselná operace AMD SSE funguje jiným způsobem než Core 2 a Pentium 4; používá svůj samostatný přejmenovací celočíselný registr k načtení hodnoty přímo před fázi dekódování. Ačkoli teoreticky to bude vyžadovat pouze kratší potrubí než implementace SSE od Intelu, ale obecně jsou náklady na predikci větví mnohem vyšší a vyšší míra chybějících než Intel, a aby jeho instrukce SSE byla provedena bez ohledu na to, musí to trvat alespoň dva cykly široký rozsah instrukcí, protože rané implementace AMD nemohly provádět FP i Int v sadě instrukcí SSE, jako to dělala implementace Intelu.

Na rozdíl od Alpha , Sparc a MIPS umožňuje pouze jeden registrový soubor v daném okamžiku načíst/načíst jeden operand; k dosažení superscale by to vyžadovalo více registračních souborů. ARM procesor na druhou stranu není integrovat více souborů registru k zátěži / načtení instrukce. ARM GPR nemají pro sadu instrukcí žádný speciální účel (ARM ISA nevyžaduje akumulátor, index a body zásobníku/základny. Registry nemají akumulátor a bod základny/zásobníku lze použít pouze v režimu palce). Jakékoli GPR mohou nezávisle šířit a ukládat více instrukcí v menší velikosti kódu, která je dostatečně malá na to, aby se vešla do jednoho registru a její architektonický registr fungoval jako tabulka a sdílel se všemi dekodéry/instrukcemi s jednoduchým přepínáním bank mezi dekodéry. Hlavní rozdíl mezi ARM a jinými návrhy je v tom, že ARM umožňuje provoz na stejném univerzálním registru s rychlým přepínáním bank bez nutnosti dalšího souboru registru v superskaláru. Přestože x86 sdílí stejný mechanismus s ARM, že jeho GPR mohou ukládat jednotlivá data jednotlivě, x86 bude čelit závislosti na datech, pokud jsou uloženy více než tři nesouvisející instrukce, protože jeho GPR na soubor jsou příliš malé (osm v 32bitovém režimu a 16 v 64 bitů, ve srovnání s ARM 13 v 32 bit a 31 v 64 bit) pro data, a není možné mít superskalární bez více registrových souborů, které by byly napájeny do jeho dekodéru (x86 kód je velký a složitý ve srovnání s ARM). Protože většina front-endů x86 se stala mnohem větší a mnohem výkonnější než procesor ARM, aby byla konkurenceschopná (příklad: Pentium M & Core 2 Duo, Bay Trail). Některé x86 ekvivalentní procesory třetích stran se dokonce staly nekompetitivní s ARM, protože neměly vyhrazenou architekturu registrových souborů. Zejména pro AMD, Cyrix a VIA, které nemohou přinést žádný rozumný výkon bez přejmenování registru a mimo provoz, což ponechává pouze Intel Atom jako jediné procesorové jádro x86 v pořadí v mobilní konkurenci. To bylo do té doby, než procesor x86 Nehalem spojil jak celočíselný registr, tak registr s plovoucí desetinnou čárkou do jednoho jediného souboru, a zavedení velké tabulky fyzických registrů a vylepšené tabulky alokátorů do jeho front-endu před přejmenováním v jeho vnitřním jádru mimo pořadí .

Zaregistrujte přejmenování

Procesory, které provádějí přejmenování registru, mohou zajistit, aby každá funkční jednotka zapisovala do podmnožiny souboru fyzického registru. Toto uspořádání může eliminovat potřebu více portů pro zápis na bitovou buňku pro velké úspory oblasti. Výsledný soubor registru, ve skutečnosti hromada souborů registrů s jedinými porty pro zápis, pak těží z replikace a podmnožiny portů pro čtení. Na hranici by tato technika umístila na vstupy do každé funkční jednotky hromádku 1-zapisovacích a 2-přečtených souborů. Vzhledem k tomu, že souborům s malým počtem portů často dominuje oblast tranzistorů, je nejlepší tuto techniku ​​neposouvat na tuto hranici, ale je stejně užitečná.

Zaregistrujte okna

Tyto SPARC ISA definuje zaregistrovat okna , ve kterém 5-bitové architektonické názvy rejstříků vlastně bod do okna v mnohem větším souboru registrů, stovky položek. Implementace víceportových registrových souborů se stovkami položek vyžaduje velkou plochu. Okno registru se při přesunu posouvá o 16 registrů, takže každý název architektonického registru může odkazovat pouze na malý počet registrů ve větším poli, např. Architektonický registr r20 může odkazovat pouze na fyzické registry #20, #36, #52, # 68, #84, #100, #116, pokud je ve fyzickém souboru jen sedm oken.

Chcete-li ušetřit oblast, některé implementace SPARC implementují soubor registru se 32 položkami, ve kterém má každá buňka sedm „bitů“. Přes externí porty lze číst a zapisovat pouze jeden, ale obsah bitů lze otáčet. Rotace provádí v jediném cyklu pohyb okna registru. Protože většina vodičů provádějících pohyb stavu je lokální, je s malým výkonem možná obrovská šířka pásma.

Stejná technika je použita v mapovacím souboru přejmenování registru R10000 , který ukládá 6bitové číslo virtuálního registru pro každý z fyzických registrů. V souboru přejmenování je stav přejmenování zkontrolován, kdykoli je odebrána větev, takže když je větev detekována jako chybně předvídatelná, lze starý stav přejmenování obnovit v jediném cyklu. (Viz Přejmenování registrace .)

Viz také

Reference

externí odkazy