Leçon 4 : Dimensionner la grid — assez de threads pour N
Chaque lancement GPU cache une petite énigme de comptage : tu as n éléments à traiter, mais les threads viennent en blocks de taille fixe — alors, combien de blocks faut-il pour tous les couvrir sans perdre les derniers ? C'est le sujet de cette leçon : s'assurer qu'il y ait assez de threads. Tu sai
Tu dois transporter 1000 personnes dans des bus de 256 places. 1000 divisé par 256 fait à peu près 3,9, mais tu ne peux pas commander 3,9 bus — il t'en faut 4 complets, sinon les derniers passagers restent sur le carreau. La formule d'arrondi vers le haut arrondit toujours vers un bus complet supplémentaire. C'est vrai, le quatrième bus aura quelques sièges vides — ce sont les threads en trop qui restent simplement tranquilles.
- division par arrondi vers le haut
- Une division qui arrondit toujours vers le haut. En entiers, elle s'exprime comme (n + d - 1) / d pour obtenir le nombre de groupes qui couvrent les n éléments.
- threads par block
- Le nombre de threads dans chaque block (le deuxième nombre dans <<<>>>). Une valeur courante est 256. C'est le dénominateur dans la formule du nombre de blocks.
- taille de la grid
- Le nombre de blocks lancés, numBlocks. Il est choisi de sorte que le total de threads (numBlocks fois threadsPerBlock) soit au moins égal à n.
- garde de limites
- La condition if (i < n) dans le kernel qui fait que les threads en trop (ceux dont l'indice dépasse n) évitent de toucher la mémoire.