Какие переменные используют регистры в CUDA?

__global__ void add( int *c, const int* a, const int* b )
{
    int x = blockIdx.x;
    int y = blockIdx.y;
    int offset = x + y * gridDim.x;
    c[offset] = a[offset] + b[offset];
}

В приведенном выше примере, я думаю,x, y, offset сохраняются в регистрах, а

nvcc -Xptxas -v gives 4 registers, 24+16 bytes smem

profiler shows 4 registers

and the head of ptx file:

.reg .u16 %rh<4>;
.reg .u32 %r<9>;    
.reg .u64 %rd<10>;  
.loc    15  21  0   

$LDWbegin__Z3addPiPKiS1_:   
.loc    15  26  0  

Кто-нибудь может уточнить использование регистров? В Fermi максимальное количество регистров составляет 63 для каждого потока. В моей программе я хочу протестировать случай, когда ядро потребляет слишком много регистров (поэтому переменные могут автоматически сохраняться в локальной памяти, что приводит к снижению производительности). Затем я могу разделить одно ядро на два, чтобы у каждого потока было достаточно регистров. Предположим, что ресурсов SM достаточно для параллельных ядер.

Я не уверен, прав ли я.

Ответы на вопрос(1)

Ваш ответ на вопрос