O que significa código "cache-friendly" e como escrever programas eficientes em C++?
Olá a todos! Sou um desenvolvedor C++ iniciante e escrevo pequenos programas para processamento de dados. Recentemente, me deparei com o termo "cache-friendly" (amigável ao cache) e percebi que meus programas provavelmente estão rodando mais devagar do que poderiam.
Tenho um exemplo simples: estou processando um array bidimensional 10000x10000. A primeira forma é a varredura por linhas (loop externo por i, interno por j). A segunda é a varredura por colunas (loop externo por j, interno por i). No meu notebook, a primeira opção é executada em 0,3 segundos, enquanto a segunda leva 2,5 segundos! A diferença é de quase 8 vezes, embora o código faça a mesma coisa.
Aqui está o código para ilustrar:
```cpp
const int N = 10000;
int arr[N][N];
// Opção 1: por linhas (rápido)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = i * j;
}
}
// Opção 2: por colunas (lento)
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
arr[i][j] = i * j;
}
}
```
Por que uma diferença tão grande? O que exatamente torna o código "c