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.
- Registr instrukcí , držení aktuálně prováděné instrukce.
- Registry související s načítáním informací z RAM , sbírka úložných registrů umístěných na samostatných čipech z CPU:
- Register vyrovnávací paměti (MBR), také známý jakopaměťový datový registr(MDR)
- Register adres paměti (MAR)
- 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,2 je registr-registr a MOVE 1,1000 je 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.