Registrace přidělení - Register allocation - Wikipedia
v optimalizace kompilátoru, přidělení registru je proces přiřazení velkého počtu cílových programů proměnné na malý počet procesor registry.
K alokaci registru může dojít přes a základní blok (přidělení místního registru), přes celou funkci /postup (přidělení globálního registru), nebo přes hranice funkcí procházející přes call-graph (přidělení meziprocesního registru). Po dokončení podle funkce / postupu konvence volání může vyžadovat vložení uložení / obnovení kolem každého call-site.
Kontext
Zásada
Architektura | 32 bitů | 64 bitů |
---|---|---|
PAŽE | 15 | 31 |
Intel x86 | 8 | 16 |
MIPS | 32 | 32 |
RISC-V | 16/32 | 32 |
SPARC | 31 | 31 |
V mnoha programovací jazyky, programátor může použít libovolný počet proměnné. Počítač umí rychle číst a psát registry v procesor, takže počítačový program běží rychleji, když v registrech CPU může být více proměnných.[1] Také někdy je přístup k registrům kódu kompaktnější, takže kód je menší a lze jej načíst rychleji, pokud používá registry spíše než paměť. Počet registrů je však omezený. Proto, když překladač překládá kód do strojového jazyka, musí se rozhodnout, jak přidělit proměnné omezenému počtu registrů v CPU.[2][3]
Ne všechny proměnné jsou při použití (nebo „live“) současně, takže po celou dobu životnosti programu lze daný registr použít k uložení různých proměnných. Dvě proměnné používané v stejný čas nelze přiřadit stejnému registru bez poškození jedné z proměnných. Pokud není dostatek registrů k uložení všech proměnných, mohou být některé proměnné přesunuty do az RAM. Tento proces se nazývá „rozlití“ registrů.[4] Po celou dobu životnosti programu může být proměnná rozlita i uložena do registrů: tato proměnná je poté považována za „rozdělenou“.[5] Přístup k RAM je podstatně pomalejší než přístup k registrům [6] a tak kompilovaný program běží pomaleji. Optimalizační kompilátor si tedy klade za cíl přiřadit registrů co nejvíce proměnných. Výška "Zaregistrujte tlak „je technický termín, který znamená, že je potřeba více rozlití a opětovného načtení; je definován Braunem a kol. jako„ počet současně živých proměnných na instrukci “.[7]
Kromě toho některé počítačové designy mezipaměti často přístupné registry. Programy lze tedy dále optimalizovat přiřazením stejného registru ke zdroji a cíli a hýbat se
kdykoli je to možné. To je zvláště důležité, pokud kompilátor používá mezilehlé zastoupení jako statický formulář pro jedno přiřazení (SSA). Zejména pokud SSA není plně optimalizována, může uměle generovat další hýbat se
instrukce.
Složky alokace registrů
Alokace registru tedy spočívá ve volbě umístění proměnných za běhu, tj. Uvnitř nebo vně registrů. Pokud má být proměnná uložena v registrech, musí alokátor určit, ve kterých registrech bude tato proměnná uložena. Další výzvou je nakonec určit dobu, po kterou by proměnná měla zůstat na stejném místě.
Alokátor registrů, bez ohledu na zvolenou alokační strategii, se při řešení těchto výzev může spolehnout na soubor klíčových akcí. Tyto akce lze shromáždit do několika různých kategorií:[8]
- Přesunout vložení
- Tato akce spočívá ve zvýšení počtu instrukcí k přesunu mezi registry, tj. Aby proměnná byla v průběhu své životnosti namísto jednoho aktivní v různých registrech. K tomu dochází v přístupu děleného živého dosahu.
- Rozlití
- Tato akce spočívá v uložení proměnné do paměti namísto registrů.[9]
- Úkol
- Tato akce spočívá v přiřazení registru k proměnné.[10]
- Sloučení
- Tato akce spočívá v omezení počtu tahů mezi registry, čímž se omezuje celkový počet pokynů. Například identifikací proměnné naživo napříč různými metodami a jejím uložením do jednoho registru po celou dobu její životnosti.[9]
Mnoho přístupů k alokaci registrů se optimalizuje pro jednu nebo více konkrétních kategorií akcí.

