Cómo jugar
El punto de partida del programa mytoy.cu proporciona una implementación inicial en CUDA que sigue la siguiente estrategia:
- Se declara un kernel independiente por cada columna de la matriz dispersa, y cada hilo de CUDA computa las operaciones correspondientes a un solo elemento de la matriz, de forma que todos ellos pueden computar en paralelo (si hay cores suficientes, si no los hay, se establecen turnos de ocupación de los cores entre los hilos hasta que todos acaban).
- El número de bloques por kernel se establece en el mínimo posible.
- El número de hilos por bloque se establece en el máximo posible.
Dentro del programa mytoy.cu encontrarás marcas "MU" y comentarios para transformar el programa desde el que utiliza un único stream para todas los kernels que computan las columnas de la matriz (estrategia por defecto), al que despliega un stream diferente para cada uno de estos kernels. Medita un poco qué mecanismo de paralelización se adecúa mejor a la matriz de entrada que estás utilizando.
Algunas ideas para que el programador ensaye con el juego propuesto:
- Incrementar la granularidad: Declarar un hilo que se encargue de computar varios elementos no nulos de la matriz dispersa. Medir el rendimiento y estudiar los efectos positivos y negativos respecto a la versión inicial que se utiliza para desplegar el paralelismo sobre la GPU.
- Incrementar el número de bloques. Analizar el rendimiento obtenido con respecto a la versión inicial.
- Reducir el número de hilos por bloque. Analizar los GFLOPS obtenidos.
- Dibujar el gráfico completo que caracteriza a la GPU utilizada según el modelo roofline. Para ello, cambia el valor del segundo parámetro de entrada al programa mytoy.cu con objeto de barrer todos los puntos a dibujar en el eje horizontal. Puedes interpolar los puntos a partir de las coordenadas que son potencia de dos, por ejemplo, 1, 2, 4, 8, 16, 32 y 64. Analiza el gráfico resultante para extraer valiosas conclusiones acerca de los cuellos de botella que sufre la arquitectura, así como las posibles mejoras que podrían introducirse en futuros modelos de GPU para aliviarlos.
Pero esto es sólo el comienzo de la diversión. Quedan infinidad de ideas por investigar e implementar en mytoy.cu, y queremos conocer las que se te ocurren a tí. Demuestra tu pericia y... ¡mucha suerte con CUDA!