Avatar ·

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]; } }