Avatar ·

¿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?