Next: Literatur
Up: No Title
Previous: SELF 4.1.2
  Inhalt
Glossar
- Aktivierung:
- Der Speicherbereich innerhalb des
Ausführungs-Stacks, der einem bestimmten Aufruf einer
Funktion entspricht. Er enthält die Parameter und lokalen
Variablen der Funktion, sowie einen Verweis auf die vorherige
Aktivierung und sprachspezifische Daten.
- Algebraische Vereinfachungen:
- Klassischen
Optimierung, bei der algebraische Ausdrücke durch
Umformungen vereinfacht werden. Dabei werden beispielsweise
Multiplikationen mit 2er-Pozentzen durch Verschiebe-Operationen
ersetzt.
- Alignment:
- Die Ausrichtung einer Adresse im Speicher. Z.B.
ist eine Adresse 32-bit-aligned, wenn sie sich ohne Rest
durch 4 Teilen läßt (32 Bit entsprechen 4 Byte,
Hauptspeicheradressen werden in Byte geführt).
- Atomare Instruktion:
- Komplexe Speicheroperation, die von
der Architektur atomar ausgeführt wird. Beispiele sind
,,Test-and-Set`` oder ,,Compare-and-Swap``.
- Ausführungs-Stack:
- Speicherbereich, in dem Paramerter und
lokale Variablen beim Aufruf einer Funktion im Falle der
Stack-Allokation abgelegt werden.
- Bytecode:
- Serialisierte Instruktionsfolge für eine abstrakte
Maschine in binärer Form.
- CAS:
- (,,Compare-and-Swap``)
Atomare Instruktion,
bei der ein Vergleich eines Registers mit einer Hauptspeicherzelle
und bei Gleichheit ein Vertauschen der Inhalte atomar ausgeführt
wird.
- CHA:
Class Hierarchy Analysis
- CSE:
Common Subexpression Elimination
- Card Marking:
- Methode um Zeiger zwischen Generationen zu
protokollieren. Der Speicher wird in n Karten gleicher Größe
unterteilt und ein Bit-Array cards der Größe n wird
angelegt. Wird ein Zeiger geschrieben, so wird die entsprechende
Karte markiert, indem cards[i] gesetzt wird. Alle Pointer auf
der modifizierten Karten werden zu Wurzeln jeder Garbage
Collection einer jüngeren Generation
Remembered Sets.
- Class Hierarchy Analysis:
- Globale Programmanalyse des
dynamischen Compilers bezüglich der Klassenhierarchie. So können
Schlüsse über die möglichen Ziele eines dynamischen
Methodenaufrufs gezogen werden.
- Common Subexpression Elimination:
- Klassische
Optimierung, durch die die mehrfache Auswertung gleicher
Ausdrücke oder Teilausdrücke vermieden wird. Wird beispielsweise
an zwei Stellen in einer Prozedur der Ausdruck a + 1
berechnet und ist a an beiden Stellen gleich (durch
Datenflußanlayse vom Optimierer zu beweisen), so kann einer
Speicherung des Ergebnisses in einer Temporärvariablen erfolgen,
um einen Wiederverwendung zu ermöglichen. Da eine
Integer-Operation auf modernen Prozessoren scheller ist als ein
Speichzugriff, lohnt sich die CSE nur wenn die erzeugte
Teporärvariable einem Register zugewiesen werden kann.
Andernfalls wäre eine erneute Berechnung meist schneller als der
notwendige Speicherzugriff.
- Constant Folding and Propagation:
- Klassischen
Optimierung, bei der Ausdrücke, deren Operanden zur
Übersetzungszeit konstant sind, bereits vom Compiler ausgewertet
werden. Dabei entstehen neue Konstanten, die im Code
weiterpropagiert werden und ggf. wieder mit anderen Konstanten
verknüpft werden. Der Compiler nimmt also einen Teil der
Berechnung des laufenden Programmes voraus, indem er die
Zielumgebung simuliert -- dies ist im Zusammenhang mit
Fließkommazahlen nicht unproblematisch.
- Control Path Dependency:
- Begriff aus der Datenflußanalyse:
Ist der Wert einer Datenflußvariablen an einem bestimmten Punkt
von dem Weg abhängig, auf dem dieser Punkt erreicht wurde, so
besteht eine control path dependency
- Control Point Dependency:
- Begriff aus der
Datenflußanalyse: Ist der Wert einer Datenflußvariablen an einem
bestimmten Punkt immer gleich, und ist die damit unabhängig vom
Kontrollfluß, so besteht eine control point dependency
- Deoptimierung:
- Zurücknehmen bestimmter Optimierungen beim
Übersetzen von Methoden; meist durch komplette Neuübersetzung.
Notwendig, wenn zuvor getroffene Annahmen z.B. durch dynamisches
Laden neuer Klassen nicht länger zutreffen. Erfordert u.U.
On-Stack Replacement.
- Dynamischer Compiler:
- (dynamic compiler,
just-in-time compiler) Compiler, der im laufenden Programm
abstrakten Code in Maschinencode übersetzt und so das Programm
erweitert oder verändert. Zur Portabilität oder späten Optimierung
aufgrund von dynamischem Programmverhalten oder
Maschinenspezifika.
- Dynamischer Methodenaufruf:
- (dynamic dispatch)
Mechanismus objektorientierter Sprachen, die zu Empfängerklasse
und Nachricht zugeordnete Methode zu ermitteln und aufzurufen.
inline cache, polymorphic inline cache, vtable
- Eden:
- Begriff aus der
generationalen Garbage
Collection: Fester Bereich innerhalb der jüngsten Generation,
in dem neue Objekte alloziert werden. Mit der nächsten Garbage
Collection werden sie in den Hauptbereich der jüngsten Generation
evakuiert.
- Ereignisvariable:
- (condition variable)
Synchronisierungskonstrukt. Ereignisvariablen erlauben den
Austausch anonymer Ereignisse zwischen
Threads.
- Exakter Garbage Collector:
- Kann ein Garbage Collection für
jede Speicherzelle im System zum Zeitpunkt der Garbage Collection
bestimmen, ob sie einen Zeiger oder einen Skalar (z.B. eine
Ganzzahl) enthält, so wird er als exakt bezeichet. Ein exakter
Garbage Collector kann im Gegensatz zu einem
konservativen
Garbage Collector Objekte auf den Heap verschieben.
- Fast Path:
- Der schnellste ``Weg'', den eine Berechnung
nehmen kann. Oftmals stellt dieser den Regelfall dar, so daß sich
besondere Optimierung lohnt. Der fast path einer
Allokation kann beispielsweise lediglich im Erhöhen eines Zeigers
bestehen, während der slow path eine Garbage Collection
ausführt.
- GC Point:
- (konsistenter Punkt) Programmpunkt, an dem eine
Garbage Collection durchgeführt werden darf, weil hier
Referenztabellen vorliegen. Alle Threads müssen zu ihrem
nächsten ``GC Point'' vorgerollt werden, wenn eine Garbage
Collection durchgeführt werden soll.
- Generationale Garbage Collection:
- Bei der generationalen
Garbage Collection wird der Speicher logisch nach dem Alter der
Objekte in mehrere Segmente unterteilt, die dann separat bereinigt
werden können.
- Gosling Property:
- Eigenschaft des Java-Bytecodes, die
besagt, daß der Typ einer Programmvariablen keine
control
path dependency aufweisen darf.
- Header Word Displacement:
- Implementierungstechnik zur
Reduktion des Speicherbedarfs von Objekten. Zur Aufnahme nur
temporär benötigter Objektmetadaten werden Teile des
Objektkopfes durch Verweise auf zusätzliche
Speicherbereiche ersetzt und dorthin verdrängt.
- IC:
inline cache
- Inkrementell Garbage Collection:
- Garbage Collection, bei
der bei jedem Aufruf nur ein kleiner Teil des Speichers bearbeitet
wird.
- Inline Cache:
- (IC) Technik zum
dynamischen
Methodenaufruf. An der Aufrufstelle in den Code eingebetteter
einelementiger Ergebniscache des letzten Aufrufs; dargestellt als
direkter Sprung an die Zielmethode in Verbindung mit einem
Klassentest des Empfängerobjektes. Diese Technik beschleunigt
quasi-monomorphe Methodenaufrufe, da diese auf einen Vergleich und
einen direkten Sprung reduziert werden. Bei einem cache miss wird
der IC überschrieben.
polymorphic inline cache, vtable
- JIT:
Dynamischer Compiler
- Kernel Space:
- (kernel mode) Privilegiertes
Ausführungsregime von Systemcode. Es besteht ungeschützter Zugriff
auf Systemressourcen.
user space
- Konservativer Garbage Collector:
- Ist ein Garbage Collector
nicht in der Lage, für jede Speicherzelle zu bestimmen, ob sie
einen Pointer oder einen Skalar (z.B. eine Ganzzahl) enthält,
wird er als konservativ bezeichnet. Ein konservativer Garbage
Collector muß (konservative) Annahmen über den Inhalt von
Speicherzellen machen um eine Garbage Collection ausführen zu
können.
exakter Garbage Collector
- LAB:
local allocation buffer
- Liveness:
- Um eine Speicherzelle wiederverwenden zu können,
muß der Garbage Collector beweisen, daß diese vom laufenden
Programm nicht mehr benötigt wird. Dieser Beweise wird i.d.R.
aufgrund einer referenziellen Erreichbarkeit geführt. Kann eine
Zelle vom Programm erreicht werden so wird sie als live
bezeichnet
- Local Allocation Buffer:
- (LAB) Speicherbereich eines
Threads, der zur Ausführung von Allokationen ohne jegliche
Synchronisation mit anderen Threads dient. Ist der local
allocation buffer erschöpft, so wird synchronisiert ein neuer
Bereich angefordert.
- Loop Invariant Code Motion:
- Klassische Optimierung,
bei der Schleifenkonstanten erkannt werden und ihre Auswertung vor
die Schleife in den sogenannten preheader verlegt wird
-- dies reduziert den Rechenaufwand oft erheblich. Ob ein
Prozeduraufruf eine Schleifenkonstante darstellt, kann nur durch
interprozedurale Analysen festgestellt werden.
- Loop Unrolling:
- Klassische Optimierung, bei der
Schleifen ,,entrollt`` werden, indem der Schleifenkörper mehrfach
hintereinander kopiert und dabei der Schleifenkontrollcode
entsprechend angepaßt wird. Dies erlaubt wiederum eine bessere
Verwendung von delay slots und vor allem eine optimalere
Ausnutzung der Ausführungseinheiten superskalarer Prozessoren.
Loop unrolling ist also eng mit
software pipeling
verknüpft.
- Markierung:
- (tagging) Methode zur Implementierung
eines
exakten Garbage Collectors, bei der jeder Wert seine
Typinformation selbst enthält. Üblicherweise wird ein Bit der
Repräsentation verwendet, um die Typinformation aufzunehmen -
z.B. stellt ein Wert, bei dem das least significant bit
gesetzt ist, einen verschobenen Integerwert dar, ein Wert, bei dem
das least significant bit nicht gesetzt ist, einen
Zeiger.
alignment
- Memory Barrier:
- Instruktion, die Speicherinstruktionen vor
Optimierungen schützt. Memory barriers sind zur
Implementierung des
Speichermodells notwendig.
- Metasperre:
- Primitive Sperrstruktur, die ein komplexes
Synchronisationsobjekt seinerseits vor nebenläufigem Zugriff
schützt. Zumeist durch
atomare Instruktionen realisiert.
- Methodenintegration:
- (inlining) Klassische
Optimierung, die den Aufruf einer Methode durch ihren
Methodenkörper ersetzt. Wie bei der
tail-call optimization
werden zum eine die Kosten eines Aufrufes gespart und zum anderen
weitere Optimierungen erst ermöglicht. Bei der Methodenintegration
ist zu beachten, daß eine Vergößerung des Codes eine geringere
Lokalität und damit cache misses im Instruktions-Cache
bewirken kann.
- Monitor:
- Synchronisierungskonstrukt. Einheit von
Sperre und
Ereignisvariablen.
- Nebenläufig:
- Programmteile sind nebenläufig, wenn sie
unabhängig voneinander und damit potentiell gleichzeitig
ausgeführt werden können. Ein Programm ist nebenläufig, wenn es
mehrere nebenläufige Programmteile enthält.
parallel,
Synchronisierung
- Nebenläufiger Garbage Collector:
- Garbage Collector, der
nebenläufig mit dem ausgeführten Programm in einem
eigenen Thread abläuft.
- OSR:
on-stack replacement
- Objektkopf:
- Speicherbereich für Objektmetadaten wie z.B.
Klasse oder Hashwert. Dieser liegt typischerweise direkt vor den
``Nutzdaten'' des Objekts im Speicher.
- On-Stack Replacement:
- (OSR). Austausch einer oder mehrerer
Aktivierungen durch andere. Nötig, falls die aktive
Methode durch den
dynamischen Compiler auf
unterschiedliche Art und Weise neu übersetzt wurde.
Deoptimierung
- PIC:
polymorphic inline cache
- Parallel:
- Programmteile sind parallel, wenn sie zur
gleichen Zeit auf verschiedenen Prozessoren ausgeführt
werden.
nebenläufig
- Paralleler Garbage Collector:
- Ein Algorithmus zur
parallelen Garbage Collection ist nebenläufig formuliert. Die
Garbage Collection kann daher auf mehreren Prozessoren
parallel ausgeführt werden.
- Polymorphic Inline Cache:
- (PIC). Technik zum
dynamischen Methodenaufruf. Wie
inline cache in
den Code eingebetteter Cache, allerdings mit mehreren
(üblicherweise bis zu 10) Einträgen; dargestellt als kaskadierter
Klassentest mit direkten Sprüngen. Beschleunigt schwach-polymorphe
Aufrufstellen, eignet sich zudem zur Profilerstellung.
inline cache, vtable
- Prozedurspezialisierung:
- Klassischen Optimierung.
Kann der Compiler feststellen, daß einen bestimmte Prozedur
f(x) häufig mit dem Parameter x=3 aufgerufen
wird, so kann einen Prozedur f(x)/x=3, erstellt werden.
Durch
constant folding kann diese Prozedur --
möglicherweise bis auf einen konstanten Wert -- weiter
vereinfacht werden.
- Read Barrier:
- Codeabschnitt, der bei jedem Lesen aus einem
Speicherbereich ausgeführt wird.
- Referenzlokalität:
- Das Maß, in dem Zugriffe auf
benachbarte Speicherzellen auch zeitlich dicht beieinander
liegen.
- Referenztabelle:
- Eine Beschreibung der Prozessorregister
und des Stacks, die es dem Garbage Collector erlaubt, zu
bestimmen, in welchen Registern und Stack-Zellen sich Zeiger
befinden.
- Registerallokation:
- Diese Optimierung ordnet den
verwendeten symbolischen Registen physische Maschinenregister zu.
Stehen diese nicht nicht in ausreichender Zahl zur Verfügung, so
muß spill code eingefügt werden, der symbolische Register
in den Hauptspeicher auslagert. Die Registerallokation stellt eine
wichtige Optimierung dar, da die Zugriffe auf den
Hauptspeicher durch die Ausnutzung der vorhandenen
Maschinenregister minimiert werden.
- Remembered Sets:
- Methode um Zeiger zwischen Generationen zu
protokollieren. Bei jeder Zeigerzuweisung wird das Ziel der
Zuweisung in eine Menge aufgenommen, die den Wurzeln jeder Garbage
Collection einer jüngeren Generation zugefügt werden.
Card Marking
- Sequential Store Buffer:
- Methode zur effizienten
Implementierung von
Remembered Sets.
- Skalare Ersetzung von Aggregaten:
- Klassische
Optimierung bei der Aggregate durch die enthaltenen
Skalare ersetzt werden. Beispielsweise wird bei einer Struktur
komplexeZahl anstatt z.real direkt eine
float-Variable verwendet, wenn dies möglich ist. Dies
vermeidet zum einen eine Indirektion und ermöglicht zum anderen
weitere Optimierungen, bei denen Aggregate unberücksichtigt
blieben.
- Software Pipelining:
- Klassische Optimierung. Hier
wird die Architektur moderner Prozessoren mit pipelines
unterstützt, indem der Code derart umstrukturiert wird, daß
delay slots von Verzweigungen ausgenutzt und die
Latenzzeiten einzelner Operationen berücksichtigt werden. Außerdem
werden bei superskalaren Prozessoren abhängige Operationen derart
versetzt, daß mehrere Ausführungseinheiten ausgenutzt werden
können.
- Speichermodell:
- (memory model). Spezifikation der
Operationen load und store auf dem globalen
Speicher. Relevant für Multiprozessorarchitekturen und
nebenläufige Programmiersprachen.
- Sperre:
- (mutex, lock) Synchronisierungskonstrukt.
Eine Sperre kann nur von einem
Thread zur Zeit erworben
werden und realisiert so gegenseitigen Ausschluß.
- Static Allocation Arena:
- Methode der optimierten
Allokation, bei der der gesamte innerhalb eines basic
blocks benötigte Speicher in einer Allokation am Anfang des
Blocks angefordert wird.
- Tail-Call Optimizations:
- Klassische Optimierung.
Endet eine Prozedur mit dem Aufruf einer anderen oder mit einer
Rekursion, so kann die tail-call optimization diese
Aufrufe in Verzweigungen umwandeln. Es wird also zum Auswerten der
gerufenen Prozedur die Aktivierung der aktuellen Methode
verwendet. Dadurch werden zum einen die Kosten eines Aufrufes
gespart, zum anderen werden Rekursionen zu Schleifen, die dann
mittels Schleifenoptimierung weiter optimiert werden können.
- Thread:
- Kontrollflußabstraktion. Ein Thread ist ein
unabhängiger Ausführungskontext mit eigenem Aufrufstack,
Instruktionszeiger und lokalem Speicher. Threads kommunizieren
durch Synchronisierungskonstrukte und tauschen Daten über einen
geteilten, globalen Speicher aus.
- Tricolor Marking:
- Von Dijkstra formalisierte Abstraktion
zur Betrachtung der Arbeit eines nebenläufigen Garbage
Collectors.
- User Space:
- Geschütztes Ausführungsregime von
Anwendungscode. Zugriff auf Systemressourcen ist nur durch Aufruf
des Betriebssytems und Wechsel in
kernel space möglich.
- Vtable:
- (virtual function table). Vom Compiler
generierte Tabelle der virtuellen Methoden einer Klasse. Jeder
Methodensignatur wird eine Zeile der Tabelle zugewiesen. Gleiche
Methodensignaturen in durch Vererbung abhängigen Klassen werden
der gleichen Zeile zugewiesen. Dadurch kann der virtuelle
Methodenlookup durch einen einfachen Array-Zugriff implementiert
werden.
inline cache, polymorphic inline cache
- Write Barrier:
- Codeabschnitt, der bei jedem Schreiben in
einen Speicherbereich ausgeführt wird.
Next: Literatur
Up: No Title
Previous: SELF 4.1.2
  Inhalt
2001-02-28