Por que a memória paginável é lenta
Use buffers temporários por trás de malloc comum.
Por que a memória paginável é lenta é 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.
Onde seus dados ficam
Os buffers comuns de C++ obtidos com alocação ficam na memória paginável do host. Parece gratuito, mas a GPU não pode copiá-los diretamente, e esse pequeno detalhe reduz sua velocidade.
O que significa paginável
A memória é paginável quando o sistema operacional pode mover suas páginas ou transferi-las para o disco a qualquer momento. Isso oferece flexibilidade, mas é complicado para o hardware que precisa de endereços fixos.
A GPU usa DMA
A GPU busca dados usando DMA, uma transferência direta de hardware que precisa de um endereço físico que não mude. Páginas pagináveis não garantem isso, portanto não podem ser usadas diretamente.
A etapa oculta de preparação
Para contornar esse problema, o driver primeiro copia seu buffer paginável para um buffer oculto de preparação e só então o envia para a GPU. Você paga por uma cópia extra que nunca escreveu. 😮
Duas cópias, não uma
Assim, uma única cudaMemcpy de memória paginável na verdade faz duas cópias: do host para a preparação e depois da preparação para o dispositivo. Esse trabalho duplicado é exatamente o motivo de as transferências pagináveis parecerem lentas.
Uma alocação comum
Este é o buffer que todos costumam usar primeiro. Ele funciona, mas toda transferência de h_data passa silenciosamente por esse desvio de preparação.
float* h_data = (float*)malloc(N * sizeof(float));
cudaMemcpy(d_data, h_data, bytes, cudaMemcpyHostToDevice);Por que o sistema operacional se importa
O sistema operacional mantém a memória paginável para poder superalocar a RAM e atender a vários programas ao mesmo tempo. Essa conveniência impede que a GPU leia suas páginas diretamente.
A largura de banda perdida
As transferências pagináveis geralmente atingem apenas metade da largura de banda máxima da conexão. A cópia de preparação consome ciclos da CPU e tráfego de memória que poderiam ser usados pelas transferências reais.
Ela também impede a sobreposição
Como a cópia de preparação é síncrona, as transferências pagináveis não podem realmente se sobrepor aos núcleos. Você perde os recursos assíncronos que tornam os fluxos úteis.
Quando isso ainda causa problemas
Em uma única cópia pequena, ninguém percebe. Mas, em um laço que envia dados a cada iteração, o custo da preparação se acumula e passa silenciosamente a dominar o tempo de execução.
A solução está chegando
A solução é pedir à CUDA um buffer que não possa ser retirado da memória, chamado memória fixada. A GPU o lê diretamente, sem preparação e sem cópia duplicada.
Verificação rápida
Por que uma transferência de memória paginável comum é mais lenta do que poderia ser?
Recapitulação
Buffers pagináveis podem ser movidos, portanto a GPU não pode acessá-los diretamente via DMA. O driver os prepara primeiro, duplicando a cópia. A solução é usar memória fixada. 🚀
Perguntas Frequentes
A aula “Por que a memória paginável é lenta” é grátis?
Sim — o texto completo de “Por que a memória paginável é lenta” é 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 “Por que a memória paginável é lenta”?
Use buffers temporários por trás de malloc comum. 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 “Por que a memória paginável é lenta”?
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
- Por que a memória paginável é lenta
- Memória fixada com cudaMallocHost
- cudaMemcpyAsync em um fluxo
- O pipeline de buffers duplos