在 CUDA 中使用 volatile 限定符声明寄存器数组是什么意思?
当我尝试使用带有寄存器数组的 volatile 关键字时,它会删除溢出的寄存器内存到本地内存的数量。(即强制 CUDA 使用寄存器而不是本地内存)这是预期的行为吗?
我没有在 CUDA 文档中找到关于寄存器数组使用 volatile 的任何信息。
这是两个版本的 ptxas -v 输出
带有 volatile 限定符
__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]