Registradores e memória local
O armazenamento mais rápido por thread e seus extravasamentos.
Registradores e memória local é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de CUDA Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de CUDA Academy inclui 4 aulas no total.
A memória mais rápida que você tem
Cada thread recebe seus próprios registradores privados, o armazenamento mais rápido do chip. Eles ficam ao lado das unidades de cálculo, portanto as leituras custam quase nada.
Variáveis comuns tornam-se registradores
Quando você escreve uma variável local comum em um kernel, o compilador geralmente a mantém em um registrador. Nenhuma sintaxe especial é necessária. 🙂
__global__ void k() {
int x = 5; // x lives in a register
float y = x * 2.0f;
}Privado para uma única thread
O valor de um registrador pertence exatamente a uma thread. A thread 7 não consegue ver o registrador da thread 8, por isso o trabalho de cada thread permanece claramente separado.
Os registradores formam um conjunto compartilhado
Cada multiprocessador de fluxo tem um arquivo de registradores fixo. Todas as threads residentes o compartilham; portanto, usar menos registradores por thread permite executar mais threads ao mesmo tempo.
Quando eles acabam
Se um kernel precisar de mais registradores do que os disponíveis, os valores excedentes serão enviados para outro lugar. Esse evento é chamado de derramamento de registradores.
Para onde vão os derramamentos: memória local
Os valores derramados vão para a memória local, que, apesar do nome, não fica no chip. Na verdade, ela fica na lenta DRAM externa.
A memória local ainda é específica de cada thread
A memória local é privada para cada thread, assim como os registradores. A diferença é apenas a velocidade, pois a memória local demora muito mais para ser acessada.
Vetores locais grandes causam derramamentos
Declarar um vetor grande por thread frequentemente força seu armazenamento na memória local, pois simplesmente não há registradores suficientes para manter todos os elementos.
__global__ void k() {
float buf[64]; // likely lives in local memory
}Os derramamentos prejudicam o desempenho
Cada derramamento transforma um acesso gratuito ao registrador em uma lenta ida à DRAM. Reduzir a pressão sobre os registradores é uma das otimizações mais fáceis que você pode fazer.
Visualizando a quantidade de registradores
Você pode pedir ao compilador que informe a quantidade de registradores por thread. Passe --ptxas-options=-v para nvcc, e ele imprimirá o uso de cada kernel.
nvcc --ptxas-options=-v kernel.cuLimitando registradores de propósito
O qualificador __launch_bounds__ instrui o compilador a limitar os registradores, trocando um pouco de velocidade por thread por mais threads executando juntas.
__global__ void __launch_bounds__(256)
myKernel() { /* ... */ }Verificação rápida
Você declarou um vetor grande por thread e o desempenho caiu. O que provavelmente aconteceu?
Recapitulação: rápidos e privados
Você aprendeu que os registradores são o armazenamento mais rápido por thread, que o conjunto é limitado e que o excesso é derramado na memória local lenta. Mantenha baixa a pressão sobre os registradores. 🎯
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Registradores e memória local” é grátis?
Sim — o texto completo de “Registradores e memória local” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de CUDA Academy, atualize para CoddyKit PRO. O curso de CUDA Academy inclui 4 aulas no total.
O que vou aprender em “Registradores e memória local”?
O armazenamento mais rápido por thread e seus extravasamentos. Você pratica CUDA Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar CUDA Academy?
Nenhuma experiência prévia é necessária. CUDA Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Registradores e memória local”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de CUDA Academy?
Sim. Cada aula de CUDA Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Registradores e memória local
- Compromissos da memória global
- Memória constante e seu cache
- Um modelo mental da hierarquia