Cuda:内置变量在哪里? (threadIdx,blockIdx,blockDim,gridDim,warpSize)

时间:2012-10-05 20:02:46

标签: cuda

我想知道这些信息来自哪里。访问这些变量时,我真的在访问寄存器或其他地方吗? (我的猜测是这些是寄存器值。)
我想知道将它们存储在寄存器中是否有任何速度优势?

__global__ void myKernel(int, float, int*) {
   const int reg1= threadIdx.y      // gonna use/Rd reg1 some 50 different places
   :  
   :  
}

或者读取threadIdx.y的时间大约是50次吗?

1 个答案:

答案 0 :(得分:4)

内置变量位于不同计算功能的不同位置。在最近的设备上,信息被打包到专用寄存器中。在汇编(cuobjdump -sass)中,指令S2R用于将值从特殊寄存器移动到通用寄存器。将值赋给自动变量的行为不需要编译器在任何时间段将值分配给寄存器。编译器可能会对内置寄存器进行最佳分配。