Я фильтрую свой скомпилированный PTX через C ++ фильтром, но он только разбирает некоторые имена / метки и оставляет некоторые как есть. Например, это:
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 ++ Filter не имеет явной поддержки CUDA PTX; но обратите внимание, что неразделенные имена отличаются от разобранных в примере только добавлением _param_0
, _param_1
и т.д. суффикс (также вопрос о том, как префикс этих имен должен быть разобран, но давайте забудем об этом).
[-s|--format {none,auto,gnu,lucid,arm,hp,edg,gnu-v3,java,gnat,dlang}]
)?Цитируя из документация
Реализация C ++ для функций устройства соответствует интерфейсу Itanium C ++ ABI.
c++filt
реализует разделение символов Itanium C ++ ABI, поэтому он может разделять имена ядра и имена функций устройств из объектов источника PTX или ELF.
Тем не менее, другие символы, которые вы разместили, являются символами CUDA ABI. c++filt
не поддерживает их, потому что не поддерживает CUDA ABI. Могут ли они выглядеть похожими или нет, не имеет значения. Если вам это действительно нужно, попросите NVIDIA добавить деманглер для символов CUDA ABI в цепочку инструментов, как это было сделано с утилитами ELF и другими внутренними компонентами.
Других решений пока нет …