0Pricing
CUDA Academy · Урок

Как избежать конфликтов банков памяти

Почему заполнение может ускорить доступ к общей памяти.

«Как избежать конфликтов банков памяти» — бесплатный урок CUDA Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CUDA Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CUDA Academy содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

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. 🎯

Часто задаваемые вопросы

Урок «Как избежать конфликтов банков памяти» бесплатный?

Да — полный текст урока «Как избежать конфликтов банков памяти» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CUDA Academy, подпишись на CoddyKit PRO. Курс CUDA Academy содержит 4 уроков всего.

Чему я научусь в уроке «Как избежать конфликтов банков памяти»?

Почему заполнение может ускорить доступ к общей памяти. Ты практикуешь CUDA Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать CUDA Academy?

Предыдущий опыт не требуется. CUDA Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Как избежать конфликтов банков памяти»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке CUDA Academy?

Да. Каждый урок CUDA Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Объявление массивов __shared__
  2. Синхронизация с помощью __syncthreads
  3. Как избежать конфликтов банков памяти
  4. Динамическая общая память
← Назад к CUDA Academy