Классическая формула индекса
blockIdx.x * blockDim.x + threadIdx.x.
«Классическая формула индекса» — бесплатный урок CUDA Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CUDA Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CUDA Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
One Thread, One Element
The whole point of a CUDA kernel is that every thread handles one piece of data. To do that, each thread needs a unique global index.
Why Local IDs Are Not Enough
Inside a block, threadIdx.x only counts 0 up to blockDim minus one. Many blocks reuse those same small numbers, so it cannot be your final index.
Blocks Sit Side by Side
Picture the grid as blocks laid end to end. Each block owns a contiguous slice of the array, and blockIdx.x tells you which slice you are in.
How Wide Is a Block?
blockDim.x is the number of threads per block. It is the width of each slice, so it scales your block offset to the right spot.
The Classic Formula
Combine the three: skip past earlier blocks, then add your position inside this block. That single line gives every thread a unique index.
int i = blockIdx.x * blockDim.x + threadIdx.x;Walking Through It
With 4 threads per block, block 0 covers 0 to 3, block 1 covers 4 to 7, block 2 covers 8 to 11. The offsets never overlap.
A Concrete Example
Thread 2 in block 3 with blockDim 256 lands at 3 times 256 plus 2, which is 770. That is its global position in the data.
// blockIdx.x=3, blockDim.x=256, threadIdx.x=2
int i = 3 * 256 + 2; // i == 770Using the Index
Once you have i, you treat it as an array subscript. Each thread reads and writes only its own element, with no overlap.
out[i] = a[i] + b[i];It Maps One to One
Launch n threads and the formula produces every value from 0 to n minus 1 exactly once. That is a perfect one-to-one cover of the array.
The Order Matters
Always multiply before you add. blockIdx.x * blockDim.x is the start of your slice, and threadIdx.x is the step inside it.
Beyond One Dimension
The same idea extends to 2D and 3D using the .y and .z members, but for flat arrays the .x formula is all you need. 🚀
Quick Check
Compute one thread's global index.
Recap
You learned the formula every kernel uses: blockIdx.x * blockDim.x + threadIdx.x. It hands each thread one unique slot in your array. 🎉
Часто задаваемые вопросы
Урок «Классическая формула индекса» бесплатный?
Да — полный текст урока «Классическая формула индекса» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CUDA Academy, подпишись на CoddyKit PRO. Курс CUDA Academy содержит 4 уроков всего.
Чему я научусь в уроке «Классическая формула индекса»?
blockIdx.x * blockDim.x + threadIdx.x. Ты практикуешь CUDA Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CUDA Academy?
Предыдущий опыт не требуется. CUDA Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Классическая формула индекса»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CUDA Academy?
Да. Каждый урок CUDA Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Классическая формула индекса
- Защита от выхода за диапазон
- Округление числа блоков вверх
- Циклы с шагом, равным размеру сетки