Aula 19: Constant Memory e Registers
Dois tipos rápidos de memória ficam nas duas pontas da hierarquia. Numa ponta estão os registers: a memória mais rápida, privada a cada thread. Toda variável local simples dentro de um kernel (por exemplo um acumulador sum) vive num register, e acedê-la é quase de graça. Mas há um número limitado de
Um register é um bloco de notas pessoal no bolso de cada trabalhador — o mais rápido, mas se você escrever demais nele, precisa guardar páginas num armazém distante (isso é o spilling). Constant memory é um mural único do qual todo mundo lê: se todos olham para o mesmo aviso, dá para lê-lo em voz alta uma vez só para todos.
- registers
- A memória mais rápida, privada a cada thread. Variáveis locais simples vivem aqui. A quantidade é limitada por SM.
- register spilling
- Quando um kernel precisa de mais registers do que os disponíveis, o excedente é armazenado em local memory, que fica na DRAM global lenta — uma penalidade de desempenho.
- constant memory
- Uma região pequena (64KB), read-only a partir do kernel, declarada com __constant__ e escrita pelo host. Ela tem um cache dedicado.
- broadcast de constant
- Quando todas as threads de um warp leem o mesmo valor da constant memory, a leitura é distribuída (broadcast) do cache num único passo — tão rápida quanto um register.