我正在尝试全面了解PTXAS -v
CUDA 的内核堆栈使用信息和寄存器溢出(对于 sm_35 架构)。对于我的一个内核,它产生:
3536 bytes stack frame, 3612 bytes spill stores, 6148 bytes spill loads
ptxas info : Used 255 registers, 392 bytes cmem[0]
我知道堆栈帧是在本地内存中分配的,该内存物理上位于全局内存所在的位置,并且对每个线程都是私有的。
我的问题是:
- 寄存器溢出所需的内存是否也在本地内存中分配?
- 寄存器溢出和堆栈使用所需的内存总量是否等于 [线程数] x [3536 字节]。因此寄存器溢出加载/存储在堆栈帧上运行?
- 溢出存储/加载的数量没有详细说明转移的大小。这些总是32位寄存器吗?因此,一个 64 位浮点数溢出会被算作 2 个溢出存储?
- 溢出存储/加载是否缓存在 L2 缓存中?