3. Die Code-Morphing-Software - TU Bergakademie Freiberg
3. Die Code-Morphing-Software - TU Bergakademie Freiberg
3. Die Code-Morphing-Software - TU Bergakademie Freiberg
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Translation Cache heraus ausgeführt wurde, wird überprüft, ob sich der nächste <strong>Code</strong>block ebenfalls bereits im<br />
Translation Cache befindet. Ist dies der Fall, so wird er von dort aus ausgeführt. Andernfalls übernimmt der Interpreter<br />
seine Verarbeitung.<br />
Eine Besonderheit stellt der Fall dar, bei dem es während der Ausführung zu einer Exception (Ausnahme) kommt. <strong>Die</strong>s<br />
kann durch herkömmliche Fehler wie Page Fault oder Division durch 0, durch Interrupts oder aufgrund der Übersetzung<br />
ausgelöst werden. [3]<br />
Interpreter<br />
not<br />
found<br />
Start<br />
exceeded<br />
translation<br />
Threadhold?<br />
find next<br />
instruction<br />
in Tcache?<br />
Abbildung 12: Flussdiagramm der CMS<br />
<strong>Die</strong> einzelnen Möglichkeiten zur Optimierung sollen im Folgenden kurz erläutert werden. Zunächst werden die<br />
Compilerähnlichen-Optimierungsverfahren in Tabelle 2 dargestellt. [5]<br />
Optimierung Beschreibung<br />
Common Subexpression Elimination Redundante Anweisungen und Ausdrücke werden eliminiert.<br />
Beispiel: P=A+B+C, Q=A+B+D --> Zusammenfassen von A+B: S=A+B --><br />
Einsetzen in Ausgangsgleichungen: P=S+C, Q=S+D<br />
Copy Propagation Zuweisungen wie X:=Y werden weit gehend vermieden. Es wird so lange wie<br />
möglich wird mit Y gearbeitet.<br />
Dead-<strong>Code</strong> Elimination <strong>Code</strong> der nicht ausgeführt wird, wird entfernt.<br />
Constant Folding Ist eine Variable über den gesamten Programmablauf konstant, so wird sie<br />
durch die entsprechenden Konstante ersetzt.<br />
Loop Invariant <strong>Code</strong> Removal <strong>Code</strong>, welcher innerhalb einer Schleife nicht verwendet wird, wird ausserhalb<br />
der Schleife platziert.<br />
Loop Strength Reduction Komplizierte Ausdrücke innerhalb von Schleifen werden vereinfacht.<br />
Beispiel: for (j=x;j>0;j--) {t=4*j; ...} Ersetzen durch: t:=x; for (j=x;j>0;j--)<br />
{t=t-4;...}<br />
Loop Induction-Variable Elimination Elimination von Zählvariablen innerhalb von Schleifen.<br />
Tabelle 2: Compilerähnliche Optimierungen<br />
no<br />
interpret<br />
next<br />
instruction<br />
yes<br />
no fault<br />
found<br />
Rollback<br />
fault<br />
translate region,<br />
store in Tcache<br />
execute<br />
translation<br />
from<br />
Tcache<br />
Beispiel: t=4*j;u=4*i; --> i>j ist identisch mit u>t<br />
chain<br />
Translator<br />
14