Avatar ·

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