Warum ist die elementweise Addition in zwei separaten Schleifen schneller als in einer kombinierten?
Hallo zusammen! Ich schreibe seit ein paar Monaten in C++ und bin auf ein sehr seltsames Performance-Verhalten gestoßen. Es gibt zwei Arrays: `a` und `b` mit 200000000 Elementen (jeweils etwa 800 MB). Ich möchte sie elementweise addieren und das Ergebnis in Array `c` speichern, dann jedes Element von `c` mit 2 multiplizieren und in `d` speichern.
Ich habe zwei Code-Varianten geschrieben:
**Variante 1 (zwei separate Schleifen):**
```cpp
for (int i = 0; i < n; ++i) {
c[i] = a[i] + b[i];
}
for (int i = 0; i < n; ++i) {
d[i] = c[i] * 2;
}
```
**Variante 2 (eine kombinierte Schleife):**
```cpp
for (int i = 0; i < n; ++i) {
c[i] = a[i] + b[i];
d[i] = c[i] * 2;
}
```
Ich habe erwartet, dass die zweite Variante schneller ist, da sie alles in einem Durchlauf erledigt. Aber in der Praxis (Compiler MSVC, Flags /O2, x64-Architektur) ist die erste