Lección 4: Dimensionar el grid — suficientes hilos para N
En todo lanzamiento de GPU se esconde un pequeño acertijo de conteo: tienes n elementos para procesar, pero los hilos vienen en bloques de tamaño fijo — entonces, ¿cuántos bloques los cubren a todos sin perder los últimos? De eso trata esta lección: asegurarnos de que haya suficientes hilos. Ya sabe
Necesitas transportar a 1000 personas en autobuses de 256 asientos. 1000 dividido entre 256 es más o menos 3.9, pero no puedes pedir 3.9 autobuses — necesitas 4 completos, o los últimos pasajeros se quedan afuera. La fórmula de techo siempre redondea hacia arriba a un autobús completo. Es cierto, el cuarto autobús tendrá algunos asientos vacíos — esos son los hilos de sobra que simplemente se quedan quietos.
- división de techo
- Una división que siempre redondea hacia arriba. En enteros se expresa como (n + d - 1) / d para obtener el número de grupos que cubre los n elementos.
- hilos por bloque
- El número de hilos en cada bloque (el segundo número en <<<>>>). Un valor común es 256. Es el denominador en la fórmula del número de bloques.
- tamaño del grid
- El número de bloques lanzados, numBlocks. Se elige de modo que el total de hilos (numBlocks por threadsPerBlock) sea al menos n.
- guarda de límites
- La condición if (i < n) dentro del kernel que hace que los hilos de sobra (los que tienen un índice más allá de n) eviten tocar la memoria.