Elección de tamaño de bloque y Ejercicio 2

Re: Elección de tamaño de bloque y Ejercicio 2

de Ernesto Dufrechou -
Número de respuestas: 0
  1. Los warps (que forman los bloques) ejecutan en uno de los multiprocesadores de la GPU. Existe un número máximo de warps y bloques que pueden ejecutar por multiprocesador. Esto quiere decir que si se elige un tamaño de bloque muy grande podrán ejecutarse pocos bloques en un multiprocesador, y es posible que no se ejecuten tantos warps como sería posible. En este caso sería ideal que la cantidad máxima de warps por multiprocesador sea múltiplo de la cantidad de warps del bloque. Además de esto, los recursos del multiprocesador se reparten entre los bloques activos, por lo que si cada hilo consume muchos recursos (memoria compartida, registros, etc.) y los bloques son muy grandes, posiblemente se puedan ejecutar pocos bloques. Un tamaño de bloque más pequeño podría lograr un mejor reparto de los recursos del multiprocesador. La elección del tamaño de bloque óptimo suele hacerse mediante prueba y error, usando herramientas como NSight Compute y Occupancy Calculator.
  2. El tamaño máximo es 1024
  3. Los límites a la cantidad de hilos/bloques que puede tener la grilla son realmente grandes. Si una matriz tan grande que exceda esos límites entra en la memoria, se puede usar gridDim.x/y para recorrerla por secciones utilizando toda la grilla (cada hilo procesaría más de un elemento). En este práctico se puede asumir que eso no sucede.