Okno registrace - Register window

Příklad systému oken se 4 okny pro registraci registrů

V počítačové techniky , zaregistrovat okna jsou funkce, které věnuje registrů do podprogramu pomocí dynamicky aliasing podmnožinu interních registrů do pevných, programátor viditelné registrů. Registrační okna jsou implementována za účelem zlepšení výkonu procesoru snížením počtu operací zásobníku požadovaných pro volání funkcí a návraty. Jednou z nejvlivnějších funkcí návrhu Berkeley RISC byly později implementovány do architektur instrukčních sad, jako jsou AMD Am29000 , Intel i960 , Sun Microsystems SPARC a Intel Itanium .

Obecná obsluha

Pro různé části programu je k dispozici několik sad registrů. Registry jsou záměrně skryty před programátorem, aby přinutily několik podprogramů ke sdílení prostředků procesoru.

Vykreslování neviditelných registrů lze efektivně implementovat; CPU během volání procedury rozpozná pohyb z jedné části programu do druhé. Toho je dosaženo jedním z malého počtu instrukcí ( prolog ) a končí jedním z podobně malé sady ( epilog ) . V návrhu Berkeley by tato volání způsobila, že nová sada registrů bude v tom okamžiku „prohozena“ nebo označena jako „mrtvá“ (nebo „opakovaně použitelná“), když hovor skončí.

Aplikace v CPU

V designu Berkeley RISC je pro programy viditelných pouze osm registrů z celkových 64. Kompletní sada registrů je známá jako soubor registru a jakákoli konkrétní sada osmi jako okno . Soubor umožňuje až osmi procedurálním volbám mít vlastní sady registrů. Dokud program nevyvolává řetězce delší než osm hovorů hluboko, registry nikdy nemusí být přelévány , tj. Ukládány do hlavní paměti nebo mezipaměti, což je ve srovnání s přístupem k registru pomalý proces.

Pro srovnání, architektura Sun Microsystems SPARC poskytuje simultánní viditelnost do čtyř sad po osmi registrech. Tři sady po osmi registrech jsou „okénkové“. Osm registrů (i0 až i7) tvoří vstupní registry na aktuální úroveň procedury. Osm registrů (L0 až L7) je lokálních pro aktuální úroveň procedury a osm registrů (o0 až o7) je výstupem z aktuální úrovně procedury do další úrovně. Když se zavolá procedura, okno registru se posune o šestnáct registrů, skryje staré vstupní registry a staré místní registry a vytvoří staré výstupní registry pro nové vstupní registry. Pro předávání parametrů se používají společné registry (staré výstupní registry a nové vstupní registry). Nakonec je na všech úrovních procedur globálně viditelných osm registrů (g0 až g7).

AMD 29000 vylepšil design tím, že umožnil mít okna proměnné velikosti, což pomáhá využití v běžném případě, kdy je pro hovor potřeba méně než osm registrů. Rovněž rozdělil registry na globální sadu 64 a dalších 128 pro okna. Podobně architektura IA-64 (Itanium) používala okna s proměnnou velikostí, s 32 globálními registry a 96 pro okna.

V architektuře Infineon C166 je většina registrů jednoduše umístění ve vnitřní paměti RAM, které mají další vlastnost, že jsou přístupné jako registry. Z toho adresy 16 registrů pro všeobecné použití (R0-R15) nejsou pevné. Místo toho je registr R0 umístěn na adrese, na kterou ukazuje registr "Context Pointer" (CP), a zbývajících 15 registrů následuje postupně za sebou.

Registrační okna také poskytují snadnou cestu k upgradu. Protože další registry jsou pro programy neviditelné, lze kdykoli přidat další okna. Například použití objektově orientovaného programování často vede k většímu počtu „menších“ hovorů, což lze zvládnout například zvýšením počtu oken z osmi na šestnáct. To byl přístup používaný v SPARC, který zahrnoval více registračních oken s novějšími generacemi architektury. Konečným výsledkem je méně operací rozlití a vyplnění pomalého registru, protože okna registrů přetékají méně často.

Kritika

Registrační okna nejsou jediným způsobem, jak zlepšit výkon registru. Skupina na Stanfordské univerzitě, která navrhovala MIPS, viděla práci v Berkeley a rozhodla, že problémem není nedostatek registrů, ale špatné využití těch stávajících. Oni místo toho investovali více času ve svém kompilátoru ‚s přidělení registru , ujistěte se, že moudře používal větší sadu k dispozici v MIPS. To vedlo ke snížení složitosti čipu, přičemž polovina z celkového počtu registrů poskytovala potenciálně vyšší výkon v případech, kdy by jeden postup mohl využít větší viditelný prostor registru. Nakonec s moderními kompilátory MIPS lépe využívá svůj registrový prostor i během volání procedur.

Reference