¿Qué significa código "cache-friendly" y cómo escribir programas eficientes en C++?
¡Hola a todos! Soy un desarrollador principiante de C++, escribo pequeños programas para procesamiento de datos. Recientemente me topé con el término "cache-friendly" (amigable con la caché) y entendí que mis programas probablemente funcionan más lento de lo que podrían.
Tengo un ejemplo simple: proceso un array bidimensional de 10000x10000. La primera forma es recorrer por filas (bucle externo por i, interno por j). La segunda es recorrer por columnas (bucle externo por j, interno por i). En mi laptop, la primera opción se ejecuta en 0.3 segundos, ¡y la segunda en 2.5 segundos! La diferencia es casi 8 veces, aunque el código hace lo mismo.
Aquí está el código para ilustrar:
```cpp
const int N = 10000;
int arr[N][N];
// Opción 1: por filas (rápido)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = i * j;
}
}
// Opción 2: por columnas (lento)
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
arr[i][j] = i * j;
}
}
```
¿Por qué una diferencia tan enorme? ¿Qué hace exactamente que el código sea "c