Aula 15: Cache do CPU e Localidade de Memória
O CPU é muito mais rápido que a memória principal. Para cobrir essa diferença, ele usa uma hierarquia de cache — L1, L2, L3 — que armazena cópias dos dados acessados recentemente. Quando o código C++ acessa os dados numa ordem amigável ao cache, o desempenho pode saltar de 10 a 50×. Nesta aula vamos
O CPU lembra das coisas que você tocou recentemente — leia os dados na ordem em que eles ficam na memória e o CPU já vai ter o próximo pedaço pronto antes mesmo de você pedir.
- cache line
- A unidade de transferência entre a memória principal e o cache — 64 bytes na maioria dos CPUs modernos. Qualquer acesso à memória carrega a cache line inteira que contém aquele endereço.
- false sharing
- Quando duas threads escrevem em variáveis diferentes que compartilham a mesma cache line, causando invalidação desnecessária do cache em cada thread.
- localidade espacial
- A tendência dos programas de acessar endereços de memória próximos uns dos outros. O acesso sequencial a um array explora a localidade espacial porque toda a cache line é carregada de uma vez.
- localidade temporal
- A tendência dos programas de acessar o mesmo endereço de memória repetidamente num curto período de tempo. Loops que reutilizam a mesma variável várias vezes exploram a localidade temporal.
- prefetch
- Um mecanismo em que o CPU (ou o compilador) carrega cache lines com antecedência, antes de o código pedi-las, detectando padrões de acesso sequenciais.