【问题标题】:nvcc -Xptxas –v compiler flag has no effectnvcc -Xptxas –v 编译器标志无效
【发布时间】:2011-04-12 19:22:02
【问题描述】:

我有一个 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。

【问题讨论】:

    标签: cuda nvcc


    【解决方案1】:

    我遇到了同样的问题,这是我的解决方案:

    1. 将 *cu 文件编译成设备专用的 *ptx 文件,这将丢弃主机代码

      nvcc -ptx *.cu

    2. 编译 *ptx 文件:

      ptxas -v *.ptx

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

    【讨论】:

      【解决方案2】:

      在编译器调用中将 compute_20 转换为 sm_20。那应该可以解决它。

      【讨论】:

        【解决方案3】:

        当同时使用“-Xptxas -v”、“-arch”时,我们无法获得详细信息(寄存器编号等)。如果我们想在不失去提前分配 GPU 架构(-arch,-code)的机会的情况下查看详细信息,我们可以执行以下步骤:nvcc -arch compute_XX *.cu -keep 然后ptxas -v *.ptx。但是我们会得到很多处理文件。当然,kogut 的回答很中肯。

        【讨论】:

          【解决方案4】:

          当你编译

          nvcc --ptxas-options=-v

          【讨论】:

          • 也不起作用。我已经尝试了所有可以在互联网上找到的标志的各种符号。
          • @Dav 尝试删除链接选项并仅编译
          • carp 在这种情况下,编译器会抱怨未定义的外部符号。
          • @Dav 分两个过程,先编译,再链接。
          • carp 我试过 nvcc -c ..cu -arch compute_20 --ptxas-options=-v - 编译器输出一个 ..obj 文件但没有寄存器计数
          【解决方案5】:

          您可能希望 ctrl 编译器详细选项默认值。

          例如是 VStudio goto : 工具->选项->ProjectsAndSolutions->BuildAndRun 然后将详细程度输出设置为正常。

          【讨论】:

            【解决方案6】:

            不完全是您想要的,但您可以使用 nvidia gpu 计算 sdk 附带的 CUDA 可视化分析器。除了许多其他有用的信息外,它还显示了您的应用程序中每个内核使用的寄存器数量。

            【讨论】:

            • 这不可能是正确的,因为它没有回答问题...如果您只想要一种计算寄存器的方法,那么请更改问题。
            • @jimilloy "现在我想确定我的内核使用的寄存器数量"
            猜你喜欢
            • 2020-04-12
            • 1970-01-01
            • 1970-01-01
            • 2019-04-14
            • 1970-01-01
            • 1970-01-01
            • 2011-12-21
            • 2010-10-05
            相关资源
            最近更新 更多