Cuda se registra por hilo.
Como entiendo correctamente, para los dispositivos con capacidad de procesamiento 2.x, hay un límite de 63 registros por subproceso. ¿Sabe cuál es el límite de registro por hilo para dispositivos con capacidad de cómputo 1.3?
Tengo un núcleo grande que estoy probando en una GTX260. Estoy bastante seguro de que estoy usando muchos registros ya que el kernel es muy complejo y necesito muchas variables locales. Según el perfilador de Cuda, mi uso de registro es de 63 (Static Smem es de 68, aunque no estoy tan seguro de lo que eso significa y Smem dinámico es de 0), aunque estoy bastante seguro de que tengo más de 63 variables locales, por lo que calculé la el compilador está reutilizando registros o derramándolos en la memoria local.
Ahora pensé que los dispositivos de capacidad de cómputo 1.3 tenían un límite más alto de registros por subproceso que los dispositivos 2.x. Supongo que el compilador estaba eligiendo el límite de 63 porque estoy usando bloques de 256 subprocesos, en cuyo caso 256 * 63 es 16128, mientras que 256 * 64 es 16384, que es el número límite de registros para un SM de este dispositivo. Entonces, supongo que si disminuyo el número de subprocesos por bloque, puedo aumentar el número de registros en uso. Entonces corrí el kernel con bloques de 196 hilos. Pero de nuevo, el generador de perfiles muestra 63 registros, aunque 63 * 192 es 12096 y 64 * 192 es 12288, lo que está muy por debajo del límite de 16384 del SM.
Entonces, ¿alguna idea de por qué el compilador se está limitando a 63 registros? ¿Podría ser todo debido a la reutilización del registro o todavía está derramando registros?