Aula 06 - Cache e Localidade
Se a Cache L1/L2 é tão crítica, como o Hardware adivinha o que o programador vai pedir? A CPU não lê bytes individuais da RAM; ela traz "blocos" contíguos chamados de Cache Lines (geralmente de 64 bytes).
✅ 1. Cache Hit e Cache Miss
O desempenho do seu loop for() depende maciçamente da Cache Hit Rate.
- Cache Hit: Acerto! A CPU pediu a posição
[1], ela já estava na Cache e a conta foi resolvida quase imediatamente. - Cache Miss: Erro! O processador precisou parar o Pipeline, ir até a RAM lenta, injetar o bloco de bytes na lenta escalada D-Cache/L3/L2/L1 e prosseguir.
sequenceDiagram
participant P as Programador
participant C as Cache L1
participant R as RAM
P->>C: Quero array[0]!
Note right of C: "Cache Hit" (Sucesso imediato)
P->>C: Quero NodeLink->prox!
Note right of C: Não está aqui...
C->>R: Buscar Posição Lenta na RAM...
R-->>C: Traz o bloco de 64bytes inteiro
Note right of C: "Cache Miss" (Atraso) 🗺️ 2. Localidade Espacial vs Temporal
As duas premissas arquiteturais da Localidade em Sistemas de Computação (que fundamentam toda escrita C/C++ otimizada):
Se o programa acessou a variável na posição de memória X, há extrema probabilidade de que no ciclo de CPU seguinte ele acesse a variável de memória X + 1. O clássico caso dos Arrays Continuos (std::vector), garantindo varredura limpa em Hit sequencial absoluto de 64 em 64 bytes.
Se o programa visitou a variável Y agora, há enorme probabilidade dele visitá-la nos próximos ms. O clássico caso das Variáveis Locais e Contadores Padrões (int i = 0) retidos brutalmente no Registrador ou na L1.
🧨 3. False Sharing e Lógica Invertida (A Morte do C++)
[!WARNING] O vilão máximo da performance: Iterar sobre matrizes pela Coluna ao invés da Linha. A imagem matriz na RAM C/C++ (Row-major order) exige saltos. E False Sharing ocorre quando threads isoladas atualizam variáveis contíguas da mesma linha de Cache de 64 bytes, forçando o Hardware (Cache Coherence Protocol) a invalidar repetitivas vezes L1/L2, triturando toda métrica.
A estrutura define a localidade espacial. Prefira dezenas de minúsculas variáveis sequenciais nos métodos a usar longos grafos com saltos randômicos baseados em ponteiros, se for iterar a esmo.
🎯 Próximos Passos
-
Acessar Slides
Reveja a apresentação visual desta aula.
-
Quiz
Teste seu entendimento básico com perguntas rápidas.
-
Exercícios
Prática avançada e dissertativa com consulta.
-
Projeto
Laboratório prático de codificação em C/C++.