我正在尝试了解手写内核的每个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]
查看上面的输出,说
是否正确我在理解输出方面也遇到了一些问题。
我的内核正在调用很多__device__
个函数。总和为72字节
__global__
和__device__
函数的堆栈帧的内存?
0 byte spill stores
和0 bytes spill loads
之间有什么区别
为什么cmem
的信息(我假设是恒定的记忆)重复两次不同的数字?在内核中我没有使用任何常量
记忆。这是否意味着编译器是引擎,会告诉GPU使用一些常量内存?
答案 0 :(得分:16)
__global__
和__device__
函数的堆栈帧的内存总和吗? 是的,正确的 __constant__
变量和内核参数,使用不同的“库”,开始有点详细,但只要你使用少于64KB的{{1对于内核参数,你可以使用变量和小于4KB的变量。