Registr procesoru - Processor register

Registr procesoru je rychle dostupné místo dostupné procesoru počítače . Registry se obvykle skládají z malého množství rychlého úložiště , ačkoli některé registry mají specifické hardwarové funkce a mohou být jen pro čtení nebo pouze pro zápis. V počítačové architektuře jsou registry obvykle adresovány jinými mechanismy než hlavní pamětí , ale v některých případech jim může být přiřazena adresa paměti, např. DEC PDP-10 , ICT 1900 .

Téměř všechny počítače, ať už načítají/ukládají architekturu nebo ne, načítají data z větší paměti do registrů, kde se používají pro aritmetické operace a jsou manipulovány nebo testovány podle pokynů stroje . Manipulovaná data jsou pak často ukládána zpět do hlavní paměti, a to buď stejnou instrukcí, nebo následnou. Moderní procesory používají jako hlavní paměť statickou nebo dynamickou RAM , přičemž k druhé se obvykle přistupuje prostřednictvím jedné nebo více úrovní mezipaměti .

Registry procesorů jsou obvykle na vrcholu hierarchie paměti a poskytují nejrychlejší způsob přístupu k datům. Termín obvykle odkazuje pouze na skupinu registrů, které jsou přímo kódovány jako součást instrukce, jak je definováno instrukční sadou . Moderní vysoce výkonné procesory však často mají duplikáty těchto „architektonických registrů“, aby zlepšily výkon prostřednictvím přejmenování registrů , což umožňuje paralelní a spekulativní provádění . Moderní design x86 získal tyto techniky kolem roku 1995 s vydáním Pentium Pro , Cyrix 6x86 , Nx586 a AMD K5 .

Když počítačový program přistupuje opakovaně ke stejným datům, nazývá se to referenční lokalita . Uchovávání často používaných hodnot v registrech může být rozhodující pro výkon programu. Přidělení registru provádí buď kompilátor ve fázi generování kódu , nebo ručně programátor jazyka sestavení .

Velikost

Registry se obvykle měří počtem bitů, které mohou pojmout, například „ 8bitový registr“, „ 32bitový registr“ nebo „ 64bitový registr“ nebo dokonce více. V některých sadách instrukcí mohou registry pracovat v různých režimech rozdělením své paměťové paměti na menší (například 32bitové do čtyř 8bitových), do kterých lze načíst více dat (vektor nebo jednorozměrné pole dat ) a současně operovány. Obvykle se implementuje přidáním dalších registrů, které mapují jejich paměť do většího registru. Procesory, které mají schopnost provádět jednu instrukci na více datech, se nazývají vektorové procesory .

Typy

