Leçon 5 : Indexation : threadIdx, blockIdx, blockDim
Quand tu lances un kernel sur une grid de blocks, chaque thread doit savoir de quel élément du tableau il est responsable. CUDA donne à chaque thread trois variables intégrées : threadIdx.x — l'indice du thread dans son block ; blockIdx.x — l'indice du block dans la grid ; et blockDim.x — le nombre
Imagine un parking avec des rangées de places. blockIdx.x est le numéro de la rangée, blockDim.x est le nombre de places par rangée, et threadIdx.x est ta place dans la rangée. Pour connaître ton numéro de place total depuis le début du parking : rangée fois places-par-rangée, plus ta place dans la rangée.
- threadIdx.x
- L'indice du thread dans son block. Il va de 0 à blockDim.x-1, et repart à zéro à chaque block.
- blockIdx.x
- L'indice du block dans la grid. Il va de 0 à gridDim.x-1.
- blockDim.x
- Le nombre de threads par block (la dimension définie au lancement). Elle est la même pour tous les blocks de la grid.
- indice global
- Un identifiant unique d'un thread dans toute la grid : i = blockIdx.x * blockDim.x + threadIdx.x.