在 CUDA 中使用 volatile 限定符声明寄存器数组的含义是什么?
当我尝试使用 volatile 关键字和寄存器数组时,它删除了溢出寄存器内存到本地内存的数量。 (即强制 CUDA 使用寄存器而不是本地内存)这是预期的行为吗?
我在 CUDA 文档中没有找到有关寄存器数组的 volatile 用法的任何信息。
这是两个版本的 ptxas -v 输出
带有易失性限定符
__volatile__ float array[32];
ptxas -v 输出
ptxas info : Compiling entry function '_Z2swPcS_PfiiiiS0_' for 'sm_20'
ptxas info : Function properties for _Z2swPcS_PfiiiiS0_
88 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 47 registers, 16640 bytes smem, 80 bytes cmem[0], 8 bytes cmem[16]
没有 volatile 限定符
float array[32];
ptxas -v 输出
ptxas info : Compiling entry function '_Z2swPcS_PfiiiiS0_' for 'sm_20'
ptxas info : Function properties for _Z2swPcS_PfiiiiS0_
96 bytes stack frame, 100 bytes spill stores, 108 bytes spill loads
ptxas info : Used 51 registers, 16640 bytes smem, 80 bytes cmem[0], 8 bytes cmem[16]