Pourquoi l'addition élément par élément dans deux boucles séparées est-elle beaucoup plus rapide que dans une seule boucle combinée ?
Bonjour, collègues ! J'écris en C++ depuis plusieurs années, mais récemment, je suis tombé sur un comportement de performance très étrange que je ne peux pas expliquer.
J'ai deux tableaux : `a` et `b` de taille 20 millions d'éléments chacun. Je veux d'abord les additionner élément par élément et écrire le résultat dans le tableau `c`, puis additionner les éléments du tableau `c` avec le tableau `d` et écrire dans le tableau `e`. J'ai écrit deux variantes de code : la première avec deux boucles séparées, la seconde avec une seule boucle combinée.
Voici le code :
```cpp
#include
#include
#include
const size_t N = 20000000;
int main() {
std::vector a(N, 1);
std::vector b(N, 2);
std::vector c(N);
std::vector d(N, 3);
std::vector e(N);
// Variante 1 : deux boucles séparées
auto start1 = std::chrono::high_resolution_clock::now();
for (size_t i = 0; i < N; ++i) {
c[i] = a[i] + b[i];
}
for (size_t i = 0; i < N; ++i) {
e[i] = c[i] + d[i];
}
}