05.11.2012 Aufrufe

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!