Cacheoptimierung durch Anpassung der Speicheranordnung Seminar Zwischensprachen und Codeoptimierung, SS 2003 Matthias Heil Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.1/21
Inhalt Eigenschaften verzeigerter Datenstrukturen Strukturoptimierungen Umordnung Partitionierung Allokation ccmalloc von Chilimbi, Hill, Larus Verfahren von Franz, Kistler Färbung Reorganisation Zusammenfassung Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.2/21
Verzeigerte Datenstrukturen Verschiedene Knoten Zusammengesetzt aus Elementen Oft uniformer Aufbau Allokation unabhängig voneinander Transparente Speicherposition der Knoten Elemente haben unterschiedliche Zugriffshäufigkeiten Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.3/21
Abbildung auf Speicher Knoten sind Verbunde, Objekte Speicherabbildung sprachabhängig In Reihenfolge der Aufschreibung (C/C++/...) typsichere Sprachen erlauben Umordnung (Java/Oberon/...) Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.4/21
Abbildung auf Cache Elementreihenfolge nach Aufschreibung: Speicher Cache Zugriffshäufigkeit: häufig mittel selten Häufig benötigte Elemente im Cache verteilt Keine Synergieeffekte Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.5/21
Strukturumordnung Stelle Zugriffshäufigkeiten auf Elemente fest häufiger Zugriff: heißes Element seltener Zugriff: kaltes Element Idee [FK98, CHL00]: Sortiere nach Zugriffshäufigkeit heiße Elemente in gleiche Cachezeile Cachelokalität steigt nicht typsichere Sprache: Übersetzer meldet mögliche Verbesserung Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.6/21
Auswirkung auf den Cache Speicher Cache heiße Elemente werden gemeinsam geladen aber nur ein Verbund pro Cachezeile Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.7/21
Strukturpartitionierung Ziel: verbesserte Cacheausnutzung Idee [FK98, CHL00]: Trenne heiße von kalten Elementen Zusätzliche Indirektion für kalte Elemente Zusätzlicher Speicher für den Zeiger Komplizierte Initialisierung Aber: Mehr Platz im Cache für heiße Elemente Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.8/21
Cachebewußte Allokation malloc beachtet den Cache nicht Ersatz: ccmalloc [CHL00] Zusätzlicher Parameter Zeiger auf gleichzeitig benötigten Partner z.b. Vaterknoten im Baum Platziert neuen Speicher möglichst in derselben Cachezeile wie den Partner Sonst auf gleicher Speicherseite Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.9/21
Verfahren von [FK98] Kombination aus Partitionierung und Allokation Problem: Minimiere Kosten der Indirektion Berechne Elementadresse aus Basisadresse Idee: Allokation gruppiert nach Größenverhältnis: Größe heiße Elemente Größe kalte Elemente Partitioniere entsprechend in mehrere Teile gleicher Größe Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.10/21
Elementzugriff Größenverhältnis ist bekannt durch Programmanalyse Profiling Abstand zum nächsten Block: Cachegröße + Größe einer Cachezeile Kalte Elemente verdrängen heiße nicht Adressen sind beim Übersetzen berechenbar! Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.11/21
Partitionierung im Speicher 1:1 1:2 1:3 Pfeillänge = Cachegröße + Größe einer Cachezeile Große Elemente (Strings,...) verhindern Trennung Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.12/21
Auswirkung auf den Cache Speicher Cache Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.13/21
Halbierung der Teilgrößen Speicher Cache Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.14/21
Gedanken zur Methode Nicht bei allen Verbunden lohnt die Teilung Heiße Elemente müssen häufiger referenziert werden als alle kalten Elemente zusammen [FK98] Problem ist die Identifizierung heißer Elemente Ab wann ist ein Element heiß? Globale vs. lokale Temperatur? Aufwand lohnt nur bei manchen Schleifen und verlangsamt das Programm andernfalls (Ergebnisse [FK98]) Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.15/21
Färbung Problem: kalte Knoten verdrängen heiße Knoten Idee [CHL00]: Partitioniere den Cache p Cachezeilen für heiße Knoten der Rest für kalte Knoten beachte Assoziativität des Cache Implementierung: Lücke im virtuellen Adressraum Lücke als Vielfaches der Seitengröße: kein physikalischer Speicherverschnitt Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.16/21
Auswirkung auf den Cache Cache p Speicher p p p p heiße Knoten können von kalten nicht verdrängt werden Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.17/21
Beispiel 1 2 3 4 5 1 2 3 Speicher 4 5 Cache Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.18/21
Reorganisation Löschen und Einfügen von Knoten zerstört (cachebewußtes) Speicherlayout Umordnung der Knoten zur Wiederherstellung Typsichere Sprache Implizit durch Speicherbereiniger [CHL00] Nicht typsichere Sprache Nur möglich wenn keine Zeiger ins Innere der Struktur existieren Explizit durch Funktionsaufruf (ccmorph [CHL00]) Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.19/21
Zusammenfassung Drei sich ergänzende Strategien cachebewußte Definition cachebewußte Allokation cachebewußte Reorganisation Jede Kombination kann Verbesserung der Laufzeit bewirken Verschlechterung ebenfalls möglich Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.20/21
Quellen Literatur [CHL00] Trishul M. Chilimbi, Mark D. Hill, and James R. Larus. Making pointer-based data structures cache conscious. Computer, 33(12):67 75, December 2000. [FK98] Michael Franz and Thomas Kistler. Splitting data objects to increase cache utilization. Technical Report 98-34, Department of Information and Computer Science, University of California, Irvine, October 1998. Matthias Heil Cacheoptimierung durch Anpassung der Speicheranordnung p.21/21