【发布时间】:2014-09-02 11:47:09
【问题描述】:
我试图在cudaFuncAttributes 结构中使用reqRegs 和sharedSizeBytes 在运行时动态优化内核的块大小。
我当前的实现从nvcc --ptxas-options=-v 中浏览标准输出文本以发现内核的寄存器和共享内存使用情况。这种方法有点笨拙,并且取决于来自--ptxas-options=-v 的输出文本的确切格式,可能会在没有警告的情况下更改。
我的问题是我看到--ptxas-options=-v 输出中报告的“smem”共享内存值与cudaFuncAttributes 结构中的sharedSizeBytes 之间存在差异,这让我担心共享内存估计我一直使用到现在是错误的,或者 sharedSizeBytes 变量不可靠,这意味着我不能将它用于运行时块大小优化。
这是nvcc --ptxas-options=-v 对一个这样的内核的输出...
ptxas info : Used 14 registers, 2088 bytes smem, 48 bytes cmem[1]
... 与运行时 cudaFuncAttributes.sharedSizeBytes = 296 的值相比,对于完全相同的内核。有人知道这里会发生什么吗?
这是另一个使用不同内核的示例:
ptxas info : Used 18 registers, 2132 bytes smem, 48 bytes cmem[1]
其中cudaFuncAttributes.sharedSizeBytes = 340 在运行时。
谢谢。
【问题讨论】:
-
一些优化可能使用了未使用的共享内存,你编译的是哪个cc?
-
我写了a simple test,但无法观察到这种差异。您能否提供一个完整的测试用例,希望像我的一样简单,证明这种差异?