Konvolution af konstanter

Konstant foldning og  konstant udbredelse ( også konstant forfremmelse, konstant duplikering , konstant udbredelse ) er optimeringer , der ofte bruges i moderne compilere , der reducerer redundante beregninger ved at erstatte konstante udtryk og variable med deres værdier [1] . Den udvidede algoritme sparse conditional constant propagation bruges også ofte , som samtidig udfører konstant udbredelse og fjernelse af en død kode [2] .  

Konstant foldning

Konstant foldning  er en optimering, der evaluerer konstante udtryk på kompileringstidspunktet. Først og fremmest forenkles konstante udtryk, der indeholder numeriske bogstaver . Udtryk, der indeholder variabler, der aldrig ændrer sig, eller variabler, der er erklæret som konstanter , kan også forenkles . Overvej et eksempel:

i = 320 * 200 * 32 ;

En compiler, der understøtter konstant foldning, vil ikke generere to multiplikationsinstruktioner og registrere resultatet. I stedet genkender den denne konstruktion som et konstant udtryk og erstatter den med den beregnede værdi (i dette tilfælde 2.048.000).

Konstant udbredelse

Konstant udbredelse  er en optimering , der erstatter et udtryk, der altid returnerer den samme konstant, når det udføres med selve konstanten [3] . Det kan være en konstant defineret før, eller funktion anvendt på konstanter Overvej følgende eksempel:

int x = 14 ; int y = 7 - x / 2 ; returner y * ( 28 / x + 2 );

Distributionsafkast x:

int x = 14 ; int y = 7-14 / 2 ; _ _ returner y * ( 28/14 + 2 ) ; _

Ydermere returnerer konstant foldning og spredning yfølgende (tildelingerne xog yvil sandsynligvis blive fjernet ved optimeringer til fjernelse af død kode senere ):

int x = 14 ; int y = 0 ; returnere 0 ;

Se også

Noter

  1. Workshop "Optimering af kompilatorer" (om eksemplet med GCC). - NGU dem. Lobachevsky. - S. 100.
  2. Muchnick, 1997 , s. 362-370.
  3. Dragebog, 2008 , s. 760.

Litteratur

  • Steven S. Muchnick. Avanceret compilerdesign og implementering. — 5. udgave. - San Francisco: Morgan Kaufmann Publishers , 1997. - 856 s. - ISBN 1-55860-320-4 .
  • Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. Compilers : Principles, Techniques and Tools = Compilers: Principles, Techniques and Tools. — 2. udgave. - M . : "Williams", 2008. - 1184 s. - 1500 eksemplarer.  - ISBN 978-5-8459-1349-4 .

Links