¿Qué significa «código cache-friendly» y cómo afecta al rendimiento de C++?
¡Hola! Estoy aprendiendo C++ y me topé con el término «cache-friendly». A menudo veo en discusiones sobre rendimiento que el código debe ser cache-friendly, pero no termino de entender qué significa en la práctica.
Tengo un ejemplo simple. Trabajo con matrices de 1000×1000 (int). Aquí hay dos variantes de código para sumarlas:
Variante 1: por filas
```cpp
int sum = 0;
for (int i = 0; i < 1000; ++i)
for (int j = 0; j < 1000; ++j)
sum += matrix[i][j];
```
Variante 2: por columnas
```cpp
int sum = 0;
for (int j = 0; j < 1000; ++j)
for (int i = 0; i < 1000; ++i)
sum += matrix[i][j];
```
¡La primera variante funciona de 5 a 10 veces más rápido en mi computadora! Leí que esto está relacionado con el caching, pero ¿por qué una diferencia tan enorme? ¿Cómo determinar si el código es cache-friendly? ¿Y cómo escribir ese código de manera consciente, no solo memorizando patrones?
Agradecería una explicación detallada con ejemplos.
<<>>
¿Qué es el cache y por qué es importante?
No answers yet.
Inicia sesión para dejar una respuesta
Blogs