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

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

de Juan Pablo Conde Inzaurralde -
Número de respuestas: 1

Hola como andan? Tengo algunas dudas:

  • Al momento de elegir el tamaño de los bloque de la grilla existe algún criterio para elegir valores más óptimos? Por ejemplo, si M es la cantidad máxima de hilos que puede haber en un bloque cual seria la razón para no elegir siempre bloques que tengan esta cantidad máxima de hilos. 
  • Cuál es el tamaño máximo de hilos que puede tener un bloque? Recuerdo escuchar que era 1024, pero no lo encuentro en las diapositivas
  • En el ejercicio 2 del práctico 2, la matriz sobre la que vamos a trabajar tiene algún limite máximo en el tamaño? La idea nuestra para resolver el problema era asignarle un hilo a cada elemento de la matriz y que este hilo se encargara de hacer la suma en este elemento, pero si la matriz es lo suficientemente grande podría suceder que no tengamos suficientes hilos para cada elemento. Igual me parece que esto último es un caso muy borde.

En respuesta a Juan Pablo Conde Inzaurralde

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

de Ernesto Dufrechou -
  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.