【发布时间】: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