寄存器和active block数量

一块C2050卡,每个SM有32K个register,假设register数量是瓶颈,假设每个block有16*16个thread,那么如果一个SM中只有一个active block的话,每个thread可以分配至多128个register。而现在如果每个thread需要100个register的话,机器会怎么分配register资源呢?是一个SM中分配一个active block,每个thread占用100个register;或者一个SM中有两个active block,每个thread占用50个register(多出来的分配的local memory里)?或者一个SM中有3个active block,每个thread 占用33个register?或者……

是线程对寄存器的使用量(以及其他资源的使用量),决定了可以上多少个resident blocks / sm,

而不是反过来的机器决定上几个resident blocks, 而临时分配多少寄存器。

这是其一。

其二,贵卡(C2050)是计算能力2.0的卡,最多可以分配63个寄存器/线程,无法分配更多,这个是硬件限制。(您可以考虑购买K20, 可以上255个)

哦,我用nvvp查看register使用情况时,发现register的使用量远大于自己在函数里面声明的变量,我知道是编译器自己根据程序使用了register,我想优化程序以减少不必要的register使用,而又不知道编译器在何时自动决定使用register,导致我不知道该怎么优化,请问版主有何建议。