2

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

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

或者读取 threadIdx.y 大约 50 次是否一样快?

4

1 回答 1

4

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

于 2012-10-05T21:28:08.640 回答