Leçon 8 : Boucles grid-stride et N arbitraire
Jusqu'ici, on a supposé qu'un thread gère un élément, avec if (i < n) qui protège les limites. Mais que se passe-t-il quand n est plus grand que le nombre de threads qu'on lance ? Avec un million d'éléments et seulement 262 144 threads, la moitié du tableau n'est jamais calculée. La solution est une
Imagine 100 chaises à installer mais seulement 10 assistants. Au lieu que chacun installe une seule chaise et rentre chez lui, chaque assistant commence à sa chaise et saute 10 chaises en avant à chaque fois : 1, 11, 21... ainsi 10 personnes couvrent les 100 chaises.
- boucle grid-stride
- Un motif où chaque thread gère plusieurs éléments, en sautant entre eux de la taille de toute la grid, jusqu'à ce que l'indice dépasse n.
- stride
- La distance dont l'indice saute en avant : blockDim.x * gridDim.x, le nombre total de threads dans la grid.
- gridDim
- Le nombre de blocks dans la grid. gridDim.x * blockDim.x donne le total de threads sur une dimension.
- N arbitraire
- Une entrée de n'importe quelle taille, même plus grande que le nombre de threads. Une boucle grid-stride la couvre sans changer la configuration de lancement.