Was bedeutet «cache-freundlicher Code» und wie beeinflusst er die Leistung von C++?
Hallo! Ich lerne C++ und bin auf den Begriff «cache-friendly» gestoßen. In Leistungsdiskussionen sehe ich oft, dass Code cache-friendly sein sollte, aber ich verstehe nicht ganz, was das in der Praxis bedeutet.
Ich habe ein einfaches Beispiel. Ich arbeite mit Matrizen 1000×1000 (int). Hier sind zwei Code-Varianten, um sie zu summieren:
Variante 1: zeilenweise
```cpp
int sum = 0;
for (int i = 0; i < 1000; ++i)
for (int j = 0; j < 1000; ++j)
sum += matrix[i][j];
```
Variante 2: spaltenweise
```cpp
int sum = 0;
for (int j = 0; j < 1000; ++j)
for (int i = 0; i < 1000; ++i)
sum += matrix[i][j];
```
Die erste Variante ist auf meinem Computer 5–10 Mal schneller! Ich habe gelesen, dass dies mit Caching zusammenhängt, aber warum ein so großer Unterschied? Wie erkennt man überhaupt, ob Code cache-friendly ist? Und wie schreibt man solchen Code bewusst, anstatt nur Muster auswendig zu lernen?
Ich wäre dankbar für eine ausführliche Erklärung mit Beispielen.
<<>>