O que significa "código cache-friendly" e como isso afeta o desempenho do C++?
Olá! Estou estudando C++ e me deparei com o termo "cache-friendly" (amigável ao cache). Frequentemente vejo em discussões sobre desempenho que o código deve ser cache-friendly, mas não entendo completamente o que isso significa na prática.
Tenho um exemplo simples. Trabalho com matrizes 1000×1000 (int). Aqui estão duas variações de código para somá-las:
Variante 1: por linhas
```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 colunas
```cpp
int sum = 0;
for (int j = 0; j < 1000; ++j)
for (int i = 0; i < 1000; ++i)
sum += matrix[i][j];
```
A primeira variante funciona 5 a 10 vezes mais rápido no meu computador! Li que isso está relacionado ao cache, mas por que uma diferença tão grande? Como determinar se o código é cache-friendly? E como escrever esse código de forma consciente, em vez de apenas memorizar padrões?
Ficarei grato por uma explicação detalhada com exemplos.
<<>>