0Pricing
CUDA Academy · Lección

Evitar conflictos de bancos

Por qué el padding puede acelerar el acceso compartido.

Evitar conflictos de bancos es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de CUDA Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de CUDA Academy incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en 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. 🎯

Preguntas frecuentes

¿La lección «Evitar conflictos de bancos» es gratis?

Sí — el texto completo de «Evitar conflictos de bancos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de CUDA Academy, actualiza a CoddyKit PRO. El curso de CUDA Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Evitar conflictos de bancos»?

Por qué el padding puede acelerar el acceso compartido. Practicas CUDA Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar CUDA Academy?

No se requiere experiencia previa. CUDA Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Evitar conflictos de bancos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de CUDA Academy?

Sí. Cada lección de CUDA Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Declarar arrays __shared__
  2. Sincronizar con __syncthreads
  3. Evitar conflictos de bancos
  4. Memoria compartida dinámica
← Volver a CUDA Academy