对于PTX文件中的某些受损名称,c ++ filt不够激进

时间:2016-08-31 12:03:35

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

我正在通过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 ++名称?
  • 是否可以/容易地增加c ++ filt并了解CUDA“格式”,除了它已经存在的“格式”([-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}])?
  • 如果在这种情况下无法使用或改编c ++ filt,我应该如何进行消磁?

1 个答案:

答案 0 :(得分:3)

documentation

引用
  

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

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

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