我想了解每个CUDA我对线程手写的内核资源的利用率。
我编译kernel.cu
文件到kernel.o
文件, nvcc -arch=sm_20 -ptxas-options=-v
和我得到了以下的输出(穿过c++filt
):
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]
看着上面的输出,是正确地说,
- 每个CUDA线程使用寄存器46?
- 没有寄存器溢出到本地内存?
我也有与理解输出的一些问题。
我的内核是调用了一大堆的
__device__
功能。 IS的总和计72个字节用于的堆栈帧的存储器的__global__
和__device__
功能?是什么区别
0 byte spill stores
和0 bytes spill loads
为什么对信息
cmem
(这我假设是恒定的内存)有不同的数字重复了两次? 在内核中,我没有使用任何常量内存。 这是否意味着编译器, 引擎盖下 ,要告诉GPU使用的一些常量内存?
:在这个问题是“继续” 解读ptxas的详细输出,第二部分