Aula 13: A Hierarquia de Memória
Uma GPU tem vários tipos de memória que se diferenciam em velocidade, escopo e tempo de vida. Registers são a memória mais rápida: toda variável local simples em um kernel fica em um register, privado a uma única thread e existindo apenas enquanto a thread roda. Shared memory, declarada com __shared
Pense em uma cozinha: registers são suas mãos — as mais rápidas, mas só suas e só por um instante. Shared memory é a bancada compartilhada de uma equipe na cozinha — rápida e acessível para toda a equipe, mas não para uma equipe em outra cozinha. Global memory é a geladeira gigante no depósito — enorme e atende a todos, mas a caminhada até lá é lenta. Constant memory é o quadro de receitas na parede que todo mundo lê mas ninguém muda.
- registers
- A memória mais rápida, privada a uma única thread. Toda variável local simples em um kernel fica aqui e existe apenas enquanto a thread roda.
- shared memory
- Memória on-chip declarada __shared__, compartilhada por todas as threads do mesmo block. Bem mais rápida que global, mas não atravessa blocks.
- global memory
- A DRAM do device: grande, lenta, acessível por todo o grid e persiste entre lançamentos. É para cá que os dados são copiados a partir do host.
- constant memory
- Memória read-only declarada __constant__ e armazenada em cache. Excelente quando todas as threads leem o mesmo valor.