Урок 5: Индексация: threadIdx, blockIdx, blockDim
Когда вы запускаете kernel на grid из блоков, каждый thread должен знать, за какой элемент массива он отвечает. CUDA даёт каждому thread три встроенные переменные: threadIdx.x — индекс thread внутри его блока; blockIdx.x — индекс блока внутри grid; и blockDim.x — число threads в каждом блоке. Чтобы
Представьте парковку с рядами мест. blockIdx.x — это номер ряда, blockDim.x — сколько мест в ряду, а threadIdx.x — ваше место внутри ряда. Чтобы узнать ваш общий номер места от начала парковки: ряд умножить на число мест в ряду, плюс ваше место в ряду.
- threadIdx.x
- Индекс thread внутри его блока. Пробегает от 0 до blockDim.x-1 и обнуляется в каждом блоке.
- blockIdx.x
- Индекс блока внутри grid. Пробегает от 0 до gridDim.x-1.
- blockDim.x
- Число threads в блоке (размерность, задаваемая при запуске). Одинаково для каждого блока в grid.
- глобальный индекс
- Уникальный идентификатор thread во всём grid: i = blockIdx.x * blockDim.x + threadIdx.x.