¿Por qué la suma elemento por elemento en dos bucles separados es más rápida que en un solo bucle combinado?
¡Hola a todos! Llevo un par de meses programando en C++ y me encontré con un comportamiento de rendimiento muy extraño. Tengo dos arrays: `a` y `b` de tamaño 200000000 elementos (aproximadamente 800 MB cada uno). Quiero sumarlos elemento por elemento y guardar el resultado en el array `c`, luego multiplicar cada elemento de `c` por 2 y guardarlo en `d`.
Escribí dos variantes de código:
**Variante 1 (dos bucles separados):**
```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 (un solo bucle combinado):**
```cpp
for (int i = 0; i < n; ++i) {
c[i] = a[i] + b[i];
d[i] = c[i] * 2;
}
```
Esperaba que la segunda variante fuera más rápida, ya que hace todo en un solo paso. Pero en la práctica (compilador MSVC, flags /O2, arquitectura x64) la primera variante funciona **casi el doble de rápido**. ¿Por qué? En la segunda variante hay menos operaciones con índices y menos comprobaciones de límites. Por favor, expliquen qué está pasando bajo el capó. ¿Está relacionado con...
No answers yet.
Inicia sesión para dejar una respuesta
Blogs
Top 10 vulnerabilidades de aplicaciones C# y cómo evitarlas
Pruebas de integración de TypeScript con Docker: guía completa
Inyección de Dependencias en C++: Guía Sencilla para Principiantes
Constructor vacío en data class de Kotlin: 5 errores y cómo solucionarlos