Lección 8: Bucles grid-stride y N arbitrario
Hasta ahora asumimos que un hilo maneja un elemento, con if (i < n) protegiendo los límites. Pero, ¿qué pasa cuando n es más grande que la cantidad de hilos que lanzamos? Con un millón de elementos y solo 262,144 hilos, la mitad del arreglo nunca se calcula. La solución es un bucle grid-stride: cada
Imagina 100 sillas para acomodar pero solo 10 ayudantes. En lugar de que cada uno acomode una sola silla y se vaya a casa, cada ayudante empieza en su silla y salta 10 sillas hacia adelante cada vez: 1, 11, 21... así 10 personas cubren las 100 sillas.
- bucle grid-stride
- Un patrón en el que cada hilo maneja varios elementos, saltando entre ellos según el tamaño de todo el grid, hasta que el índice pasa n.
- stride
- La distancia que salta el índice hacia adelante: blockDim.x * gridDim.x, el número total de hilos en el grid.
- gridDim
- El número de bloques en el grid. gridDim.x * blockDim.x da el total de hilos a lo largo de una dimensión.
- N arbitrario
- Una entrada de cualquier tamaño, incluso mayor que la cantidad de hilos. Un bucle grid-stride la cubre sin cambiar la configuración de lanzamiento.