Procesor často obsahuje několik druhů registrů, které lze klasifikovat podle jejich obsahu nebo pokynů, které na nich fungují:

  • Uživatelsky přístupné registry lze číst nebo zapisovat podle pokynů na stroji. Nejběžnější rozdělení uživatelsky přístupných registrů je na datové registry a registry adres.
    • Datové registry smohou obsahovatčíselné hodnoty dat,jako jecelé číslo,a v některých architekturách hodnoty s plovoucí desetinnou čárkou, stejně jakoznaky, malábitová polea další data. V některých starších a nižších procesorechse pro mnoho operací implicitně používáspeciální datový registr, známý jakoakumulátor.
    • Adresový registr sdržetadresya jsou používány instrukcí, které nepřímo přistupujíprimární paměti.
      • Některé procesory obsahují registry, které lze použít pouze k uchování adresy nebo pouze k uchování číselných hodnot (v některých případech se používá jako indexový registr, jehož hodnota je přidána jako offset od určité adresy); jiné umožňují registrům uchovávat jakýkoli druh množství. Existuje široká škála možných režimů adresování , používaných k určení efektivní adresy operandu.
      • Ukazatel zásobníku se používá ke správě zásobníku za běhu . Zřídka jsou jiné datové zásobníky adresovány vyhrazenými adresními registry, viz stroj na zásobníku .
    • Univerzální registry ( GPR ) mohou ukládat data i adresy, tj. Jsou to kombinované registry dat/adres; V některých architekturách je soubor registru je sjednocen tak, že GPRS je možné uložit čísla s plovoucí desetinnou čárkou stejně.
    • Stavové registry uchovávajípravdivostní hodnoty, které sečasto používají k určení, zda se má nebo nemá provést nějaká instrukce.
    • Registry spohyblivou řádovou čárkou(FPRs) ukládajíčíslasplovoucí desetinnou čárkouv mnoha architekturách.
    • Konstantní registry uchovávají hodnoty pouze pro čtení, jako je nula, jedna nebopi.
    • Vektorové registry uchovávají data provektorové zpracováníprováděnéinstrukcemiSIMD(jednoduchá instrukce, více dat).
    • Účelové registry ( SPR ) uchovávají stav programu; obvykle obsahují programový čítač , nazývaný také ukazatel instrukce, a stavový registr ; čítač programu a stavový registr mohou být kombinovány v registru stavového slova programu (PSW). Výše uvedený ukazatel zásobníku je někdy také zahrnut do této skupiny. Vestavěné mikroprocesory mohou mít také registry odpovídající specializovaným hardwarovým prvkům.
    • V některých architekturách registry specifické pro model (také nazývané registry specifické pro stroj ) ukládají data a nastavení související se samotným procesorem. Protože jejich významy jsou spojeny s designem konkrétního procesoru, nelze očekávat, že mezi generacemi procesorů zůstanou standardní.
    • Registry rozsahů typu paměti (MTRRs)
  • Interní registry - registry nedostupné podle pokynů, používané interně pro operace procesoru.
  • Architektonický registr- Registry viditelné pro software definovaný architekturou nemusí odpovídat fyzickému hardwaru, pokud je přejmenování registru prováděno základním hardwarem.

Hardwarové registry jsou podobné, ale vyskytují se mimo CPU.

V některých architekturách (například SPARC a MIPS ), první nebo poslední registr ve integer souboru registru je pseudo-registr takovým způsobem, že to je jediná možnost, aby se vždy vrátí nulu při čtení (většinou ke zjednodušení režimů indexování), a to nemůže být přepsán. V Alpha se to také dělá pro soubor registru s plovoucí desetinnou čárkou. V důsledku toho jsou soubory registrů běžně uváděny tak, že mají o jeden registr více, než kolik z nich je skutečně použitelných; například 32 registrů je citováno, když se pouze 31 z nich vejde do výše uvedené definice registru.

Příklady

Následující tabulka ukazuje počet registrů v několika hlavních architekturách CPU. Všimněte si, že v procesorech kompatibilních s x86 je ukazatel zásobníku ( ESP ) počítán jako celočíselný registr, přestože existuje omezený počet instrukcí, které lze použít k ovládání jeho obsahu. Podobná upozornění platí pro většinu architektur.

Ačkoli jsou všechny výše uvedené architektury odlišné, téměř všechny jsou základním uspořádáním známým jako architektura Von Neumanna , kterou poprvé navrhl maďarsko-americký matematik John von Neumann . Je také pozoruhodné, že počet registrů na GPU je mnohem vyšší než na CPU.