Běžné problémy vzniklé při přidělování registrů
Alokace registrů vyvolává několik problémů, které lze řešit (nebo jim lze zabránit) různými přístupy k alokaci registrů. Tři z nejběžnějších problémů jsou identifikovány následovně:
- Aliasing
- V některých architekturách může přiřazení hodnoty k jednomu registru ovlivnit hodnotu jiného: tomu se říká aliasing. Například x86 architektura má čtyři univerzální 32bitové registry, které lze také použít jako 16bitové nebo 8bitové registry.[11] V tomto případě přiřazení 32bitové hodnoty registru eax ovlivní hodnotu al registru.
- Předbarvení
- Tento problém slouží k vynucení přiřazení některých proměnných konkrétním registrům. Například v PowerPC konvence volání, parametry se běžně předávají v R3-R10 a návratová hodnota se předává v R3.[12]
- NP-problém
- Chaitin a kol. ukázal, že alokace registru je a NP-kompletní problém. Snižují zbarvení grafu problém s alokací registru problém tím, že ukazuje, že pro libovolný graf může být program sestaven tak, že alokace registru pro program (s registry představujícími uzly a strojovými registry představujícími dostupné barvy) by byla zbarvením původního grafu. Protože zbarvení grafu je problém NP-Hard a přidělení registru je v NP, dokazuje to NP-úplnost problému.[13]
Zaregistrujte techniky přidělování
K alokaci registru může dojít přes a základní blok kódu: říká se o něm, že je „místní“, a poprvé jej zmínil Horwitz a kol.[14] Jelikož základní bloky neobsahují větve, je proces alokace považován za rychlý, protože správa kontrolní tokový graf slučovací body v alokaci registru se odhalí[je zapotřebí objasnění ] časově náročná operace.[15] Předpokládá se však, že tento přístup neprodukuje tak optimalizovaný kód jako „globální“ přístup, který funguje na celé kompilační jednotce (například metodě nebo postupu).[16]
Přidělení grafu
Alokace grafických barev je převládajícím přístupem k řešení alokace registrů.[17][18] Poprvé to navrhli Chaitin et al.[4]V tomto přístupu uzly v graf představují živé rozsahy (proměnné, dočasné, virtuální / symbolické registry), které jsou kandidáty na přidělení registrů. Hrany spojují živé rozsahy, které interferují, tj. Živé rozsahy, které jsou současně aktivní alespoň v jednom programovém bodě. Přidělení registru se poté sníží na zbarvení grafu problém, při kterém jsou barvy (registry) přiřazeny uzlům tak, že dva uzly spojené hranou nedostávají stejnou barvu.[19]
Použitím analýza živosti, lze vytvořit interferenční graf. Graf interference, což je neorientovaný graf kde uzly jsou proměnné programu, se používá k modelování, které proměnné nelze přiřadit ke stejnému registru.[20]
Zásada
Hlavní fáze v alokátoru registru pro barvení grafů ve stylu Chaitin jsou:[18]

- Přečíslovat: objevte informace o živém dosahu ve zdrojovém programu.
- Stavět: sestavte interferenční graf.
- Splynout: sloučí živé rozsahy neinterferujících proměnných souvisejících s pokyny pro kopírování.
- Náklady na únik: vypočítat náklady na únik každé proměnné. Tím se hodnotí dopad mapování proměnné na paměť na rychlost konečného programu.
- Zjednodušit: vytvořit uspořádání uzlů v grafu inferencí
- Únikový kód: vložte pokyny k rozlití, tj. načte a uložíte hodnoty pro dojíždění mezi registry a pamětí.
- Vybrat: přiřadit registr každé proměnné.
Nevýhody a další vylepšení
Přidělení zbarvení grafu má tři hlavní nevýhody. Nejprve se opírá o zbarvení grafu, což je NP-úplný problém, rozhodnout, které proměnné jsou rozlité. Nalezení minimálního barevného grafu je skutečně NP-úplný problém.[21] Zadruhé, pokud se nepoužívá rozdělení na živý rozsah, vypuzené proměnné se rozlévají všude: instrukce pro ukládání (respektive načítání) se vkládají co nejdříve (respektive pozdě), tj. Hned za (respektive před) definice proměnných (respektive použití). Za třetí, proměnná, která není rozlita, je po celou dobu životnosti uchovávána ve stejném registru.[22]
Na druhou stranu se jeden název registru může objevit ve více třídách registrů, kde třída je sada názvů registrů, které jsou v konkrétní roli zaměnitelné. Potom může být více názvů registrů aliasem pro jeden hardwarový registr.[23] Nakonec je zbarvení grafu agresivní technikou pro přidělování registrů, ale je výpočetně nákladné kvůli jeho použití interferenčního grafu, který může mít nejhorší velikost, která je kvadratický v počtu živých rozsahů.[24]Tradiční formulace alokace registrů grafů implicitně předpokládá jedinou banku nepřekrývajících se univerzálních registrů a nezpracovává nepravidelné architektonické prvky, jako jsou páry překrývajících se registrů, registry zvláštních účelů a více bank registrů.[25]
Jedno pozdější vylepšení přístupu k barvení grafů ve stylu Chaitin našli Briggs et al.: Nazývá se to konzervativní splynutí. Toto vylepšení přidává kritérium rozhodující, kdy lze sloučit dva živé rozsahy. Hlavně kromě požadavků na neinterferování lze sloučit dvě proměnné pouze v případě, že jejich sloučení nezpůsobí další rozlití. Briggs a kol. zavádí druhé vylepšení Chaitinových děl, což je zaujaté zbarvení. Předpjaté zbarvení se pokusí přiřadit stejnou barvu v barvení grafu živému rozsahu, který souvisí s kopírováním.[18]
Lineární skenování
Lineární skenování je dalším přístupem globálního přidělování registrů. Poprvé to navrhli Poletto et al. v roce 1999.[26] V tomto přístupu se kód nezměnil na graf. Místo toho jsou všechny proměnné lineárně skenovány, aby se určil jejich živý rozsah, představovaný jako interval. Po zjišťování živých rozsahů všech proměnných jsou intervaly procházeny chronologicky. Ačkoli by tento přechod mohl pomoci identifikovat proměnné, jejichž živé rozsahy interferují, nedochází k vytváření žádného interferenčního grafu a proměnné jsou alokovány chamtivě.[24]
Motivací pro tento přístup je rychlost; ne z hlediska doby provedení generovaného kódu, ale z hlediska času stráveného generováním kódu. Standardní přístupy k barvení grafů obvykle produkují kvalitní kód, ale mají značný význam nad hlavou,[27][28] použitý algoritmus zbarvení grafu má kvadratickou cenu.[29] Díky této funkci je lineární skenování v současné době přístup používaný v několika kompilátorech JIT, jako je Kompilátor hotspotů, V8 a Jikes RVM.[5]
Pseudo kód
Toto popisuje algoritmus, který poprvé navrhl Poletto et al.[30]
LinearScanRegisterAllocation aktivní ← {} pro každého živý interval i, v pořadí podle rostoucího počátečního bodu dělat ExpireOldIntervals (i) -li délka (aktivní) = R pak SpillAtInterval (i) jiný registrovat [i] ← registr odstraněn z fondu bezplatných registrů přidat i aktivní, seřazeno podle zvýšení koncového boduExpireOldIntervals (i) pro každého interval j v aktivní, v pořadí rostoucího koncového bodu dělat -li koncový bod [j] ≥ počáteční bod [i] pak vrátit se odstranit j z aktivního přidání registru [j] do fondu bezplatných registrůSpillAtInterval (i) rozlit ← poslední aktivní interval -li endpoint [spill]> endpoint [i] pak zaregistrovat [i] ← zaregistrovat [rozlití] umístění [rozlití] ← nové umístění zásobníku odebrat únik z aktivního přidání i aktivní, seřazeno podle zvýšení koncového bodu jiný umístění [i] ← nové umístění zásobníku
Nevýhody a další vylepšení
Lineární skenování však představuje dvě hlavní nevýhody. Za prvé, kvůli svému chamtivému aspektu nebere v úvahu doživotní díry, tj. „Rozsahy, kde není potřeba hodnota proměnné“.[31][32] Kromě toho rozlitá proměnná zůstane rozlitá po celou dobu její životnosti.

