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

Cuda:内置变量驻留在哪里?(threadIdx、blockIdx、blockDim、gridDim、warpSize),cuda,Cuda,我想知道这些信息是从哪里来的。当访问这些变量时,我是真的在访问寄存器还是其他地方?(我猜这些是寄存器值。) 我想知道将它们存储在寄存器中是否有任何速度优势 __global__ void myKernel(int, float, int*) { const int reg1= threadIdx.y // gonna use/Rd reg1 some 50 different places : : } 或者,读取threadIdx.y大约50次也会一样快吗?

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

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

或者,读取threadIdx.y大约50次也会一样快吗?

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

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

有关进程速度的一些信息会有所帮助。性能取决于SM版本、指令调度、扭曲调度和指令混合。确定性能的最佳方法是使用一个开源汇编程序编写一个微基准测试。有关该过程发生速度的一些信息会有所帮助。性能取决于SM版本、指令调度、扭曲调度和指令混合。确定性能的最佳方法是使用一个开源汇编程序编写一个微基准测试。