我有一个CUDA项目。它由几个包含我的应用程序逻辑的.cpp文件和一个包含多个内核的.cu文件以及一个调用它们的__host__
函数组成。
现在我想确定我的内核使用的寄存器数量。我的普通编译器调用如下所示:
nvcc -arch compute_20 -link src/kernel.cu obj/..obj obj/..obj .. -o bin/..exe -l glew32 ..
。
不幸的是,在此调用中添加“-Xptxas -v”编译器标志无效。编译器仍然生成与以前相同的文本输出。编译后的.exe也可以像以前一样工作,只有一个例外:我的帧速率从80fps跳到1800fps。
答案 0 :(得分:9)
我有同样的问题,这是我的解决方案:
将* cu文件编译为仅设备* ptx文件,这将丢弃主机代码
nvcc -ptx *.cu
编译* ptx文件:
ptxas -v *.ptx
第二步将显示内核使用的寄存器数和使用的共享内存量。
答案 1 :(得分:5)
在编译器调用中将compute_20转换为sm_20。那应该解决它。
答案 2 :(得分:2)
当编译
时 nvcc --ptxas-options=-v
答案 3 :(得分:2)
当一起使用“-Xptxas -v”,“ - arch”时,我们无法获得详细信息(寄存器号等)。如果我们想要在不失去分配GPU架构(-arch,-code)的机会的情况下看到详细信息,我们可以执行以下步骤:nvcc -arch compute_XX *.cu -keep
然后ptxas -v *.ptx
。但是我们将获得许多处理文件。当然,kogut的答案就是重点。
答案 4 :(得分:1)
您可能想要控制编译器详细选项默认值。
例如VStudio转到: 工具 - >选项 - > ProjectsAndSolutions-> BuildAndRun 然后将详细程度输出设置为“正常”。
答案 5 :(得分:-1)
不完全是您要找的,但您可以使用nvidia gpu computing sdk附带的CUDA可视化分析器。除了许多其他有用的信息外,它还显示了应用程序中每个内核使用的寄存器数量。