c++对PTX文件中一些混乱的名称不够激进

c++filt not aggressive enough for some of the mangled names in PTX files

本文关键字:不够 混乱 PTX 文件 c++      更新时间:2023-10-16

我正在通过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++填充与CUDA"格式"的意识,除了"格式"它已经([-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}])?
  • 如果c++filt在这种情况下不能使用或适应使用,我应该如何着手做需求?

引用文档

设备函数的c++实现遵循Itanium c++ ABI。

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

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