Aula 5: Indexação: threadIdx, blockIdx, blockDim
Quando você lança um kernel sobre um grid de blocos, cada thread precisa saber por qual elemento do array ela é responsável. CUDA dá a cada thread três variáveis embutidas: threadIdx.x — o índice da thread dentro do seu bloco; blockIdx.x — o índice do bloco dentro do grid; e blockDim.x — o número de
Imagine um estacionamento com fileiras de vagas. blockIdx.x é o número da fileira, blockDim.x é quantas vagas há em cada fileira, e threadIdx.x é sua vaga dentro da fileira. Para saber o número geral da sua vaga desde o início do estacionamento: fileira vezes vagas-por-fileira, mais sua vaga na fileira.
- threadIdx.x
- O índice da thread dentro do seu bloco. Vai de 0 até blockDim.x-1, e volta a zero em cada bloco.
- blockIdx.x
- O índice do bloco dentro do grid. Vai de 0 até gridDim.x-1.
- blockDim.x
- O número de threads por bloco (a dimensão definida no lançamento). É igual para todos os blocos do grid.
- índice global
- Um identificador único de uma thread em todo o grid: i = blockIdx.x * blockDim.x + threadIdx.x.