--ptxas-options=-v 命令

- -ptxas-options=-v 命令

前言

.ptx文件存放了kernel的相关执行情况,C/C++程序可通过调用.ptx的信息来运行核函数,完成cuda功能,但.ptx不会显式生成,通过编译时向编译器nvcc输入-ptx(生成ptx文件) 或 -keep(生成全部编译中间文件) 可生成.ptx文件1。
但.ptx文件不是今天讨论的重点,但它与我们要讲的--ptxas-options=-v命令相关。
.ptx文件在编译阶段控制kernel内资源的生成或调用,所以,我们可以通过.ptx或--ptxas-options=-v命令获得kernel在编译阶段获得资源的情况。下面讲kernel在编译时能确定什么。而--ptxas-options=-v命令就可以看到所有确定的资源。从而可以确定块在SM上的分配。

--ptxas-options=-v命令的作用

--ptxas-options=-v命令的作用是查看kernel在编译阶段确定的所有静态资源,有:寄存器资源,local memory(stack 内资源),共享内存资源,和常量资源和global memory资源。
为什么是静态资源,因为,在编译阶段只能确定静态资源的大小。

实例

在编译时输入:nvcc xx.cu –ptxas-options=-v -arch=sm_60
会出现以下信息:

ptxas info : Compiling entry function ‘_Z23calcOrientationHist_gpuPfS_iiii’ for ‘sm_60’
ptxas info : Function properties for _Z23calcOrientationHist_gpuPfS_iiii
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 46 registers, 1152 bytes smem, 352 bytes cmem[0], 48 bytes cmem[2]

一个线程的核函数calcOrientationHist_gpu中使用:

  • 0 bytes stack frame是指本地内存的数量是0
  • 46 registers 使用了46个32位寄存器
  • 1152 bytes smem 1152B的共享内存
  • 352 bytes cmem[0] 不太确定,好像是传入函数的某些常量
  • 48 bytes cmem[2] 传入核函数的参数大小

结论

--ptxas-options=-v命令对核函数静态的变量的显示很有用,特别是寄存器数,有利于调整占用率(寄存器使用过多时可以使用-maxrregcount=N设置)。但对于核函数中动态声明的变量,如new的global和new的shared,这里不会显示,因为它们并不影响块在SM上的分配。

另外

-Xptxas -v,-abi=no--resource-usage也有与--ptxas-options=-v命令类似的功能。



  1. https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#registers ↩

你可能感兴趣的:(CUDA)