Home

cachefreundliche

Cachefreundliche Programmierung beschreibt die Gestaltung von Software, die die Mechanismen moderner CPU-Caches nutzt, um die Laufzeitleistung zu verbessern. Ziel ist es, möglichst viele Speicherzugriffe im Cache statt im Hauptspeicher zu halten und dadurch Cache-Treffer zu erhöhen.

CPU-Caches arbeiten hierarchisch (L1, L2, L3) und speichern kleinere, häufig gebrauchte Datensegmente in Cache-Linien von typischer

Zu verbreiteten Techniken gehören: die Verwendung zusammenhängender Speicherlayouts (vorzugsweise Arrays statt verlinkter Listen); passende Datenstrukturen (Array

Der Begriff ist kontextabhängig und plattformbezogen; was cachefreundlich ist, kann auf einer Architektur ineffizient sein. Performance-Messungen

Größe
(etwa
64
Bytes).
Vorteile
entstehen
durch
räumliche
Lokalität
(aufeinanderfolgende
Speicheradressen)
und
zeitliche
Lokalität
(wiederholte
Zugriffe
auf
dieselben
Daten).
Unvorteilhaft
sind
sporadische,
streuende
Zugriffe,
die
zu
Cache-Misses
führen.
Gute
Muster
bevorzugen
sequentielle
oder
fortlaufende
Zugriffe
auf
Arrays.
of
Structures
vs
Structure
of
Arrays);
Schleifen-Reihenfolge
und
Zugriffsmuster
so
gestalten,
dass
der
Zugriff
zur
Speicheranordnung
passt;
Schleifen-Tiling
bzw.
Blocking,
um
Daten
in
Cache-größen
zu
halten;
Datenausrichtung
und
Padding,
um
Cache-Linien
effizient
zu
nutzen;
Vorabrufen
(Prefetching)
oder
Compiler-Hints;
Vermeidung
von
False
Sharing
in
Mehrthread-Umgebungen.
mit
Profilern
helfen,
die
Auswirkungen
zu
bewerten.
Cachefreundliche
Optimierung
wird
oft
als
cache-aware
statt
cache-oblivious
Strategie
umgesetzt
und
kann
mit
höherem
Entwicklungsaufwand
oder
größerem
Speicherbedarf
verbunden
sein.