Mnoho dalších výzkumných prací navázalo na algoritmus lineárního skenování Poletto. Například Traub et al. Navrhli algoritmus zvaný binpacking druhé šance, jehož cílem je generování kvalitnějšího kódu.[33][34] V tomto přístupu mají rozlité proměnné příležitost být později uloženy v registru pomocí jiného heuristický od algoritmu použitého ve standardním algoritmu lineárního skenování. Místo použití živých intervalů se algoritmus spoléhá na živé rozsahy, což znamená, že pokud je třeba rozsah rozlit, není nutné rozlit všechny ostatní rozsahy odpovídající této proměnné.
Přidělení lineárního skenování bylo také upraveno tak, aby využilo výhody Formulář SSA: vlastnosti této mezilehlé reprezentace se používají ke zjednodušení alokačního algoritmu.[35] Nejprve se zkracuje čas strávený analýzou grafu toku dat, zaměřenou na budování životních intervalů, a to zejména proto, že proměnné jsou jedinečné.[36] Následně vytváří kratší živé intervaly, protože každé nové přiřazení odpovídá novému živému intervalu.[37][38] Aby se zabránilo modelování intervalů a živých děr, Rogers ukázal zjednodušení zvané budoucí aktivní sady, které úspěšně odstranily intervaly pro 80% instrukcí [39].
Rematerializace
Problém optimálního přidělování registrů je NP-úplný. V důsledku toho kompilátoři používají heuristické techniky k přiblížení jeho řešení.
Chaitin a kol. diskutovat o několika nápadech pro zlepšení kvality rozlitého kódu. Poukazují na to, že určité hodnoty lze přepočítat jednou instrukcí a že požadovaný operand bude pro výpočet vždy k dispozici. Nazývají tyto výjimečné hodnoty „nikdy nezabité“ a berou na vědomí, že tyto hodnoty by měly být přepočítány, místo aby byly rozlity a znovu načteny. Dále poznamenávají, že nekoaleskovanou kopii nikdy nezabité hodnoty lze eliminovat jejím přepočítáním přímo do požadovaného registru.[40]
Tyto techniky se nazývají rematerializace. V praxi zahrnují možnosti rematerializace:
- okamžité načtení celočíselných konstant a na některých strojích konstanty s plovoucí desetinnou čárkou,
- - výpočet konstantního posunu od ukazatele rámce nebo oblasti statických dat a -
- načítání nelokálních ukazatelů rámce z displeje.[40]
Briggs a Al rozšiřují Chaitinovu práci, aby využili možnosti rematerializace komplexních, vícehodnotných živých rozsahů. Zjistili, že každá hodnota musí být označena dostatečným množstvím informací, aby ji alokátor mohl správně zpracovat. Briggsův přístup je následující: nejprve rozdělte každý živý rozsah na hodnoty jeho komponent, poté na každou hodnotu propagujte značky rematerializace a vytvořte nové živé rozsahy z připojených hodnot se stejnými značkami.[40]
Sloučení
V kontextu alokace registrů je sloučení aktem sloučení operací přesunu proměnných do proměnných přidělením těchto dvou proměnných do stejného umístění. K operaci sloučení dochází po sestavení interferenčního grafu. Jakmile jsou dva uzly sloučeny, musí získat stejnou barvu a být přiděleny ke stejnému registru, jakmile se operace kopírování stane zbytečnou.[41]
Sloučení může mít pozitivní i negativní dopad na barevnost interferenčního grafu.[9] Například jeden negativní dopad, který by splynutí mohlo mít na barevnou odvozitelnost grafu, je, když jsou dva uzly splynuty, protože výsledný uzel bude mít sjednocení okrajů těch, které se splynou.[9]Pozitivní dopad koalescence na kolorabilitu odvozeného grafu je například když uzel interferuje s oběma koalescenčními uzly, stupeň uzlu se sníží o jeden, což vede ke zlepšení celkové barevnosti interferenčního grafu.[42]
K dispozici je několik splývajících heuristik:[43]
- Agresivní splynutí
- to bylo poprvé představeno původním alokátorem registrů Chaitin. Tato heuristika si klade za cíl sloučit všechny neinterferující uzly související s kopírováním.[44] Z pohledu eliminace kopií má tato heuristika nejlepší výsledky.[45] Na druhou stranu, agresivní splynutí by mohlo ovlivnit barevnost odvoditelného grafu.[42]
- Konzervativní sloučení
- používá hlavně stejnou heuristiku jako agresivní splynutí, ale slučuje tahy tehdy a jen tehdy, pokud neohrožuje barevnost interferenčního grafu.[46]
- Iterované splynutí
- v danou chvíli odstraní jeden konkrétní pohyb a přitom zachová barevnost grafu.[47]
- Optimistické splynutí
- je založen na agresivním splynutí, ale pokud je narušena barevnost odvoditelného grafu, vzdá se co nejméně tahů.[48]
Smíšené přístupy
Hybridní alokace
Některé další přístupy k alokaci registrů neomezují pouze na jednu techniku k optimalizaci využití registru. Například Cavazos et.al navrhli řešení, kde je možné použít jak lineární skenování, tak algoritmy barvení grafů.[49] V tomto přístupu se volba mezi jedním nebo druhým řešením určuje dynamicky: nejprve, a strojové učení Algoritmus se používá „offline“, to znamená ne za běhu, k vytvoření heuristické funkce, která určuje, který alokační algoritmus je třeba použít. Heuristická funkce se poté použije za běhu; ve světle chování kódu si alokátor poté může vybrat mezi jedním ze dvou dostupných algoritmů.[50]
Alokace stopového registru je nedávný přístup vyvinutý Eisl et al.[3][5] Tato technika zpracovává alokaci lokálně: spoléhá se na dynamiku profilování data k určení, které větve budou v daném regulačním vývojovém grafu nejčastěji používány. Poté odvodí sadu „stop“ (tj. Segmentů kódu), ve kterých je slučovací bod ignorován ve prospěch nejpoužívanější větve. Každá stopa je poté nezávisle zpracována alokátorem. Tento přístup lze považovat za hybridní, protože je možné použít různé algoritmy alokace registrů mezi různými stopami.[51]
Rozdělené rozdělení
Rozdělení rozdělení je další technika přidělování registrů, která kombinuje různé přístupy, obvykle považované za opačné. Například hybridní alokační techniku lze považovat za rozdělenou, protože první heuristická fáze budování se provádí offline a heuristické použití se provádí online.[24] Stejným způsobem B. Diouf a kol. navrhla techniku přidělování spoléhající se jak na offline, tak na online chování, konkrétně na statickou a dynamickou kompilaci.[52][53] Během fáze offline se nejprve shromáždí optimální rozlití pomocí Celočíselné lineární programování. Potom jsou živé rozsahy anotovány pomocí compressAnnotation
algoritmus, který se opírá o dříve identifikovanou optimální množinu úniku. Alokace registru se provádí následně během online fáze na základě údajů shromážděných v offline fázi.[54]
V roce 2007 navrhli Bouchez a kol. Rozdělit alokaci registrů do různých fází, přičemž jedna fáze byla věnována rozlití a druhá byla věnována barvení a spojování.[55]
Srovnání mezi různými technikami
K posouzení výkonu jedné techniky přidělování registrů oproti druhé bylo použito několik metrik. Alokace registru se obvykle musí vypořádat s kompromisem mezi kvalitou kódu, tj. Kódem, který se provádí rychle, a režií analýzy, tj. Časem stráveným určováním analýzy zdrojového kódu za účelem generování kódu s optimalizovanou alokací registru. Z tohoto pohledu jsou doba provádění vygenerovaného kódu a čas strávený analýzou živosti relevantní metriky pro porovnání různých technik.[56]
Jakmile budou vybrány relevantní metriky, měl by být k dispozici kód, na který budou metriky použity, a měl by být relevantní pro daný problém, ať už tím, že odráží chování aplikace v reálném světě, nebo tím, že bude relevantní pro konkrétní problém, který chce algoritmus řešit. Novější články o alokaci registrů využívají zejména srovnávací sadu Dacapo.[57]
Viz také
- Strahlerovo číslo, minimální počet registrů potřebných k vyhodnocení stromu výrazů.[58]
- Registrace (klíčové slovo), nápověda v C a C ++ pro proměnnou, která má být umístěna do registru.
Reference
- ^ Ditzel & McLellan 1982, str. 48.
- ^ Runeson & Nyström 2003, str. 242.
- ^ A b Eisl a kol. 2016, str. 14: 1.
- ^ A b Chaitin a kol. 1981, str. 47.
- ^ A b C Eisl a kol. 2016, str. 1.
- ^ „Porovnávací čísla latence v počítači / síti“. blog.morizyun.com. Citováno 8. ledna 2019.
- ^ Braun & Hack 2009, str. 174.
- ^ Koes & Goldstein 2009, str. 21.
- ^ A b C d Bouchez, Darte & Rastello 2007, str. 103.
- ^ Colombet, Brandner & Darte 2011, str. 26.
- ^ „Příručka pro vývojáře softwaru Intel® 64 a IA-32 Architectures, oddíl 3.4.1“ (PDF).
- ^ "Konvence volání 32bitové funkce PowerPC".
- ^ Bouchez, Darte & Rastello 2006, str. 4.
- ^ Horwitz a kol. 1966, str. 43.
- ^ Farach & Liberatore 1998, str. 566.
- ^ Eisl a kol. 2017, str. 92.
- ^ Eisl, Leopoldseder & Mössenböck 2018, str. 1.
- ^ A b C Briggs, Cooper & Torczon 1992, str. 316.
- ^ Poletto & Sarkar 1999, str. 896.
- ^ Runeson & Nyström 2003, str. 241.
- ^ Kniha 1975, str. 618–619.
- ^ Colombet, Brandner & Darte 2011, str. 1.
- ^ Smith, Ramsey & Holloway 2004, str. 277.
- ^ A b C Cavazos, Moss & O’Boyle 2006, str. 124.
- ^ Runeson & Nyström 2003, str. 240.
- ^ Poletto & Sarkar 1999, str. 895.
- ^ Poletto & Sarkar 1999, str. 902.
- ^ Wimmer & Mössenböck 2005, str. 132.
- ^ Johansson & Sagonas 2002, str. 102.
- ^ Poletto & Sarkar 1999, str. 899.
- ^ Eisl a kol. 2016, str. 2.
- ^ Traub, Holloway & Smith 1998, str. 143.
- ^ Traub, Holloway & Smith 1998, str. 141.
- ^ Poletto & Sarkar 1999, str. 897.
- ^ Wimmer & Franz 2010, str. 170.
- ^ Mössenböck & Pfeiffer 2002, str. 234.
- ^ Mössenböck & Pfeiffer 2002, str. 233.
- ^ Mössenböck & Pfeiffer 2002, str. 229.
- ^ Rogers 2020.
- ^ A b C Briggs, Cooper & Torczon 1992, str. 313.
- ^ Chaitin 1982, str. 90.
- ^ A b Ahn & Paek 2009, str. 7.
- ^ Park & Moon 2004, str. 736.
- ^ Chaitin 1982, str. 99.
- ^ Park & Moon 2004, str. 738.
- ^ Briggs, Cooper & Torczon 1994, str. 433.
- ^ George & Appel 1996, str. 212.
- ^ Park & Moon 2004, str. 741.
- ^ Eisl a kol. 2017, str. 11.
- ^ Cavazos, Moss & O’Boyle 2006, str. 124-127.
- ^ Eisl a kol. 2016, str. 4.
- ^ Diouf a kol. 2010, str. 66.
- ^ Cohen & Rohou 2010, str. 1.
- ^ Diouf a kol. 2010, str. 72.
- ^ Bouchez, Darte & Rastello 2007, str. 1.
- ^ Poletto & Sarkar 1999, str. 901-910.
- ^ Blackburn a kol. 2006, str. 169.
- ^ Flajolet, Raoult a Vuillemin 1979.
Zdroje
- Ahn, Minwook; Paek, Yunheung (2009). Msgstr "Zaregistrujte techniky sloučení pro heterogenní architekturu registrů s proséváním kopií". Transakce ACM na vestavěných počítačových systémech. 8 (2): 1–37. CiteSeerX 10.1.1.615.5767. doi:10.1145/1457255.1457263. ISSN 1539-9087. S2CID 14143277.
- Aho, Alfred V .; Lam, Monica S .; Sethi, Ravi; Ullman, Jeffrey D. (2006). Překladače: Zásady, techniky a nástroje (2. vydání). Addison-Wesley Longman Publishing Co., Inc. ISBN 978-0321486813.
- Appel, Andrew W .; George, Lal (2001). Msgstr "Optimální rozlití pro stroje CISC s několika registry". Sborník konference ACM SIGPLAN 2001 o návrhu a implementaci programovacího jazyka - PLDI '01. str. 243–253. CiteSeerX 10.1.1.37.8978. doi:10.1145/378795.378854. ISBN 978-1581134148. S2CID 1380545.
- Barik, Rajkishore; Grothoff, Christian; Gupta, Rahul; Pandit, Vinayaka; Udupa, Raghavendra (2007). Msgstr "Optimální přidělování bitových registrů pomocí celočíselného lineárního programování". Jazyky a překladače pro paralelní výpočty. Přednášky z informatiky. 4382. 267–282. CiteSeerX 10.1.1.75.6911. doi:10.1007/978-3-540-72521-3_20. ISBN 978-3-540-72520-6.
- Bergner, Peter; Dahl, Peter; Engebretsen, David; O'Keefe, Matthew (1997). Msgstr "Minimalizace rozlitého kódu prostřednictvím rozlití oblasti interference". Sborník konference ACM SIGPLAN 1997 o návrhu a implementaci programovacího jazyka - PLDI '97. 287–295. doi:10.1145/258915.258941. ISBN 978-0897919074. S2CID 16952747.
- Blackburn, Stephen M .; Guyer, Samuel Z .; Hirzel, Martin; Hosking, Antony; Jump, Maria; Lee, Han; Eliot, J .; Moss, B .; Phansalkar, Aashish; Stefanović, Darko; VanDrunen, Thomas; Garner, Robin; von Dincklage, Daniel; Wiedermann, Ben; Hoffmann, Chris; Khang, Asjad M .; McKinley, Kathryn S .; Bentzur, Rotem; Diwan, Amer; Feinberg, Daniel; Frampton, Daniel (2006). "Benchmarky DaCapo". Sborník 21. výroční konference ACM SIGPLAN o objektově orientovaných programovacích systémech, jazycích a aplikacích - OOPSLA '06. str. 169. doi:10.1145/1167473.1167488. ISBN 978-1595933485. S2CID 9255051.
- Book, Ronald V. (prosinec 1975). „Karp Richard M. Reducibilita mezi kombinatorickými problémy. Složitost počítačových výpočtů, Sborník sympozia o složitosti počítačových výpočtů, které se konalo ve dnech 20. – 22. Března 1972 v IBM Thomas J. Watson Center, Yorktown Heights, New York, editoval Miller Raymond E. a Thatcher James W., Plenum Press, New York and London 1972, str. 85–103 “. The Journal of Symbolic Logic. 40 (4): 618–619. doi:10.2307/2271828. ISSN 0022-4812. JSTOR 2271828.
- Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2006). „Alokace registru: Co dokazuje NP-úplnost Chaitina a kol. Opravdu to dokazuje? Nebo přehodnocení přidělení registru: Proč a jak?“. Alokace registru: co dokazuje NP-úplnost Chaitin et al. opravdu dokázat?. Přednášky z informatiky. 4382. s. 2–14. doi:10.1007/978-3-540-72521-3_21. ISBN 978-3-540-72520-6.
- Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2007). "O složitosti sloučení registrů". Mezinárodní symposium o generování a optimalizaci kódu (CGO'07). 102–114. CiteSeerX 10.1.1.101.6801. doi:10.1109 / CGO.2007.26. ISBN 978-0-7695-2764-2. S2CID 7683867.
- Bouchez, Florent; Darte, Alain; Rastello, Fabrice (2007). "O složitosti úniku všude pod formulářem SSA". Oznámení ACM SIGPLAN. 42 (7): 103. arXiv:0710.3642. doi:10.1145/1273444.1254782. ISSN 0362-1340.
- Braun, Matthias; Hack, Sebastian (2009). "Registrace rozlití a rozdělení živého dosahu pro programy formulářů SSA". Konstrukce kompilátoru. Přednášky z informatiky. 5501. 174–189. CiteSeerX 10.1.1.219.5318. doi:10.1007/978-3-642-00722-4_13. ISBN 978-3-642-00721-7. ISSN 0302-9743.
- Briggs, Preston; Cooper, Keith D .; Torczon, Linda (1992). "Rematerializace". Oznámení ACM SIGPLAN. 27 (7): 311–321. doi:10.1145/143103.143143. ISSN 0362-1340.
- Briggs, Preston; Cooper, Keith D .; Torczon, Linda (1994). . Transakce ACM v programovacích jazycích a systémech. 16 (3): 428–455. CiteSeerX 10.1.1.23.253. doi:10.1145/177492.177575. ISSN 0164-0925. S2CID 6571479.
- Cavazos, John; Moss, J. Eliot B .; O’Boyle, Michael F. P. (2006). „Hybridní optimalizace: Který optimalizační algoritmus použít?“. Konstrukce kompilátoru. Přednášky z informatiky. 3923. str. 124–138. doi:10.1007/11688839_12. ISBN 978-3-540-33050-9. ISSN 0302-9743.
- Chaitin, Gregory J .; Auslander, Marc A .; Chandra, Ashok K .; Cocke, John; Hopkins, Martin E .; Markstein, Peter W. (1981). Msgstr "Zaregistrovat přidělení pomocí vybarvení". Počítačové jazyky. 6 (1): 47–57. doi:10.1016/0096-0551(81)90048-5. ISSN 0096-0551.
- Chaitin, G. J. (1982). . Sborník sympozia SIGPLAN z roku 1982 o konstrukci překladačů - SIGPLAN '82. 98–101. doi:10.1145/800230.806984. ISBN 978-0897910743. S2CID 16872867.
- Chen, Wei-Yu; Lueh, Guei-Yuan; Ashar, Pratik; Chen, Kaiyu; Cheng, Buqi (2018). Msgstr "Přidělení registru pro grafiku procesoru Intel". Sborník z mezinárodního sympozia 2018 o generování a optimalizaci kódu - CGO 2018. str. 352–364. doi:10.1145/3168806. ISBN 9781450356176. S2CID 3367270.
- Cohen, Albert; Rohou, Erven (2010). "Virtualizace procesoru a rozdělená kompilace pro heterogenní vícejádrové vestavěné systémy". Sborník ze 47. konference Automation Design - DAC '10. str. 102. CiteSeerX 10.1.1.470.9701. doi:10.1145/1837274.1837303. ISBN 9781450300025. S2CID 14314078.
- Colombet, Quentin; Brandner, Florian; Darte, Alain (2011). "Studium optimálního rozlití ve světle SSA". Sborník ze 14. mezinárodní konference o kompilátorech, architekturách a syntéze pro vestavěné systémy - PŘÍPADY '11. str. 25. doi:10.1145/2038698.2038706. ISBN 9781450307130. S2CID 8296742.
- Diouf, Boubacar; Cohen, Albert; Rastello, Fabrice; Cavazos, John (2010). "Rozdělení rozdělení registru: lineární složitost bez penalizace výkonu". Vysoce výkonné vestavěné architektury a překladače. Přednášky z informatiky. 5952. str. 66–80. CiteSeerX 10.1.1.229.3988. doi:10.1007/978-3-642-11515-8_7. ISBN 978-3-642-11514-1. ISSN 0302-9743.
- Ditzel, David R .; McLellan, H. R. (1982). Msgstr "Registrovat přidělení zdarma". Sborník z prvního mezinárodního sympozia o architektonické podpoře programovacích jazyků a operačních systémů - ASPLOS-I. str. 48–56. doi:10.1145/800050.801825. ISBN 978-0897910668. S2CID 2812379.
- Eisl, Josef; Grimmer, Matthias; Simon, Doug; Würthinger, Thomas; Mössenböck, Hanspeter (2016). "Trace-based Allocation Register in a JIT Compiler". Sborník z 13. mezinárodní konference o zásadách a postupech programování na platformě Java: Virtuální stroje, jazyky a nástroje - PPPJ '16. s. 1–11. doi:10.1145/2972206.2972211. ISBN 9781450341356. S2CID 31845919.
- Eisl, Josef; Marr, Stefan; Würthinger, Thomas; Mössenböck, Hanspeter (2017). „Zásady trasování registrace alokace“ (PDF). Sborník ze 14. mezinárodní konference o spravovaných jazycích a dobách řízení - muž Lang 2017 (PDF). str. 92–104. doi:10.1145/3132190.3132209. ISBN 9781450353403. S2CID 1195601.
- Eisl, Josef; Leopoldseder, David; Mössenböck, Hanspeter (2018). Msgstr "Přidělení paralelního trasovacího registru". Sborník z 15. mezinárodní konference o spravovaných jazycích a dobách řízení - muž Lang '18. s. 1–7. doi:10.1145/3237009.3237010. ISBN 9781450364249. S2CID 52137887.
- Koes, David Ryan; Goldstein, Seth Copen (2009). „Registrace přidělení byla zrušena“. Napsáno v Nice ve Francii. Sborník z 12. mezinárodního semináře o softwaru a kompilátorech pro vestavěné systémy. OBLASTI PŮSOBNOSTI '09. New York, NY, USA: ACM. 21–30. ISBN 978-1-60558-696-0.
- Farach, Martin; Liberatore, Vincenzo (1998). „O přidělení místního registru“. Napsáno v San Francisku v Kalifornii, USA. Sborník devátého ročníku sympozia ACM-SIAM o diskrétních algoritmech. SODA '98. Philadelphia, PA, USA: Společnost pro průmyslovou a aplikovanou matematiku. str.564–573. ISBN 0-89871-410-9.
- Flajolet, P.; Raoult, J. C .; Vuillemin, J. (1979), „Počet registrů požadovaných pro hodnocení aritmetických výrazů“, Teoretická informatika, 9 (1): 99–125, doi:10.1016/0304-3975(79)90009-4
- George, Lal; Appel, Andrew W. (1996). "Iterovaný registr splývá". Transakce ACM v programovacích jazycích a systémech. 18 (3): 300–324. doi:10.1145/229542.229546. ISSN 0164-0925. S2CID 12281734.
- Horwitz, L. P .; Karp, R. M .; Miller, R.E .; Winograd, S. (1966). "Alokace rejstříku rejstříku". Deník ACM. 13 (1): 43–61. doi:10.1145/321312.321317. ISSN 0004-5411. S2CID 14560597.
- Johansson, Erik; Sagonas, Konstantinos (2002). "Alokace registru lineárního skenování ve vysoce výkonném kompilátoru Erlang". Praktické aspekty deklarativních jazyků. Přednášky z informatiky. 2257. 101–119. doi:10.1007/3-540-45587-6_8. ISBN 978-3-540-43092-6. ISSN 0302-9743.
- Kurdahi, F. J .; Parker, A. C. (1987). "SKUTEČNÉ: program pro REGISTRACI Alokace". 24. sborník z konference ACM / IEEE o konferenci Design Automation Conference - DAC '87. 210–215. doi:10.1145/37888.37920. ISBN 978-0818607813. S2CID 17598675.
- Mössenböck, Hanspeter; Pfeiffer, Michael (2002). Msgstr "Alokace registru lineárního skenování v kontextu formuláře SSA a omezení registrace". Konstrukce kompilátoru. Přednášky z informatiky. 2304. str. 229–246. doi:10.1007/3-540-45937-5_17. ISBN 978-3-540-43369-9. ISSN 0302-9743.
- Nickerson, Brian R. (1990). Msgstr "Přidělení rejstříku barevného registru pro procesory s operandy s více registry". Oznámení ACM SIGPLAN. 25 (6): 40–52. doi:10.1145/93548.93552. ISSN 0362-1340.
- Park, Jinpyo; Moon, Soo-Mook (2004). Msgstr "Optimistické sloučení registrů". Transakce ACM v programovacích jazycích a systémech. 26 (4): 735–765. CiteSeerX 10.1.1.33.9438. doi:10.1145/1011508.1011512. ISSN 0164-0925. S2CID 15969885.
- Poletto, Massimiliano; Sarkar, Vivek (1999). Msgstr "Přidělení registru lineárního skenování". Transakce ACM v programovacích jazycích a systémech. 21 (5): 895–913. CiteSeerX 10.1.1.27.2462. doi:10.1145/330249.330250. ISSN 0164-0925. S2CID 18180752.
- Rogers, Ian (2020). "Efektivní alokace globálního registru". arXiv:2011.05608 [cs.PL ].
- Runeson, Johan; Nyström, Sven-Olof (2003). „Retargetable Graph-Coloring Register Allocation for Irregular Architectures“. Software a kompilátory pro vestavěné systémy. Přednášky z informatiky. 2826. 240–254. CiteSeerX 10.1.1.6.6186. doi:10.1007/978-3-540-39920-9_17. ISBN 978-3-540-20145-8. ISSN 0302-9743.
- Smith, Michael D .; Ramsey, Norman; Holloway, Glenn (2004). Msgstr "Zobecněný algoritmus pro alokaci registru barevného grafu". Oznámení ACM SIGPLAN. 39 (6): 277. CiteSeerX 10.1.1.71.9532. doi:10.1145/996893.996875. ISSN 0362-1340.
- Traub, Omri; Holloway, Glenn; Smith, Michael D. (1998). Msgstr "Kvalita a rychlost alokace registru lineárního skenování". Oznámení ACM SIGPLAN. 33 (5): 142–151. CiteSeerX 10.1.1.52.8730. doi:10.1145/277652.277714. ISSN 0362-1340.
- Wimmer, Christian; Mössenböck, Hanspeter (2005). Msgstr "Optimalizované rozdělení intervalů v alokátoru registru lineárního skenování". Sborník z 1. mezinárodní konference ACM / USENIX o virtuálních prostředích pro provádění - VEE '05. str. 132. CiteSeerX 10.1.1.394.4054. doi:10.1145/1064979.1064998. ISBN 978-1595930477. S2CID 494490.
- Wimmer, Christian; Franz, Michael (2010). Msgstr "Přidělení registru lineárního skenování na formuláři SSA". Sborník příspěvků z 8. ročníku mezinárodního sympozia IEEE / ACM o generování a optimalizaci kódu - CGO '10. str. 170. CiteSeerX 10.1.1.162.2590. doi:10.1145/1772954.1772979. ISBN 9781605586359. S2CID 1820765.
externí odkazy
- Výukový program pro celočíselné programování
- Konference Celočíselné programování a kombinatorická optimalizace, IPCO
- Workshop kombinatorické optimalizace Aussois
- Bosscher, Steven; a Novillo, Diego. GCC dostává nový Optimizer Framework. Článek o tom, jak GCC používá SSA a jak se zlepšuje oproti starším IR.
- Bibliografie SSA. Rozsáhlý katalog výzkumných prací SSA.
- Zadeck, F. Kenneth. „Vývoj statického formuláře jednotného přiřazení“ „Prosinec 2007, diskuse o počátcích SSA.
- VV.AA. „Návrh kompilátoru na bázi SSA“ (2014)
- Citace od CiteSeer
- Optimalizační manuály podle Agner Fog - dokumentace o architektuře procesoru x86 a nízkoúrovňové optimalizaci kódu