Architektura Registry GPR/data+adresy
Registry FP
Poznámky
AT & T Hobit 0 hromádka 7 Stohovací stroj
Cray-1 8 skalárních dat, 8 adres 8 skalárních, 8 vektorových (64 prvků) Registry skalárních dat mohou být celočíselné nebo s plovoucí desetinnou čárkou; také 64 skalárních scratch-pad T registrů a 64 adresních scratch-pad B registrů
4004 1 akumulátor, 16 dalších 0 Registr A je pro obecné účely, zatímco registry r0 – r15 jsou pro adresu a segment.
8008 1 akumulátor, 6 dalších 0 Registr A je akumulátor, do kterého se provádí veškerá aritmetika; registry H a L mohou být použity v kombinaci jako registr adres; všechny registry lze použít jako operandy v instrukcích load/store/move/increment/decrement a jako další operand v aritmetických instrukcích. Není k dispozici žádná jednotka FP.
8080 1 akumulátor, 6 dalších 0 Plus ukazatel na zásobník. Registr A je akumulátor, do kterého se provádí veškerá aritmetika; páry registrů B+C, D+E a H+L lze v některých instrukcích použít jako registry adres; všechny registry lze použít jako operandy v instrukcích load/store/move/increment/decrement a jako další operand v aritmetických instrukcích. Některé pokyny používají pouze H+L; další instrukce prohodí H+L a D+E. Procesory s pohyblivou řádovou čárkou určené pro 8080 byly Intel 8231 , AMD Am9511 a Intel 8232 . Byly také snadno použitelné s procesory Z80 a podobnými.
iAPX432 0 hromádka 6 Stohovací stroj
16bitové x86 6 hromádka 8 (pokud je přítomen FP) 8086 / 8088 , 80186 / 80.188 , 80.286 , s 8087 , 80187 nebo 80287 pro plovoucí desetinnou čárkou, s 80-bit široká, 8 hluboký registr stack s několika instrukcemi mohli používat registry ve vztahu k vrcholu zásobníku operandů as; bez 8087/80187/80287, žádné registry s plovoucí desetinnou čárkou
IA-32 8 zásobník 8 (je -li přítomen FP), 8 (je -li přítomen SSE/MMX) 80386 vyžadovalo 80387 pro plovoucí desetinnou čárku, pozdější procesory měly vestavěnou plovoucí desetinnou čárku, přičemž oba měly 80bitový široký, 8 hluboký registr registrů s některými instrukcemi schopnými používat registry jako operandy ve vztahu k horní části zásobníku. Pentium III a později měl SSE s dalšími 128 bitových XMM registrů.
x86-64 16 16/32 Registry FP jsou 128bitové registry XMM, později rozšířené na 256bitové registry YMM s AVX/AVX2 a 512bitové registry ZMM0-ZMM31 s AVX-512 .
Xeon Phi 16 32 Včetně 32 256/512bitových registrů ZMM s AVX-512.
Fairchild F8 jeden akumulátor, 64 registrů scratchpadů, jeden nepřímý registr scratchpadu (ISAR) není k dispozici Pokyny mohou přímo odkazovat na prvních 16 registrů scratchpadu a mohou přistupovat ke všem registrům scratchpadu nepřímo prostřednictvím ISAR
Geode GX 1 data, 1 adresa 8 Geode GX / Media GX / 4x86 / 5x86 je emulace 486 / Pentium kompatibilního procesoru od společnosti Cyrix / National Semiconductor . Stejně jako Transmeta měl procesor překladovou vrstvu, která přeložila kód x86 do nativního kódu a spustila ho. Nepodporuje 128bitové registry SSE, pouze 80387 zásobník osmi 80bitových registrů s plovoucí desetinnou čárkou a částečně podporuje 3DNow! od AMD. Nativní procesor obsahuje pouze 1 datový a 1 adresní registr pro všechny účely a je přeložen do 4 cest 32bitového pojmenovacího registru r1 (základna), r2 (data), r3 (zadní ukazatel) a r4 (ukazatel zásobníku) v rámci scratchpad sram pro celočíselný provoz a používá mezipaměť L1 pro emulaci kódu x86 (všimněte si, že není kompatibilní s některými pokyny 286/386/486 v reálném režimu). Později byl design opuštěn poté, co AMD získala IP od National Semiconductor a na vloženém trhu jej označila jádrem Athlon.
SunPlus SPG 0 6 stohů + 4 SIMD 16bitový, 32bitový procesor pro stohování adresního prostoru od tchajwanské společnosti Sunplus Technology, lze jej nalézt na řadě Vtech V.Smile pro vzdělávací účely a konzole videoher jako bezdrátová 60, Mattel HyperScan a XaviXPORT. postrádá jakýkoli obecný registr nebo interní registr pro pojmenování/přejmenování, ale jeho jednotka s plovoucí desetinnou čárkou má 80bitový 6stupňový zásobník a čtyři 128bitové registry VLIW SIMD na koprocesoru vertex shaderu.
VM Labs Nuon 0 1 32bitový procesor strojového zásobníku, který byl vyvinut v laboratořích VM pro specializaci na multimediální účely. Lze jej nalézt na vlastní herní konzoli Nuon DVD přehrávač společnosti a Game Wave Family Entertainment System od her ZaPit. Design byl silně ovlivněn technologií Intel MMX, obsahoval 128 bajtů unifikovanou vyrovnávací paměť pro vektorové i skalární instrukce. sjednocenou mezipaměť lze rozdělit na 8 128bitových vektorových registrů nebo 32 32bitových skalárních registrů SIMD prostřednictvím přejmenování bank, v této architektuře nebyl nalezen celočíselný registr.
Nios II 31 8 Nios II je založen na instrukční sadě MIPS IV a má 31 32bitových GPR, přičemž registr 0 je napevno připojen k nule a 8 64bitových registrů s plovoucí desetinnou čárkou
Motorola 6800 2 data, 1 index 0 Plus ukazatel na zásobník
Motorola 68 tis 8 dat (d0-d7), 8 adresa (a0-a7) 8 (je -li přítomen FP) Registr adres 8 (a7) je ukazatel zásobníku. 68000, 68010, 68012, 68020 a 68030 vyžadují FPU pro pohyblivou řádovou čárku; 68040 měla vestavěnou FPU. Registry FP jsou 80bitové.
SH 16bitový 1 6
Motor emocí 3 (VU0)+ 32 (VU1) 32 SIMD (integrováno v UV1) + 2x 32 Vector (vyhrazený vektorový koprocesor, který se nachází poblíž jeho GPU) Hlavní jádro Emotion Engine (VU0) je silně upravené obecné jádro DSP, které je určeno pro obecné úlohy na pozadí a obsahuje jeden 64bitový akumulátor, dva obecné datové registry a jeden 32bitový čítač programů. Upravené spustitelné jádro MIPS III (VU1) je určeno pro řízení herních dat a protokolů a obsahuje 32 položek 32bitové obecné registry pro výpočet celých čísel a 32 položek 128bitové registry SIMD pro ukládání instrukcí SIMD, streamování dat a některých celých čísel výpočtová hodnota. jeden registr akumulátoru pro připojení obecného výpočtu s plovoucí desetinnou čárkou k souboru vektorového registru na koprocesoru. Koprocesor je postaven na 32 položkách 128bitového souboru vektorového registru (může ukládat pouze vektorovou hodnotu, která prochází z akumulátoru v CPU) a není integrován žádný celočíselný registr. hlavní procesorový modul (VU0 + VU1 + VPU0 + VPU1) jsou postaveny na základě upravené sady instrukcí MIPS a akumulátor v tomto případě není obecný účel, ale stav ovládání.
CUDA konfigurovatelné, až 255 na vlákno Dřívější generace umožňovaly až 127/63 registrů na vlákno ( Tesla / Fermi ). Čím více registrů je nakonfigurováno na vlákno, tím méně vláken lze spustit současně. Registry jsou široké 32 bitů, čísla s plovoucí desetinnou čárkou s dvojitou přesností a 64bitové ukazatele vyžadují dva registry. Navíc má až 8 predikátových registrů na vlákno
Řada CDC 6000 16 8 8 registrů „A“ A0-A7 uchovávají 18bitové adresy; 8 registrů 'B' B0-B7 uchovávají 18bitové celočíselné hodnoty (s B0 trvale nastavenými na nulu); 8 registrů 'X' X0-X7 pojme 60 bitů celých čísel nebo dat s plovoucí desetinnou čárkou. Sedm z osmi 18bitových A registrů bylo spojeno s jejich odpovídajícími X registry: nastavení libovolného z registrů A1 až A5 na hodnotu způsobilo načtení paměti obsahu této adresy do odpovídajícího X registru. Stejně tak nastavení adresy do registrů A6 nebo A7 způsobilo uložení paměti do tohoto místa v paměti z X6 nebo X7. (Registry A0 a X0 nebyly takto spojeny).
System/360 , System/370 , System/390 , z/Architecture 16 4 (je -li přítomen FP); 16 v modelech G5 a novějších S/390 a z/Architecture FP byl volitelný v System/360 a vždy byl přítomen v S/370 a novějších. V procesorech s Vector Facility existuje 16 vektorových registrů obsahujících počet 32bitových prvků závislý na počítači. Některým registrům je přiřazen pevný účel voláním konvencí ; například registr 14 se používá pro návratové adresy podprogramů a pro ELF ABI se registr 15 používá jako ukazatel zásobníku. Procesor S/390 G5 zvýšil počet registrů s plovoucí desetinnou čárkou na 16.
MMIX 256 256 Instrukční sada navržená Donaldem Knuthem na konci 90. let pro pedagogické účely.
NS320xx 8 8 (je -li přítomen FP)
Xelerated X10 1 32 síťový procesor založený na 32/40 bitovém stroji s upravenou instrukcí MIPS a 128bitovou jednotkou s plovoucí desetinnou čárkou.
Vrtule paralaxy 0 2 Osmijádrový 8/16 bitový krájený stohovací řadič s jednoduchým logickým cirkusem uvnitř, s osmi čítači ozubených kol (jádro) a každý obsahuje tři 8/16 bitové speciální řídicí registry s 32bitovým x 512 stack beranem, ale nenese žádný obecný registr pro celočíselné účely. na rozdíl od většiny souborů stínových registrů v moderním procesoru a vícejádrovém systému lze ke všem těmto zásobníkům RAM v zubu přistupovat na úrovni instrukcí, které všechny tyto ozubené kolečka mohou v případě potřeby fungovat jako jedno velké jádro pro obecné účely. Jednotka s pohyblivou řádovou čárkou je externí a obsahuje dva 80bitové vektorové registry.
Itanium 128 128 A 64 1bitových predikátových registrů a 8 větvových registrů. Registry FP jsou 82bitové.
SPARC 31 32 Globální registr 0 je pevně zapojen do 0. Používá okna registru .
POWER IBM 32 32 A 1 odkaz a 1 registr počtu.
Napájení ISA 32 32 A 1 odkaz a 1 registr počtu. Procesory podporující zařízení Vector mají také 32 128bitových vektorových registrů,
Blackfin 8 dat, 2 akumulátor, 6 adres 0 A ukazatel zásobníku a ukazatel rámce. Další registry se používají k implementaci smyček s nulovou režií a kruhových vyrovnávacích pamětí DAG (generátory datových adres).
IBM Cell SPE 128 128 GPR, které mohou obsahovat hodnoty celého čísla, adresy nebo plovoucí desetinné čárky
PDP-10 16 Obecně lze použít všechny (celé číslo, plovák, ukazatel zásobníku, skok, indexování atd.). Každé slovo s 36bitovou pamětí (nebo registrem) lze také zpracovat jako poloviční slovo, které lze považovat za (18bitovou) adresu. Jiné výklady slov používají určité pokyny. V původních procesorech PDP-10 odpovídalo těchto 16 GPR také místům hlavní (tj. Jádrové ) paměti 0-15; hardwarová volba zvaná „rychlá paměť“ implementovala registry jako oddělené integrované obvody a odkazy na paměťová místa 0-15 odkazovaly na registry IC. Pozdější modely implementovaly registry jako „rychlou paměť“ a pokračovaly v tom, aby na ně odkazovala paměťová místa 0-15. Pohybové instrukce berou (registr, paměť) operandy: MOVE 1,2je registr-registr a MOVE 1,1000je paměť-registr.
PDP-11 7 6 (je -li přítomen FPP) R7 je ve skutečnosti programový čítač. Ukazatelem zásobníku může být jakýkoli registr, ale pro přerušení hardwaru a pasti se používá R6.
VAX 16 GPR se používají také pro hodnoty s plovoucí desetinnou čárkou. Tři z registrů mají speciální použití: R12 (ukazatel na argumenty), R13 (ukazatel na rámeček) a R14 (zásobník na ukazatel), zatímco R15 odkazuje na programový čítač.
Alfa 31 31 Registry R31 (celé číslo) a F31 (plovoucí desetinná čárka) jsou pevně zapojeny na nulu.
6502 1 data, 2 rejstřík 0 Registr obsahu A (akumulátoru) 6502 pro hlavní úložiště dat a adresu paměti (8bitová data/16bitová adresa), X, Y jsou nepřímé a přímé rejstříkové registry (v uvedeném pořadí) a registr SP jsou pouze specifický index.
W65C816S 1 0 65c816 je 16bitový nástupce 6502. X, Y, D (přímý registr stránek) jsou registry podmínek a registr SP jsou pouze specifickým indexem. hlavní akumulátor rozšířen na 16bitový (C) při zachování kompatibility 8bitový (A) a hlavní registr nyní může adresovat až 24bitové (16bitové datové instrukce široké/24bitová adresa paměti).
65 tis 1 0 Přímý nástupce registru 6502, 65002 pouze obsahu A (Accumulator) pro hlavní úložiště dat a rozšíření dat na 32bitové a 64bitové instrukce, podpora 48bitové virtuální adresy v softwarovém režimu, X, Y jsou stále registrem podmínek a zůstávají 8bitové a registr SP jsou specifickým indexem, ale zvětšují se na 16bitové šířky.
MeP 4 8 Media-embedded processor was a 32 bit processor developed by toshiba, a modded 8080 instruction set only only A, B, C, D register available through all mode (8/16/32 bit) and nekompatibilní s x86, however it contains 80 bit jednotka s plovoucí desetinnou čárkou, která je kompatibilní s x87.
Mikrokontrolér PIC 1 0
Mikrokontrolér AVR 32 0
ARM 32bitový (ARM/A32, Thumb-2/T32) 14 Liší se (až 32) r15 je programový čítač a nelze jej použít jako GPR; r13 je ukazatel zásobníku; r8-r13 lze vypnout pro ostatní (nakloněné) přepínačem režimu procesoru. Starší verze měly 26bitové adresování a pro stavové příznaky používaly horní bity programového čítače (r15), takže registr byl 32bitový.
ARM 32 bitů (palec) 8 16 Verze 1 Thumb, která podporovala pouze přístup k registrům r0 až r7
ARM 64bitový (A64) 31 32 Registr r31 je ukazatel zásobníku nebo pevně připojen k 0, v závislosti na kontextu.
MIPS 31 32 Celočíselný registr 0 je pevně připojen k 0.
RISC-V 31 32 Celočíselný registr 0 pevně zapojený do 0. Varianta RV32E určená pro systémy s velmi omezenými prostředky má 15 celočíselných registrů.
Zjevení Páně 64 (na jádro) Každá instrukce určuje, zda jsou registry interpretovány jako celá čísla nebo s jednoduchou plovoucí desetinnou čárkou. Architektura je škálovatelná na 4096 jader s 16 a 64 jádrovými implementacemi, které jsou v současné době k dispozici.

Používání

Počet registrů dostupných na procesoru a operace, které lze pomocí těchto registrů provádět, má významný dopad na účinnost kódu generovaného optimalizací překladačů . Počet Strahler expresního stromu udává minimální počet registrů potřebných pro vyhodnocení tohoto výrazu stromu.

Viz také

Reference