Adaptiv optimering
Adaptiv optimering är en teknik inom datavetenskap som utför dynamisk omkompilering av delar av ett program baserat på den aktuella exekveringsprofilen. Med en enkel implementering kan en adaptiv optimerare helt enkelt göra en avvägning mellan just-in-time kompilering och tolkningsinstruktioner . På en annan nivå kan adaptiv optimering dra fördel av lokala dataförhållanden för att optimera bortförgreningar och för att använda inline-expansion för att minska kostnaderna för proceduranrop.
Överväg en hypotetisk bankapplikation som hanterar transaktioner efter varandra. Dessa transaktioner kan vara checkar, insättningar och ett stort antal mer obskyra transaktioner. När programmet körs kan de faktiska uppgifterna bestå av att tömma tiotusentals checkar utan att behandla en enda insättning och utan att behandla en enda check med ett bedrägligt kontonummer. En adaptiv optimerare skulle kompilera assembly-kod för att optimera för detta vanliga fall. Om systemet sedan började behandla tiotusentals insättningar istället, skulle den adaptiva optimeraren kompilera om assemblerkoden för att optimera det nya vanliga fallet. Denna optimering kan innefatta inlining-kod.
Exempel på adaptiv optimering inkluderar HotSpot och HP:s Dynamo-system .
I vissa system, särskilt Java Virtual Machine [ citat behövs ] , kan exekvering över en rad bytekodinstruktioner bevisligen omvändas. Detta tillåter en adaptiv optimerare att göra riskfyllda antaganden om koden. I exemplet ovan kan optimeraren anta att alla transaktioner är checkar och att alla kontonummer är giltiga. När dessa antaganden visar sig vara felaktiga kan den adaptiva optimeraren "avveckla" till ett giltigt tillstånd och sedan tolka bytekodinstruktionerna korrekt.
Se även
externa länkar
- CiteSeer för "Adaptive Optimization in the Jalapeño JVM (2000)" av Matthew Arnold, Stephen Fink, David Grove, Michael Hind, Peter F. Sweeney. Innehåller länkar till hela tidningen i olika format.