O pipeline de buffers duplos
Divida os dados em blocos para manter a GPU ocupada.
O pipeline de buffers duplos é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 4 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.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
The Idle GPU Problem
Copy a huge array, then run a kernel, then copy back. During each copy the GPU sits idle, and during compute the transfer engines sit idle.
Split the Work
The fix starts with breaking one giant array into smaller chunks. Each chunk can be copied and processed on its own, opening the door to overlap.
Two Buffers, Two Lanes
Double buffering uses two device buffers and two streams. While stream A computes on one chunk, stream B copies in the next.
Overlap Copy and Compute
The magic is concurrency: a transfer and a kernel run at the same time on different chunks. Transfer time hides behind useful compute.
Pinned Memory Required
This only works if the host data lives in pinned memory. Pageable buffers force blocking copies, and the whole pipeline collapses back to serial.
The Pipeline Loop
You iterate over chunks, and on each step you issue an async copy in, a kernel, and an async copy out, all on the same stream.
cudaMemcpyAsync(d_in, h_in + off, csz, H2D, s);
proc<<<g, b, 0, s>>>(d_in, d_out);
cudaMemcpyAsync(h_out + off, d_out, csz, D2H, s);Alternate the Streams
Assign each chunk to a stream by alternating them. Even chunks go to stream 0, odd chunks to stream 1, so neighbors overlap cleanly.
cudaStream_t s = streams[i % 2];Why Two Is Enough
Two streams already overlap copy with compute. More buffers add depth but bring diminishing returns and extra memory cost, so start with two.
Drain at the End
After queuing every chunk, wait for all work to finish before reading results. A simple cudaDeviceSynchronize drains every stream at once.
cudaDeviceSynchronize();The Speedup
With copy hidden behind compute, total time drops toward the cost of just the longer of the two, not their sum. That is the real win. 🚀
When It Wins Most
Double buffering shines when transfer time and compute time are roughly balanced. If one utterly dominates, focus your effort on shrinking that side first.
Quick Check
What is the core benefit of a double-buffering pipeline?
Recap
Chunk the data, use two pinned buffers and streams, and overlap copy with compute. Sync at the end and watch transfer time vanish. 🎉
Perguntas Frequentes
A aula “O pipeline de buffers duplos” é grátis?
Sim — o texto completo de “O pipeline de buffers duplos” é 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 “O pipeline de buffers duplos”?
Divida os dados em blocos para manter a GPU ocupada. 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 4 de 4.
Quanto tempo leva a aula “O pipeline de buffers duplos”?
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