Cuda registra por thread

Pelo que entendi corretamente para os dispositivos de capacidade de computação 2.x, há um limite de 63 registros por encadeamento. Você sabe qual é o limite de registro por thread para dispositivos de capacidade de computação 1.3?

Eu tenho um grande kernel que estou testando em um GTX260. Tenho certeza que estou usando muitos registros, pois o kernel é muito complexo e preciso de muitas variáveis ​​locais. De acordo com o profiler Cuda meu uso de registro é 63 (Static Smem é 68 embora eu não estou tão certo o que isso significa e Smem dinâmico é 0), embora eu tenho certeza que eu tenho mais de 63 variáveis ​​locais, então eu figurei o o compilador está reutilizando registradores ou derramando-os na memória local.

Agora eu pensei que os dispositivos de capacidade de computação 1.3 tivessem um limite maior de registradores por encadeamento do que os dispositivos 2.x. Meu palpite é que o compilador estava escolhendo o limite 63 porque estou usando blocos de 256 threads, nesse caso, 256 * 63 é 16128, enquanto 256 * 64 é 16384, que é o número limite de registros para um SM deste dispositivo. Então, meu palpite é que, se eu diminuir o número de threads por bloco, posso aumentar o número de registros em uso. Então eu corri o kernel com blocos de 196 threads. Mas, novamente, o profiler mostra 63 registros, embora 63 * 192 seja 12096 e 64 * 192 seja 12288, o que está dentro do limite de 16384 do SM.

Então, alguma ideia de por que o compilador está se limitando a 63 registradores? Poderia ser tudo por causa da reutilização de registros ou ainda está derramando registros?

questionAnswers(1)

yourAnswerToTheQuestion