【问题标题】:c++filt not aggressive enough for some of the mangled names in PTX filesc++filt 对于 PTX 文件中的某些损坏名称不够激进
【发布时间】:2023-03-19 16:44:01
【问题描述】:

我正在通过 c++filt 过滤我编译的 PTX,但它只会对一些名称/标签进行分解,并保留一些原样。例如,这个:

func  (.param .b32 func_retval0) _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii(
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_0,
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_1,
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_2
)

这样解构:

.func  (.param .b32 func_retval0) _INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)(
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_0,
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_1,
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c6__shflEiii_param_2
)

而不是至少这样:

.func  (.param .b32 func_retval0) _INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)(
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)_param_0,
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)_param_1,
        .param .b32 _ZN41_INTERNAL_19_gather_bits_cpp1_ii_56538e7c::__shfl(int, int, int)_param_2
)

我意识到 c++filt 没有明确支持 CUDA PTX;但请注意,未分解的名称与示例中的已分解名称的不同之处仅在于添加了_param_0_param_1 等后缀(还有一个问题是应该如何分解这些名称的前缀,但让我们忘记这一点) .

  • 我能做些什么来强制 c++filt 也适用于参数名称/标签吗?更一般地说,对于 PTX 文件中所有损坏的 C++ 名称?
  • 除了它已经拥有的“格式”之外,是否可以/容易地通过对 CUDA“格式”的认识来增强 c++filt ([-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}])?
  • 如果 c++filt 在这种情况下无法使用或无法适应使用,我应该如何进行解构?

【问题讨论】:

  • 那些没有被解构,因为它们不是有效的 gnu 样式 C++ 错位名称
  • @talonmies:确实...见编辑。
  • 所以你的问题真的是“c++filt 是否支持 CUDA ABI?”,从表面上看,答案显然是否定的
  • @talonmies:我的问题是我能不能比默认情况下更多地去解开它,例如使用它的命令行参数,甚至为它定义一个额外的格式。如果答案是“不是真的没有重写它”,那么 - 我的其他选择是什么。
  • a minimal reproducible example 在 SO 问题中通常很有用。是的,许多这样的问题可以转换为假设的问题,似乎不需要 MCVE,但这样做会使可能试图帮助你的其他人更难解决这个问题。是的,如果我碰巧知道你的确切问题的答案,我不需要 MCVE,如果你只需要这样的人的帮助,那很公平。我不知道每个问题的答案,但我经常愿意研究有据可查的问题,这样我就可以这样做,而不必创建自己的测试用例并怀疑它是否反映了你的问题

标签: c++ cuda name-mangling ptx c++filt


【解决方案1】:

引用documentation

设备功能的 C++ 实现遵循 Itanium C++ ABI。

c++filt 实现了对 Itanium C++ ABI 符号的解组,因此,它可以从 PTX 源或 ELF 对象中解组内核名称和设备函数名称。

但是,您发布的其他符号是 CUDA ABI 符号。 c++filt 不支持这些,因为它不支持 CUDA ABI。它们是否看起来相似是无关紧要的。如果你真的需要这个,请请求 NVIDIA 为工具链添加一个 CUDA ABI 符号的解编器,就像他们对 ELF 实用程序和其他内部组件所做的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多