Částečné odstranění nadbytečnosti - Partial redundancy elimination
V teorii překladačů , částečného odstranění redundance (PRE) je optimalizační překladač , který eliminuje výrazy , které jsou vzhledem na některých, ale ne nutně všechny cesty prostřednictvím programu. PRE je forma společné eliminace subexprese .
Výraz se nazývá částečně nadbytečný, pokud je hodnota vypočítaná výrazem již k dispozici na některých, ale ne na všech cestách programu k tomuto výrazu. Výraz je zcela nadbytečný, pokud je hodnota vypočítaná výrazem k dispozici na všech cestách programem k tomuto výrazu. PRE může eliminovat částečně nadbytečné výrazy vložením částečně nadbytečného výrazu na cesty, které jej již nepočítají, čímž se částečně nadbytečný výraz stane plně nadbytečným.
Například v následujícím kódu:
if (some_condition) {
// some code that does not alter x
y = x + 4;
}
else {
// other code that does not alter x
}
z = x + 4;
výraz x+4
přiřazený z
je částečně nadbytečný, protože je vypočítán dvakrát, pokud some_condition
je pravdivý. PRE by provedl pohyb kódu ve výrazu, aby poskytl následující optimalizovaný kód:
if (some_condition) {
// some code that does not alter x
t = x + 4;
y = t;
}
else {
// other code that does not alter x
t = x + 4;
}
z = t;
Zajímavou vlastností PRE je, že provádí (formou) běžnou eliminaci subexprese a pohyb kódu invariantního vůči smyčce současně. PRE lze navíc rozšířit tak, aby eliminoval zraněné částečné propouštění, čímž účinně provádí snížení síly . Díky tomu je PRE jednou z nejdůležitějších optimalizací při optimalizaci překladačů. Tradičně se PRE používá na lexikálně ekvivalentní výrazy, ale v poslední době byly publikovány formulace PRE založené na statickém formuláři pro jedno přiřazení, které místo výrazů používají algoritmus PRE na hodnoty, sjednocující PRE a číslování globálních hodnot .
Viz také
Reference
Další čtení
- Muchnick, Steven S. Pokročilý návrh a implementace kompilátoru . Morgan Kaufmann. 1997.
- Knoop, J., Ruthing, O. a Steffen, B. Lazy Code Motion . Oznámení ACM SIGPLAN Vol. 27, č. 7, červenec 1992, konference '92 o PLDI.
- Paleri, VK, Srikant, YN a Shankar, P. Jednoduchý algoritmus pro odstranění částečné nadbytečnosti . SIGPLAN Notices, sv. 33 (12). strany 35–43 (1998).
- Kennedy, R., Chan, S., Liu, SM, Lo, R., Peng, T. a Chow, F. Částečné odstranění nadbytečnosti ve formě SSA . ACM Transactions on Programming Languages Vol. 21, č. 3, s. 627–676, 1999.
- VanDrunen, T. a Hosking, AL Value-Based Partial Redundancy Elimination , Lecture Notes in Computer Science Vol. 2985/2004, s. 167 - 184, 2004.
- Cai, Q. a Xue, J. Optimální a efektivní částečná eliminace redundance na základě spekulací ". Mezinárodní sympozium o generování a optimalizaci kódu (CGO'03), 91-104, 2003.
- Xue, J. a Knoop, J. Nový pohled na PRE jako problém maximálního toku . Mezinárodní konference o konstrukci kompilátorů (CC'06), strany 139–154, Vídeň, Rakousko, 2006.
- Xue, J. a Cai Q. Celoživotní optimální algoritmus pro spekulativní PRE . ACM Transactions on Architecture and Code Optimization Vol. 3, č. 3, s. 115–155, 2006.