¿Por qué la suma elemento por elemento en dos bucles separados se ejecuta mucho más rápido que en un solo bucle combinado?
¡Saludos, colegas! Llevo varios años programando en C++, pero recientemente me encontré con un comportamiento de rendimiento muy extraño que no puedo explicar.
Tengo dos arrays: `a` y `b` de 20 millones de elementos cada uno. Quiero primero sumarlos elemento por elemento y escribir el resultado en el array `c`, y luego sumar los elementos del array `c` con el array `d` y escribir en el array `e`. Escribí dos variantes de código: la primera con dos bucles separados, la segunda con un solo bucle combinado.
Aquí está el código:
```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: dos bucles separados
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];
```
No answers yet.
Inicia sesión para dejar una respuesta
Blogs