Next: Diskussion
Up: Analyse der Kosten-Nutzen-Rechnung eines
Previous: Interpretieren oder Übersetzen?
  Inhalt
Während im vorigen Abschnitt die Übersetzungsentscheidung Gegenstand
der Betrachtung war, behandelt dieser Abschnitt das Problem der Wahl
des Optimierungsalgorithmus. Grundsätzlich kann festgestellt werden,
daß die Parameter s und c positiv miteinander gekoppelt sind, d.h.
effektivere Optimierungen lassen sich im Allgemeinen nur durch Einsatz
von mehr Übersetzungszeit realisieren. Die Natur dieser Kopplung kann
daher für unterschiedliche Algorithmen differierende
Übersetzungsentscheidungen hervorrufen. Beispielsweise kann auch ein
erheblicher Mehraufwand in der Optimierung durch einen hohen
Laufzeitanteil von ,,Kernmethoden`` gerechtfertigt sein. Umgekehrt
wiegt ein marginaler Geschwindigkeitsvorteil unter Umständen nicht die
erforderlichen zeitaufwendigen Programmanalysen auf.
Es gibt folglich keine optimale Wahl der angewandten
Compiler-Algorithmen; statt dessen ist der geeignete Compiler vom
Programmprofil abhängig. Dies hat zu zwei interessanten Entwicklungen
geführt:
- Compiler-Algorithmen mit möglichst günstigem
Kosten-Nutzen-Verhältnis kommen verstärkt zum Einsatz. Beispiele
sind Algorithmen zur Registerallokation, die in linearer Zeit
arbeiten [Poletto and Sarkar, 1999]. Dabei lassen sich mit signifikant
schnelleren Algorithmen qualitativ vergleichbare
Optimierungsergebnisse erzielen.
- Die binäre Entscheidung zwischen Interpreter und Compiler wird
zugunsten von Systemen mit mehreren unterschiedlich stark
optimierenden Compilern aufgegeben. Diese bieten die Möglichkeit
durch die Verwendung von unterschiedlichen Optimierungsalgorithmen
einzelne Programmteile auf der anscheinend geeignetsten
Optimierungsstufe zu übersetzen. Je nach Laufzeitverhalten kann
eine Methode über verschiedene Optimierungsstufen hin ,,befördert``
werden, wenn sich herausstellt, daß sie auch nach moderater
Optimierung weiterhin einen dominierenden Anteil an der Laufzeit
einnimmt.
Systeme, die mehrere Compiler einsetzen, sind unter anderem in der
Sun Research VM, der IBM Jalapeño JVM sowie der Intel Microprocessor
Research Lab VM implementiert worden
[Agesen and Detlefs, 1999b,Alpern et al., 2000,Cierniak et al., 2000]. Die Basis-Compiler
arbeiten dabei extrem effizient bei akzeptabler Codequalität und
eignen sich daher als vollständiger Ersatz für den Interpreter.
Next: Diskussion
Up: Analyse der Kosten-Nutzen-Rechnung eines
Previous: Interpretieren oder Übersetzen?
  Inhalt
2001-02-28