Cuda 如果我在GPU内核中使用许多局部变量,那么这些变量会驻留在全局内存中吗?

Cuda 如果我在GPU内核中使用许多局部变量,那么这些变量会驻留在全局内存中吗?,cuda,gpu,nvidia,Cuda,Gpu,Nvidia,如果我在GPU内核中使用许多变量,那么这些变量会驻留在全局内存中吗?所以读写局部变量需要访问全局内存 GPU内核中变量数量的典型限制是什么,以便变量驻留在寄存器中 谢谢, SamCUDA安装目录中有一个CUDA GPU占用率计算器 cuda-5.0/tools/CUA_Occupancy_Calculator.xls 它可以显示硬件资源(线程/块、寄存器、共享内存)与扭曲占用之间的关系,以及不同GPU计算能力的物理限制。快速回答:是。 典型极限?如果希望占用率达到0.5左右,则每个线程大约有3

如果我在GPU内核中使用许多变量,那么这些变量会驻留在全局内存中吗?所以读写局部变量需要访问全局内存

GPU内核中变量数量的典型限制是什么,以便变量驻留在寄存器中

谢谢,
Sam

CUDA安装目录中有一个CUDA GPU占用率计算器

cuda-5.0/tools/CUA_Occupancy_Calculator.xls

它可以显示硬件资源(线程/块、寄存器、共享内存)与扭曲占用之间的关系,以及不同GPU计算能力的物理限制。

快速回答:是。 典型极限?如果希望占用率达到0.5左右,则每个线程大约有32-64个寄存器,具体取决于体系结构

再长一点回答: 请记住,寄存器的数量与“局部变量的数量”并不完全相同。这是因为,在给定的时间,您通常不需要所有的局部变量,编译器将尝试重用寄存器。最终可能会将多个变量映射到同一寄存器

其次,即使寄存器空间用完,编译器也会尝试将这些值溢出到很少使用的全局内存中。通常,代码中很少有寄存器溢出并不那么耗时。此外,这些寄存器溢出导致完全对齐的全局内存访问模式

如果您想知道每个内核使用了多少寄存器和(溢出的)本地内存,请在编译参数中添加
--ptxas options=-v