Cuda 解读PTXA的详细输出,第二部分

Cuda 解读PTXA的详细输出,第二部分,cuda,verbose,gpu-shared-memory,gpu-constant-memory,ptxas,Cuda,Verbose,Gpu Shared Memory,Gpu Constant Memory,Ptxas,这个问题是问题的继续 当我们使用ptxas-v编译内核.ptx文件,或者使用-ptxas-options=-v从.cu文件编译它时,我们会得到几行输出,例如: ptxas info : Compiling entry function 'searchkernel(octree, int*, double, int, double*, double*, double*)' for 'sm_20' ptxas info : Function properties for searchke

这个问题是问题的继续

当我们使用
ptxas-v
编译内核
.ptx
文件,或者使用
-ptxas-options=-v
.cu
文件编译它时,我们会得到几行输出,例如:

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]
(与链接问题中的示例相同;但名称为Demanling)

这个问题涉及最后一行。其他内核的几个示例:

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
    可能代表
    共享内存
    ;它只是静态共享内存吗
  • 每种条目在哪种情况下出现在这一行
cmem是常量内存的缩写吗

为什么有不同类别的cmem,即cmem[0]、cmem[2]、cmem[14]

它们代表不同的常量内存库
cmem[0]
是内核参数和静态大小常量值的保留库

smem可能代表共享内存;它只是静态共享内存吗

是的,不然怎么可能呢

每种条目在哪种情况下出现在这一行

大部分已回答。

已收集并重新格式化

最后一行ptxas信息中的资源:

  • 在每个SM(多处理器)的寄存器文件中注册
  • gmem
    -全局内存
  • smem
    -静态共享内存
  • cmem[N]
    -索引为N的常量内存库。
    • cmem[0]
      -为内核参数和静态大小的常量值保留的库
    • cmem[2]
      -
    • cmem[4]
      -
    • cmem[14]
      -
如果内核使用任何这样的内存(寄存器-可能总是显示),则将显示这些类别中的每一个;因此,毫不奇怪,所有示例都显示了一些
cmem[0]
用法


您可以在中阅读更多有关CUDA内存层次结构的内容以及其中的链接。另外,还有静态和动态共享内存。

是的,
cmem
指的是恒定内存。概述了不同的“类别”(银行)。我没有看到
smem
出现在这个问题或链接问题的任何地方,但它不可能指动态共享内存,因为在编译时它是未知的(大小方面)。+1作为信息,但我觉得答案是以过度对话的方式给出的,所以我也让自己写一个。