Avatar ·

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