nvcc -Xptxas –v编译器标志无效。

9
我有一个CUDA项目,它由几个包含应用逻辑的.cpp文件和一个包含多个内核加上一个调用它们的__host__函数的.cu文件组成。
现在我想确定我的内核使用的寄存器数量。我的普通编译器调用如下:
nvcc -arch compute_20 -link src/kernel.cu obj/..obj obj/..obj .. -o bin/..exe -l glew32 ..
将"-Xptxas –v"编译器标志添加到此调用中不幸没有效果。编译器仍然产生与之前相同的文本输出。编译后的.exe也以与之前相同的方式工作,只有一个例外:我的帧速率从80fps跳到1800fps。
6个回答

10

我曾遇到相同的问题,这是我的解决方案:

  1. 将 *cu 文件编译成仅包含设备的 *ptx 文件,这样会丢弃主机代码

    nvcc -ptx *.cu

  2. 编译 *ptx 文件:

    ptxas -v *.ptx

第二步会显示内核使用的寄存器数量和使用的共享内存量。


5

在您的编译器调用中将compute_20转换为sm_20。这样应该就可以解决问题了。


3

当使用“-Xptxas -v”和“-arch”一起时,我们无法获得详细的信息(寄存器数量等)。如果我们想在不失去分配GPU架构(-arch,-code)的机会的情况下查看详细信息,可以按照以下步骤操作:nvcc -arch compute_XX *.cu -keep然后ptxas -v *.ptx。但是我们将获得许多处理文件。当然,kogut的回答是中肯的。


2

当你进行编译时

nvcc --ptxas-options=-v


也不起作用。我尝试了在互联网上可以找到的所有标志符号。 - Dave O.
@Dav 尝试移除链接选项,然后仅编译。 - Anycorn
在这种情况下,编译器会抱怨未定义的外部符号。 - Dave O.
@Dav 将进程分为两个步骤,先编译,再链接。 - Anycorn
我尝试使用 nvcc -c ..cu -arch compute_20 --ptxas-options=-v 命令,编译器输出了一个 ..obj 文件,但没有寄存器计数。 - Dave O.

0

你可能想要控制编译器冗长选项的默认值。

例如,对于VStudio,可以前往: 工具->选项->项目和解决方案->生成和运行 然后将详细输出设置为正常。


-1

也许不完全符合您的需求,但您可以使用随 NVIDIA GPU 计算 SDK 一起提供的 CUDA 可视化分析器。除了许多其他有用的信息外,它还显示了应用程序中每个内核使用的寄存器数量。


这不可能是正确的,因为它没有回答问题...如果你只想要一种计算寄存器数量的方法,那就改变问题。 - jmilloy
@jimilloy "现在我想确定我的内核使用了多少个寄存器" - Dave O.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接