0Pricing
CUDA Academy · Aula

Evite conflitos de bancos

Por que o preenchimento pode acelerar o acesso compartilhado.

Evite conflitos de bancos é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 3 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.

Shared Memory Has Banks

Shared memory is split into 32 banks, one for each thread in a warp. Spreading accesses across them lets all 32 threads read at full speed.

How Addresses Map

Consecutive 4-byte words land in consecutive banks, wrapping around after 32. So word 0 is bank 0, word 32 is bank 0 again.

What a Bank Conflict Is

A bank conflict happens when two threads in a warp hit the same bank but different words. The hardware must serialize those accesses.

Serialization Costs Speed

An N-way conflict turns one fast access into N slow ones. A 32-way conflict can make shared memory as slow as if it were single-file. 🐢

The Happy Case: Stride One

When each thread reads tile[threadIdx.x], every thread hits a distinct bank. That is conflict-free and runs at full bandwidth.

float v = tile[threadIdx.x];

The Trap: Stride of 32

Reading with a stride of 32 sends every thread to the same bank. That is the worst case, a full 32-way conflict.

float v = tile[threadIdx.x * 32];

Even Strides Hurt Too

Any even stride that shares a factor with 32 causes partial conflicts. A stride of 2, for example, gives a 2-way conflict across the warp.

The Broadcast Exception

Good news: if all threads read the same address, the hardware broadcasts it in one shot. Same word is fine, only same bank with different words conflicts.

Padding to the Rescue

For 2D tiles, add one extra column with +1 padding. This shifts each row so column accesses no longer all land in one bank.

__shared__ float tile[32][33];

Why +1 Works

The extra column makes the row length coprime with 32. Now stepping down a column visits a different bank each time, killing the conflict.

Profile, Do Not Guess

Bank conflicts are invisible in source code. Use Nsight Compute to measure shared-memory conflicts before spending effort fixing them.

Quick Check

Let us check what makes shared access fast.

Recap

You learned that shared memory has 32 banks, that same-bank different-word access serializes, and that +1 padding fixes column conflicts. Next: dynamic shared memory. 🎯

Perguntas Frequentes

A aula “Evite conflitos de bancos” é grátis?

Sim — o texto completo de “Evite conflitos de bancos” é 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 “Evite conflitos de bancos”?

Por que o preenchimento pode acelerar o acesso compartilhado. 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 3 de 4.

Quanto tempo leva a aula “Evite conflitos de bancos”?

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

  1. Declare vetores __shared__
  2. Sincronize com __syncthreads
  3. Evite conflitos de bancos
  4. Memória compartilhada dinâmica
← Voltar para CUDA Academy