Avatar ·

Que signifie « code cache-friendly » et comment cela affecte-t-il les performances du C++ ?

Bonjour ! J'apprends le C++ et je suis tombé sur le terme « cache-friendly ». Je vois souvent dans les discussions sur les performances que le code doit être cache-friendly, mais je ne comprends pas complètement ce que cela signifie en pratique. J'ai un exemple simple. Je travaille avec des matrices 1000×1000 (int). Voici deux variantes de code pour les additionner : Variante 1 : par lignes ```cpp int sum = 0; for (int i = 0; i < 1000; ++i) for (int j = 0; j < 1000; ++j) sum += matrix[i][j]; ``` Variante 2 : par colonnes ```cpp int sum = 0; for (int j = 0; j < 1000; ++j) for (int i = 0; i < 1000; ++i) sum += matrix[i][j]; ``` La première variante est 5 à 10 fois plus rapide sur mon ordinateur ! J'ai lu que cela est lié à la mise en cache, mais pourquoi une si grande différence ? Comment déterminer si un code est cache-friendly ? Et comment écrire un tel code de manière réfléchie, et non en mémorisant simplement des patterns ? Je serais reconnaissant pour une explication détaillée avec des exemples. <<>>

Qu'est-ce que le cache et pourquoi est-il important ?