A NVIDIA publicou um passo a passo detalhado mostrando como transformar um pipeline de processamento de imagens em CUDA de um código lento e propenso a erros em uma implementação 300 vezes mais rápida — sem nenhuma otimização de baixo nível. O guia, assinado pelo engenheiro Nicolas Blin, percorre seis melhorias incrementais e é acompanhado de código aberto e notebook no Google Colab.
Do bug invisível à otimização
O ponto de partida é um pipeline que transfere imagens da CPU para a GPU, converte RGB em escala de cinza e calcula a mediana de blocos de 32×32 pixels. O código inicial sofre de um bug clássico: um acesso fora dos limites na memória compartilhada, que a NVIDIA recomenda caçar com o Compute Sanitizer e evitar com a nova API de indexação do CCCL e com mdspan, que dispara asserts em acessos inválidos.
Com o código corrigido, a próxima etapa é medir. Usando o Nsight Systems com marcações NVTX, o autor descobre que o kernel de mediana consome 2,1 segundos por imagem — o gargalo claro do pipeline de 6,8 segundos.
Substituir kernels por bibliotecas otimizadas
A maior vitória vem de trocar kernels escritos à mão por primitivas da CUB, a biblioteca de algoritmos paralelos da NVIDIA. A conversão RGB para cinza vira um cub::DeviceTransform, e o cálculo da mediana passa a usar um radix sort em nível de bloco. O resultado: o tempo da mediana cai de 2,1 segundos para 773 microssegundos — uma aceleração de 2.717x nessa etapa.
Memória, transferências e streams
Com os kernels rápidos, o gargalo muda para a alocação de memória (83% do tempo). A solução é usar contêineres com pool de memória (cuda::device_buffer) e memória “pinned” para as transferências entre CPU e GPU (cuda::host_buffer), que reduzem drasticamente o overhead de alocação e aceleram as cópias em 10x.
Por fim, o guia mostra como paralelizar o trabalho dando a cada thread OpenMP seu próprio cuda::stream e usando cópias assíncronas (cuda::copy_bytes), sobrepondo kernels e transferências. O resultado final: 23 milissegundos para processar as três imagens, contra os 6,8 segundos originais.
A lição central vale para qualquer desenvolvedor que trabalhe com GPU: antes de escrever otimizações manuais, use as ferramentas e bibliotecas maduras do ecossistema CUDA — Compute Sanitizer, Nsight Systems, CUB, contêineres de memória e streams. Elas entregam ganhos enormes com mudanças mínimas e código mais seguro.
Descubra mais sobre noticiAI
Assine para receber nossas notícias mais recentes por e-mail.



