Home

cachefreundlich

Cachefreundlich bezeichnet in der Informatik die Gestaltung von Software und Algorithmen, die darauf abzielt, die Nutzung von CPU-Datencaches zu maximieren und Cache-Misses zu minimieren. Ziel ist es, häufig auf dieselben Daten zuzugreifen oder auf benachbarte Speicherstellen zuzugreifen, damit der schnelle Cache statt langsamer Hauptspeicher genutzt wird.

Wesentliche Konzepte sind lokale Datennähe (Lokalität). Dazu gehören zeitliche Lokalität (Daten werden wiederholt in kurzer Zeit

Techniken zur Erhöhung der Cache-Effizienz umfassen Schleifenanordnung und Loop-Tiling (Blocking), damit Teilprobleme in den Cache passen

Vorteile cachefreundlicher Gestaltung zeigen sich oft deutlich in numerischer Software, Verarbeitung großer Datenmengen oder datenbanknahen Anwendungen.

genutzt)
und
räumliche
Lokalität
(aufeinanderfolgende
Speicheradressen
werden
hintereinander
gelesen).
Programme,
die
Arrays
in
fortlaufender
Reihenfolge
durchlaufen,
erfüllen
in
der
Regel
gut
dieses
Prinzip.
Die
Speicheranordnung
von
Daten
beeinflusst
ebenfalls
die
Lokalität:
Strukturen
von
Arrays
statt
Arrays
von
Strukturen
können
den
Zugriff
stride-behafteter
machen
oder
erleichtern;
außerdem
sind
Ausrichtungs-
und
Padding-Strategien
wichtig,
um
Cache-Linien
sauber
zu
nutzen
und
False
Sharing
zu
vermeiden.
und
wiederverwendet
werden
können.
Speicherzugriffe
sollten
möglichst
sequentiell
erfolgen;
unregelmäßige
oder
große
Sprünge
zwischen
Speicheradressen
erhöhen
Cache-Misses.
Cache-Liniengröße
(typisch
einige
Dutzend
Bytes)
bedeutet,
dass
benachbarte
Daten
oft
gemeinsam
geladen
werden.
In
Mehrkernprogrammen
kann
falsches
Teilen
von
Cache-Linien
zu
Performanceverlusten
führen;
hier
helfen
Padding,
Datenlokalität
pro
Thread
oder
Thread-Local-Data.
Nachteile
können
erhöhte
Komplexität
oder
weniger
klare
Abstraktionen
sein;
daher
ist
eine
Balance
zwischen
Lesbarkeit,
Portabilität
und
Lokalität
sinnvoll.
Tools
wie
Performance-Counters
helfen,
Cache-Hits
und
-Misses
zu
messen.