这个问题是Interpreting the verbose output of ptxas, part I的延续。
当我们使用.ptx
编译内核ptxas -v
文件,或使用.cu
从-ptxas-options=-v
文件进行编译时,我们得到如下几行输出: / p>
ptxas info : Compiling entry function 'searchkernel(octree, int*, double, int, double*, double*, double*)' for 'sm_20'
ptxas info : Function properties for searchkernel(octree, int*, double, int, double*, double*, double*)
72 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 46 registers, 176 bytes cmem[0], 16 bytes cmem[14]
(与链接到的问题相同的示例;但名称已拆散)
该问题以最后一行为准。来自其他内核的更多示例:
ptxas info : Used 19 registers, 336 bytes cmem[0], 4 bytes cmem[2]
...
ptxas info : Used 19 registers, 336 bytes cmem[0]
...
ptxas info : Used 6 registers, 16 bytes smem, 328 bytes cmem[0]
除了所使用的寄存器数量以外,我们如何解释此行上的信息?具体来说:
cmem
是恒定内存的缩写吗?cmem
有不同类别,即cmem[0]
,cmem[2]
,cmem[14]
?smem
可能代表shared memory
;只是静态共享内存吗?答案 0 :(得分:3)
cmem代表恒定内存吗?
是
为什么有cmem的不同类别,即cmem [0],cmem [2],cmem [14]?
它们代表不同的常量存储库。 cmem[0]
是内核参数和静态大小的常量值的保留库。
smem可能代表共享内存;仅仅是静态共享内存吗?
是的,否则会怎样。
在哪种情况下该行上会显示每种条目?
大多数回答here。
答案 1 :(得分:0)
收集并重新格式化...
最后一个ptxas信息行上的资源:
registers
-每个SM(多处理器)上的寄存器文件中gmem
-全局内存smem
-静态共享内存cmem[N]
-索引为N的恒定存储体。
cmem[0]
-为内核参数和静态大小的常量值保留的银行cmem[2]
-??? cmem[4]
-??? cmem[14]
-??? 如果内核使用任何此类内存(寄存器-可能始终显示),则将显示这些类别中的每一个;因此,所有示例都显示了一些cmem[0]
用法就不足为奇了。
您可以在Section 2.3 of the Programming Guide中的CUDA存储器层次结构及其那里的链接中了解更多信息。此外,还有this blog post关于静态和动态共享内存。